1*22dc650dSSadaf Ebrahimi#! /usr/bin/env sh 2*22dc650dSSadaf Ebrahimi## DO NOT EDIT - This file generated from ./build-aux/ltmain.in 3*22dc650dSSadaf Ebrahimi## by inline-source v2019-02-19.15 4*22dc650dSSadaf Ebrahimi 5*22dc650dSSadaf Ebrahimi# libtool (GNU libtool) 2.4.6.59-b55b-dirty 6*22dc650dSSadaf Ebrahimi# Provide generalized library-building support services. 7*22dc650dSSadaf Ebrahimi# Written by Gordon Matzigkeit <[email protected]>, 1996 8*22dc650dSSadaf Ebrahimi 9*22dc650dSSadaf Ebrahimi# Copyright (C) 1996-2019, 2021 Free Software Foundation, Inc. 10*22dc650dSSadaf Ebrahimi# This is free software; see the source for copying conditions. There is NO 11*22dc650dSSadaf Ebrahimi# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12*22dc650dSSadaf Ebrahimi 13*22dc650dSSadaf Ebrahimi# GNU Libtool is free software; you can redistribute it and/or modify 14*22dc650dSSadaf Ebrahimi# it under the terms of the GNU General Public License as published by 15*22dc650dSSadaf Ebrahimi# the Free Software Foundation; either version 2 of the License, or 16*22dc650dSSadaf Ebrahimi# (at your option) any later version. 17*22dc650dSSadaf Ebrahimi# 18*22dc650dSSadaf Ebrahimi# As a special exception to the GNU General Public License, 19*22dc650dSSadaf Ebrahimi# if you distribute this file as part of a program or library that 20*22dc650dSSadaf Ebrahimi# is built using GNU Libtool, you may include this file under the 21*22dc650dSSadaf Ebrahimi# same distribution terms that you use for the rest of that program. 22*22dc650dSSadaf Ebrahimi# 23*22dc650dSSadaf Ebrahimi# GNU Libtool is distributed in the hope that it will be useful, but 24*22dc650dSSadaf Ebrahimi# WITHOUT ANY WARRANTY; without even the implied warranty of 25*22dc650dSSadaf Ebrahimi# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 26*22dc650dSSadaf Ebrahimi# General Public License for more details. 27*22dc650dSSadaf Ebrahimi# 28*22dc650dSSadaf Ebrahimi# You should have received a copy of the GNU General Public License 29*22dc650dSSadaf Ebrahimi# along with this program. If not, see <http://www.gnu.org/licenses/>. 30*22dc650dSSadaf Ebrahimi 31*22dc650dSSadaf Ebrahimi 32*22dc650dSSadaf EbrahimiPROGRAM=libtool 33*22dc650dSSadaf EbrahimiPACKAGE=libtool 34*22dc650dSSadaf EbrahimiVERSION=2.4.6.59-b55b-dirty 35*22dc650dSSadaf Ebrahimipackage_revision=2.4.6.59 36*22dc650dSSadaf Ebrahimi 37*22dc650dSSadaf Ebrahimi 38*22dc650dSSadaf Ebrahimi## ------ ## 39*22dc650dSSadaf Ebrahimi## Usage. ## 40*22dc650dSSadaf Ebrahimi## ------ ## 41*22dc650dSSadaf Ebrahimi 42*22dc650dSSadaf Ebrahimi# Run './libtool --help' for help with using this script from the 43*22dc650dSSadaf Ebrahimi# command line. 44*22dc650dSSadaf Ebrahimi 45*22dc650dSSadaf Ebrahimi 46*22dc650dSSadaf Ebrahimi## ------------------------------- ## 47*22dc650dSSadaf Ebrahimi## User overridable command paths. ## 48*22dc650dSSadaf Ebrahimi## ------------------------------- ## 49*22dc650dSSadaf Ebrahimi 50*22dc650dSSadaf Ebrahimi# After configure completes, it has a better idea of some of the 51*22dc650dSSadaf Ebrahimi# shell tools we need than the defaults used by the functions shared 52*22dc650dSSadaf Ebrahimi# with bootstrap, so set those here where they can still be over- 53*22dc650dSSadaf Ebrahimi# ridden by the user, but otherwise take precedence. 54*22dc650dSSadaf Ebrahimi 55*22dc650dSSadaf Ebrahimi: ${AUTOCONF="autoconf"} 56*22dc650dSSadaf Ebrahimi: ${AUTOMAKE="automake"} 57*22dc650dSSadaf Ebrahimi 58*22dc650dSSadaf Ebrahimi 59*22dc650dSSadaf Ebrahimi## -------------------------- ## 60*22dc650dSSadaf Ebrahimi## Source external libraries. ## 61*22dc650dSSadaf Ebrahimi## -------------------------- ## 62*22dc650dSSadaf Ebrahimi 63*22dc650dSSadaf Ebrahimi# Much of our low-level functionality needs to be sourced from external 64*22dc650dSSadaf Ebrahimi# libraries, which are installed to $pkgauxdir. 65*22dc650dSSadaf Ebrahimi 66*22dc650dSSadaf Ebrahimi# Set a version string for this script. 67*22dc650dSSadaf Ebrahimiscriptversion=2019-02-19.15; # UTC 68*22dc650dSSadaf Ebrahimi 69*22dc650dSSadaf Ebrahimi# General shell script boiler plate, and helper functions. 70*22dc650dSSadaf Ebrahimi# Written by Gary V. Vaughan, 2004 71*22dc650dSSadaf Ebrahimi 72*22dc650dSSadaf Ebrahimi# This is free software. There is NO warranty; not even for 73*22dc650dSSadaf Ebrahimi# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 74*22dc650dSSadaf Ebrahimi# 75*22dc650dSSadaf Ebrahimi# Copyright (C) 2004-2019, 2021 Bootstrap Authors 76*22dc650dSSadaf Ebrahimi# 77*22dc650dSSadaf Ebrahimi# This file is dual licensed under the terms of the MIT license 78*22dc650dSSadaf Ebrahimi# <https://opensource.org/license/MIT>, and GPL version 3 or later 79*22dc650dSSadaf Ebrahimi# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of 80*22dc650dSSadaf Ebrahimi# these licenses when using or redistributing this software or any of 81*22dc650dSSadaf Ebrahimi# the files within it. See the URLs above, or the file `LICENSE` 82*22dc650dSSadaf Ebrahimi# included in the Bootstrap distribution for the full license texts. 83*22dc650dSSadaf Ebrahimi 84*22dc650dSSadaf Ebrahimi# Please report bugs or propose patches to: 85*22dc650dSSadaf Ebrahimi# <https://github.com/gnulib-modules/bootstrap/issues> 86*22dc650dSSadaf Ebrahimi 87*22dc650dSSadaf Ebrahimi 88*22dc650dSSadaf Ebrahimi## ------ ## 89*22dc650dSSadaf Ebrahimi## Usage. ## 90*22dc650dSSadaf Ebrahimi## ------ ## 91*22dc650dSSadaf Ebrahimi 92*22dc650dSSadaf Ebrahimi# Evaluate this file near the top of your script to gain access to 93*22dc650dSSadaf Ebrahimi# the functions and variables defined here: 94*22dc650dSSadaf Ebrahimi# 95*22dc650dSSadaf Ebrahimi# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh 96*22dc650dSSadaf Ebrahimi# 97*22dc650dSSadaf Ebrahimi# If you need to override any of the default environment variable 98*22dc650dSSadaf Ebrahimi# settings, do that before evaluating this file. 99*22dc650dSSadaf Ebrahimi 100*22dc650dSSadaf Ebrahimi 101*22dc650dSSadaf Ebrahimi## -------------------- ## 102*22dc650dSSadaf Ebrahimi## Shell normalisation. ## 103*22dc650dSSadaf Ebrahimi## -------------------- ## 104*22dc650dSSadaf Ebrahimi 105*22dc650dSSadaf Ebrahimi# Some shells need a little help to be as Bourne compatible as possible. 106*22dc650dSSadaf Ebrahimi# Before doing anything else, make sure all that help has been provided! 107*22dc650dSSadaf Ebrahimi 108*22dc650dSSadaf EbrahimiDUALCASE=1; export DUALCASE # for MKS sh 109*22dc650dSSadaf Ebrahimiif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : 110*22dc650dSSadaf Ebrahimi emulate sh 111*22dc650dSSadaf Ebrahimi NULLCMD=: 112*22dc650dSSadaf Ebrahimi # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which 113*22dc650dSSadaf Ebrahimi # is contrary to our usage. Disable this feature. 114*22dc650dSSadaf Ebrahimi alias -g '${1+"$@"}'='"$@"' 115*22dc650dSSadaf Ebrahimi setopt NO_GLOB_SUBST 116*22dc650dSSadaf Ebrahimielse 117*22dc650dSSadaf Ebrahimi case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac 118*22dc650dSSadaf Ebrahimifi 119*22dc650dSSadaf Ebrahimi 120*22dc650dSSadaf Ebrahimi# NLS nuisances: We save the old values in case they are required later. 121*22dc650dSSadaf Ebrahimi_G_user_locale= 122*22dc650dSSadaf Ebrahimi_G_safe_locale= 123*22dc650dSSadaf Ebrahimifor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 124*22dc650dSSadaf Ebrahimido 125*22dc650dSSadaf Ebrahimi eval "if test set = \"\${$_G_var+set}\"; then 126*22dc650dSSadaf Ebrahimi save_$_G_var=\$$_G_var 127*22dc650dSSadaf Ebrahimi $_G_var=C 128*22dc650dSSadaf Ebrahimi export $_G_var 129*22dc650dSSadaf Ebrahimi _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" 130*22dc650dSSadaf Ebrahimi _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" 131*22dc650dSSadaf Ebrahimi fi" 132*22dc650dSSadaf Ebrahimidone 133*22dc650dSSadaf Ebrahimi# These NLS vars are set unconditionally (bootstrap issue #24). Unset those 134*22dc650dSSadaf Ebrahimi# in case the environment reset is needed later and the $save_* variant is not 135*22dc650dSSadaf Ebrahimi# defined (see the code above). 136*22dc650dSSadaf EbrahimiLC_ALL=C 137*22dc650dSSadaf EbrahimiLANGUAGE=C 138*22dc650dSSadaf Ebrahimiexport LANGUAGE LC_ALL 139*22dc650dSSadaf Ebrahimi 140*22dc650dSSadaf Ebrahimi# Make sure IFS has a sensible default 141*22dc650dSSadaf Ebrahimisp=' ' 142*22dc650dSSadaf Ebrahiminl=' 143*22dc650dSSadaf Ebrahimi' 144*22dc650dSSadaf EbrahimiIFS="$sp $nl" 145*22dc650dSSadaf Ebrahimi 146*22dc650dSSadaf Ebrahimi# There are apparently some retarded systems that use ';' as a PATH separator! 147*22dc650dSSadaf Ebrahimiif test "${PATH_SEPARATOR+set}" != set; then 148*22dc650dSSadaf Ebrahimi PATH_SEPARATOR=: 149*22dc650dSSadaf Ebrahimi (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { 150*22dc650dSSadaf Ebrahimi (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || 151*22dc650dSSadaf Ebrahimi PATH_SEPARATOR=';' 152*22dc650dSSadaf Ebrahimi } 153*22dc650dSSadaf Ebrahimifi 154*22dc650dSSadaf Ebrahimi 155*22dc650dSSadaf Ebrahimi 156*22dc650dSSadaf Ebrahimi# func_unset VAR 157*22dc650dSSadaf Ebrahimi# -------------- 158*22dc650dSSadaf Ebrahimi# Portably unset VAR. 159*22dc650dSSadaf Ebrahimi# In some shells, an 'unset VAR' statement leaves a non-zero return 160*22dc650dSSadaf Ebrahimi# status if VAR is already unset, which might be problematic if the 161*22dc650dSSadaf Ebrahimi# statement is used at the end of a function (thus poisoning its return 162*22dc650dSSadaf Ebrahimi# value) or when 'set -e' is active (causing even a spurious abort of 163*22dc650dSSadaf Ebrahimi# the script in this case). 164*22dc650dSSadaf Ebrahimifunc_unset () 165*22dc650dSSadaf Ebrahimi{ 166*22dc650dSSadaf Ebrahimi { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; } 167*22dc650dSSadaf Ebrahimi} 168*22dc650dSSadaf Ebrahimi 169*22dc650dSSadaf Ebrahimi 170*22dc650dSSadaf Ebrahimi# Make sure CDPATH doesn't cause `cd` commands to output the target dir. 171*22dc650dSSadaf Ebrahimifunc_unset CDPATH 172*22dc650dSSadaf Ebrahimi 173*22dc650dSSadaf Ebrahimi# Make sure ${,E,F}GREP behave sanely. 174*22dc650dSSadaf Ebrahimifunc_unset GREP_OPTIONS 175*22dc650dSSadaf Ebrahimi 176*22dc650dSSadaf Ebrahimi 177*22dc650dSSadaf Ebrahimi## ------------------------- ## 178*22dc650dSSadaf Ebrahimi## Locate command utilities. ## 179*22dc650dSSadaf Ebrahimi## ------------------------- ## 180*22dc650dSSadaf Ebrahimi 181*22dc650dSSadaf Ebrahimi 182*22dc650dSSadaf Ebrahimi# func_executable_p FILE 183*22dc650dSSadaf Ebrahimi# ---------------------- 184*22dc650dSSadaf Ebrahimi# Check that FILE is an executable regular file. 185*22dc650dSSadaf Ebrahimifunc_executable_p () 186*22dc650dSSadaf Ebrahimi{ 187*22dc650dSSadaf Ebrahimi test -f "$1" && test -x "$1" 188*22dc650dSSadaf Ebrahimi} 189*22dc650dSSadaf Ebrahimi 190*22dc650dSSadaf Ebrahimi 191*22dc650dSSadaf Ebrahimi# func_path_progs PROGS_LIST CHECK_FUNC [PATH] 192*22dc650dSSadaf Ebrahimi# -------------------------------------------- 193*22dc650dSSadaf Ebrahimi# Search for either a program that responds to --version with output 194*22dc650dSSadaf Ebrahimi# containing "GNU", or else returned by CHECK_FUNC otherwise, by 195*22dc650dSSadaf Ebrahimi# trying all the directories in PATH with each of the elements of 196*22dc650dSSadaf Ebrahimi# PROGS_LIST. 197*22dc650dSSadaf Ebrahimi# 198*22dc650dSSadaf Ebrahimi# CHECK_FUNC should accept the path to a candidate program, and 199*22dc650dSSadaf Ebrahimi# set $func_check_prog_result if it truncates its output less than 200*22dc650dSSadaf Ebrahimi# $_G_path_prog_max characters. 201*22dc650dSSadaf Ebrahimifunc_path_progs () 202*22dc650dSSadaf Ebrahimi{ 203*22dc650dSSadaf Ebrahimi _G_progs_list=$1 204*22dc650dSSadaf Ebrahimi _G_check_func=$2 205*22dc650dSSadaf Ebrahimi _G_PATH=${3-"$PATH"} 206*22dc650dSSadaf Ebrahimi 207*22dc650dSSadaf Ebrahimi _G_path_prog_max=0 208*22dc650dSSadaf Ebrahimi _G_path_prog_found=false 209*22dc650dSSadaf Ebrahimi _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} 210*22dc650dSSadaf Ebrahimi for _G_dir in $_G_PATH; do 211*22dc650dSSadaf Ebrahimi IFS=$_G_save_IFS 212*22dc650dSSadaf Ebrahimi test -z "$_G_dir" && _G_dir=. 213*22dc650dSSadaf Ebrahimi for _G_prog_name in $_G_progs_list; do 214*22dc650dSSadaf Ebrahimi for _exeext in '' .EXE; do 215*22dc650dSSadaf Ebrahimi _G_path_prog=$_G_dir/$_G_prog_name$_exeext 216*22dc650dSSadaf Ebrahimi func_executable_p "$_G_path_prog" || continue 217*22dc650dSSadaf Ebrahimi case `"$_G_path_prog" --version 2>&1` in 218*22dc650dSSadaf Ebrahimi *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; 219*22dc650dSSadaf Ebrahimi *) $_G_check_func $_G_path_prog 220*22dc650dSSadaf Ebrahimi func_path_progs_result=$func_check_prog_result 221*22dc650dSSadaf Ebrahimi ;; 222*22dc650dSSadaf Ebrahimi esac 223*22dc650dSSadaf Ebrahimi $_G_path_prog_found && break 3 224*22dc650dSSadaf Ebrahimi done 225*22dc650dSSadaf Ebrahimi done 226*22dc650dSSadaf Ebrahimi done 227*22dc650dSSadaf Ebrahimi IFS=$_G_save_IFS 228*22dc650dSSadaf Ebrahimi test -z "$func_path_progs_result" && { 229*22dc650dSSadaf Ebrahimi echo "no acceptable sed could be found in \$PATH" >&2 230*22dc650dSSadaf Ebrahimi exit 1 231*22dc650dSSadaf Ebrahimi } 232*22dc650dSSadaf Ebrahimi} 233*22dc650dSSadaf Ebrahimi 234*22dc650dSSadaf Ebrahimi 235*22dc650dSSadaf Ebrahimi# We want to be able to use the functions in this file before configure 236*22dc650dSSadaf Ebrahimi# has figured out where the best binaries are kept, which means we have 237*22dc650dSSadaf Ebrahimi# to search for them ourselves - except when the results are already set 238*22dc650dSSadaf Ebrahimi# where we skip the searches. 239*22dc650dSSadaf Ebrahimi 240*22dc650dSSadaf Ebrahimi# Unless the user overrides by setting SED, search the path for either GNU 241*22dc650dSSadaf Ebrahimi# sed, or the sed that truncates its output the least. 242*22dc650dSSadaf Ebrahimitest -z "$SED" && { 243*22dc650dSSadaf Ebrahimi _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ 244*22dc650dSSadaf Ebrahimi for _G_i in 1 2 3 4 5 6 7; do 245*22dc650dSSadaf Ebrahimi _G_sed_script=$_G_sed_script$nl$_G_sed_script 246*22dc650dSSadaf Ebrahimi done 247*22dc650dSSadaf Ebrahimi echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed 248*22dc650dSSadaf Ebrahimi _G_sed_script= 249*22dc650dSSadaf Ebrahimi 250*22dc650dSSadaf Ebrahimi func_check_prog_sed () 251*22dc650dSSadaf Ebrahimi { 252*22dc650dSSadaf Ebrahimi _G_path_prog=$1 253*22dc650dSSadaf Ebrahimi 254*22dc650dSSadaf Ebrahimi _G_count=0 255*22dc650dSSadaf Ebrahimi printf 0123456789 >conftest.in 256*22dc650dSSadaf Ebrahimi while : 257*22dc650dSSadaf Ebrahimi do 258*22dc650dSSadaf Ebrahimi cat conftest.in conftest.in >conftest.tmp 259*22dc650dSSadaf Ebrahimi mv conftest.tmp conftest.in 260*22dc650dSSadaf Ebrahimi cp conftest.in conftest.nl 261*22dc650dSSadaf Ebrahimi echo '' >> conftest.nl 262*22dc650dSSadaf Ebrahimi "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break 263*22dc650dSSadaf Ebrahimi diff conftest.out conftest.nl >/dev/null 2>&1 || break 264*22dc650dSSadaf Ebrahimi _G_count=`expr $_G_count + 1` 265*22dc650dSSadaf Ebrahimi if test "$_G_count" -gt "$_G_path_prog_max"; then 266*22dc650dSSadaf Ebrahimi # Best one so far, save it but keep looking for a better one 267*22dc650dSSadaf Ebrahimi func_check_prog_result=$_G_path_prog 268*22dc650dSSadaf Ebrahimi _G_path_prog_max=$_G_count 269*22dc650dSSadaf Ebrahimi fi 270*22dc650dSSadaf Ebrahimi # 10*(2^10) chars as input seems more than enough 271*22dc650dSSadaf Ebrahimi test 10 -lt "$_G_count" && break 272*22dc650dSSadaf Ebrahimi done 273*22dc650dSSadaf Ebrahimi rm -f conftest.in conftest.tmp conftest.nl conftest.out 274*22dc650dSSadaf Ebrahimi } 275*22dc650dSSadaf Ebrahimi 276*22dc650dSSadaf Ebrahimi func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin" 277*22dc650dSSadaf Ebrahimi rm -f conftest.sed 278*22dc650dSSadaf Ebrahimi SED=$func_path_progs_result 279*22dc650dSSadaf Ebrahimi} 280*22dc650dSSadaf Ebrahimi 281*22dc650dSSadaf Ebrahimi 282*22dc650dSSadaf Ebrahimi# Unless the user overrides by setting GREP, search the path for either GNU 283*22dc650dSSadaf Ebrahimi# grep, or the grep that truncates its output the least. 284*22dc650dSSadaf Ebrahimitest -z "$GREP" && { 285*22dc650dSSadaf Ebrahimi func_check_prog_grep () 286*22dc650dSSadaf Ebrahimi { 287*22dc650dSSadaf Ebrahimi _G_path_prog=$1 288*22dc650dSSadaf Ebrahimi 289*22dc650dSSadaf Ebrahimi _G_count=0 290*22dc650dSSadaf Ebrahimi _G_path_prog_max=0 291*22dc650dSSadaf Ebrahimi printf 0123456789 >conftest.in 292*22dc650dSSadaf Ebrahimi while : 293*22dc650dSSadaf Ebrahimi do 294*22dc650dSSadaf Ebrahimi cat conftest.in conftest.in >conftest.tmp 295*22dc650dSSadaf Ebrahimi mv conftest.tmp conftest.in 296*22dc650dSSadaf Ebrahimi cp conftest.in conftest.nl 297*22dc650dSSadaf Ebrahimi echo 'GREP' >> conftest.nl 298*22dc650dSSadaf Ebrahimi "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break 299*22dc650dSSadaf Ebrahimi diff conftest.out conftest.nl >/dev/null 2>&1 || break 300*22dc650dSSadaf Ebrahimi _G_count=`expr $_G_count + 1` 301*22dc650dSSadaf Ebrahimi if test "$_G_count" -gt "$_G_path_prog_max"; then 302*22dc650dSSadaf Ebrahimi # Best one so far, save it but keep looking for a better one 303*22dc650dSSadaf Ebrahimi func_check_prog_result=$_G_path_prog 304*22dc650dSSadaf Ebrahimi _G_path_prog_max=$_G_count 305*22dc650dSSadaf Ebrahimi fi 306*22dc650dSSadaf Ebrahimi # 10*(2^10) chars as input seems more than enough 307*22dc650dSSadaf Ebrahimi test 10 -lt "$_G_count" && break 308*22dc650dSSadaf Ebrahimi done 309*22dc650dSSadaf Ebrahimi rm -f conftest.in conftest.tmp conftest.nl conftest.out 310*22dc650dSSadaf Ebrahimi } 311*22dc650dSSadaf Ebrahimi 312*22dc650dSSadaf Ebrahimi func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin" 313*22dc650dSSadaf Ebrahimi GREP=$func_path_progs_result 314*22dc650dSSadaf Ebrahimi} 315*22dc650dSSadaf Ebrahimi 316*22dc650dSSadaf Ebrahimi 317*22dc650dSSadaf Ebrahimi## ------------------------------- ## 318*22dc650dSSadaf Ebrahimi## User overridable command paths. ## 319*22dc650dSSadaf Ebrahimi## ------------------------------- ## 320*22dc650dSSadaf Ebrahimi 321*22dc650dSSadaf Ebrahimi# All uppercase variable names are used for environment variables. These 322*22dc650dSSadaf Ebrahimi# variables can be overridden by the user before calling a script that 323*22dc650dSSadaf Ebrahimi# uses them if a suitable command of that name is not already available 324*22dc650dSSadaf Ebrahimi# in the command search PATH. 325*22dc650dSSadaf Ebrahimi 326*22dc650dSSadaf Ebrahimi: ${CP="cp -f"} 327*22dc650dSSadaf Ebrahimi: ${ECHO="printf %s\n"} 328*22dc650dSSadaf Ebrahimi: ${EGREP="$GREP -E"} 329*22dc650dSSadaf Ebrahimi: ${FGREP="$GREP -F"} 330*22dc650dSSadaf Ebrahimi: ${LN_S="ln -s"} 331*22dc650dSSadaf Ebrahimi: ${MAKE="make"} 332*22dc650dSSadaf Ebrahimi: ${MKDIR="mkdir"} 333*22dc650dSSadaf Ebrahimi: ${MV="mv -f"} 334*22dc650dSSadaf Ebrahimi: ${RM="rm -f"} 335*22dc650dSSadaf Ebrahimi: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 336*22dc650dSSadaf Ebrahimi 337*22dc650dSSadaf Ebrahimi 338*22dc650dSSadaf Ebrahimi## -------------------- ## 339*22dc650dSSadaf Ebrahimi## Useful sed snippets. ## 340*22dc650dSSadaf Ebrahimi## -------------------- ## 341*22dc650dSSadaf Ebrahimi 342*22dc650dSSadaf Ebrahimised_dirname='s|/[^/]*$||' 343*22dc650dSSadaf Ebrahimised_basename='s|^.*/||' 344*22dc650dSSadaf Ebrahimi 345*22dc650dSSadaf Ebrahimi# Sed substitution that helps us do robust quoting. It backslashifies 346*22dc650dSSadaf Ebrahimi# metacharacters that are still active within double-quoted strings. 347*22dc650dSSadaf Ebrahimised_quote_subst='s|\([`"$\\]\)|\\\1|g' 348*22dc650dSSadaf Ebrahimi 349*22dc650dSSadaf Ebrahimi# Same as above, but do not quote variable references. 350*22dc650dSSadaf Ebrahimised_double_quote_subst='s/\(["`\\]\)/\\\1/g' 351*22dc650dSSadaf Ebrahimi 352*22dc650dSSadaf Ebrahimi# Sed substitution that turns a string into a regex matching for the 353*22dc650dSSadaf Ebrahimi# string literally. 354*22dc650dSSadaf Ebrahimised_make_literal_regex='s|[].[^$\\*\/]|\\&|g' 355*22dc650dSSadaf Ebrahimi 356*22dc650dSSadaf Ebrahimi# Sed substitution that converts a w32 file name or path 357*22dc650dSSadaf Ebrahimi# that contains forward slashes, into one that contains 358*22dc650dSSadaf Ebrahimi# (escaped) backslashes. A very naive implementation. 359*22dc650dSSadaf Ebrahimised_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 360*22dc650dSSadaf Ebrahimi 361*22dc650dSSadaf Ebrahimi# Re-'\' parameter expansions in output of sed_double_quote_subst that 362*22dc650dSSadaf Ebrahimi# were '\'-ed in input to the same. If an odd number of '\' preceded a 363*22dc650dSSadaf Ebrahimi# '$' in input to sed_double_quote_subst, that '$' was protected from 364*22dc650dSSadaf Ebrahimi# expansion. Since each input '\' is now two '\'s, look for any number 365*22dc650dSSadaf Ebrahimi# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. 366*22dc650dSSadaf Ebrahimi_G_bs='\\' 367*22dc650dSSadaf Ebrahimi_G_bs2='\\\\' 368*22dc650dSSadaf Ebrahimi_G_bs4='\\\\\\\\' 369*22dc650dSSadaf Ebrahimi_G_dollar='\$' 370*22dc650dSSadaf Ebrahimised_double_backslash="\ 371*22dc650dSSadaf Ebrahimi s/$_G_bs4/&\\ 372*22dc650dSSadaf Ebrahimi/g 373*22dc650dSSadaf Ebrahimi s/^$_G_bs2$_G_dollar/$_G_bs&/ 374*22dc650dSSadaf Ebrahimi s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g 375*22dc650dSSadaf Ebrahimi s/\n//g" 376*22dc650dSSadaf Ebrahimi 377*22dc650dSSadaf Ebrahimi# require_check_ifs_backslash 378*22dc650dSSadaf Ebrahimi# --------------------------- 379*22dc650dSSadaf Ebrahimi# Check if we can use backslash as IFS='\' separator, and set 380*22dc650dSSadaf Ebrahimi# $check_ifs_backshlash_broken to ':' or 'false'. 381*22dc650dSSadaf Ebrahimirequire_check_ifs_backslash=func_require_check_ifs_backslash 382*22dc650dSSadaf Ebrahimifunc_require_check_ifs_backslash () 383*22dc650dSSadaf Ebrahimi{ 384*22dc650dSSadaf Ebrahimi _G_save_IFS=$IFS 385*22dc650dSSadaf Ebrahimi IFS='\' 386*22dc650dSSadaf Ebrahimi _G_check_ifs_backshlash='a\\b' 387*22dc650dSSadaf Ebrahimi for _G_i in $_G_check_ifs_backshlash 388*22dc650dSSadaf Ebrahimi do 389*22dc650dSSadaf Ebrahimi case $_G_i in 390*22dc650dSSadaf Ebrahimi a) 391*22dc650dSSadaf Ebrahimi check_ifs_backshlash_broken=false 392*22dc650dSSadaf Ebrahimi ;; 393*22dc650dSSadaf Ebrahimi '') 394*22dc650dSSadaf Ebrahimi break 395*22dc650dSSadaf Ebrahimi ;; 396*22dc650dSSadaf Ebrahimi *) 397*22dc650dSSadaf Ebrahimi check_ifs_backshlash_broken=: 398*22dc650dSSadaf Ebrahimi break 399*22dc650dSSadaf Ebrahimi ;; 400*22dc650dSSadaf Ebrahimi esac 401*22dc650dSSadaf Ebrahimi done 402*22dc650dSSadaf Ebrahimi IFS=$_G_save_IFS 403*22dc650dSSadaf Ebrahimi require_check_ifs_backslash=: 404*22dc650dSSadaf Ebrahimi} 405*22dc650dSSadaf Ebrahimi 406*22dc650dSSadaf Ebrahimi 407*22dc650dSSadaf Ebrahimi## ----------------- ## 408*22dc650dSSadaf Ebrahimi## Global variables. ## 409*22dc650dSSadaf Ebrahimi## ----------------- ## 410*22dc650dSSadaf Ebrahimi 411*22dc650dSSadaf Ebrahimi# Except for the global variables explicitly listed below, the following 412*22dc650dSSadaf Ebrahimi# functions in the '^func_' namespace, and the '^require_' namespace 413*22dc650dSSadaf Ebrahimi# variables initialised in the 'Resource management' section, sourcing 414*22dc650dSSadaf Ebrahimi# this file will not pollute your global namespace with anything 415*22dc650dSSadaf Ebrahimi# else. There's no portable way to scope variables in Bourne shell 416*22dc650dSSadaf Ebrahimi# though, so actually running these functions will sometimes place 417*22dc650dSSadaf Ebrahimi# results into a variable named after the function, and often use 418*22dc650dSSadaf Ebrahimi# temporary variables in the '^_G_' namespace. If you are careful to 419*22dc650dSSadaf Ebrahimi# avoid using those namespaces casually in your sourcing script, things 420*22dc650dSSadaf Ebrahimi# should continue to work as you expect. And, of course, you can freely 421*22dc650dSSadaf Ebrahimi# overwrite any of the functions or variables defined here before 422*22dc650dSSadaf Ebrahimi# calling anything to customize them. 423*22dc650dSSadaf Ebrahimi 424*22dc650dSSadaf EbrahimiEXIT_SUCCESS=0 425*22dc650dSSadaf EbrahimiEXIT_FAILURE=1 426*22dc650dSSadaf EbrahimiEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 427*22dc650dSSadaf EbrahimiEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 428*22dc650dSSadaf Ebrahimi 429*22dc650dSSadaf Ebrahimi# Allow overriding, eg assuming that you follow the convention of 430*22dc650dSSadaf Ebrahimi# putting '$debug_cmd' at the start of all your functions, you can get 431*22dc650dSSadaf Ebrahimi# bash to show function call trace with: 432*22dc650dSSadaf Ebrahimi# 433*22dc650dSSadaf Ebrahimi# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name 434*22dc650dSSadaf Ebrahimidebug_cmd=${debug_cmd-":"} 435*22dc650dSSadaf Ebrahimiexit_cmd=: 436*22dc650dSSadaf Ebrahimi 437*22dc650dSSadaf Ebrahimi# By convention, finish your script with: 438*22dc650dSSadaf Ebrahimi# 439*22dc650dSSadaf Ebrahimi# exit $exit_status 440*22dc650dSSadaf Ebrahimi# 441*22dc650dSSadaf Ebrahimi# so that you can set exit_status to non-zero if you want to indicate 442*22dc650dSSadaf Ebrahimi# something went wrong during execution without actually bailing out at 443*22dc650dSSadaf Ebrahimi# the point of failure. 444*22dc650dSSadaf Ebrahimiexit_status=$EXIT_SUCCESS 445*22dc650dSSadaf Ebrahimi 446*22dc650dSSadaf Ebrahimi# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 447*22dc650dSSadaf Ebrahimi# is ksh but when the shell is invoked as "sh" and the current value of 448*22dc650dSSadaf Ebrahimi# the _XPG environment variable is not equal to 1 (one), the special 449*22dc650dSSadaf Ebrahimi# positional parameter $0, within a function call, is the name of the 450*22dc650dSSadaf Ebrahimi# function. 451*22dc650dSSadaf Ebrahimiprogpath=$0 452*22dc650dSSadaf Ebrahimi 453*22dc650dSSadaf Ebrahimi# The name of this program. 454*22dc650dSSadaf Ebrahimiprogname=`$ECHO "$progpath" |$SED "$sed_basename"` 455*22dc650dSSadaf Ebrahimi 456*22dc650dSSadaf Ebrahimi# Make sure we have an absolute progpath for reexecution: 457*22dc650dSSadaf Ebrahimicase $progpath in 458*22dc650dSSadaf Ebrahimi [\\/]*|[A-Za-z]:\\*) ;; 459*22dc650dSSadaf Ebrahimi *[\\/]*) 460*22dc650dSSadaf Ebrahimi progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` 461*22dc650dSSadaf Ebrahimi progdir=`cd "$progdir" && pwd` 462*22dc650dSSadaf Ebrahimi progpath=$progdir/$progname 463*22dc650dSSadaf Ebrahimi ;; 464*22dc650dSSadaf Ebrahimi *) 465*22dc650dSSadaf Ebrahimi _G_IFS=$IFS 466*22dc650dSSadaf Ebrahimi IFS=${PATH_SEPARATOR-:} 467*22dc650dSSadaf Ebrahimi for progdir in $PATH; do 468*22dc650dSSadaf Ebrahimi IFS=$_G_IFS 469*22dc650dSSadaf Ebrahimi test -x "$progdir/$progname" && break 470*22dc650dSSadaf Ebrahimi done 471*22dc650dSSadaf Ebrahimi IFS=$_G_IFS 472*22dc650dSSadaf Ebrahimi test -n "$progdir" || progdir=`pwd` 473*22dc650dSSadaf Ebrahimi progpath=$progdir/$progname 474*22dc650dSSadaf Ebrahimi ;; 475*22dc650dSSadaf Ebrahimiesac 476*22dc650dSSadaf Ebrahimi 477*22dc650dSSadaf Ebrahimi 478*22dc650dSSadaf Ebrahimi## ----------------- ## 479*22dc650dSSadaf Ebrahimi## Standard options. ## 480*22dc650dSSadaf Ebrahimi## ----------------- ## 481*22dc650dSSadaf Ebrahimi 482*22dc650dSSadaf Ebrahimi# The following options affect the operation of the functions defined 483*22dc650dSSadaf Ebrahimi# below, and should be set appropriately depending on run-time para- 484*22dc650dSSadaf Ebrahimi# meters passed on the command line. 485*22dc650dSSadaf Ebrahimi 486*22dc650dSSadaf Ebrahimiopt_dry_run=false 487*22dc650dSSadaf Ebrahimiopt_quiet=false 488*22dc650dSSadaf Ebrahimiopt_verbose=false 489*22dc650dSSadaf Ebrahimi 490*22dc650dSSadaf Ebrahimi# Categories 'all' and 'none' are always available. Append any others 491*22dc650dSSadaf Ebrahimi# you will pass as the first argument to func_warning from your own 492*22dc650dSSadaf Ebrahimi# code. 493*22dc650dSSadaf Ebrahimiwarning_categories= 494*22dc650dSSadaf Ebrahimi 495*22dc650dSSadaf Ebrahimi# By default, display warnings according to 'opt_warning_types'. Set 496*22dc650dSSadaf Ebrahimi# 'warning_func' to ':' to elide all warnings, or func_fatal_error to 497*22dc650dSSadaf Ebrahimi# treat the next displayed warning as a fatal error. 498*22dc650dSSadaf Ebrahimiwarning_func=func_warn_and_continue 499*22dc650dSSadaf Ebrahimi 500*22dc650dSSadaf Ebrahimi# Set to 'all' to display all warnings, 'none' to suppress all 501*22dc650dSSadaf Ebrahimi# warnings, or a space delimited list of some subset of 502*22dc650dSSadaf Ebrahimi# 'warning_categories' to display only the listed warnings. 503*22dc650dSSadaf Ebrahimiopt_warning_types=all 504*22dc650dSSadaf Ebrahimi 505*22dc650dSSadaf Ebrahimi 506*22dc650dSSadaf Ebrahimi## -------------------- ## 507*22dc650dSSadaf Ebrahimi## Resource management. ## 508*22dc650dSSadaf Ebrahimi## -------------------- ## 509*22dc650dSSadaf Ebrahimi 510*22dc650dSSadaf Ebrahimi# This section contains definitions for functions that each ensure a 511*22dc650dSSadaf Ebrahimi# particular resource (a file, or a non-empty configuration variable for 512*22dc650dSSadaf Ebrahimi# example) is available, and if appropriate to extract default values 513*22dc650dSSadaf Ebrahimi# from pertinent package files. Call them using their associated 514*22dc650dSSadaf Ebrahimi# 'require_*' variable to ensure that they are executed, at most, once. 515*22dc650dSSadaf Ebrahimi# 516*22dc650dSSadaf Ebrahimi# It's entirely deliberate that calling these functions can set 517*22dc650dSSadaf Ebrahimi# variables that don't obey the namespace limitations obeyed by the rest 518*22dc650dSSadaf Ebrahimi# of this file, in order that that they be as useful as possible to 519*22dc650dSSadaf Ebrahimi# callers. 520*22dc650dSSadaf Ebrahimi 521*22dc650dSSadaf Ebrahimi 522*22dc650dSSadaf Ebrahimi# require_term_colors 523*22dc650dSSadaf Ebrahimi# ------------------- 524*22dc650dSSadaf Ebrahimi# Allow display of bold text on terminals that support it. 525*22dc650dSSadaf Ebrahimirequire_term_colors=func_require_term_colors 526*22dc650dSSadaf Ebrahimifunc_require_term_colors () 527*22dc650dSSadaf Ebrahimi{ 528*22dc650dSSadaf Ebrahimi $debug_cmd 529*22dc650dSSadaf Ebrahimi 530*22dc650dSSadaf Ebrahimi test -t 1 && { 531*22dc650dSSadaf Ebrahimi # COLORTERM and USE_ANSI_COLORS environment variables take 532*22dc650dSSadaf Ebrahimi # precedence, because most terminfo databases neglect to describe 533*22dc650dSSadaf Ebrahimi # whether color sequences are supported. 534*22dc650dSSadaf Ebrahimi test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} 535*22dc650dSSadaf Ebrahimi 536*22dc650dSSadaf Ebrahimi if test 1 = "$USE_ANSI_COLORS"; then 537*22dc650dSSadaf Ebrahimi # Standard ANSI escape sequences 538*22dc650dSSadaf Ebrahimi tc_reset='[0m' 539*22dc650dSSadaf Ebrahimi tc_bold='[1m'; tc_standout='[7m' 540*22dc650dSSadaf Ebrahimi tc_red='[31m'; tc_green='[32m' 541*22dc650dSSadaf Ebrahimi tc_blue='[34m'; tc_cyan='[36m' 542*22dc650dSSadaf Ebrahimi else 543*22dc650dSSadaf Ebrahimi # Otherwise trust the terminfo database after all. 544*22dc650dSSadaf Ebrahimi test -n "`tput sgr0 2>/dev/null`" && { 545*22dc650dSSadaf Ebrahimi tc_reset=`tput sgr0` 546*22dc650dSSadaf Ebrahimi test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` 547*22dc650dSSadaf Ebrahimi tc_standout=$tc_bold 548*22dc650dSSadaf Ebrahimi test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` 549*22dc650dSSadaf Ebrahimi test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` 550*22dc650dSSadaf Ebrahimi test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` 551*22dc650dSSadaf Ebrahimi test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` 552*22dc650dSSadaf Ebrahimi test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` 553*22dc650dSSadaf Ebrahimi } 554*22dc650dSSadaf Ebrahimi fi 555*22dc650dSSadaf Ebrahimi } 556*22dc650dSSadaf Ebrahimi 557*22dc650dSSadaf Ebrahimi require_term_colors=: 558*22dc650dSSadaf Ebrahimi} 559*22dc650dSSadaf Ebrahimi 560*22dc650dSSadaf Ebrahimi 561*22dc650dSSadaf Ebrahimi## ----------------- ## 562*22dc650dSSadaf Ebrahimi## Function library. ## 563*22dc650dSSadaf Ebrahimi## ----------------- ## 564*22dc650dSSadaf Ebrahimi 565*22dc650dSSadaf Ebrahimi# This section contains a variety of useful functions to call in your 566*22dc650dSSadaf Ebrahimi# scripts. Take note of the portable wrappers for features provided by 567*22dc650dSSadaf Ebrahimi# some modern shells, which will fall back to slower equivalents on 568*22dc650dSSadaf Ebrahimi# less featureful shells. 569*22dc650dSSadaf Ebrahimi 570*22dc650dSSadaf Ebrahimi 571*22dc650dSSadaf Ebrahimi# func_append VAR VALUE 572*22dc650dSSadaf Ebrahimi# --------------------- 573*22dc650dSSadaf Ebrahimi# Append VALUE onto the existing contents of VAR. 574*22dc650dSSadaf Ebrahimi 575*22dc650dSSadaf Ebrahimi # We should try to minimise forks, especially on Windows where they are 576*22dc650dSSadaf Ebrahimi # unreasonably slow, so skip the feature probes when bash or zsh are 577*22dc650dSSadaf Ebrahimi # being used: 578*22dc650dSSadaf Ebrahimi if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then 579*22dc650dSSadaf Ebrahimi : ${_G_HAVE_ARITH_OP="yes"} 580*22dc650dSSadaf Ebrahimi : ${_G_HAVE_XSI_OPS="yes"} 581*22dc650dSSadaf Ebrahimi # The += operator was introduced in bash 3.1 582*22dc650dSSadaf Ebrahimi case $BASH_VERSION in 583*22dc650dSSadaf Ebrahimi [12].* | 3.0 | 3.0*) ;; 584*22dc650dSSadaf Ebrahimi *) 585*22dc650dSSadaf Ebrahimi : ${_G_HAVE_PLUSEQ_OP="yes"} 586*22dc650dSSadaf Ebrahimi ;; 587*22dc650dSSadaf Ebrahimi esac 588*22dc650dSSadaf Ebrahimi fi 589*22dc650dSSadaf Ebrahimi 590*22dc650dSSadaf Ebrahimi # _G_HAVE_PLUSEQ_OP 591*22dc650dSSadaf Ebrahimi # Can be empty, in which case the shell is probed, "yes" if += is 592*22dc650dSSadaf Ebrahimi # useable or anything else if it does not work. 593*22dc650dSSadaf Ebrahimi test -z "$_G_HAVE_PLUSEQ_OP" \ 594*22dc650dSSadaf Ebrahimi && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ 595*22dc650dSSadaf Ebrahimi && _G_HAVE_PLUSEQ_OP=yes 596*22dc650dSSadaf Ebrahimi 597*22dc650dSSadaf Ebrahimiif test yes = "$_G_HAVE_PLUSEQ_OP" 598*22dc650dSSadaf Ebrahimithen 599*22dc650dSSadaf Ebrahimi # This is an XSI compatible shell, allowing a faster implementation... 600*22dc650dSSadaf Ebrahimi eval 'func_append () 601*22dc650dSSadaf Ebrahimi { 602*22dc650dSSadaf Ebrahimi $debug_cmd 603*22dc650dSSadaf Ebrahimi 604*22dc650dSSadaf Ebrahimi eval "$1+=\$2" 605*22dc650dSSadaf Ebrahimi }' 606*22dc650dSSadaf Ebrahimielse 607*22dc650dSSadaf Ebrahimi # ...otherwise fall back to using expr, which is often a shell builtin. 608*22dc650dSSadaf Ebrahimi func_append () 609*22dc650dSSadaf Ebrahimi { 610*22dc650dSSadaf Ebrahimi $debug_cmd 611*22dc650dSSadaf Ebrahimi 612*22dc650dSSadaf Ebrahimi eval "$1=\$$1\$2" 613*22dc650dSSadaf Ebrahimi } 614*22dc650dSSadaf Ebrahimifi 615*22dc650dSSadaf Ebrahimi 616*22dc650dSSadaf Ebrahimi 617*22dc650dSSadaf Ebrahimi# func_append_quoted VAR VALUE 618*22dc650dSSadaf Ebrahimi# ---------------------------- 619*22dc650dSSadaf Ebrahimi# Quote VALUE and append to the end of shell variable VAR, separated 620*22dc650dSSadaf Ebrahimi# by a space. 621*22dc650dSSadaf Ebrahimiif test yes = "$_G_HAVE_PLUSEQ_OP"; then 622*22dc650dSSadaf Ebrahimi eval 'func_append_quoted () 623*22dc650dSSadaf Ebrahimi { 624*22dc650dSSadaf Ebrahimi $debug_cmd 625*22dc650dSSadaf Ebrahimi 626*22dc650dSSadaf Ebrahimi func_quote_arg pretty "$2" 627*22dc650dSSadaf Ebrahimi eval "$1+=\\ \$func_quote_arg_result" 628*22dc650dSSadaf Ebrahimi }' 629*22dc650dSSadaf Ebrahimielse 630*22dc650dSSadaf Ebrahimi func_append_quoted () 631*22dc650dSSadaf Ebrahimi { 632*22dc650dSSadaf Ebrahimi $debug_cmd 633*22dc650dSSadaf Ebrahimi 634*22dc650dSSadaf Ebrahimi func_quote_arg pretty "$2" 635*22dc650dSSadaf Ebrahimi eval "$1=\$$1\\ \$func_quote_arg_result" 636*22dc650dSSadaf Ebrahimi } 637*22dc650dSSadaf Ebrahimifi 638*22dc650dSSadaf Ebrahimi 639*22dc650dSSadaf Ebrahimi 640*22dc650dSSadaf Ebrahimi# func_append_uniq VAR VALUE 641*22dc650dSSadaf Ebrahimi# -------------------------- 642*22dc650dSSadaf Ebrahimi# Append unique VALUE onto the existing contents of VAR, assuming 643*22dc650dSSadaf Ebrahimi# entries are delimited by the first character of VALUE. For example: 644*22dc650dSSadaf Ebrahimi# 645*22dc650dSSadaf Ebrahimi# func_append_uniq options " --another-option option-argument" 646*22dc650dSSadaf Ebrahimi# 647*22dc650dSSadaf Ebrahimi# will only append to $options if " --another-option option-argument " 648*22dc650dSSadaf Ebrahimi# is not already present somewhere in $options already (note spaces at 649*22dc650dSSadaf Ebrahimi# each end implied by leading space in second argument). 650*22dc650dSSadaf Ebrahimifunc_append_uniq () 651*22dc650dSSadaf Ebrahimi{ 652*22dc650dSSadaf Ebrahimi $debug_cmd 653*22dc650dSSadaf Ebrahimi 654*22dc650dSSadaf Ebrahimi eval _G_current_value='`$ECHO $'$1'`' 655*22dc650dSSadaf Ebrahimi _G_delim=`expr "$2" : '\(.\)'` 656*22dc650dSSadaf Ebrahimi 657*22dc650dSSadaf Ebrahimi case $_G_delim$_G_current_value$_G_delim in 658*22dc650dSSadaf Ebrahimi *"$2$_G_delim"*) ;; 659*22dc650dSSadaf Ebrahimi *) func_append "$@" ;; 660*22dc650dSSadaf Ebrahimi esac 661*22dc650dSSadaf Ebrahimi} 662*22dc650dSSadaf Ebrahimi 663*22dc650dSSadaf Ebrahimi 664*22dc650dSSadaf Ebrahimi# func_arith TERM... 665*22dc650dSSadaf Ebrahimi# ------------------ 666*22dc650dSSadaf Ebrahimi# Set func_arith_result to the result of evaluating TERMs. 667*22dc650dSSadaf Ebrahimi test -z "$_G_HAVE_ARITH_OP" \ 668*22dc650dSSadaf Ebrahimi && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ 669*22dc650dSSadaf Ebrahimi && _G_HAVE_ARITH_OP=yes 670*22dc650dSSadaf Ebrahimi 671*22dc650dSSadaf Ebrahimiif test yes = "$_G_HAVE_ARITH_OP"; then 672*22dc650dSSadaf Ebrahimi eval 'func_arith () 673*22dc650dSSadaf Ebrahimi { 674*22dc650dSSadaf Ebrahimi $debug_cmd 675*22dc650dSSadaf Ebrahimi 676*22dc650dSSadaf Ebrahimi func_arith_result=$(( $* )) 677*22dc650dSSadaf Ebrahimi }' 678*22dc650dSSadaf Ebrahimielse 679*22dc650dSSadaf Ebrahimi func_arith () 680*22dc650dSSadaf Ebrahimi { 681*22dc650dSSadaf Ebrahimi $debug_cmd 682*22dc650dSSadaf Ebrahimi 683*22dc650dSSadaf Ebrahimi func_arith_result=`expr "$@"` 684*22dc650dSSadaf Ebrahimi } 685*22dc650dSSadaf Ebrahimifi 686*22dc650dSSadaf Ebrahimi 687*22dc650dSSadaf Ebrahimi 688*22dc650dSSadaf Ebrahimi# func_basename FILE 689*22dc650dSSadaf Ebrahimi# ------------------ 690*22dc650dSSadaf Ebrahimi# Set func_basename_result to FILE with everything up to and including 691*22dc650dSSadaf Ebrahimi# the last / stripped. 692*22dc650dSSadaf Ebrahimiif test yes = "$_G_HAVE_XSI_OPS"; then 693*22dc650dSSadaf Ebrahimi # If this shell supports suffix pattern removal, then use it to avoid 694*22dc650dSSadaf Ebrahimi # forking. Hide the definitions single quotes in case the shell chokes 695*22dc650dSSadaf Ebrahimi # on unsupported syntax... 696*22dc650dSSadaf Ebrahimi _b='func_basename_result=${1##*/}' 697*22dc650dSSadaf Ebrahimi _d='case $1 in 698*22dc650dSSadaf Ebrahimi */*) func_dirname_result=${1%/*}$2 ;; 699*22dc650dSSadaf Ebrahimi * ) func_dirname_result=$3 ;; 700*22dc650dSSadaf Ebrahimi esac' 701*22dc650dSSadaf Ebrahimi 702*22dc650dSSadaf Ebrahimielse 703*22dc650dSSadaf Ebrahimi # ...otherwise fall back to using sed. 704*22dc650dSSadaf Ebrahimi _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' 705*22dc650dSSadaf Ebrahimi _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` 706*22dc650dSSadaf Ebrahimi if test "X$func_dirname_result" = "X$1"; then 707*22dc650dSSadaf Ebrahimi func_dirname_result=$3 708*22dc650dSSadaf Ebrahimi else 709*22dc650dSSadaf Ebrahimi func_append func_dirname_result "$2" 710*22dc650dSSadaf Ebrahimi fi' 711*22dc650dSSadaf Ebrahimifi 712*22dc650dSSadaf Ebrahimi 713*22dc650dSSadaf Ebrahimieval 'func_basename () 714*22dc650dSSadaf Ebrahimi{ 715*22dc650dSSadaf Ebrahimi $debug_cmd 716*22dc650dSSadaf Ebrahimi 717*22dc650dSSadaf Ebrahimi '"$_b"' 718*22dc650dSSadaf Ebrahimi}' 719*22dc650dSSadaf Ebrahimi 720*22dc650dSSadaf Ebrahimi 721*22dc650dSSadaf Ebrahimi# func_dirname FILE APPEND NONDIR_REPLACEMENT 722*22dc650dSSadaf Ebrahimi# ------------------------------------------- 723*22dc650dSSadaf Ebrahimi# Compute the dirname of FILE. If nonempty, add APPEND to the result, 724*22dc650dSSadaf Ebrahimi# otherwise set result to NONDIR_REPLACEMENT. 725*22dc650dSSadaf Ebrahimieval 'func_dirname () 726*22dc650dSSadaf Ebrahimi{ 727*22dc650dSSadaf Ebrahimi $debug_cmd 728*22dc650dSSadaf Ebrahimi 729*22dc650dSSadaf Ebrahimi '"$_d"' 730*22dc650dSSadaf Ebrahimi}' 731*22dc650dSSadaf Ebrahimi 732*22dc650dSSadaf Ebrahimi 733*22dc650dSSadaf Ebrahimi# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT 734*22dc650dSSadaf Ebrahimi# -------------------------------------------------------- 735*22dc650dSSadaf Ebrahimi# Perform func_basename and func_dirname in a single function 736*22dc650dSSadaf Ebrahimi# call: 737*22dc650dSSadaf Ebrahimi# dirname: Compute the dirname of FILE. If nonempty, 738*22dc650dSSadaf Ebrahimi# add APPEND to the result, otherwise set result 739*22dc650dSSadaf Ebrahimi# to NONDIR_REPLACEMENT. 740*22dc650dSSadaf Ebrahimi# value returned in "$func_dirname_result" 741*22dc650dSSadaf Ebrahimi# basename: Compute filename of FILE. 742*22dc650dSSadaf Ebrahimi# value retuned in "$func_basename_result" 743*22dc650dSSadaf Ebrahimi# For efficiency, we do not delegate to the functions above but instead 744*22dc650dSSadaf Ebrahimi# duplicate the functionality here. 745*22dc650dSSadaf Ebrahimieval 'func_dirname_and_basename () 746*22dc650dSSadaf Ebrahimi{ 747*22dc650dSSadaf Ebrahimi $debug_cmd 748*22dc650dSSadaf Ebrahimi 749*22dc650dSSadaf Ebrahimi '"$_b"' 750*22dc650dSSadaf Ebrahimi '"$_d"' 751*22dc650dSSadaf Ebrahimi}' 752*22dc650dSSadaf Ebrahimi 753*22dc650dSSadaf Ebrahimi 754*22dc650dSSadaf Ebrahimi# func_echo ARG... 755*22dc650dSSadaf Ebrahimi# ---------------- 756*22dc650dSSadaf Ebrahimi# Echo program name prefixed message. 757*22dc650dSSadaf Ebrahimifunc_echo () 758*22dc650dSSadaf Ebrahimi{ 759*22dc650dSSadaf Ebrahimi $debug_cmd 760*22dc650dSSadaf Ebrahimi 761*22dc650dSSadaf Ebrahimi _G_message=$* 762*22dc650dSSadaf Ebrahimi 763*22dc650dSSadaf Ebrahimi func_echo_IFS=$IFS 764*22dc650dSSadaf Ebrahimi IFS=$nl 765*22dc650dSSadaf Ebrahimi for _G_line in $_G_message; do 766*22dc650dSSadaf Ebrahimi IFS=$func_echo_IFS 767*22dc650dSSadaf Ebrahimi $ECHO "$progname: $_G_line" 768*22dc650dSSadaf Ebrahimi done 769*22dc650dSSadaf Ebrahimi IFS=$func_echo_IFS 770*22dc650dSSadaf Ebrahimi} 771*22dc650dSSadaf Ebrahimi 772*22dc650dSSadaf Ebrahimi 773*22dc650dSSadaf Ebrahimi# func_echo_all ARG... 774*22dc650dSSadaf Ebrahimi# -------------------- 775*22dc650dSSadaf Ebrahimi# Invoke $ECHO with all args, space-separated. 776*22dc650dSSadaf Ebrahimifunc_echo_all () 777*22dc650dSSadaf Ebrahimi{ 778*22dc650dSSadaf Ebrahimi $ECHO "$*" 779*22dc650dSSadaf Ebrahimi} 780*22dc650dSSadaf Ebrahimi 781*22dc650dSSadaf Ebrahimi 782*22dc650dSSadaf Ebrahimi# func_echo_infix_1 INFIX ARG... 783*22dc650dSSadaf Ebrahimi# ------------------------------ 784*22dc650dSSadaf Ebrahimi# Echo program name, followed by INFIX on the first line, with any 785*22dc650dSSadaf Ebrahimi# additional lines not showing INFIX. 786*22dc650dSSadaf Ebrahimifunc_echo_infix_1 () 787*22dc650dSSadaf Ebrahimi{ 788*22dc650dSSadaf Ebrahimi $debug_cmd 789*22dc650dSSadaf Ebrahimi 790*22dc650dSSadaf Ebrahimi $require_term_colors 791*22dc650dSSadaf Ebrahimi 792*22dc650dSSadaf Ebrahimi _G_infix=$1; shift 793*22dc650dSSadaf Ebrahimi _G_indent=$_G_infix 794*22dc650dSSadaf Ebrahimi _G_prefix="$progname: $_G_infix: " 795*22dc650dSSadaf Ebrahimi _G_message=$* 796*22dc650dSSadaf Ebrahimi 797*22dc650dSSadaf Ebrahimi # Strip color escape sequences before counting printable length 798*22dc650dSSadaf Ebrahimi for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" 799*22dc650dSSadaf Ebrahimi do 800*22dc650dSSadaf Ebrahimi test -n "$_G_tc" && { 801*22dc650dSSadaf Ebrahimi _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` 802*22dc650dSSadaf Ebrahimi _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` 803*22dc650dSSadaf Ebrahimi } 804*22dc650dSSadaf Ebrahimi done 805*22dc650dSSadaf Ebrahimi _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes 806*22dc650dSSadaf Ebrahimi 807*22dc650dSSadaf Ebrahimi func_echo_infix_1_IFS=$IFS 808*22dc650dSSadaf Ebrahimi IFS=$nl 809*22dc650dSSadaf Ebrahimi for _G_line in $_G_message; do 810*22dc650dSSadaf Ebrahimi IFS=$func_echo_infix_1_IFS 811*22dc650dSSadaf Ebrahimi $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 812*22dc650dSSadaf Ebrahimi _G_prefix=$_G_indent 813*22dc650dSSadaf Ebrahimi done 814*22dc650dSSadaf Ebrahimi IFS=$func_echo_infix_1_IFS 815*22dc650dSSadaf Ebrahimi} 816*22dc650dSSadaf Ebrahimi 817*22dc650dSSadaf Ebrahimi 818*22dc650dSSadaf Ebrahimi# func_error ARG... 819*22dc650dSSadaf Ebrahimi# ----------------- 820*22dc650dSSadaf Ebrahimi# Echo program name prefixed message to standard error. 821*22dc650dSSadaf Ebrahimifunc_error () 822*22dc650dSSadaf Ebrahimi{ 823*22dc650dSSadaf Ebrahimi $debug_cmd 824*22dc650dSSadaf Ebrahimi 825*22dc650dSSadaf Ebrahimi $require_term_colors 826*22dc650dSSadaf Ebrahimi 827*22dc650dSSadaf Ebrahimi func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 828*22dc650dSSadaf Ebrahimi} 829*22dc650dSSadaf Ebrahimi 830*22dc650dSSadaf Ebrahimi 831*22dc650dSSadaf Ebrahimi# func_fatal_error ARG... 832*22dc650dSSadaf Ebrahimi# ----------------------- 833*22dc650dSSadaf Ebrahimi# Echo program name prefixed message to standard error, and exit. 834*22dc650dSSadaf Ebrahimifunc_fatal_error () 835*22dc650dSSadaf Ebrahimi{ 836*22dc650dSSadaf Ebrahimi $debug_cmd 837*22dc650dSSadaf Ebrahimi 838*22dc650dSSadaf Ebrahimi func_error "$*" 839*22dc650dSSadaf Ebrahimi exit $EXIT_FAILURE 840*22dc650dSSadaf Ebrahimi} 841*22dc650dSSadaf Ebrahimi 842*22dc650dSSadaf Ebrahimi 843*22dc650dSSadaf Ebrahimi# func_grep EXPRESSION FILENAME 844*22dc650dSSadaf Ebrahimi# ----------------------------- 845*22dc650dSSadaf Ebrahimi# Check whether EXPRESSION matches any line of FILENAME, without output. 846*22dc650dSSadaf Ebrahimifunc_grep () 847*22dc650dSSadaf Ebrahimi{ 848*22dc650dSSadaf Ebrahimi $debug_cmd 849*22dc650dSSadaf Ebrahimi 850*22dc650dSSadaf Ebrahimi $GREP "$1" "$2" >/dev/null 2>&1 851*22dc650dSSadaf Ebrahimi} 852*22dc650dSSadaf Ebrahimi 853*22dc650dSSadaf Ebrahimi 854*22dc650dSSadaf Ebrahimi# func_len STRING 855*22dc650dSSadaf Ebrahimi# --------------- 856*22dc650dSSadaf Ebrahimi# Set func_len_result to the length of STRING. STRING may not 857*22dc650dSSadaf Ebrahimi# start with a hyphen. 858*22dc650dSSadaf Ebrahimi test -z "$_G_HAVE_XSI_OPS" \ 859*22dc650dSSadaf Ebrahimi && (eval 'x=a/b/c; 860*22dc650dSSadaf Ebrahimi test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 861*22dc650dSSadaf Ebrahimi && _G_HAVE_XSI_OPS=yes 862*22dc650dSSadaf Ebrahimi 863*22dc650dSSadaf Ebrahimiif test yes = "$_G_HAVE_XSI_OPS"; then 864*22dc650dSSadaf Ebrahimi eval 'func_len () 865*22dc650dSSadaf Ebrahimi { 866*22dc650dSSadaf Ebrahimi $debug_cmd 867*22dc650dSSadaf Ebrahimi 868*22dc650dSSadaf Ebrahimi func_len_result=${#1} 869*22dc650dSSadaf Ebrahimi }' 870*22dc650dSSadaf Ebrahimielse 871*22dc650dSSadaf Ebrahimi func_len () 872*22dc650dSSadaf Ebrahimi { 873*22dc650dSSadaf Ebrahimi $debug_cmd 874*22dc650dSSadaf Ebrahimi 875*22dc650dSSadaf Ebrahimi func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` 876*22dc650dSSadaf Ebrahimi } 877*22dc650dSSadaf Ebrahimifi 878*22dc650dSSadaf Ebrahimi 879*22dc650dSSadaf Ebrahimi 880*22dc650dSSadaf Ebrahimi# func_mkdir_p DIRECTORY-PATH 881*22dc650dSSadaf Ebrahimi# --------------------------- 882*22dc650dSSadaf Ebrahimi# Make sure the entire path to DIRECTORY-PATH is available. 883*22dc650dSSadaf Ebrahimifunc_mkdir_p () 884*22dc650dSSadaf Ebrahimi{ 885*22dc650dSSadaf Ebrahimi $debug_cmd 886*22dc650dSSadaf Ebrahimi 887*22dc650dSSadaf Ebrahimi _G_directory_path=$1 888*22dc650dSSadaf Ebrahimi _G_dir_list= 889*22dc650dSSadaf Ebrahimi 890*22dc650dSSadaf Ebrahimi if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then 891*22dc650dSSadaf Ebrahimi 892*22dc650dSSadaf Ebrahimi # Protect directory names starting with '-' 893*22dc650dSSadaf Ebrahimi case $_G_directory_path in 894*22dc650dSSadaf Ebrahimi -*) _G_directory_path=./$_G_directory_path ;; 895*22dc650dSSadaf Ebrahimi esac 896*22dc650dSSadaf Ebrahimi 897*22dc650dSSadaf Ebrahimi # While some portion of DIR does not yet exist... 898*22dc650dSSadaf Ebrahimi while test ! -d "$_G_directory_path"; do 899*22dc650dSSadaf Ebrahimi # ...make a list in topmost first order. Use a colon delimited 900*22dc650dSSadaf Ebrahimi # list incase some portion of path contains whitespace. 901*22dc650dSSadaf Ebrahimi _G_dir_list=$_G_directory_path:$_G_dir_list 902*22dc650dSSadaf Ebrahimi 903*22dc650dSSadaf Ebrahimi # If the last portion added has no slash in it, the list is done 904*22dc650dSSadaf Ebrahimi case $_G_directory_path in */*) ;; *) break ;; esac 905*22dc650dSSadaf Ebrahimi 906*22dc650dSSadaf Ebrahimi # ...otherwise throw away the child directory and loop 907*22dc650dSSadaf Ebrahimi _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` 908*22dc650dSSadaf Ebrahimi done 909*22dc650dSSadaf Ebrahimi _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` 910*22dc650dSSadaf Ebrahimi 911*22dc650dSSadaf Ebrahimi func_mkdir_p_IFS=$IFS; IFS=: 912*22dc650dSSadaf Ebrahimi for _G_dir in $_G_dir_list; do 913*22dc650dSSadaf Ebrahimi IFS=$func_mkdir_p_IFS 914*22dc650dSSadaf Ebrahimi # mkdir can fail with a 'File exist' error if two processes 915*22dc650dSSadaf Ebrahimi # try to create one of the directories concurrently. Don't 916*22dc650dSSadaf Ebrahimi # stop in that case! 917*22dc650dSSadaf Ebrahimi $MKDIR "$_G_dir" 2>/dev/null || : 918*22dc650dSSadaf Ebrahimi done 919*22dc650dSSadaf Ebrahimi IFS=$func_mkdir_p_IFS 920*22dc650dSSadaf Ebrahimi 921*22dc650dSSadaf Ebrahimi # Bail out if we (or some other process) failed to create a directory. 922*22dc650dSSadaf Ebrahimi test -d "$_G_directory_path" || \ 923*22dc650dSSadaf Ebrahimi func_fatal_error "Failed to create '$1'" 924*22dc650dSSadaf Ebrahimi fi 925*22dc650dSSadaf Ebrahimi} 926*22dc650dSSadaf Ebrahimi 927*22dc650dSSadaf Ebrahimi 928*22dc650dSSadaf Ebrahimi# func_mktempdir [BASENAME] 929*22dc650dSSadaf Ebrahimi# ------------------------- 930*22dc650dSSadaf Ebrahimi# Make a temporary directory that won't clash with other running 931*22dc650dSSadaf Ebrahimi# libtool processes, and avoids race conditions if possible. If 932*22dc650dSSadaf Ebrahimi# given, BASENAME is the basename for that directory. 933*22dc650dSSadaf Ebrahimifunc_mktempdir () 934*22dc650dSSadaf Ebrahimi{ 935*22dc650dSSadaf Ebrahimi $debug_cmd 936*22dc650dSSadaf Ebrahimi 937*22dc650dSSadaf Ebrahimi _G_template=${TMPDIR-/tmp}/${1-$progname} 938*22dc650dSSadaf Ebrahimi 939*22dc650dSSadaf Ebrahimi if test : = "$opt_dry_run"; then 940*22dc650dSSadaf Ebrahimi # Return a directory name, but don't create it in dry-run mode 941*22dc650dSSadaf Ebrahimi _G_tmpdir=$_G_template-$$ 942*22dc650dSSadaf Ebrahimi else 943*22dc650dSSadaf Ebrahimi 944*22dc650dSSadaf Ebrahimi # If mktemp works, use that first and foremost 945*22dc650dSSadaf Ebrahimi _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` 946*22dc650dSSadaf Ebrahimi 947*22dc650dSSadaf Ebrahimi if test ! -d "$_G_tmpdir"; then 948*22dc650dSSadaf Ebrahimi # Failing that, at least try and use $RANDOM to avoid a race 949*22dc650dSSadaf Ebrahimi _G_tmpdir=$_G_template-${RANDOM-0}$$ 950*22dc650dSSadaf Ebrahimi 951*22dc650dSSadaf Ebrahimi func_mktempdir_umask=`umask` 952*22dc650dSSadaf Ebrahimi umask 0077 953*22dc650dSSadaf Ebrahimi $MKDIR "$_G_tmpdir" 954*22dc650dSSadaf Ebrahimi umask $func_mktempdir_umask 955*22dc650dSSadaf Ebrahimi fi 956*22dc650dSSadaf Ebrahimi 957*22dc650dSSadaf Ebrahimi # If we're not in dry-run mode, bomb out on failure 958*22dc650dSSadaf Ebrahimi test -d "$_G_tmpdir" || \ 959*22dc650dSSadaf Ebrahimi func_fatal_error "cannot create temporary directory '$_G_tmpdir'" 960*22dc650dSSadaf Ebrahimi fi 961*22dc650dSSadaf Ebrahimi 962*22dc650dSSadaf Ebrahimi $ECHO "$_G_tmpdir" 963*22dc650dSSadaf Ebrahimi} 964*22dc650dSSadaf Ebrahimi 965*22dc650dSSadaf Ebrahimi 966*22dc650dSSadaf Ebrahimi# func_normal_abspath PATH 967*22dc650dSSadaf Ebrahimi# ------------------------ 968*22dc650dSSadaf Ebrahimi# Remove doubled-up and trailing slashes, "." path components, 969*22dc650dSSadaf Ebrahimi# and cancel out any ".." path components in PATH after making 970*22dc650dSSadaf Ebrahimi# it an absolute path. 971*22dc650dSSadaf Ebrahimifunc_normal_abspath () 972*22dc650dSSadaf Ebrahimi{ 973*22dc650dSSadaf Ebrahimi $debug_cmd 974*22dc650dSSadaf Ebrahimi 975*22dc650dSSadaf Ebrahimi # These SED scripts presuppose an absolute path with a trailing slash. 976*22dc650dSSadaf Ebrahimi _G_pathcar='s|^/\([^/]*\).*$|\1|' 977*22dc650dSSadaf Ebrahimi _G_pathcdr='s|^/[^/]*||' 978*22dc650dSSadaf Ebrahimi _G_removedotparts=':dotsl 979*22dc650dSSadaf Ebrahimi s|/\./|/|g 980*22dc650dSSadaf Ebrahimi t dotsl 981*22dc650dSSadaf Ebrahimi s|/\.$|/|' 982*22dc650dSSadaf Ebrahimi _G_collapseslashes='s|/\{1,\}|/|g' 983*22dc650dSSadaf Ebrahimi _G_finalslash='s|/*$|/|' 984*22dc650dSSadaf Ebrahimi 985*22dc650dSSadaf Ebrahimi # Start from root dir and reassemble the path. 986*22dc650dSSadaf Ebrahimi func_normal_abspath_result= 987*22dc650dSSadaf Ebrahimi func_normal_abspath_tpath=$1 988*22dc650dSSadaf Ebrahimi func_normal_abspath_altnamespace= 989*22dc650dSSadaf Ebrahimi case $func_normal_abspath_tpath in 990*22dc650dSSadaf Ebrahimi "") 991*22dc650dSSadaf Ebrahimi # Empty path, that just means $cwd. 992*22dc650dSSadaf Ebrahimi func_stripname '' '/' "`pwd`" 993*22dc650dSSadaf Ebrahimi func_normal_abspath_result=$func_stripname_result 994*22dc650dSSadaf Ebrahimi return 995*22dc650dSSadaf Ebrahimi ;; 996*22dc650dSSadaf Ebrahimi # The next three entries are used to spot a run of precisely 997*22dc650dSSadaf Ebrahimi # two leading slashes without using negated character classes; 998*22dc650dSSadaf Ebrahimi # we take advantage of case's first-match behaviour. 999*22dc650dSSadaf Ebrahimi ///*) 1000*22dc650dSSadaf Ebrahimi # Unusual form of absolute path, do nothing. 1001*22dc650dSSadaf Ebrahimi ;; 1002*22dc650dSSadaf Ebrahimi //*) 1003*22dc650dSSadaf Ebrahimi # Not necessarily an ordinary path; POSIX reserves leading '//' 1004*22dc650dSSadaf Ebrahimi # and for example Cygwin uses it to access remote file shares 1005*22dc650dSSadaf Ebrahimi # over CIFS/SMB, so we conserve a leading double slash if found. 1006*22dc650dSSadaf Ebrahimi func_normal_abspath_altnamespace=/ 1007*22dc650dSSadaf Ebrahimi ;; 1008*22dc650dSSadaf Ebrahimi /*) 1009*22dc650dSSadaf Ebrahimi # Absolute path, do nothing. 1010*22dc650dSSadaf Ebrahimi ;; 1011*22dc650dSSadaf Ebrahimi *) 1012*22dc650dSSadaf Ebrahimi # Relative path, prepend $cwd. 1013*22dc650dSSadaf Ebrahimi func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 1014*22dc650dSSadaf Ebrahimi ;; 1015*22dc650dSSadaf Ebrahimi esac 1016*22dc650dSSadaf Ebrahimi 1017*22dc650dSSadaf Ebrahimi # Cancel out all the simple stuff to save iterations. We also want 1018*22dc650dSSadaf Ebrahimi # the path to end with a slash for ease of parsing, so make sure 1019*22dc650dSSadaf Ebrahimi # there is one (and only one) here. 1020*22dc650dSSadaf Ebrahimi func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 1021*22dc650dSSadaf Ebrahimi -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` 1022*22dc650dSSadaf Ebrahimi while :; do 1023*22dc650dSSadaf Ebrahimi # Processed it all yet? 1024*22dc650dSSadaf Ebrahimi if test / = "$func_normal_abspath_tpath"; then 1025*22dc650dSSadaf Ebrahimi # If we ascended to the root using ".." the result may be empty now. 1026*22dc650dSSadaf Ebrahimi if test -z "$func_normal_abspath_result"; then 1027*22dc650dSSadaf Ebrahimi func_normal_abspath_result=/ 1028*22dc650dSSadaf Ebrahimi fi 1029*22dc650dSSadaf Ebrahimi break 1030*22dc650dSSadaf Ebrahimi fi 1031*22dc650dSSadaf Ebrahimi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 1032*22dc650dSSadaf Ebrahimi -e "$_G_pathcar"` 1033*22dc650dSSadaf Ebrahimi func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 1034*22dc650dSSadaf Ebrahimi -e "$_G_pathcdr"` 1035*22dc650dSSadaf Ebrahimi # Figure out what to do with it 1036*22dc650dSSadaf Ebrahimi case $func_normal_abspath_tcomponent in 1037*22dc650dSSadaf Ebrahimi "") 1038*22dc650dSSadaf Ebrahimi # Trailing empty path component, ignore it. 1039*22dc650dSSadaf Ebrahimi ;; 1040*22dc650dSSadaf Ebrahimi ..) 1041*22dc650dSSadaf Ebrahimi # Parent dir; strip last assembled component from result. 1042*22dc650dSSadaf Ebrahimi func_dirname "$func_normal_abspath_result" 1043*22dc650dSSadaf Ebrahimi func_normal_abspath_result=$func_dirname_result 1044*22dc650dSSadaf Ebrahimi ;; 1045*22dc650dSSadaf Ebrahimi *) 1046*22dc650dSSadaf Ebrahimi # Actual path component, append it. 1047*22dc650dSSadaf Ebrahimi func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" 1048*22dc650dSSadaf Ebrahimi ;; 1049*22dc650dSSadaf Ebrahimi esac 1050*22dc650dSSadaf Ebrahimi done 1051*22dc650dSSadaf Ebrahimi # Restore leading double-slash if one was found on entry. 1052*22dc650dSSadaf Ebrahimi func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 1053*22dc650dSSadaf Ebrahimi} 1054*22dc650dSSadaf Ebrahimi 1055*22dc650dSSadaf Ebrahimi 1056*22dc650dSSadaf Ebrahimi# func_notquiet ARG... 1057*22dc650dSSadaf Ebrahimi# -------------------- 1058*22dc650dSSadaf Ebrahimi# Echo program name prefixed message only when not in quiet mode. 1059*22dc650dSSadaf Ebrahimifunc_notquiet () 1060*22dc650dSSadaf Ebrahimi{ 1061*22dc650dSSadaf Ebrahimi $debug_cmd 1062*22dc650dSSadaf Ebrahimi 1063*22dc650dSSadaf Ebrahimi $opt_quiet || func_echo ${1+"$@"} 1064*22dc650dSSadaf Ebrahimi 1065*22dc650dSSadaf Ebrahimi # A bug in bash halts the script if the last line of a function 1066*22dc650dSSadaf Ebrahimi # fails when set -e is in force, so we need another command to 1067*22dc650dSSadaf Ebrahimi # work around that: 1068*22dc650dSSadaf Ebrahimi : 1069*22dc650dSSadaf Ebrahimi} 1070*22dc650dSSadaf Ebrahimi 1071*22dc650dSSadaf Ebrahimi 1072*22dc650dSSadaf Ebrahimi# func_relative_path SRCDIR DSTDIR 1073*22dc650dSSadaf Ebrahimi# -------------------------------- 1074*22dc650dSSadaf Ebrahimi# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. 1075*22dc650dSSadaf Ebrahimifunc_relative_path () 1076*22dc650dSSadaf Ebrahimi{ 1077*22dc650dSSadaf Ebrahimi $debug_cmd 1078*22dc650dSSadaf Ebrahimi 1079*22dc650dSSadaf Ebrahimi func_relative_path_result= 1080*22dc650dSSadaf Ebrahimi func_normal_abspath "$1" 1081*22dc650dSSadaf Ebrahimi func_relative_path_tlibdir=$func_normal_abspath_result 1082*22dc650dSSadaf Ebrahimi func_normal_abspath "$2" 1083*22dc650dSSadaf Ebrahimi func_relative_path_tbindir=$func_normal_abspath_result 1084*22dc650dSSadaf Ebrahimi 1085*22dc650dSSadaf Ebrahimi # Ascend the tree starting from libdir 1086*22dc650dSSadaf Ebrahimi while :; do 1087*22dc650dSSadaf Ebrahimi # check if we have found a prefix of bindir 1088*22dc650dSSadaf Ebrahimi case $func_relative_path_tbindir in 1089*22dc650dSSadaf Ebrahimi $func_relative_path_tlibdir) 1090*22dc650dSSadaf Ebrahimi # found an exact match 1091*22dc650dSSadaf Ebrahimi func_relative_path_tcancelled= 1092*22dc650dSSadaf Ebrahimi break 1093*22dc650dSSadaf Ebrahimi ;; 1094*22dc650dSSadaf Ebrahimi $func_relative_path_tlibdir*) 1095*22dc650dSSadaf Ebrahimi # found a matching prefix 1096*22dc650dSSadaf Ebrahimi func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 1097*22dc650dSSadaf Ebrahimi func_relative_path_tcancelled=$func_stripname_result 1098*22dc650dSSadaf Ebrahimi if test -z "$func_relative_path_result"; then 1099*22dc650dSSadaf Ebrahimi func_relative_path_result=. 1100*22dc650dSSadaf Ebrahimi fi 1101*22dc650dSSadaf Ebrahimi break 1102*22dc650dSSadaf Ebrahimi ;; 1103*22dc650dSSadaf Ebrahimi *) 1104*22dc650dSSadaf Ebrahimi func_dirname $func_relative_path_tlibdir 1105*22dc650dSSadaf Ebrahimi func_relative_path_tlibdir=$func_dirname_result 1106*22dc650dSSadaf Ebrahimi if test -z "$func_relative_path_tlibdir"; then 1107*22dc650dSSadaf Ebrahimi # Have to descend all the way to the root! 1108*22dc650dSSadaf Ebrahimi func_relative_path_result=../$func_relative_path_result 1109*22dc650dSSadaf Ebrahimi func_relative_path_tcancelled=$func_relative_path_tbindir 1110*22dc650dSSadaf Ebrahimi break 1111*22dc650dSSadaf Ebrahimi fi 1112*22dc650dSSadaf Ebrahimi func_relative_path_result=../$func_relative_path_result 1113*22dc650dSSadaf Ebrahimi ;; 1114*22dc650dSSadaf Ebrahimi esac 1115*22dc650dSSadaf Ebrahimi done 1116*22dc650dSSadaf Ebrahimi 1117*22dc650dSSadaf Ebrahimi # Now calculate path; take care to avoid doubling-up slashes. 1118*22dc650dSSadaf Ebrahimi func_stripname '' '/' "$func_relative_path_result" 1119*22dc650dSSadaf Ebrahimi func_relative_path_result=$func_stripname_result 1120*22dc650dSSadaf Ebrahimi func_stripname '/' '/' "$func_relative_path_tcancelled" 1121*22dc650dSSadaf Ebrahimi if test -n "$func_stripname_result"; then 1122*22dc650dSSadaf Ebrahimi func_append func_relative_path_result "/$func_stripname_result" 1123*22dc650dSSadaf Ebrahimi fi 1124*22dc650dSSadaf Ebrahimi 1125*22dc650dSSadaf Ebrahimi # Normalisation. If bindir is libdir, return '.' else relative path. 1126*22dc650dSSadaf Ebrahimi if test -n "$func_relative_path_result"; then 1127*22dc650dSSadaf Ebrahimi func_stripname './' '' "$func_relative_path_result" 1128*22dc650dSSadaf Ebrahimi func_relative_path_result=$func_stripname_result 1129*22dc650dSSadaf Ebrahimi fi 1130*22dc650dSSadaf Ebrahimi 1131*22dc650dSSadaf Ebrahimi test -n "$func_relative_path_result" || func_relative_path_result=. 1132*22dc650dSSadaf Ebrahimi 1133*22dc650dSSadaf Ebrahimi : 1134*22dc650dSSadaf Ebrahimi} 1135*22dc650dSSadaf Ebrahimi 1136*22dc650dSSadaf Ebrahimi 1137*22dc650dSSadaf Ebrahimi# func_quote_portable EVAL ARG 1138*22dc650dSSadaf Ebrahimi# ---------------------------- 1139*22dc650dSSadaf Ebrahimi# Internal function to portably implement func_quote_arg. Note that we still 1140*22dc650dSSadaf Ebrahimi# keep attention to performance here so we as much as possible try to avoid 1141*22dc650dSSadaf Ebrahimi# calling sed binary (so far O(N) complexity as long as func_append is O(1)). 1142*22dc650dSSadaf Ebrahimifunc_quote_portable () 1143*22dc650dSSadaf Ebrahimi{ 1144*22dc650dSSadaf Ebrahimi $debug_cmd 1145*22dc650dSSadaf Ebrahimi 1146*22dc650dSSadaf Ebrahimi $require_check_ifs_backslash 1147*22dc650dSSadaf Ebrahimi 1148*22dc650dSSadaf Ebrahimi func_quote_portable_result=$2 1149*22dc650dSSadaf Ebrahimi 1150*22dc650dSSadaf Ebrahimi # one-time-loop (easy break) 1151*22dc650dSSadaf Ebrahimi while true 1152*22dc650dSSadaf Ebrahimi do 1153*22dc650dSSadaf Ebrahimi if $1; then 1154*22dc650dSSadaf Ebrahimi func_quote_portable_result=`$ECHO "$2" | $SED \ 1155*22dc650dSSadaf Ebrahimi -e "$sed_double_quote_subst" -e "$sed_double_backslash"` 1156*22dc650dSSadaf Ebrahimi break 1157*22dc650dSSadaf Ebrahimi fi 1158*22dc650dSSadaf Ebrahimi 1159*22dc650dSSadaf Ebrahimi # Quote for eval. 1160*22dc650dSSadaf Ebrahimi case $func_quote_portable_result in 1161*22dc650dSSadaf Ebrahimi *[\\\`\"\$]*) 1162*22dc650dSSadaf Ebrahimi # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string 1163*22dc650dSSadaf Ebrahimi # contains the shell wildcard characters. 1164*22dc650dSSadaf Ebrahimi case $check_ifs_backshlash_broken$func_quote_portable_result in 1165*22dc650dSSadaf Ebrahimi :*|*[\[\*\?]*) 1166*22dc650dSSadaf Ebrahimi func_quote_portable_result=`$ECHO "$func_quote_portable_result" \ 1167*22dc650dSSadaf Ebrahimi | $SED "$sed_quote_subst"` 1168*22dc650dSSadaf Ebrahimi break 1169*22dc650dSSadaf Ebrahimi ;; 1170*22dc650dSSadaf Ebrahimi esac 1171*22dc650dSSadaf Ebrahimi 1172*22dc650dSSadaf Ebrahimi func_quote_portable_old_IFS=$IFS 1173*22dc650dSSadaf Ebrahimi for _G_char in '\' '`' '"' '$' 1174*22dc650dSSadaf Ebrahimi do 1175*22dc650dSSadaf Ebrahimi # STATE($1) PREV($2) SEPARATOR($3) 1176*22dc650dSSadaf Ebrahimi set start "" "" 1177*22dc650dSSadaf Ebrahimi func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy 1178*22dc650dSSadaf Ebrahimi IFS=$_G_char 1179*22dc650dSSadaf Ebrahimi for _G_part in $func_quote_portable_result 1180*22dc650dSSadaf Ebrahimi do 1181*22dc650dSSadaf Ebrahimi case $1 in 1182*22dc650dSSadaf Ebrahimi quote) 1183*22dc650dSSadaf Ebrahimi func_append func_quote_portable_result "$3$2" 1184*22dc650dSSadaf Ebrahimi set quote "$_G_part" "\\$_G_char" 1185*22dc650dSSadaf Ebrahimi ;; 1186*22dc650dSSadaf Ebrahimi start) 1187*22dc650dSSadaf Ebrahimi set first "" "" 1188*22dc650dSSadaf Ebrahimi func_quote_portable_result= 1189*22dc650dSSadaf Ebrahimi ;; 1190*22dc650dSSadaf Ebrahimi first) 1191*22dc650dSSadaf Ebrahimi set quote "$_G_part" "" 1192*22dc650dSSadaf Ebrahimi ;; 1193*22dc650dSSadaf Ebrahimi esac 1194*22dc650dSSadaf Ebrahimi done 1195*22dc650dSSadaf Ebrahimi done 1196*22dc650dSSadaf Ebrahimi IFS=$func_quote_portable_old_IFS 1197*22dc650dSSadaf Ebrahimi ;; 1198*22dc650dSSadaf Ebrahimi *) ;; 1199*22dc650dSSadaf Ebrahimi esac 1200*22dc650dSSadaf Ebrahimi break 1201*22dc650dSSadaf Ebrahimi done 1202*22dc650dSSadaf Ebrahimi 1203*22dc650dSSadaf Ebrahimi func_quote_portable_unquoted_result=$func_quote_portable_result 1204*22dc650dSSadaf Ebrahimi case $func_quote_portable_result in 1205*22dc650dSSadaf Ebrahimi # double-quote args containing shell metacharacters to delay 1206*22dc650dSSadaf Ebrahimi # word splitting, command substitution and variable expansion 1207*22dc650dSSadaf Ebrahimi # for a subsequent eval. 1208*22dc650dSSadaf Ebrahimi # many bourne shells cannot handle close brackets correctly 1209*22dc650dSSadaf Ebrahimi # in scan sets, so we specify it separately. 1210*22dc650dSSadaf Ebrahimi *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 1211*22dc650dSSadaf Ebrahimi func_quote_portable_result=\"$func_quote_portable_result\" 1212*22dc650dSSadaf Ebrahimi ;; 1213*22dc650dSSadaf Ebrahimi esac 1214*22dc650dSSadaf Ebrahimi} 1215*22dc650dSSadaf Ebrahimi 1216*22dc650dSSadaf Ebrahimi 1217*22dc650dSSadaf Ebrahimi# func_quotefast_eval ARG 1218*22dc650dSSadaf Ebrahimi# ----------------------- 1219*22dc650dSSadaf Ebrahimi# Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG', 1220*22dc650dSSadaf Ebrahimi# but optimized for speed. Result is stored in $func_quotefast_eval. 1221*22dc650dSSadaf Ebrahimiif test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then 1222*22dc650dSSadaf Ebrahimi printf -v _GL_test_printf_tilde %q '~' 1223*22dc650dSSadaf Ebrahimi if test '\~' = "$_GL_test_printf_tilde"; then 1224*22dc650dSSadaf Ebrahimi func_quotefast_eval () 1225*22dc650dSSadaf Ebrahimi { 1226*22dc650dSSadaf Ebrahimi printf -v func_quotefast_eval_result %q "$1" 1227*22dc650dSSadaf Ebrahimi } 1228*22dc650dSSadaf Ebrahimi else 1229*22dc650dSSadaf Ebrahimi # Broken older Bash implementations. Make those faster too if possible. 1230*22dc650dSSadaf Ebrahimi func_quotefast_eval () 1231*22dc650dSSadaf Ebrahimi { 1232*22dc650dSSadaf Ebrahimi case $1 in 1233*22dc650dSSadaf Ebrahimi '~'*) 1234*22dc650dSSadaf Ebrahimi func_quote_portable false "$1" 1235*22dc650dSSadaf Ebrahimi func_quotefast_eval_result=$func_quote_portable_result 1236*22dc650dSSadaf Ebrahimi ;; 1237*22dc650dSSadaf Ebrahimi *) 1238*22dc650dSSadaf Ebrahimi printf -v func_quotefast_eval_result %q "$1" 1239*22dc650dSSadaf Ebrahimi ;; 1240*22dc650dSSadaf Ebrahimi esac 1241*22dc650dSSadaf Ebrahimi } 1242*22dc650dSSadaf Ebrahimi fi 1243*22dc650dSSadaf Ebrahimielse 1244*22dc650dSSadaf Ebrahimi func_quotefast_eval () 1245*22dc650dSSadaf Ebrahimi { 1246*22dc650dSSadaf Ebrahimi func_quote_portable false "$1" 1247*22dc650dSSadaf Ebrahimi func_quotefast_eval_result=$func_quote_portable_result 1248*22dc650dSSadaf Ebrahimi } 1249*22dc650dSSadaf Ebrahimifi 1250*22dc650dSSadaf Ebrahimi 1251*22dc650dSSadaf Ebrahimi 1252*22dc650dSSadaf Ebrahimi# func_quote_arg MODEs ARG 1253*22dc650dSSadaf Ebrahimi# ------------------------ 1254*22dc650dSSadaf Ebrahimi# Quote one ARG to be evaled later. MODEs argument may contain zero or more 1255*22dc650dSSadaf Ebrahimi# specifiers listed below separated by ',' character. This function returns two 1256*22dc650dSSadaf Ebrahimi# values: 1257*22dc650dSSadaf Ebrahimi# i) func_quote_arg_result 1258*22dc650dSSadaf Ebrahimi# double-quoted (when needed), suitable for a subsequent eval 1259*22dc650dSSadaf Ebrahimi# ii) func_quote_arg_unquoted_result 1260*22dc650dSSadaf Ebrahimi# has all characters that are still active within double 1261*22dc650dSSadaf Ebrahimi# quotes backslashified. Available only if 'unquoted' is specified. 1262*22dc650dSSadaf Ebrahimi# 1263*22dc650dSSadaf Ebrahimi# Available modes: 1264*22dc650dSSadaf Ebrahimi# ---------------- 1265*22dc650dSSadaf Ebrahimi# 'eval' (default) 1266*22dc650dSSadaf Ebrahimi# - escape shell special characters 1267*22dc650dSSadaf Ebrahimi# 'expand' 1268*22dc650dSSadaf Ebrahimi# - the same as 'eval'; but do not quote variable references 1269*22dc650dSSadaf Ebrahimi# 'pretty' 1270*22dc650dSSadaf Ebrahimi# - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might 1271*22dc650dSSadaf Ebrahimi# be used later in func_quote to get output like: 'echo "a b"' instead 1272*22dc650dSSadaf Ebrahimi# of 'echo a\ b'. This is slower than default on some shells. 1273*22dc650dSSadaf Ebrahimi# 'unquoted' 1274*22dc650dSSadaf Ebrahimi# - produce also $func_quote_arg_unquoted_result which does not contain 1275*22dc650dSSadaf Ebrahimi# wrapping double-quotes. 1276*22dc650dSSadaf Ebrahimi# 1277*22dc650dSSadaf Ebrahimi# Examples for 'func_quote_arg pretty,unquoted string': 1278*22dc650dSSadaf Ebrahimi# 1279*22dc650dSSadaf Ebrahimi# string | *_result | *_unquoted_result 1280*22dc650dSSadaf Ebrahimi# ------------+-----------------------+------------------- 1281*22dc650dSSadaf Ebrahimi# " | \" | \" 1282*22dc650dSSadaf Ebrahimi# a b | "a b" | a b 1283*22dc650dSSadaf Ebrahimi# "a b" | "\"a b\"" | \"a b\" 1284*22dc650dSSadaf Ebrahimi# * | "*" | * 1285*22dc650dSSadaf Ebrahimi# z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\" 1286*22dc650dSSadaf Ebrahimi# 1287*22dc650dSSadaf Ebrahimi# Examples for 'func_quote_arg pretty,unquoted,expand string': 1288*22dc650dSSadaf Ebrahimi# 1289*22dc650dSSadaf Ebrahimi# string | *_result | *_unquoted_result 1290*22dc650dSSadaf Ebrahimi# --------------+---------------------+-------------------- 1291*22dc650dSSadaf Ebrahimi# z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\" 1292*22dc650dSSadaf Ebrahimifunc_quote_arg () 1293*22dc650dSSadaf Ebrahimi{ 1294*22dc650dSSadaf Ebrahimi _G_quote_expand=false 1295*22dc650dSSadaf Ebrahimi case ,$1, in 1296*22dc650dSSadaf Ebrahimi *,expand,*) 1297*22dc650dSSadaf Ebrahimi _G_quote_expand=: 1298*22dc650dSSadaf Ebrahimi ;; 1299*22dc650dSSadaf Ebrahimi esac 1300*22dc650dSSadaf Ebrahimi 1301*22dc650dSSadaf Ebrahimi case ,$1, in 1302*22dc650dSSadaf Ebrahimi *,pretty,*|*,expand,*|*,unquoted,*) 1303*22dc650dSSadaf Ebrahimi func_quote_portable $_G_quote_expand "$2" 1304*22dc650dSSadaf Ebrahimi func_quote_arg_result=$func_quote_portable_result 1305*22dc650dSSadaf Ebrahimi func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result 1306*22dc650dSSadaf Ebrahimi ;; 1307*22dc650dSSadaf Ebrahimi *) 1308*22dc650dSSadaf Ebrahimi # Faster quote-for-eval for some shells. 1309*22dc650dSSadaf Ebrahimi func_quotefast_eval "$2" 1310*22dc650dSSadaf Ebrahimi func_quote_arg_result=$func_quotefast_eval_result 1311*22dc650dSSadaf Ebrahimi ;; 1312*22dc650dSSadaf Ebrahimi esac 1313*22dc650dSSadaf Ebrahimi} 1314*22dc650dSSadaf Ebrahimi 1315*22dc650dSSadaf Ebrahimi 1316*22dc650dSSadaf Ebrahimi# func_quote MODEs ARGs... 1317*22dc650dSSadaf Ebrahimi# ------------------------ 1318*22dc650dSSadaf Ebrahimi# Quote all ARGs to be evaled later and join them into single command. See 1319*22dc650dSSadaf Ebrahimi# func_quote_arg's description for more info. 1320*22dc650dSSadaf Ebrahimifunc_quote () 1321*22dc650dSSadaf Ebrahimi{ 1322*22dc650dSSadaf Ebrahimi $debug_cmd 1323*22dc650dSSadaf Ebrahimi _G_func_quote_mode=$1 ; shift 1324*22dc650dSSadaf Ebrahimi func_quote_result= 1325*22dc650dSSadaf Ebrahimi while test 0 -lt $#; do 1326*22dc650dSSadaf Ebrahimi func_quote_arg "$_G_func_quote_mode" "$1" 1327*22dc650dSSadaf Ebrahimi if test -n "$func_quote_result"; then 1328*22dc650dSSadaf Ebrahimi func_append func_quote_result " $func_quote_arg_result" 1329*22dc650dSSadaf Ebrahimi else 1330*22dc650dSSadaf Ebrahimi func_append func_quote_result "$func_quote_arg_result" 1331*22dc650dSSadaf Ebrahimi fi 1332*22dc650dSSadaf Ebrahimi shift 1333*22dc650dSSadaf Ebrahimi done 1334*22dc650dSSadaf Ebrahimi} 1335*22dc650dSSadaf Ebrahimi 1336*22dc650dSSadaf Ebrahimi 1337*22dc650dSSadaf Ebrahimi# func_stripname PREFIX SUFFIX NAME 1338*22dc650dSSadaf Ebrahimi# --------------------------------- 1339*22dc650dSSadaf Ebrahimi# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. 1340*22dc650dSSadaf Ebrahimi# PREFIX and SUFFIX must not contain globbing or regex special 1341*22dc650dSSadaf Ebrahimi# characters, hashes, percent signs, but SUFFIX may contain a leading 1342*22dc650dSSadaf Ebrahimi# dot (in which case that matches only a dot). 1343*22dc650dSSadaf Ebrahimiif test yes = "$_G_HAVE_XSI_OPS"; then 1344*22dc650dSSadaf Ebrahimi eval 'func_stripname () 1345*22dc650dSSadaf Ebrahimi { 1346*22dc650dSSadaf Ebrahimi $debug_cmd 1347*22dc650dSSadaf Ebrahimi 1348*22dc650dSSadaf Ebrahimi # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are 1349*22dc650dSSadaf Ebrahimi # positional parameters, so assign one to ordinary variable first. 1350*22dc650dSSadaf Ebrahimi func_stripname_result=$3 1351*22dc650dSSadaf Ebrahimi func_stripname_result=${func_stripname_result#"$1"} 1352*22dc650dSSadaf Ebrahimi func_stripname_result=${func_stripname_result%"$2"} 1353*22dc650dSSadaf Ebrahimi }' 1354*22dc650dSSadaf Ebrahimielse 1355*22dc650dSSadaf Ebrahimi func_stripname () 1356*22dc650dSSadaf Ebrahimi { 1357*22dc650dSSadaf Ebrahimi $debug_cmd 1358*22dc650dSSadaf Ebrahimi 1359*22dc650dSSadaf Ebrahimi case $2 in 1360*22dc650dSSadaf Ebrahimi .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; 1361*22dc650dSSadaf Ebrahimi *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; 1362*22dc650dSSadaf Ebrahimi esac 1363*22dc650dSSadaf Ebrahimi } 1364*22dc650dSSadaf Ebrahimifi 1365*22dc650dSSadaf Ebrahimi 1366*22dc650dSSadaf Ebrahimi 1367*22dc650dSSadaf Ebrahimi# func_show_eval CMD [FAIL_EXP] 1368*22dc650dSSadaf Ebrahimi# ----------------------------- 1369*22dc650dSSadaf Ebrahimi# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 1370*22dc650dSSadaf Ebrahimi# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 1371*22dc650dSSadaf Ebrahimi# is given, then evaluate it. 1372*22dc650dSSadaf Ebrahimifunc_show_eval () 1373*22dc650dSSadaf Ebrahimi{ 1374*22dc650dSSadaf Ebrahimi $debug_cmd 1375*22dc650dSSadaf Ebrahimi 1376*22dc650dSSadaf Ebrahimi _G_cmd=$1 1377*22dc650dSSadaf Ebrahimi _G_fail_exp=${2-':'} 1378*22dc650dSSadaf Ebrahimi 1379*22dc650dSSadaf Ebrahimi func_quote_arg pretty,expand "$_G_cmd" 1380*22dc650dSSadaf Ebrahimi eval "func_notquiet $func_quote_arg_result" 1381*22dc650dSSadaf Ebrahimi 1382*22dc650dSSadaf Ebrahimi $opt_dry_run || { 1383*22dc650dSSadaf Ebrahimi eval "$_G_cmd" 1384*22dc650dSSadaf Ebrahimi _G_status=$? 1385*22dc650dSSadaf Ebrahimi if test 0 -ne "$_G_status"; then 1386*22dc650dSSadaf Ebrahimi eval "(exit $_G_status); $_G_fail_exp" 1387*22dc650dSSadaf Ebrahimi fi 1388*22dc650dSSadaf Ebrahimi } 1389*22dc650dSSadaf Ebrahimi} 1390*22dc650dSSadaf Ebrahimi 1391*22dc650dSSadaf Ebrahimi 1392*22dc650dSSadaf Ebrahimi# func_show_eval_locale CMD [FAIL_EXP] 1393*22dc650dSSadaf Ebrahimi# ------------------------------------ 1394*22dc650dSSadaf Ebrahimi# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 1395*22dc650dSSadaf Ebrahimi# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 1396*22dc650dSSadaf Ebrahimi# is given, then evaluate it. Use the saved locale for evaluation. 1397*22dc650dSSadaf Ebrahimifunc_show_eval_locale () 1398*22dc650dSSadaf Ebrahimi{ 1399*22dc650dSSadaf Ebrahimi $debug_cmd 1400*22dc650dSSadaf Ebrahimi 1401*22dc650dSSadaf Ebrahimi _G_cmd=$1 1402*22dc650dSSadaf Ebrahimi _G_fail_exp=${2-':'} 1403*22dc650dSSadaf Ebrahimi 1404*22dc650dSSadaf Ebrahimi $opt_quiet || { 1405*22dc650dSSadaf Ebrahimi func_quote_arg expand,pretty "$_G_cmd" 1406*22dc650dSSadaf Ebrahimi eval "func_echo $func_quote_arg_result" 1407*22dc650dSSadaf Ebrahimi } 1408*22dc650dSSadaf Ebrahimi 1409*22dc650dSSadaf Ebrahimi $opt_dry_run || { 1410*22dc650dSSadaf Ebrahimi eval "$_G_user_locale 1411*22dc650dSSadaf Ebrahimi $_G_cmd" 1412*22dc650dSSadaf Ebrahimi _G_status=$? 1413*22dc650dSSadaf Ebrahimi eval "$_G_safe_locale" 1414*22dc650dSSadaf Ebrahimi if test 0 -ne "$_G_status"; then 1415*22dc650dSSadaf Ebrahimi eval "(exit $_G_status); $_G_fail_exp" 1416*22dc650dSSadaf Ebrahimi fi 1417*22dc650dSSadaf Ebrahimi } 1418*22dc650dSSadaf Ebrahimi} 1419*22dc650dSSadaf Ebrahimi 1420*22dc650dSSadaf Ebrahimi 1421*22dc650dSSadaf Ebrahimi# func_tr_sh 1422*22dc650dSSadaf Ebrahimi# ---------- 1423*22dc650dSSadaf Ebrahimi# Turn $1 into a string suitable for a shell variable name. 1424*22dc650dSSadaf Ebrahimi# Result is stored in $func_tr_sh_result. All characters 1425*22dc650dSSadaf Ebrahimi# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 1426*22dc650dSSadaf Ebrahimi# if $1 begins with a digit, a '_' is prepended as well. 1427*22dc650dSSadaf Ebrahimifunc_tr_sh () 1428*22dc650dSSadaf Ebrahimi{ 1429*22dc650dSSadaf Ebrahimi $debug_cmd 1430*22dc650dSSadaf Ebrahimi 1431*22dc650dSSadaf Ebrahimi case $1 in 1432*22dc650dSSadaf Ebrahimi [0-9]* | *[!a-zA-Z0-9_]*) 1433*22dc650dSSadaf Ebrahimi func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` 1434*22dc650dSSadaf Ebrahimi ;; 1435*22dc650dSSadaf Ebrahimi * ) 1436*22dc650dSSadaf Ebrahimi func_tr_sh_result=$1 1437*22dc650dSSadaf Ebrahimi ;; 1438*22dc650dSSadaf Ebrahimi esac 1439*22dc650dSSadaf Ebrahimi} 1440*22dc650dSSadaf Ebrahimi 1441*22dc650dSSadaf Ebrahimi 1442*22dc650dSSadaf Ebrahimi# func_verbose ARG... 1443*22dc650dSSadaf Ebrahimi# ------------------- 1444*22dc650dSSadaf Ebrahimi# Echo program name prefixed message in verbose mode only. 1445*22dc650dSSadaf Ebrahimifunc_verbose () 1446*22dc650dSSadaf Ebrahimi{ 1447*22dc650dSSadaf Ebrahimi $debug_cmd 1448*22dc650dSSadaf Ebrahimi 1449*22dc650dSSadaf Ebrahimi $opt_verbose && func_echo "$*" 1450*22dc650dSSadaf Ebrahimi 1451*22dc650dSSadaf Ebrahimi : 1452*22dc650dSSadaf Ebrahimi} 1453*22dc650dSSadaf Ebrahimi 1454*22dc650dSSadaf Ebrahimi 1455*22dc650dSSadaf Ebrahimi# func_warn_and_continue ARG... 1456*22dc650dSSadaf Ebrahimi# ----------------------------- 1457*22dc650dSSadaf Ebrahimi# Echo program name prefixed warning message to standard error. 1458*22dc650dSSadaf Ebrahimifunc_warn_and_continue () 1459*22dc650dSSadaf Ebrahimi{ 1460*22dc650dSSadaf Ebrahimi $debug_cmd 1461*22dc650dSSadaf Ebrahimi 1462*22dc650dSSadaf Ebrahimi $require_term_colors 1463*22dc650dSSadaf Ebrahimi 1464*22dc650dSSadaf Ebrahimi func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 1465*22dc650dSSadaf Ebrahimi} 1466*22dc650dSSadaf Ebrahimi 1467*22dc650dSSadaf Ebrahimi 1468*22dc650dSSadaf Ebrahimi# func_warning CATEGORY ARG... 1469*22dc650dSSadaf Ebrahimi# ---------------------------- 1470*22dc650dSSadaf Ebrahimi# Echo program name prefixed warning message to standard error. Warning 1471*22dc650dSSadaf Ebrahimi# messages can be filtered according to CATEGORY, where this function 1472*22dc650dSSadaf Ebrahimi# elides messages where CATEGORY is not listed in the global variable 1473*22dc650dSSadaf Ebrahimi# 'opt_warning_types'. 1474*22dc650dSSadaf Ebrahimifunc_warning () 1475*22dc650dSSadaf Ebrahimi{ 1476*22dc650dSSadaf Ebrahimi $debug_cmd 1477*22dc650dSSadaf Ebrahimi 1478*22dc650dSSadaf Ebrahimi # CATEGORY must be in the warning_categories list! 1479*22dc650dSSadaf Ebrahimi case " $warning_categories " in 1480*22dc650dSSadaf Ebrahimi *" $1 "*) ;; 1481*22dc650dSSadaf Ebrahimi *) func_internal_error "invalid warning category '$1'" ;; 1482*22dc650dSSadaf Ebrahimi esac 1483*22dc650dSSadaf Ebrahimi 1484*22dc650dSSadaf Ebrahimi _G_category=$1 1485*22dc650dSSadaf Ebrahimi shift 1486*22dc650dSSadaf Ebrahimi 1487*22dc650dSSadaf Ebrahimi case " $opt_warning_types " in 1488*22dc650dSSadaf Ebrahimi *" $_G_category "*) $warning_func ${1+"$@"} ;; 1489*22dc650dSSadaf Ebrahimi esac 1490*22dc650dSSadaf Ebrahimi} 1491*22dc650dSSadaf Ebrahimi 1492*22dc650dSSadaf Ebrahimi 1493*22dc650dSSadaf Ebrahimi# func_sort_ver VER1 VER2 1494*22dc650dSSadaf Ebrahimi# ----------------------- 1495*22dc650dSSadaf Ebrahimi# 'sort -V' is not generally available. 1496*22dc650dSSadaf Ebrahimi# Note this deviates from the version comparison in automake 1497*22dc650dSSadaf Ebrahimi# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a 1498*22dc650dSSadaf Ebrahimi# but this should suffice as we won't be specifying old 1499*22dc650dSSadaf Ebrahimi# version formats or redundant trailing .0 in bootstrap.conf. 1500*22dc650dSSadaf Ebrahimi# If we did want full compatibility then we should probably 1501*22dc650dSSadaf Ebrahimi# use m4_version_compare from autoconf. 1502*22dc650dSSadaf Ebrahimifunc_sort_ver () 1503*22dc650dSSadaf Ebrahimi{ 1504*22dc650dSSadaf Ebrahimi $debug_cmd 1505*22dc650dSSadaf Ebrahimi 1506*22dc650dSSadaf Ebrahimi printf '%s\n%s\n' "$1" "$2" \ 1507*22dc650dSSadaf Ebrahimi | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n 1508*22dc650dSSadaf Ebrahimi} 1509*22dc650dSSadaf Ebrahimi 1510*22dc650dSSadaf Ebrahimi# func_lt_ver PREV CURR 1511*22dc650dSSadaf Ebrahimi# --------------------- 1512*22dc650dSSadaf Ebrahimi# Return true if PREV and CURR are in the correct order according to 1513*22dc650dSSadaf Ebrahimi# func_sort_ver, otherwise false. Use it like this: 1514*22dc650dSSadaf Ebrahimi# 1515*22dc650dSSadaf Ebrahimi# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." 1516*22dc650dSSadaf Ebrahimifunc_lt_ver () 1517*22dc650dSSadaf Ebrahimi{ 1518*22dc650dSSadaf Ebrahimi $debug_cmd 1519*22dc650dSSadaf Ebrahimi 1520*22dc650dSSadaf Ebrahimi test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` 1521*22dc650dSSadaf Ebrahimi} 1522*22dc650dSSadaf Ebrahimi 1523*22dc650dSSadaf Ebrahimi 1524*22dc650dSSadaf Ebrahimi# Local variables: 1525*22dc650dSSadaf Ebrahimi# mode: shell-script 1526*22dc650dSSadaf Ebrahimi# sh-indentation: 2 1527*22dc650dSSadaf Ebrahimi# eval: (add-hook 'before-save-hook 'time-stamp) 1528*22dc650dSSadaf Ebrahimi# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" 1529*22dc650dSSadaf Ebrahimi# time-stamp-time-zone: "UTC" 1530*22dc650dSSadaf Ebrahimi# End: 1531*22dc650dSSadaf Ebrahimi#! /bin/sh 1532*22dc650dSSadaf Ebrahimi 1533*22dc650dSSadaf Ebrahimi# A portable, pluggable option parser for Bourne shell. 1534*22dc650dSSadaf Ebrahimi# Written by Gary V. Vaughan, 2010 1535*22dc650dSSadaf Ebrahimi 1536*22dc650dSSadaf Ebrahimi# This is free software. There is NO warranty; not even for 1537*22dc650dSSadaf Ebrahimi# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 1538*22dc650dSSadaf Ebrahimi# 1539*22dc650dSSadaf Ebrahimi# Copyright (C) 2010-2019, 2021 Bootstrap Authors 1540*22dc650dSSadaf Ebrahimi# 1541*22dc650dSSadaf Ebrahimi# This file is dual licensed under the terms of the MIT license 1542*22dc650dSSadaf Ebrahimi# <https://opensource.org/license/MIT>, and GPL version 3 or later 1543*22dc650dSSadaf Ebrahimi# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of 1544*22dc650dSSadaf Ebrahimi# these licenses when using or redistributing this software or any of 1545*22dc650dSSadaf Ebrahimi# the files within it. See the URLs above, or the file `LICENSE` 1546*22dc650dSSadaf Ebrahimi# included in the Bootstrap distribution for the full license texts. 1547*22dc650dSSadaf Ebrahimi 1548*22dc650dSSadaf Ebrahimi# Please report bugs or propose patches to: 1549*22dc650dSSadaf Ebrahimi# <https://github.com/gnulib-modules/bootstrap/issues> 1550*22dc650dSSadaf Ebrahimi 1551*22dc650dSSadaf Ebrahimi# Set a version string for this script. 1552*22dc650dSSadaf Ebrahimiscriptversion=2019-02-19.15; # UTC 1553*22dc650dSSadaf Ebrahimi 1554*22dc650dSSadaf Ebrahimi 1555*22dc650dSSadaf Ebrahimi## ------ ## 1556*22dc650dSSadaf Ebrahimi## Usage. ## 1557*22dc650dSSadaf Ebrahimi## ------ ## 1558*22dc650dSSadaf Ebrahimi 1559*22dc650dSSadaf Ebrahimi# This file is a library for parsing options in your shell scripts along 1560*22dc650dSSadaf Ebrahimi# with assorted other useful supporting features that you can make use 1561*22dc650dSSadaf Ebrahimi# of too. 1562*22dc650dSSadaf Ebrahimi# 1563*22dc650dSSadaf Ebrahimi# For the simplest scripts you might need only: 1564*22dc650dSSadaf Ebrahimi# 1565*22dc650dSSadaf Ebrahimi# #!/bin/sh 1566*22dc650dSSadaf Ebrahimi# . relative/path/to/funclib.sh 1567*22dc650dSSadaf Ebrahimi# . relative/path/to/options-parser 1568*22dc650dSSadaf Ebrahimi# scriptversion=1.0 1569*22dc650dSSadaf Ebrahimi# func_options ${1+"$@"} 1570*22dc650dSSadaf Ebrahimi# eval set dummy "$func_options_result"; shift 1571*22dc650dSSadaf Ebrahimi# ...rest of your script... 1572*22dc650dSSadaf Ebrahimi# 1573*22dc650dSSadaf Ebrahimi# In order for the '--version' option to work, you will need to have a 1574*22dc650dSSadaf Ebrahimi# suitably formatted comment like the one at the top of this file 1575*22dc650dSSadaf Ebrahimi# starting with '# Written by ' and ending with '# Copyright'. 1576*22dc650dSSadaf Ebrahimi# 1577*22dc650dSSadaf Ebrahimi# For '-h' and '--help' to work, you will also need a one line 1578*22dc650dSSadaf Ebrahimi# description of your script's purpose in a comment directly above the 1579*22dc650dSSadaf Ebrahimi# '# Written by ' line, like the one at the top of this file. 1580*22dc650dSSadaf Ebrahimi# 1581*22dc650dSSadaf Ebrahimi# The default options also support '--debug', which will turn on shell 1582*22dc650dSSadaf Ebrahimi# execution tracing (see the comment above debug_cmd below for another 1583*22dc650dSSadaf Ebrahimi# use), and '--verbose' and the func_verbose function to allow your script 1584*22dc650dSSadaf Ebrahimi# to display verbose messages only when your user has specified 1585*22dc650dSSadaf Ebrahimi# '--verbose'. 1586*22dc650dSSadaf Ebrahimi# 1587*22dc650dSSadaf Ebrahimi# After sourcing this file, you can plug in processing for additional 1588*22dc650dSSadaf Ebrahimi# options by amending the variables from the 'Configuration' section 1589*22dc650dSSadaf Ebrahimi# below, and following the instructions in the 'Option parsing' 1590*22dc650dSSadaf Ebrahimi# section further down. 1591*22dc650dSSadaf Ebrahimi 1592*22dc650dSSadaf Ebrahimi## -------------- ## 1593*22dc650dSSadaf Ebrahimi## Configuration. ## 1594*22dc650dSSadaf Ebrahimi## -------------- ## 1595*22dc650dSSadaf Ebrahimi 1596*22dc650dSSadaf Ebrahimi# You should override these variables in your script after sourcing this 1597*22dc650dSSadaf Ebrahimi# file so that they reflect the customisations you have added to the 1598*22dc650dSSadaf Ebrahimi# option parser. 1599*22dc650dSSadaf Ebrahimi 1600*22dc650dSSadaf Ebrahimi# The usage line for option parsing errors and the start of '-h' and 1601*22dc650dSSadaf Ebrahimi# '--help' output messages. You can embed shell variables for delayed 1602*22dc650dSSadaf Ebrahimi# expansion at the time the message is displayed, but you will need to 1603*22dc650dSSadaf Ebrahimi# quote other shell meta-characters carefully to prevent them being 1604*22dc650dSSadaf Ebrahimi# expanded when the contents are evaled. 1605*22dc650dSSadaf Ebrahimiusage='$progpath [OPTION]...' 1606*22dc650dSSadaf Ebrahimi 1607*22dc650dSSadaf Ebrahimi# Short help message in response to '-h' and '--help'. Add to this or 1608*22dc650dSSadaf Ebrahimi# override it after sourcing this library to reflect the full set of 1609*22dc650dSSadaf Ebrahimi# options your script accepts. 1610*22dc650dSSadaf Ebrahimiusage_message="\ 1611*22dc650dSSadaf Ebrahimi --debug enable verbose shell tracing 1612*22dc650dSSadaf Ebrahimi -W, --warnings=CATEGORY 1613*22dc650dSSadaf Ebrahimi report the warnings falling in CATEGORY [all] 1614*22dc650dSSadaf Ebrahimi -v, --verbose verbosely report processing 1615*22dc650dSSadaf Ebrahimi --version print version information and exit 1616*22dc650dSSadaf Ebrahimi -h, --help print short or long help message and exit 1617*22dc650dSSadaf Ebrahimi" 1618*22dc650dSSadaf Ebrahimi 1619*22dc650dSSadaf Ebrahimi# Additional text appended to 'usage_message' in response to '--help'. 1620*22dc650dSSadaf Ebrahimilong_help_message=" 1621*22dc650dSSadaf EbrahimiWarning categories include: 1622*22dc650dSSadaf Ebrahimi 'all' show all warnings 1623*22dc650dSSadaf Ebrahimi 'none' turn off all the warnings 1624*22dc650dSSadaf Ebrahimi 'error' warnings are treated as fatal errors" 1625*22dc650dSSadaf Ebrahimi 1626*22dc650dSSadaf Ebrahimi# Help message printed before fatal option parsing errors. 1627*22dc650dSSadaf Ebrahimifatal_help="Try '\$progname --help' for more information." 1628*22dc650dSSadaf Ebrahimi 1629*22dc650dSSadaf Ebrahimi 1630*22dc650dSSadaf Ebrahimi 1631*22dc650dSSadaf Ebrahimi## ------------------------- ## 1632*22dc650dSSadaf Ebrahimi## Hook function management. ## 1633*22dc650dSSadaf Ebrahimi## ------------------------- ## 1634*22dc650dSSadaf Ebrahimi 1635*22dc650dSSadaf Ebrahimi# This section contains functions for adding, removing, and running hooks 1636*22dc650dSSadaf Ebrahimi# in the main code. A hook is just a list of function names that can be 1637*22dc650dSSadaf Ebrahimi# run in order later on. 1638*22dc650dSSadaf Ebrahimi 1639*22dc650dSSadaf Ebrahimi# func_hookable FUNC_NAME 1640*22dc650dSSadaf Ebrahimi# ----------------------- 1641*22dc650dSSadaf Ebrahimi# Declare that FUNC_NAME will run hooks added with 1642*22dc650dSSadaf Ebrahimi# 'func_add_hook FUNC_NAME ...'. 1643*22dc650dSSadaf Ebrahimifunc_hookable () 1644*22dc650dSSadaf Ebrahimi{ 1645*22dc650dSSadaf Ebrahimi $debug_cmd 1646*22dc650dSSadaf Ebrahimi 1647*22dc650dSSadaf Ebrahimi func_append hookable_fns " $1" 1648*22dc650dSSadaf Ebrahimi} 1649*22dc650dSSadaf Ebrahimi 1650*22dc650dSSadaf Ebrahimi 1651*22dc650dSSadaf Ebrahimi# func_add_hook FUNC_NAME HOOK_FUNC 1652*22dc650dSSadaf Ebrahimi# --------------------------------- 1653*22dc650dSSadaf Ebrahimi# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must 1654*22dc650dSSadaf Ebrahimi# first have been declared "hookable" by a call to 'func_hookable'. 1655*22dc650dSSadaf Ebrahimifunc_add_hook () 1656*22dc650dSSadaf Ebrahimi{ 1657*22dc650dSSadaf Ebrahimi $debug_cmd 1658*22dc650dSSadaf Ebrahimi 1659*22dc650dSSadaf Ebrahimi case " $hookable_fns " in 1660*22dc650dSSadaf Ebrahimi *" $1 "*) ;; 1661*22dc650dSSadaf Ebrahimi *) func_fatal_error "'$1' does not accept hook functions." ;; 1662*22dc650dSSadaf Ebrahimi esac 1663*22dc650dSSadaf Ebrahimi 1664*22dc650dSSadaf Ebrahimi eval func_append ${1}_hooks '" $2"' 1665*22dc650dSSadaf Ebrahimi} 1666*22dc650dSSadaf Ebrahimi 1667*22dc650dSSadaf Ebrahimi 1668*22dc650dSSadaf Ebrahimi# func_remove_hook FUNC_NAME HOOK_FUNC 1669*22dc650dSSadaf Ebrahimi# ------------------------------------ 1670*22dc650dSSadaf Ebrahimi# Remove HOOK_FUNC from the list of hook functions to be called by 1671*22dc650dSSadaf Ebrahimi# FUNC_NAME. 1672*22dc650dSSadaf Ebrahimifunc_remove_hook () 1673*22dc650dSSadaf Ebrahimi{ 1674*22dc650dSSadaf Ebrahimi $debug_cmd 1675*22dc650dSSadaf Ebrahimi 1676*22dc650dSSadaf Ebrahimi eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' 1677*22dc650dSSadaf Ebrahimi} 1678*22dc650dSSadaf Ebrahimi 1679*22dc650dSSadaf Ebrahimi 1680*22dc650dSSadaf Ebrahimi# func_propagate_result FUNC_NAME_A FUNC_NAME_B 1681*22dc650dSSadaf Ebrahimi# --------------------------------------------- 1682*22dc650dSSadaf Ebrahimi# If the *_result variable of FUNC_NAME_A _is set_, assign its value to 1683*22dc650dSSadaf Ebrahimi# *_result variable of FUNC_NAME_B. 1684*22dc650dSSadaf Ebrahimifunc_propagate_result () 1685*22dc650dSSadaf Ebrahimi{ 1686*22dc650dSSadaf Ebrahimi $debug_cmd 1687*22dc650dSSadaf Ebrahimi 1688*22dc650dSSadaf Ebrahimi func_propagate_result_result=: 1689*22dc650dSSadaf Ebrahimi if eval "test \"\${${1}_result+set}\" = set" 1690*22dc650dSSadaf Ebrahimi then 1691*22dc650dSSadaf Ebrahimi eval "${2}_result=\$${1}_result" 1692*22dc650dSSadaf Ebrahimi else 1693*22dc650dSSadaf Ebrahimi func_propagate_result_result=false 1694*22dc650dSSadaf Ebrahimi fi 1695*22dc650dSSadaf Ebrahimi} 1696*22dc650dSSadaf Ebrahimi 1697*22dc650dSSadaf Ebrahimi 1698*22dc650dSSadaf Ebrahimi# func_run_hooks FUNC_NAME [ARG]... 1699*22dc650dSSadaf Ebrahimi# --------------------------------- 1700*22dc650dSSadaf Ebrahimi# Run all hook functions registered to FUNC_NAME. 1701*22dc650dSSadaf Ebrahimi# It's assumed that the list of hook functions contains nothing more 1702*22dc650dSSadaf Ebrahimi# than a whitespace-delimited list of legal shell function names, and 1703*22dc650dSSadaf Ebrahimi# no effort is wasted trying to catch shell meta-characters or preserve 1704*22dc650dSSadaf Ebrahimi# whitespace. 1705*22dc650dSSadaf Ebrahimifunc_run_hooks () 1706*22dc650dSSadaf Ebrahimi{ 1707*22dc650dSSadaf Ebrahimi $debug_cmd 1708*22dc650dSSadaf Ebrahimi 1709*22dc650dSSadaf Ebrahimi case " $hookable_fns " in 1710*22dc650dSSadaf Ebrahimi *" $1 "*) ;; 1711*22dc650dSSadaf Ebrahimi *) func_fatal_error "'$1' does not support hook functions." ;; 1712*22dc650dSSadaf Ebrahimi esac 1713*22dc650dSSadaf Ebrahimi 1714*22dc650dSSadaf Ebrahimi eval _G_hook_fns=\$$1_hooks; shift 1715*22dc650dSSadaf Ebrahimi 1716*22dc650dSSadaf Ebrahimi for _G_hook in $_G_hook_fns; do 1717*22dc650dSSadaf Ebrahimi func_unset "${_G_hook}_result" 1718*22dc650dSSadaf Ebrahimi eval $_G_hook '${1+"$@"}' 1719*22dc650dSSadaf Ebrahimi func_propagate_result $_G_hook func_run_hooks 1720*22dc650dSSadaf Ebrahimi if $func_propagate_result_result; then 1721*22dc650dSSadaf Ebrahimi eval set dummy "$func_run_hooks_result"; shift 1722*22dc650dSSadaf Ebrahimi fi 1723*22dc650dSSadaf Ebrahimi done 1724*22dc650dSSadaf Ebrahimi} 1725*22dc650dSSadaf Ebrahimi 1726*22dc650dSSadaf Ebrahimi 1727*22dc650dSSadaf Ebrahimi 1728*22dc650dSSadaf Ebrahimi## --------------- ## 1729*22dc650dSSadaf Ebrahimi## Option parsing. ## 1730*22dc650dSSadaf Ebrahimi## --------------- ## 1731*22dc650dSSadaf Ebrahimi 1732*22dc650dSSadaf Ebrahimi# In order to add your own option parsing hooks, you must accept the 1733*22dc650dSSadaf Ebrahimi# full positional parameter list from your hook function. You may remove 1734*22dc650dSSadaf Ebrahimi# or edit any options that you action, and then pass back the remaining 1735*22dc650dSSadaf Ebrahimi# unprocessed options in '<hooked_function_name>_result', escaped 1736*22dc650dSSadaf Ebrahimi# suitably for 'eval'. 1737*22dc650dSSadaf Ebrahimi# 1738*22dc650dSSadaf Ebrahimi# The '<hooked_function_name>_result' variable is automatically unset 1739*22dc650dSSadaf Ebrahimi# before your hook gets called; for best performance, only set the 1740*22dc650dSSadaf Ebrahimi# *_result variable when necessary (i.e. don't call the 'func_quote' 1741*22dc650dSSadaf Ebrahimi# function unnecessarily because it can be an expensive operation on some 1742*22dc650dSSadaf Ebrahimi# machines). 1743*22dc650dSSadaf Ebrahimi# 1744*22dc650dSSadaf Ebrahimi# Like this: 1745*22dc650dSSadaf Ebrahimi# 1746*22dc650dSSadaf Ebrahimi# my_options_prep () 1747*22dc650dSSadaf Ebrahimi# { 1748*22dc650dSSadaf Ebrahimi# $debug_cmd 1749*22dc650dSSadaf Ebrahimi# 1750*22dc650dSSadaf Ebrahimi# # Extend the existing usage message. 1751*22dc650dSSadaf Ebrahimi# usage_message=$usage_message' 1752*22dc650dSSadaf Ebrahimi# -s, --silent don'\''t print informational messages 1753*22dc650dSSadaf Ebrahimi# ' 1754*22dc650dSSadaf Ebrahimi# # No change in '$@' (ignored completely by this hook). Leave 1755*22dc650dSSadaf Ebrahimi# # my_options_prep_result variable intact. 1756*22dc650dSSadaf Ebrahimi# } 1757*22dc650dSSadaf Ebrahimi# func_add_hook func_options_prep my_options_prep 1758*22dc650dSSadaf Ebrahimi# 1759*22dc650dSSadaf Ebrahimi# 1760*22dc650dSSadaf Ebrahimi# my_silent_option () 1761*22dc650dSSadaf Ebrahimi# { 1762*22dc650dSSadaf Ebrahimi# $debug_cmd 1763*22dc650dSSadaf Ebrahimi# 1764*22dc650dSSadaf Ebrahimi# args_changed=false 1765*22dc650dSSadaf Ebrahimi# 1766*22dc650dSSadaf Ebrahimi# # Note that, for efficiency, we parse as many options as we can 1767*22dc650dSSadaf Ebrahimi# # recognise in a loop before passing the remainder back to the 1768*22dc650dSSadaf Ebrahimi# # caller on the first unrecognised argument we encounter. 1769*22dc650dSSadaf Ebrahimi# while test $# -gt 0; do 1770*22dc650dSSadaf Ebrahimi# opt=$1; shift 1771*22dc650dSSadaf Ebrahimi# case $opt in 1772*22dc650dSSadaf Ebrahimi# --silent|-s) opt_silent=: 1773*22dc650dSSadaf Ebrahimi# args_changed=: 1774*22dc650dSSadaf Ebrahimi# ;; 1775*22dc650dSSadaf Ebrahimi# # Separate non-argument short options: 1776*22dc650dSSadaf Ebrahimi# -s*) func_split_short_opt "$_G_opt" 1777*22dc650dSSadaf Ebrahimi# set dummy "$func_split_short_opt_name" \ 1778*22dc650dSSadaf Ebrahimi# "-$func_split_short_opt_arg" ${1+"$@"} 1779*22dc650dSSadaf Ebrahimi# shift 1780*22dc650dSSadaf Ebrahimi# args_changed=: 1781*22dc650dSSadaf Ebrahimi# ;; 1782*22dc650dSSadaf Ebrahimi# *) # Make sure the first unrecognised option "$_G_opt" 1783*22dc650dSSadaf Ebrahimi# # is added back to "$@" in case we need it later, 1784*22dc650dSSadaf Ebrahimi# # if $args_changed was set to 'true'. 1785*22dc650dSSadaf Ebrahimi# set dummy "$_G_opt" ${1+"$@"}; shift; break ;; 1786*22dc650dSSadaf Ebrahimi# esac 1787*22dc650dSSadaf Ebrahimi# done 1788*22dc650dSSadaf Ebrahimi# 1789*22dc650dSSadaf Ebrahimi# # Only call 'func_quote' here if we processed at least one argument. 1790*22dc650dSSadaf Ebrahimi# if $args_changed; then 1791*22dc650dSSadaf Ebrahimi# func_quote eval ${1+"$@"} 1792*22dc650dSSadaf Ebrahimi# my_silent_option_result=$func_quote_result 1793*22dc650dSSadaf Ebrahimi# fi 1794*22dc650dSSadaf Ebrahimi# } 1795*22dc650dSSadaf Ebrahimi# func_add_hook func_parse_options my_silent_option 1796*22dc650dSSadaf Ebrahimi# 1797*22dc650dSSadaf Ebrahimi# 1798*22dc650dSSadaf Ebrahimi# my_option_validation () 1799*22dc650dSSadaf Ebrahimi# { 1800*22dc650dSSadaf Ebrahimi# $debug_cmd 1801*22dc650dSSadaf Ebrahimi# 1802*22dc650dSSadaf Ebrahimi# $opt_silent && $opt_verbose && func_fatal_help "\ 1803*22dc650dSSadaf Ebrahimi# '--silent' and '--verbose' options are mutually exclusive." 1804*22dc650dSSadaf Ebrahimi# } 1805*22dc650dSSadaf Ebrahimi# func_add_hook func_validate_options my_option_validation 1806*22dc650dSSadaf Ebrahimi# 1807*22dc650dSSadaf Ebrahimi# You'll also need to manually amend $usage_message to reflect the extra 1808*22dc650dSSadaf Ebrahimi# options you parse. It's preferable to append if you can, so that 1809*22dc650dSSadaf Ebrahimi# multiple option parsing hooks can be added safely. 1810*22dc650dSSadaf Ebrahimi 1811*22dc650dSSadaf Ebrahimi 1812*22dc650dSSadaf Ebrahimi# func_options_finish [ARG]... 1813*22dc650dSSadaf Ebrahimi# ---------------------------- 1814*22dc650dSSadaf Ebrahimi# Finishing the option parse loop (call 'func_options' hooks ATM). 1815*22dc650dSSadaf Ebrahimifunc_options_finish () 1816*22dc650dSSadaf Ebrahimi{ 1817*22dc650dSSadaf Ebrahimi $debug_cmd 1818*22dc650dSSadaf Ebrahimi 1819*22dc650dSSadaf Ebrahimi func_run_hooks func_options ${1+"$@"} 1820*22dc650dSSadaf Ebrahimi func_propagate_result func_run_hooks func_options_finish 1821*22dc650dSSadaf Ebrahimi} 1822*22dc650dSSadaf Ebrahimi 1823*22dc650dSSadaf Ebrahimi 1824*22dc650dSSadaf Ebrahimi# func_options [ARG]... 1825*22dc650dSSadaf Ebrahimi# --------------------- 1826*22dc650dSSadaf Ebrahimi# All the functions called inside func_options are hookable. See the 1827*22dc650dSSadaf Ebrahimi# individual implementations for details. 1828*22dc650dSSadaf Ebrahimifunc_hookable func_options 1829*22dc650dSSadaf Ebrahimifunc_options () 1830*22dc650dSSadaf Ebrahimi{ 1831*22dc650dSSadaf Ebrahimi $debug_cmd 1832*22dc650dSSadaf Ebrahimi 1833*22dc650dSSadaf Ebrahimi _G_options_quoted=false 1834*22dc650dSSadaf Ebrahimi 1835*22dc650dSSadaf Ebrahimi for my_func in options_prep parse_options validate_options options_finish 1836*22dc650dSSadaf Ebrahimi do 1837*22dc650dSSadaf Ebrahimi func_unset func_${my_func}_result 1838*22dc650dSSadaf Ebrahimi func_unset func_run_hooks_result 1839*22dc650dSSadaf Ebrahimi eval func_$my_func '${1+"$@"}' 1840*22dc650dSSadaf Ebrahimi func_propagate_result func_$my_func func_options 1841*22dc650dSSadaf Ebrahimi if $func_propagate_result_result; then 1842*22dc650dSSadaf Ebrahimi eval set dummy "$func_options_result"; shift 1843*22dc650dSSadaf Ebrahimi _G_options_quoted=: 1844*22dc650dSSadaf Ebrahimi fi 1845*22dc650dSSadaf Ebrahimi done 1846*22dc650dSSadaf Ebrahimi 1847*22dc650dSSadaf Ebrahimi $_G_options_quoted || { 1848*22dc650dSSadaf Ebrahimi # As we (func_options) are top-level options-parser function and 1849*22dc650dSSadaf Ebrahimi # nobody quoted "$@" for us yet, we need to do it explicitly for 1850*22dc650dSSadaf Ebrahimi # caller. 1851*22dc650dSSadaf Ebrahimi func_quote eval ${1+"$@"} 1852*22dc650dSSadaf Ebrahimi func_options_result=$func_quote_result 1853*22dc650dSSadaf Ebrahimi } 1854*22dc650dSSadaf Ebrahimi} 1855*22dc650dSSadaf Ebrahimi 1856*22dc650dSSadaf Ebrahimi 1857*22dc650dSSadaf Ebrahimi# func_options_prep [ARG]... 1858*22dc650dSSadaf Ebrahimi# -------------------------- 1859*22dc650dSSadaf Ebrahimi# All initialisations required before starting the option parse loop. 1860*22dc650dSSadaf Ebrahimi# Note that when calling hook functions, we pass through the list of 1861*22dc650dSSadaf Ebrahimi# positional parameters. If a hook function modifies that list, and 1862*22dc650dSSadaf Ebrahimi# needs to propagate that back to rest of this script, then the complete 1863*22dc650dSSadaf Ebrahimi# modified list must be put in 'func_run_hooks_result' before returning. 1864*22dc650dSSadaf Ebrahimifunc_hookable func_options_prep 1865*22dc650dSSadaf Ebrahimifunc_options_prep () 1866*22dc650dSSadaf Ebrahimi{ 1867*22dc650dSSadaf Ebrahimi $debug_cmd 1868*22dc650dSSadaf Ebrahimi 1869*22dc650dSSadaf Ebrahimi # Option defaults: 1870*22dc650dSSadaf Ebrahimi opt_verbose=false 1871*22dc650dSSadaf Ebrahimi opt_warning_types= 1872*22dc650dSSadaf Ebrahimi 1873*22dc650dSSadaf Ebrahimi func_run_hooks func_options_prep ${1+"$@"} 1874*22dc650dSSadaf Ebrahimi func_propagate_result func_run_hooks func_options_prep 1875*22dc650dSSadaf Ebrahimi} 1876*22dc650dSSadaf Ebrahimi 1877*22dc650dSSadaf Ebrahimi 1878*22dc650dSSadaf Ebrahimi# func_parse_options [ARG]... 1879*22dc650dSSadaf Ebrahimi# --------------------------- 1880*22dc650dSSadaf Ebrahimi# The main option parsing loop. 1881*22dc650dSSadaf Ebrahimifunc_hookable func_parse_options 1882*22dc650dSSadaf Ebrahimifunc_parse_options () 1883*22dc650dSSadaf Ebrahimi{ 1884*22dc650dSSadaf Ebrahimi $debug_cmd 1885*22dc650dSSadaf Ebrahimi 1886*22dc650dSSadaf Ebrahimi _G_parse_options_requote=false 1887*22dc650dSSadaf Ebrahimi # this just eases exit handling 1888*22dc650dSSadaf Ebrahimi while test $# -gt 0; do 1889*22dc650dSSadaf Ebrahimi # Defer to hook functions for initial option parsing, so they 1890*22dc650dSSadaf Ebrahimi # get priority in the event of reusing an option name. 1891*22dc650dSSadaf Ebrahimi func_run_hooks func_parse_options ${1+"$@"} 1892*22dc650dSSadaf Ebrahimi func_propagate_result func_run_hooks func_parse_options 1893*22dc650dSSadaf Ebrahimi if $func_propagate_result_result; then 1894*22dc650dSSadaf Ebrahimi eval set dummy "$func_parse_options_result"; shift 1895*22dc650dSSadaf Ebrahimi # Even though we may have changed "$@", we passed the "$@" array 1896*22dc650dSSadaf Ebrahimi # down into the hook and it quoted it for us (because we are in 1897*22dc650dSSadaf Ebrahimi # this if-branch). No need to quote it again. 1898*22dc650dSSadaf Ebrahimi _G_parse_options_requote=false 1899*22dc650dSSadaf Ebrahimi fi 1900*22dc650dSSadaf Ebrahimi 1901*22dc650dSSadaf Ebrahimi # Break out of the loop if we already parsed every option. 1902*22dc650dSSadaf Ebrahimi test $# -gt 0 || break 1903*22dc650dSSadaf Ebrahimi 1904*22dc650dSSadaf Ebrahimi # We expect that one of the options parsed in this function matches 1905*22dc650dSSadaf Ebrahimi # and thus we remove _G_opt from "$@" and need to re-quote. 1906*22dc650dSSadaf Ebrahimi _G_match_parse_options=: 1907*22dc650dSSadaf Ebrahimi _G_opt=$1 1908*22dc650dSSadaf Ebrahimi shift 1909*22dc650dSSadaf Ebrahimi case $_G_opt in 1910*22dc650dSSadaf Ebrahimi --debug|-x) debug_cmd='set -x' 1911*22dc650dSSadaf Ebrahimi func_echo "enabling shell trace mode" >&2 1912*22dc650dSSadaf Ebrahimi $debug_cmd 1913*22dc650dSSadaf Ebrahimi ;; 1914*22dc650dSSadaf Ebrahimi 1915*22dc650dSSadaf Ebrahimi --no-warnings|--no-warning|--no-warn) 1916*22dc650dSSadaf Ebrahimi set dummy --warnings none ${1+"$@"} 1917*22dc650dSSadaf Ebrahimi shift 1918*22dc650dSSadaf Ebrahimi ;; 1919*22dc650dSSadaf Ebrahimi 1920*22dc650dSSadaf Ebrahimi --warnings|--warning|-W) 1921*22dc650dSSadaf Ebrahimi if test $# = 0 && func_missing_arg $_G_opt; then 1922*22dc650dSSadaf Ebrahimi _G_parse_options_requote=: 1923*22dc650dSSadaf Ebrahimi break 1924*22dc650dSSadaf Ebrahimi fi 1925*22dc650dSSadaf Ebrahimi case " $warning_categories $1" in 1926*22dc650dSSadaf Ebrahimi *" $1 "*) 1927*22dc650dSSadaf Ebrahimi # trailing space prevents matching last $1 above 1928*22dc650dSSadaf Ebrahimi func_append_uniq opt_warning_types " $1" 1929*22dc650dSSadaf Ebrahimi ;; 1930*22dc650dSSadaf Ebrahimi *all) 1931*22dc650dSSadaf Ebrahimi opt_warning_types=$warning_categories 1932*22dc650dSSadaf Ebrahimi ;; 1933*22dc650dSSadaf Ebrahimi *none) 1934*22dc650dSSadaf Ebrahimi opt_warning_types=none 1935*22dc650dSSadaf Ebrahimi warning_func=: 1936*22dc650dSSadaf Ebrahimi ;; 1937*22dc650dSSadaf Ebrahimi *error) 1938*22dc650dSSadaf Ebrahimi opt_warning_types=$warning_categories 1939*22dc650dSSadaf Ebrahimi warning_func=func_fatal_error 1940*22dc650dSSadaf Ebrahimi ;; 1941*22dc650dSSadaf Ebrahimi *) 1942*22dc650dSSadaf Ebrahimi func_fatal_error \ 1943*22dc650dSSadaf Ebrahimi "unsupported warning category: '$1'" 1944*22dc650dSSadaf Ebrahimi ;; 1945*22dc650dSSadaf Ebrahimi esac 1946*22dc650dSSadaf Ebrahimi shift 1947*22dc650dSSadaf Ebrahimi ;; 1948*22dc650dSSadaf Ebrahimi 1949*22dc650dSSadaf Ebrahimi --verbose|-v) opt_verbose=: ;; 1950*22dc650dSSadaf Ebrahimi --version) func_version ;; 1951*22dc650dSSadaf Ebrahimi -\?|-h) func_usage ;; 1952*22dc650dSSadaf Ebrahimi --help) func_help ;; 1953*22dc650dSSadaf Ebrahimi 1954*22dc650dSSadaf Ebrahimi # Separate optargs to long options (plugins may need this): 1955*22dc650dSSadaf Ebrahimi --*=*) func_split_equals "$_G_opt" 1956*22dc650dSSadaf Ebrahimi set dummy "$func_split_equals_lhs" \ 1957*22dc650dSSadaf Ebrahimi "$func_split_equals_rhs" ${1+"$@"} 1958*22dc650dSSadaf Ebrahimi shift 1959*22dc650dSSadaf Ebrahimi ;; 1960*22dc650dSSadaf Ebrahimi 1961*22dc650dSSadaf Ebrahimi # Separate optargs to short options: 1962*22dc650dSSadaf Ebrahimi -W*) 1963*22dc650dSSadaf Ebrahimi func_split_short_opt "$_G_opt" 1964*22dc650dSSadaf Ebrahimi set dummy "$func_split_short_opt_name" \ 1965*22dc650dSSadaf Ebrahimi "$func_split_short_opt_arg" ${1+"$@"} 1966*22dc650dSSadaf Ebrahimi shift 1967*22dc650dSSadaf Ebrahimi ;; 1968*22dc650dSSadaf Ebrahimi 1969*22dc650dSSadaf Ebrahimi # Separate non-argument short options: 1970*22dc650dSSadaf Ebrahimi -\?*|-h*|-v*|-x*) 1971*22dc650dSSadaf Ebrahimi func_split_short_opt "$_G_opt" 1972*22dc650dSSadaf Ebrahimi set dummy "$func_split_short_opt_name" \ 1973*22dc650dSSadaf Ebrahimi "-$func_split_short_opt_arg" ${1+"$@"} 1974*22dc650dSSadaf Ebrahimi shift 1975*22dc650dSSadaf Ebrahimi ;; 1976*22dc650dSSadaf Ebrahimi 1977*22dc650dSSadaf Ebrahimi --) _G_parse_options_requote=: ; break ;; 1978*22dc650dSSadaf Ebrahimi -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; 1979*22dc650dSSadaf Ebrahimi *) set dummy "$_G_opt" ${1+"$@"}; shift 1980*22dc650dSSadaf Ebrahimi _G_match_parse_options=false 1981*22dc650dSSadaf Ebrahimi break 1982*22dc650dSSadaf Ebrahimi ;; 1983*22dc650dSSadaf Ebrahimi esac 1984*22dc650dSSadaf Ebrahimi 1985*22dc650dSSadaf Ebrahimi if $_G_match_parse_options; then 1986*22dc650dSSadaf Ebrahimi _G_parse_options_requote=: 1987*22dc650dSSadaf Ebrahimi fi 1988*22dc650dSSadaf Ebrahimi done 1989*22dc650dSSadaf Ebrahimi 1990*22dc650dSSadaf Ebrahimi if $_G_parse_options_requote; then 1991*22dc650dSSadaf Ebrahimi # save modified positional parameters for caller 1992*22dc650dSSadaf Ebrahimi func_quote eval ${1+"$@"} 1993*22dc650dSSadaf Ebrahimi func_parse_options_result=$func_quote_result 1994*22dc650dSSadaf Ebrahimi fi 1995*22dc650dSSadaf Ebrahimi} 1996*22dc650dSSadaf Ebrahimi 1997*22dc650dSSadaf Ebrahimi 1998*22dc650dSSadaf Ebrahimi# func_validate_options [ARG]... 1999*22dc650dSSadaf Ebrahimi# ------------------------------ 2000*22dc650dSSadaf Ebrahimi# Perform any sanity checks on option settings and/or unconsumed 2001*22dc650dSSadaf Ebrahimi# arguments. 2002*22dc650dSSadaf Ebrahimifunc_hookable func_validate_options 2003*22dc650dSSadaf Ebrahimifunc_validate_options () 2004*22dc650dSSadaf Ebrahimi{ 2005*22dc650dSSadaf Ebrahimi $debug_cmd 2006*22dc650dSSadaf Ebrahimi 2007*22dc650dSSadaf Ebrahimi # Display all warnings if -W was not given. 2008*22dc650dSSadaf Ebrahimi test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" 2009*22dc650dSSadaf Ebrahimi 2010*22dc650dSSadaf Ebrahimi func_run_hooks func_validate_options ${1+"$@"} 2011*22dc650dSSadaf Ebrahimi func_propagate_result func_run_hooks func_validate_options 2012*22dc650dSSadaf Ebrahimi 2013*22dc650dSSadaf Ebrahimi # Bail if the options were screwed! 2014*22dc650dSSadaf Ebrahimi $exit_cmd $EXIT_FAILURE 2015*22dc650dSSadaf Ebrahimi} 2016*22dc650dSSadaf Ebrahimi 2017*22dc650dSSadaf Ebrahimi 2018*22dc650dSSadaf Ebrahimi 2019*22dc650dSSadaf Ebrahimi## ----------------- ## 2020*22dc650dSSadaf Ebrahimi## Helper functions. ## 2021*22dc650dSSadaf Ebrahimi## ----------------- ## 2022*22dc650dSSadaf Ebrahimi 2023*22dc650dSSadaf Ebrahimi# This section contains the helper functions used by the rest of the 2024*22dc650dSSadaf Ebrahimi# hookable option parser framework in ascii-betical order. 2025*22dc650dSSadaf Ebrahimi 2026*22dc650dSSadaf Ebrahimi 2027*22dc650dSSadaf Ebrahimi# func_fatal_help ARG... 2028*22dc650dSSadaf Ebrahimi# ---------------------- 2029*22dc650dSSadaf Ebrahimi# Echo program name prefixed message to standard error, followed by 2030*22dc650dSSadaf Ebrahimi# a help hint, and exit. 2031*22dc650dSSadaf Ebrahimifunc_fatal_help () 2032*22dc650dSSadaf Ebrahimi{ 2033*22dc650dSSadaf Ebrahimi $debug_cmd 2034*22dc650dSSadaf Ebrahimi 2035*22dc650dSSadaf Ebrahimi eval \$ECHO \""Usage: $usage"\" 2036*22dc650dSSadaf Ebrahimi eval \$ECHO \""$fatal_help"\" 2037*22dc650dSSadaf Ebrahimi func_error ${1+"$@"} 2038*22dc650dSSadaf Ebrahimi exit $EXIT_FAILURE 2039*22dc650dSSadaf Ebrahimi} 2040*22dc650dSSadaf Ebrahimi 2041*22dc650dSSadaf Ebrahimi 2042*22dc650dSSadaf Ebrahimi# func_help 2043*22dc650dSSadaf Ebrahimi# --------- 2044*22dc650dSSadaf Ebrahimi# Echo long help message to standard output and exit. 2045*22dc650dSSadaf Ebrahimifunc_help () 2046*22dc650dSSadaf Ebrahimi{ 2047*22dc650dSSadaf Ebrahimi $debug_cmd 2048*22dc650dSSadaf Ebrahimi 2049*22dc650dSSadaf Ebrahimi func_usage_message 2050*22dc650dSSadaf Ebrahimi $ECHO "$long_help_message" 2051*22dc650dSSadaf Ebrahimi exit 0 2052*22dc650dSSadaf Ebrahimi} 2053*22dc650dSSadaf Ebrahimi 2054*22dc650dSSadaf Ebrahimi 2055*22dc650dSSadaf Ebrahimi# func_missing_arg ARGNAME 2056*22dc650dSSadaf Ebrahimi# ------------------------ 2057*22dc650dSSadaf Ebrahimi# Echo program name prefixed message to standard error and set global 2058*22dc650dSSadaf Ebrahimi# exit_cmd. 2059*22dc650dSSadaf Ebrahimifunc_missing_arg () 2060*22dc650dSSadaf Ebrahimi{ 2061*22dc650dSSadaf Ebrahimi $debug_cmd 2062*22dc650dSSadaf Ebrahimi 2063*22dc650dSSadaf Ebrahimi func_error "Missing argument for '$1'." 2064*22dc650dSSadaf Ebrahimi exit_cmd=exit 2065*22dc650dSSadaf Ebrahimi} 2066*22dc650dSSadaf Ebrahimi 2067*22dc650dSSadaf Ebrahimi 2068*22dc650dSSadaf Ebrahimi# func_split_equals STRING 2069*22dc650dSSadaf Ebrahimi# ------------------------ 2070*22dc650dSSadaf Ebrahimi# Set func_split_equals_lhs and func_split_equals_rhs shell variables 2071*22dc650dSSadaf Ebrahimi# after splitting STRING at the '=' sign. 2072*22dc650dSSadaf Ebrahimitest -z "$_G_HAVE_XSI_OPS" \ 2073*22dc650dSSadaf Ebrahimi && (eval 'x=a/b/c; 2074*22dc650dSSadaf Ebrahimi test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 2075*22dc650dSSadaf Ebrahimi && _G_HAVE_XSI_OPS=yes 2076*22dc650dSSadaf Ebrahimi 2077*22dc650dSSadaf Ebrahimiif test yes = "$_G_HAVE_XSI_OPS" 2078*22dc650dSSadaf Ebrahimithen 2079*22dc650dSSadaf Ebrahimi # This is an XSI compatible shell, allowing a faster implementation... 2080*22dc650dSSadaf Ebrahimi eval 'func_split_equals () 2081*22dc650dSSadaf Ebrahimi { 2082*22dc650dSSadaf Ebrahimi $debug_cmd 2083*22dc650dSSadaf Ebrahimi 2084*22dc650dSSadaf Ebrahimi func_split_equals_lhs=${1%%=*} 2085*22dc650dSSadaf Ebrahimi func_split_equals_rhs=${1#*=} 2086*22dc650dSSadaf Ebrahimi if test "x$func_split_equals_lhs" = "x$1"; then 2087*22dc650dSSadaf Ebrahimi func_split_equals_rhs= 2088*22dc650dSSadaf Ebrahimi fi 2089*22dc650dSSadaf Ebrahimi }' 2090*22dc650dSSadaf Ebrahimielse 2091*22dc650dSSadaf Ebrahimi # ...otherwise fall back to using expr, which is often a shell builtin. 2092*22dc650dSSadaf Ebrahimi func_split_equals () 2093*22dc650dSSadaf Ebrahimi { 2094*22dc650dSSadaf Ebrahimi $debug_cmd 2095*22dc650dSSadaf Ebrahimi 2096*22dc650dSSadaf Ebrahimi func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` 2097*22dc650dSSadaf Ebrahimi func_split_equals_rhs= 2098*22dc650dSSadaf Ebrahimi test "x$func_split_equals_lhs=" = "x$1" \ 2099*22dc650dSSadaf Ebrahimi || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` 2100*22dc650dSSadaf Ebrahimi } 2101*22dc650dSSadaf Ebrahimifi #func_split_equals 2102*22dc650dSSadaf Ebrahimi 2103*22dc650dSSadaf Ebrahimi 2104*22dc650dSSadaf Ebrahimi# func_split_short_opt SHORTOPT 2105*22dc650dSSadaf Ebrahimi# ----------------------------- 2106*22dc650dSSadaf Ebrahimi# Set func_split_short_opt_name and func_split_short_opt_arg shell 2107*22dc650dSSadaf Ebrahimi# variables after splitting SHORTOPT after the 2nd character. 2108*22dc650dSSadaf Ebrahimiif test yes = "$_G_HAVE_XSI_OPS" 2109*22dc650dSSadaf Ebrahimithen 2110*22dc650dSSadaf Ebrahimi # This is an XSI compatible shell, allowing a faster implementation... 2111*22dc650dSSadaf Ebrahimi eval 'func_split_short_opt () 2112*22dc650dSSadaf Ebrahimi { 2113*22dc650dSSadaf Ebrahimi $debug_cmd 2114*22dc650dSSadaf Ebrahimi 2115*22dc650dSSadaf Ebrahimi func_split_short_opt_arg=${1#??} 2116*22dc650dSSadaf Ebrahimi func_split_short_opt_name=${1%"$func_split_short_opt_arg"} 2117*22dc650dSSadaf Ebrahimi }' 2118*22dc650dSSadaf Ebrahimielse 2119*22dc650dSSadaf Ebrahimi # ...otherwise fall back to using expr, which is often a shell builtin. 2120*22dc650dSSadaf Ebrahimi func_split_short_opt () 2121*22dc650dSSadaf Ebrahimi { 2122*22dc650dSSadaf Ebrahimi $debug_cmd 2123*22dc650dSSadaf Ebrahimi 2124*22dc650dSSadaf Ebrahimi func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'` 2125*22dc650dSSadaf Ebrahimi func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` 2126*22dc650dSSadaf Ebrahimi } 2127*22dc650dSSadaf Ebrahimifi #func_split_short_opt 2128*22dc650dSSadaf Ebrahimi 2129*22dc650dSSadaf Ebrahimi 2130*22dc650dSSadaf Ebrahimi# func_usage 2131*22dc650dSSadaf Ebrahimi# ---------- 2132*22dc650dSSadaf Ebrahimi# Echo short help message to standard output and exit. 2133*22dc650dSSadaf Ebrahimifunc_usage () 2134*22dc650dSSadaf Ebrahimi{ 2135*22dc650dSSadaf Ebrahimi $debug_cmd 2136*22dc650dSSadaf Ebrahimi 2137*22dc650dSSadaf Ebrahimi func_usage_message 2138*22dc650dSSadaf Ebrahimi $ECHO "Run '$progname --help |${PAGER-more}' for full usage" 2139*22dc650dSSadaf Ebrahimi exit 0 2140*22dc650dSSadaf Ebrahimi} 2141*22dc650dSSadaf Ebrahimi 2142*22dc650dSSadaf Ebrahimi 2143*22dc650dSSadaf Ebrahimi# func_usage_message 2144*22dc650dSSadaf Ebrahimi# ------------------ 2145*22dc650dSSadaf Ebrahimi# Echo short help message to standard output. 2146*22dc650dSSadaf Ebrahimifunc_usage_message () 2147*22dc650dSSadaf Ebrahimi{ 2148*22dc650dSSadaf Ebrahimi $debug_cmd 2149*22dc650dSSadaf Ebrahimi 2150*22dc650dSSadaf Ebrahimi eval \$ECHO \""Usage: $usage"\" 2151*22dc650dSSadaf Ebrahimi echo 2152*22dc650dSSadaf Ebrahimi $SED -n 's|^# || 2153*22dc650dSSadaf Ebrahimi /^Written by/{ 2154*22dc650dSSadaf Ebrahimi x;p;x 2155*22dc650dSSadaf Ebrahimi } 2156*22dc650dSSadaf Ebrahimi h 2157*22dc650dSSadaf Ebrahimi /^Written by/q' < "$progpath" 2158*22dc650dSSadaf Ebrahimi echo 2159*22dc650dSSadaf Ebrahimi eval \$ECHO \""$usage_message"\" 2160*22dc650dSSadaf Ebrahimi} 2161*22dc650dSSadaf Ebrahimi 2162*22dc650dSSadaf Ebrahimi 2163*22dc650dSSadaf Ebrahimi# func_version 2164*22dc650dSSadaf Ebrahimi# ------------ 2165*22dc650dSSadaf Ebrahimi# Echo version message to standard output and exit. 2166*22dc650dSSadaf Ebrahimi# The version message is extracted from the calling file's header 2167*22dc650dSSadaf Ebrahimi# comments, with leading '# ' stripped: 2168*22dc650dSSadaf Ebrahimi# 1. First display the progname and version 2169*22dc650dSSadaf Ebrahimi# 2. Followed by the header comment line matching /^# Written by / 2170*22dc650dSSadaf Ebrahimi# 3. Then a blank line followed by the first following line matching 2171*22dc650dSSadaf Ebrahimi# /^# Copyright / 2172*22dc650dSSadaf Ebrahimi# 4. Immediately followed by any lines between the previous matches, 2173*22dc650dSSadaf Ebrahimi# except lines preceding the intervening completely blank line. 2174*22dc650dSSadaf Ebrahimi# For example, see the header comments of this file. 2175*22dc650dSSadaf Ebrahimifunc_version () 2176*22dc650dSSadaf Ebrahimi{ 2177*22dc650dSSadaf Ebrahimi $debug_cmd 2178*22dc650dSSadaf Ebrahimi 2179*22dc650dSSadaf Ebrahimi printf '%s\n' "$progname $scriptversion" 2180*22dc650dSSadaf Ebrahimi $SED -n ' 2181*22dc650dSSadaf Ebrahimi /^# Written by /!b 2182*22dc650dSSadaf Ebrahimi s|^# ||; p; n 2183*22dc650dSSadaf Ebrahimi 2184*22dc650dSSadaf Ebrahimi :fwd2blnk 2185*22dc650dSSadaf Ebrahimi /./ { 2186*22dc650dSSadaf Ebrahimi n 2187*22dc650dSSadaf Ebrahimi b fwd2blnk 2188*22dc650dSSadaf Ebrahimi } 2189*22dc650dSSadaf Ebrahimi p; n 2190*22dc650dSSadaf Ebrahimi 2191*22dc650dSSadaf Ebrahimi :holdwrnt 2192*22dc650dSSadaf Ebrahimi s|^# || 2193*22dc650dSSadaf Ebrahimi s|^# *$|| 2194*22dc650dSSadaf Ebrahimi /^Copyright /!{ 2195*22dc650dSSadaf Ebrahimi /./H 2196*22dc650dSSadaf Ebrahimi n 2197*22dc650dSSadaf Ebrahimi b holdwrnt 2198*22dc650dSSadaf Ebrahimi } 2199*22dc650dSSadaf Ebrahimi 2200*22dc650dSSadaf Ebrahimi s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| 2201*22dc650dSSadaf Ebrahimi G 2202*22dc650dSSadaf Ebrahimi s|\(\n\)\n*|\1|g 2203*22dc650dSSadaf Ebrahimi p; q' < "$progpath" 2204*22dc650dSSadaf Ebrahimi 2205*22dc650dSSadaf Ebrahimi exit $? 2206*22dc650dSSadaf Ebrahimi} 2207*22dc650dSSadaf Ebrahimi 2208*22dc650dSSadaf Ebrahimi 2209*22dc650dSSadaf Ebrahimi# Local variables: 2210*22dc650dSSadaf Ebrahimi# mode: shell-script 2211*22dc650dSSadaf Ebrahimi# sh-indentation: 2 2212*22dc650dSSadaf Ebrahimi# eval: (add-hook 'before-save-hook 'time-stamp) 2213*22dc650dSSadaf Ebrahimi# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC" 2214*22dc650dSSadaf Ebrahimi# time-stamp-time-zone: "UTC" 2215*22dc650dSSadaf Ebrahimi# End: 2216*22dc650dSSadaf Ebrahimi 2217*22dc650dSSadaf Ebrahimi# Set a version string. 2218*22dc650dSSadaf Ebrahimiscriptversion='(GNU libtool) 2.4.6.59-b55b-dirty' 2219*22dc650dSSadaf Ebrahimi 2220*22dc650dSSadaf Ebrahimi 2221*22dc650dSSadaf Ebrahimi# func_echo ARG... 2222*22dc650dSSadaf Ebrahimi# ---------------- 2223*22dc650dSSadaf Ebrahimi# Libtool also displays the current mode in messages, so override 2224*22dc650dSSadaf Ebrahimi# funclib.sh func_echo with this custom definition. 2225*22dc650dSSadaf Ebrahimifunc_echo () 2226*22dc650dSSadaf Ebrahimi{ 2227*22dc650dSSadaf Ebrahimi $debug_cmd 2228*22dc650dSSadaf Ebrahimi 2229*22dc650dSSadaf Ebrahimi _G_message=$* 2230*22dc650dSSadaf Ebrahimi 2231*22dc650dSSadaf Ebrahimi func_echo_IFS=$IFS 2232*22dc650dSSadaf Ebrahimi IFS=$nl 2233*22dc650dSSadaf Ebrahimi for _G_line in $_G_message; do 2234*22dc650dSSadaf Ebrahimi IFS=$func_echo_IFS 2235*22dc650dSSadaf Ebrahimi $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" 2236*22dc650dSSadaf Ebrahimi done 2237*22dc650dSSadaf Ebrahimi IFS=$func_echo_IFS 2238*22dc650dSSadaf Ebrahimi} 2239*22dc650dSSadaf Ebrahimi 2240*22dc650dSSadaf Ebrahimi 2241*22dc650dSSadaf Ebrahimi# func_warning ARG... 2242*22dc650dSSadaf Ebrahimi# ------------------- 2243*22dc650dSSadaf Ebrahimi# Libtool warnings are not categorized, so override funclib.sh 2244*22dc650dSSadaf Ebrahimi# func_warning with this simpler definition. 2245*22dc650dSSadaf Ebrahimifunc_warning () 2246*22dc650dSSadaf Ebrahimi{ 2247*22dc650dSSadaf Ebrahimi $debug_cmd 2248*22dc650dSSadaf Ebrahimi 2249*22dc650dSSadaf Ebrahimi $warning_func ${1+"$@"} 2250*22dc650dSSadaf Ebrahimi} 2251*22dc650dSSadaf Ebrahimi 2252*22dc650dSSadaf Ebrahimi 2253*22dc650dSSadaf Ebrahimi## ---------------- ## 2254*22dc650dSSadaf Ebrahimi## Options parsing. ## 2255*22dc650dSSadaf Ebrahimi## ---------------- ## 2256*22dc650dSSadaf Ebrahimi 2257*22dc650dSSadaf Ebrahimi# Hook in the functions to make sure our own options are parsed during 2258*22dc650dSSadaf Ebrahimi# the option parsing loop. 2259*22dc650dSSadaf Ebrahimi 2260*22dc650dSSadaf Ebrahimiusage='$progpath [OPTION]... [MODE-ARG]...' 2261*22dc650dSSadaf Ebrahimi 2262*22dc650dSSadaf Ebrahimi# Short help message in response to '-h'. 2263*22dc650dSSadaf Ebrahimiusage_message="Options: 2264*22dc650dSSadaf Ebrahimi --config show all configuration variables 2265*22dc650dSSadaf Ebrahimi --debug enable verbose shell tracing 2266*22dc650dSSadaf Ebrahimi -n, --dry-run display commands without modifying any files 2267*22dc650dSSadaf Ebrahimi --features display basic configuration information and exit 2268*22dc650dSSadaf Ebrahimi --mode=MODE use operation mode MODE 2269*22dc650dSSadaf Ebrahimi --no-warnings equivalent to '-Wnone' 2270*22dc650dSSadaf Ebrahimi --preserve-dup-deps don't remove duplicate dependency libraries 2271*22dc650dSSadaf Ebrahimi --quiet, --silent don't print informational messages 2272*22dc650dSSadaf Ebrahimi --tag=TAG use configuration variables from tag TAG 2273*22dc650dSSadaf Ebrahimi -v, --verbose print more informational messages than default 2274*22dc650dSSadaf Ebrahimi --version print version information 2275*22dc650dSSadaf Ebrahimi -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] 2276*22dc650dSSadaf Ebrahimi -h, --help, --help-all print short, long, or detailed help message 2277*22dc650dSSadaf Ebrahimi" 2278*22dc650dSSadaf Ebrahimi 2279*22dc650dSSadaf Ebrahimi# Additional text appended to 'usage_message' in response to '--help'. 2280*22dc650dSSadaf Ebrahimifunc_help () 2281*22dc650dSSadaf Ebrahimi{ 2282*22dc650dSSadaf Ebrahimi $debug_cmd 2283*22dc650dSSadaf Ebrahimi 2284*22dc650dSSadaf Ebrahimi func_usage_message 2285*22dc650dSSadaf Ebrahimi $ECHO "$long_help_message 2286*22dc650dSSadaf Ebrahimi 2287*22dc650dSSadaf EbrahimiMODE must be one of the following: 2288*22dc650dSSadaf Ebrahimi 2289*22dc650dSSadaf Ebrahimi clean remove files from the build directory 2290*22dc650dSSadaf Ebrahimi compile compile a source file into a libtool object 2291*22dc650dSSadaf Ebrahimi execute automatically set library path, then run a program 2292*22dc650dSSadaf Ebrahimi finish complete the installation of libtool libraries 2293*22dc650dSSadaf Ebrahimi install install libraries or executables 2294*22dc650dSSadaf Ebrahimi link create a library or an executable 2295*22dc650dSSadaf Ebrahimi uninstall remove libraries from an installed directory 2296*22dc650dSSadaf Ebrahimi 2297*22dc650dSSadaf EbrahimiMODE-ARGS vary depending on the MODE. When passed as first option, 2298*22dc650dSSadaf Ebrahimi'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. 2299*22dc650dSSadaf EbrahimiTry '$progname --help --mode=MODE' for a more detailed description of MODE. 2300*22dc650dSSadaf Ebrahimi 2301*22dc650dSSadaf EbrahimiWhen reporting a bug, please describe a test case to reproduce it and 2302*22dc650dSSadaf Ebrahimiinclude the following information: 2303*22dc650dSSadaf Ebrahimi 2304*22dc650dSSadaf Ebrahimi host-triplet: $host 2305*22dc650dSSadaf Ebrahimi shell: $SHELL 2306*22dc650dSSadaf Ebrahimi compiler: $LTCC 2307*22dc650dSSadaf Ebrahimi compiler flags: $LTCFLAGS 2308*22dc650dSSadaf Ebrahimi linker: $LD (gnu? $with_gnu_ld) 2309*22dc650dSSadaf Ebrahimi version: $progname (GNU libtool) 2.4.6.59-b55b-dirty 2310*22dc650dSSadaf Ebrahimi automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` 2311*22dc650dSSadaf Ebrahimi autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` 2312*22dc650dSSadaf Ebrahimi 2313*22dc650dSSadaf EbrahimiReport bugs to <[email protected]>. 2314*22dc650dSSadaf EbrahimiGNU libtool home page: <http://www.gnu.org/s/libtool/>. 2315*22dc650dSSadaf EbrahimiGeneral help using GNU software: <http://www.gnu.org/gethelp/>." 2316*22dc650dSSadaf Ebrahimi exit 0 2317*22dc650dSSadaf Ebrahimi} 2318*22dc650dSSadaf Ebrahimi 2319*22dc650dSSadaf Ebrahimi 2320*22dc650dSSadaf Ebrahimi# func_lo2o OBJECT-NAME 2321*22dc650dSSadaf Ebrahimi# --------------------- 2322*22dc650dSSadaf Ebrahimi# Transform OBJECT-NAME from a '.lo' suffix to the platform specific 2323*22dc650dSSadaf Ebrahimi# object suffix. 2324*22dc650dSSadaf Ebrahimi 2325*22dc650dSSadaf Ebrahimilo2o=s/\\.lo\$/.$objext/ 2326*22dc650dSSadaf Ebrahimio2lo=s/\\.$objext\$/.lo/ 2327*22dc650dSSadaf Ebrahimi 2328*22dc650dSSadaf Ebrahimiif test yes = "$_G_HAVE_XSI_OPS"; then 2329*22dc650dSSadaf Ebrahimi eval 'func_lo2o () 2330*22dc650dSSadaf Ebrahimi { 2331*22dc650dSSadaf Ebrahimi case $1 in 2332*22dc650dSSadaf Ebrahimi *.lo) func_lo2o_result=${1%.lo}.$objext ;; 2333*22dc650dSSadaf Ebrahimi * ) func_lo2o_result=$1 ;; 2334*22dc650dSSadaf Ebrahimi esac 2335*22dc650dSSadaf Ebrahimi }' 2336*22dc650dSSadaf Ebrahimi 2337*22dc650dSSadaf Ebrahimi # func_xform LIBOBJ-OR-SOURCE 2338*22dc650dSSadaf Ebrahimi # --------------------------- 2339*22dc650dSSadaf Ebrahimi # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) 2340*22dc650dSSadaf Ebrahimi # suffix to a '.lo' libtool-object suffix. 2341*22dc650dSSadaf Ebrahimi eval 'func_xform () 2342*22dc650dSSadaf Ebrahimi { 2343*22dc650dSSadaf Ebrahimi func_xform_result=${1%.*}.lo 2344*22dc650dSSadaf Ebrahimi }' 2345*22dc650dSSadaf Ebrahimielse 2346*22dc650dSSadaf Ebrahimi # ...otherwise fall back to using sed. 2347*22dc650dSSadaf Ebrahimi func_lo2o () 2348*22dc650dSSadaf Ebrahimi { 2349*22dc650dSSadaf Ebrahimi func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` 2350*22dc650dSSadaf Ebrahimi } 2351*22dc650dSSadaf Ebrahimi 2352*22dc650dSSadaf Ebrahimi func_xform () 2353*22dc650dSSadaf Ebrahimi { 2354*22dc650dSSadaf Ebrahimi func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` 2355*22dc650dSSadaf Ebrahimi } 2356*22dc650dSSadaf Ebrahimifi 2357*22dc650dSSadaf Ebrahimi 2358*22dc650dSSadaf Ebrahimi 2359*22dc650dSSadaf Ebrahimi# func_fatal_configuration ARG... 2360*22dc650dSSadaf Ebrahimi# ------------------------------- 2361*22dc650dSSadaf Ebrahimi# Echo program name prefixed message to standard error, followed by 2362*22dc650dSSadaf Ebrahimi# a configuration failure hint, and exit. 2363*22dc650dSSadaf Ebrahimifunc_fatal_configuration () 2364*22dc650dSSadaf Ebrahimi{ 2365*22dc650dSSadaf Ebrahimi func_fatal_error ${1+"$@"} \ 2366*22dc650dSSadaf Ebrahimi "See the $PACKAGE documentation for more information." \ 2367*22dc650dSSadaf Ebrahimi "Fatal configuration error." 2368*22dc650dSSadaf Ebrahimi} 2369*22dc650dSSadaf Ebrahimi 2370*22dc650dSSadaf Ebrahimi 2371*22dc650dSSadaf Ebrahimi# func_config 2372*22dc650dSSadaf Ebrahimi# ----------- 2373*22dc650dSSadaf Ebrahimi# Display the configuration for all the tags in this script. 2374*22dc650dSSadaf Ebrahimifunc_config () 2375*22dc650dSSadaf Ebrahimi{ 2376*22dc650dSSadaf Ebrahimi re_begincf='^# ### BEGIN LIBTOOL' 2377*22dc650dSSadaf Ebrahimi re_endcf='^# ### END LIBTOOL' 2378*22dc650dSSadaf Ebrahimi 2379*22dc650dSSadaf Ebrahimi # Default configuration. 2380*22dc650dSSadaf Ebrahimi $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 2381*22dc650dSSadaf Ebrahimi 2382*22dc650dSSadaf Ebrahimi # Now print the configurations for the tags. 2383*22dc650dSSadaf Ebrahimi for tagname in $taglist; do 2384*22dc650dSSadaf Ebrahimi $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 2385*22dc650dSSadaf Ebrahimi done 2386*22dc650dSSadaf Ebrahimi 2387*22dc650dSSadaf Ebrahimi exit $? 2388*22dc650dSSadaf Ebrahimi} 2389*22dc650dSSadaf Ebrahimi 2390*22dc650dSSadaf Ebrahimi 2391*22dc650dSSadaf Ebrahimi# func_features 2392*22dc650dSSadaf Ebrahimi# ------------- 2393*22dc650dSSadaf Ebrahimi# Display the features supported by this script. 2394*22dc650dSSadaf Ebrahimifunc_features () 2395*22dc650dSSadaf Ebrahimi{ 2396*22dc650dSSadaf Ebrahimi echo "host: $host" 2397*22dc650dSSadaf Ebrahimi if test yes = "$build_libtool_libs"; then 2398*22dc650dSSadaf Ebrahimi echo "enable shared libraries" 2399*22dc650dSSadaf Ebrahimi else 2400*22dc650dSSadaf Ebrahimi echo "disable shared libraries" 2401*22dc650dSSadaf Ebrahimi fi 2402*22dc650dSSadaf Ebrahimi if test yes = "$build_old_libs"; then 2403*22dc650dSSadaf Ebrahimi echo "enable static libraries" 2404*22dc650dSSadaf Ebrahimi else 2405*22dc650dSSadaf Ebrahimi echo "disable static libraries" 2406*22dc650dSSadaf Ebrahimi fi 2407*22dc650dSSadaf Ebrahimi 2408*22dc650dSSadaf Ebrahimi exit $? 2409*22dc650dSSadaf Ebrahimi} 2410*22dc650dSSadaf Ebrahimi 2411*22dc650dSSadaf Ebrahimi 2412*22dc650dSSadaf Ebrahimi# func_enable_tag TAGNAME 2413*22dc650dSSadaf Ebrahimi# ----------------------- 2414*22dc650dSSadaf Ebrahimi# Verify that TAGNAME is valid, and either flag an error and exit, or 2415*22dc650dSSadaf Ebrahimi# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 2416*22dc650dSSadaf Ebrahimi# variable here. 2417*22dc650dSSadaf Ebrahimifunc_enable_tag () 2418*22dc650dSSadaf Ebrahimi{ 2419*22dc650dSSadaf Ebrahimi # Global variable: 2420*22dc650dSSadaf Ebrahimi tagname=$1 2421*22dc650dSSadaf Ebrahimi 2422*22dc650dSSadaf Ebrahimi re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 2423*22dc650dSSadaf Ebrahimi re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 2424*22dc650dSSadaf Ebrahimi sed_extractcf=/$re_begincf/,/$re_endcf/p 2425*22dc650dSSadaf Ebrahimi 2426*22dc650dSSadaf Ebrahimi # Validate tagname. 2427*22dc650dSSadaf Ebrahimi case $tagname in 2428*22dc650dSSadaf Ebrahimi *[!-_A-Za-z0-9,/]*) 2429*22dc650dSSadaf Ebrahimi func_fatal_error "invalid tag name: $tagname" 2430*22dc650dSSadaf Ebrahimi ;; 2431*22dc650dSSadaf Ebrahimi esac 2432*22dc650dSSadaf Ebrahimi 2433*22dc650dSSadaf Ebrahimi # Don't test for the "default" C tag, as we know it's 2434*22dc650dSSadaf Ebrahimi # there but not specially marked. 2435*22dc650dSSadaf Ebrahimi case $tagname in 2436*22dc650dSSadaf Ebrahimi CC) ;; 2437*22dc650dSSadaf Ebrahimi *) 2438*22dc650dSSadaf Ebrahimi if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 2439*22dc650dSSadaf Ebrahimi taglist="$taglist $tagname" 2440*22dc650dSSadaf Ebrahimi 2441*22dc650dSSadaf Ebrahimi # Evaluate the configuration. Be careful to quote the path 2442*22dc650dSSadaf Ebrahimi # and the sed script, to avoid splitting on whitespace, but 2443*22dc650dSSadaf Ebrahimi # also don't use non-portable quotes within backquotes within 2444*22dc650dSSadaf Ebrahimi # quotes we have to do it in 2 steps: 2445*22dc650dSSadaf Ebrahimi extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 2446*22dc650dSSadaf Ebrahimi eval "$extractedcf" 2447*22dc650dSSadaf Ebrahimi else 2448*22dc650dSSadaf Ebrahimi func_error "ignoring unknown tag $tagname" 2449*22dc650dSSadaf Ebrahimi fi 2450*22dc650dSSadaf Ebrahimi ;; 2451*22dc650dSSadaf Ebrahimi esac 2452*22dc650dSSadaf Ebrahimi} 2453*22dc650dSSadaf Ebrahimi 2454*22dc650dSSadaf Ebrahimi 2455*22dc650dSSadaf Ebrahimi# func_check_version_match 2456*22dc650dSSadaf Ebrahimi# ------------------------ 2457*22dc650dSSadaf Ebrahimi# Ensure that we are using m4 macros, and libtool script from the same 2458*22dc650dSSadaf Ebrahimi# release of libtool. 2459*22dc650dSSadaf Ebrahimifunc_check_version_match () 2460*22dc650dSSadaf Ebrahimi{ 2461*22dc650dSSadaf Ebrahimi if test "$package_revision" != "$macro_revision"; then 2462*22dc650dSSadaf Ebrahimi if test "$VERSION" != "$macro_version"; then 2463*22dc650dSSadaf Ebrahimi if test -z "$macro_version"; then 2464*22dc650dSSadaf Ebrahimi cat >&2 <<_LT_EOF 2465*22dc650dSSadaf Ebrahimi$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2466*22dc650dSSadaf Ebrahimi$progname: definition of this LT_INIT comes from an older release. 2467*22dc650dSSadaf Ebrahimi$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2468*22dc650dSSadaf Ebrahimi$progname: and run autoconf again. 2469*22dc650dSSadaf Ebrahimi_LT_EOF 2470*22dc650dSSadaf Ebrahimi else 2471*22dc650dSSadaf Ebrahimi cat >&2 <<_LT_EOF 2472*22dc650dSSadaf Ebrahimi$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2473*22dc650dSSadaf Ebrahimi$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 2474*22dc650dSSadaf Ebrahimi$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2475*22dc650dSSadaf Ebrahimi$progname: and run autoconf again. 2476*22dc650dSSadaf Ebrahimi_LT_EOF 2477*22dc650dSSadaf Ebrahimi fi 2478*22dc650dSSadaf Ebrahimi else 2479*22dc650dSSadaf Ebrahimi cat >&2 <<_LT_EOF 2480*22dc650dSSadaf Ebrahimi$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 2481*22dc650dSSadaf Ebrahimi$progname: but the definition of this LT_INIT comes from revision $macro_revision. 2482*22dc650dSSadaf Ebrahimi$progname: You should recreate aclocal.m4 with macros from revision $package_revision 2483*22dc650dSSadaf Ebrahimi$progname: of $PACKAGE $VERSION and run autoconf again. 2484*22dc650dSSadaf Ebrahimi_LT_EOF 2485*22dc650dSSadaf Ebrahimi fi 2486*22dc650dSSadaf Ebrahimi 2487*22dc650dSSadaf Ebrahimi exit $EXIT_MISMATCH 2488*22dc650dSSadaf Ebrahimi fi 2489*22dc650dSSadaf Ebrahimi} 2490*22dc650dSSadaf Ebrahimi 2491*22dc650dSSadaf Ebrahimi 2492*22dc650dSSadaf Ebrahimi# libtool_options_prep [ARG]... 2493*22dc650dSSadaf Ebrahimi# ----------------------------- 2494*22dc650dSSadaf Ebrahimi# Preparation for options parsed by libtool. 2495*22dc650dSSadaf Ebrahimilibtool_options_prep () 2496*22dc650dSSadaf Ebrahimi{ 2497*22dc650dSSadaf Ebrahimi $debug_mode 2498*22dc650dSSadaf Ebrahimi 2499*22dc650dSSadaf Ebrahimi # Option defaults: 2500*22dc650dSSadaf Ebrahimi opt_config=false 2501*22dc650dSSadaf Ebrahimi opt_dlopen= 2502*22dc650dSSadaf Ebrahimi opt_dry_run=false 2503*22dc650dSSadaf Ebrahimi opt_help=false 2504*22dc650dSSadaf Ebrahimi opt_mode= 2505*22dc650dSSadaf Ebrahimi opt_preserve_dup_deps=false 2506*22dc650dSSadaf Ebrahimi opt_quiet=false 2507*22dc650dSSadaf Ebrahimi 2508*22dc650dSSadaf Ebrahimi nonopt= 2509*22dc650dSSadaf Ebrahimi preserve_args= 2510*22dc650dSSadaf Ebrahimi 2511*22dc650dSSadaf Ebrahimi _G_rc_lt_options_prep=: 2512*22dc650dSSadaf Ebrahimi 2513*22dc650dSSadaf Ebrahimi # Shorthand for --mode=foo, only valid as the first argument 2514*22dc650dSSadaf Ebrahimi case $1 in 2515*22dc650dSSadaf Ebrahimi clean|clea|cle|cl) 2516*22dc650dSSadaf Ebrahimi shift; set dummy --mode clean ${1+"$@"}; shift 2517*22dc650dSSadaf Ebrahimi ;; 2518*22dc650dSSadaf Ebrahimi compile|compil|compi|comp|com|co|c) 2519*22dc650dSSadaf Ebrahimi shift; set dummy --mode compile ${1+"$@"}; shift 2520*22dc650dSSadaf Ebrahimi ;; 2521*22dc650dSSadaf Ebrahimi execute|execut|execu|exec|exe|ex|e) 2522*22dc650dSSadaf Ebrahimi shift; set dummy --mode execute ${1+"$@"}; shift 2523*22dc650dSSadaf Ebrahimi ;; 2524*22dc650dSSadaf Ebrahimi finish|finis|fini|fin|fi|f) 2525*22dc650dSSadaf Ebrahimi shift; set dummy --mode finish ${1+"$@"}; shift 2526*22dc650dSSadaf Ebrahimi ;; 2527*22dc650dSSadaf Ebrahimi install|instal|insta|inst|ins|in|i) 2528*22dc650dSSadaf Ebrahimi shift; set dummy --mode install ${1+"$@"}; shift 2529*22dc650dSSadaf Ebrahimi ;; 2530*22dc650dSSadaf Ebrahimi link|lin|li|l) 2531*22dc650dSSadaf Ebrahimi shift; set dummy --mode link ${1+"$@"}; shift 2532*22dc650dSSadaf Ebrahimi ;; 2533*22dc650dSSadaf Ebrahimi uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 2534*22dc650dSSadaf Ebrahimi shift; set dummy --mode uninstall ${1+"$@"}; shift 2535*22dc650dSSadaf Ebrahimi ;; 2536*22dc650dSSadaf Ebrahimi *) 2537*22dc650dSSadaf Ebrahimi _G_rc_lt_options_prep=false 2538*22dc650dSSadaf Ebrahimi ;; 2539*22dc650dSSadaf Ebrahimi esac 2540*22dc650dSSadaf Ebrahimi 2541*22dc650dSSadaf Ebrahimi if $_G_rc_lt_options_prep; then 2542*22dc650dSSadaf Ebrahimi # Pass back the list of options. 2543*22dc650dSSadaf Ebrahimi func_quote eval ${1+"$@"} 2544*22dc650dSSadaf Ebrahimi libtool_options_prep_result=$func_quote_result 2545*22dc650dSSadaf Ebrahimi fi 2546*22dc650dSSadaf Ebrahimi} 2547*22dc650dSSadaf Ebrahimifunc_add_hook func_options_prep libtool_options_prep 2548*22dc650dSSadaf Ebrahimi 2549*22dc650dSSadaf Ebrahimi 2550*22dc650dSSadaf Ebrahimi# libtool_parse_options [ARG]... 2551*22dc650dSSadaf Ebrahimi# --------------------------------- 2552*22dc650dSSadaf Ebrahimi# Provide handling for libtool specific options. 2553*22dc650dSSadaf Ebrahimilibtool_parse_options () 2554*22dc650dSSadaf Ebrahimi{ 2555*22dc650dSSadaf Ebrahimi $debug_cmd 2556*22dc650dSSadaf Ebrahimi 2557*22dc650dSSadaf Ebrahimi _G_rc_lt_parse_options=false 2558*22dc650dSSadaf Ebrahimi 2559*22dc650dSSadaf Ebrahimi # Perform our own loop to consume as many options as possible in 2560*22dc650dSSadaf Ebrahimi # each iteration. 2561*22dc650dSSadaf Ebrahimi while test $# -gt 0; do 2562*22dc650dSSadaf Ebrahimi _G_match_lt_parse_options=: 2563*22dc650dSSadaf Ebrahimi _G_opt=$1 2564*22dc650dSSadaf Ebrahimi shift 2565*22dc650dSSadaf Ebrahimi case $_G_opt in 2566*22dc650dSSadaf Ebrahimi --dry-run|--dryrun|-n) 2567*22dc650dSSadaf Ebrahimi opt_dry_run=: 2568*22dc650dSSadaf Ebrahimi ;; 2569*22dc650dSSadaf Ebrahimi 2570*22dc650dSSadaf Ebrahimi --config) func_config ;; 2571*22dc650dSSadaf Ebrahimi 2572*22dc650dSSadaf Ebrahimi --dlopen|-dlopen) 2573*22dc650dSSadaf Ebrahimi opt_dlopen="${opt_dlopen+$opt_dlopen 2574*22dc650dSSadaf Ebrahimi}$1" 2575*22dc650dSSadaf Ebrahimi shift 2576*22dc650dSSadaf Ebrahimi ;; 2577*22dc650dSSadaf Ebrahimi 2578*22dc650dSSadaf Ebrahimi --preserve-dup-deps) 2579*22dc650dSSadaf Ebrahimi opt_preserve_dup_deps=: ;; 2580*22dc650dSSadaf Ebrahimi 2581*22dc650dSSadaf Ebrahimi --features) func_features ;; 2582*22dc650dSSadaf Ebrahimi 2583*22dc650dSSadaf Ebrahimi --finish) set dummy --mode finish ${1+"$@"}; shift ;; 2584*22dc650dSSadaf Ebrahimi 2585*22dc650dSSadaf Ebrahimi --help) opt_help=: ;; 2586*22dc650dSSadaf Ebrahimi 2587*22dc650dSSadaf Ebrahimi --help-all) opt_help=': help-all' ;; 2588*22dc650dSSadaf Ebrahimi 2589*22dc650dSSadaf Ebrahimi --mode) test $# = 0 && func_missing_arg $_G_opt && break 2590*22dc650dSSadaf Ebrahimi opt_mode=$1 2591*22dc650dSSadaf Ebrahimi case $1 in 2592*22dc650dSSadaf Ebrahimi # Valid mode arguments: 2593*22dc650dSSadaf Ebrahimi clean|compile|execute|finish|install|link|relink|uninstall) ;; 2594*22dc650dSSadaf Ebrahimi 2595*22dc650dSSadaf Ebrahimi # Catch anything else as an error 2596*22dc650dSSadaf Ebrahimi *) func_error "invalid argument for $_G_opt" 2597*22dc650dSSadaf Ebrahimi exit_cmd=exit 2598*22dc650dSSadaf Ebrahimi break 2599*22dc650dSSadaf Ebrahimi ;; 2600*22dc650dSSadaf Ebrahimi esac 2601*22dc650dSSadaf Ebrahimi shift 2602*22dc650dSSadaf Ebrahimi ;; 2603*22dc650dSSadaf Ebrahimi 2604*22dc650dSSadaf Ebrahimi --no-silent|--no-quiet) 2605*22dc650dSSadaf Ebrahimi opt_quiet=false 2606*22dc650dSSadaf Ebrahimi func_append preserve_args " $_G_opt" 2607*22dc650dSSadaf Ebrahimi ;; 2608*22dc650dSSadaf Ebrahimi 2609*22dc650dSSadaf Ebrahimi --no-warnings|--no-warning|--no-warn) 2610*22dc650dSSadaf Ebrahimi opt_warning=false 2611*22dc650dSSadaf Ebrahimi func_append preserve_args " $_G_opt" 2612*22dc650dSSadaf Ebrahimi ;; 2613*22dc650dSSadaf Ebrahimi 2614*22dc650dSSadaf Ebrahimi --no-verbose) 2615*22dc650dSSadaf Ebrahimi opt_verbose=false 2616*22dc650dSSadaf Ebrahimi func_append preserve_args " $_G_opt" 2617*22dc650dSSadaf Ebrahimi ;; 2618*22dc650dSSadaf Ebrahimi 2619*22dc650dSSadaf Ebrahimi --silent|--quiet) 2620*22dc650dSSadaf Ebrahimi opt_quiet=: 2621*22dc650dSSadaf Ebrahimi opt_verbose=false 2622*22dc650dSSadaf Ebrahimi func_append preserve_args " $_G_opt" 2623*22dc650dSSadaf Ebrahimi ;; 2624*22dc650dSSadaf Ebrahimi 2625*22dc650dSSadaf Ebrahimi --tag) test $# = 0 && func_missing_arg $_G_opt && break 2626*22dc650dSSadaf Ebrahimi opt_tag=$1 2627*22dc650dSSadaf Ebrahimi func_append preserve_args " $_G_opt $1" 2628*22dc650dSSadaf Ebrahimi func_enable_tag "$1" 2629*22dc650dSSadaf Ebrahimi shift 2630*22dc650dSSadaf Ebrahimi ;; 2631*22dc650dSSadaf Ebrahimi 2632*22dc650dSSadaf Ebrahimi --verbose|-v) opt_quiet=false 2633*22dc650dSSadaf Ebrahimi opt_verbose=: 2634*22dc650dSSadaf Ebrahimi func_append preserve_args " $_G_opt" 2635*22dc650dSSadaf Ebrahimi ;; 2636*22dc650dSSadaf Ebrahimi 2637*22dc650dSSadaf Ebrahimi # An option not handled by this hook function: 2638*22dc650dSSadaf Ebrahimi *) set dummy "$_G_opt" ${1+"$@"} ; shift 2639*22dc650dSSadaf Ebrahimi _G_match_lt_parse_options=false 2640*22dc650dSSadaf Ebrahimi break 2641*22dc650dSSadaf Ebrahimi ;; 2642*22dc650dSSadaf Ebrahimi esac 2643*22dc650dSSadaf Ebrahimi $_G_match_lt_parse_options && _G_rc_lt_parse_options=: 2644*22dc650dSSadaf Ebrahimi done 2645*22dc650dSSadaf Ebrahimi 2646*22dc650dSSadaf Ebrahimi if $_G_rc_lt_parse_options; then 2647*22dc650dSSadaf Ebrahimi # save modified positional parameters for caller 2648*22dc650dSSadaf Ebrahimi func_quote eval ${1+"$@"} 2649*22dc650dSSadaf Ebrahimi libtool_parse_options_result=$func_quote_result 2650*22dc650dSSadaf Ebrahimi fi 2651*22dc650dSSadaf Ebrahimi} 2652*22dc650dSSadaf Ebrahimifunc_add_hook func_parse_options libtool_parse_options 2653*22dc650dSSadaf Ebrahimi 2654*22dc650dSSadaf Ebrahimi 2655*22dc650dSSadaf Ebrahimi 2656*22dc650dSSadaf Ebrahimi# libtool_validate_options [ARG]... 2657*22dc650dSSadaf Ebrahimi# --------------------------------- 2658*22dc650dSSadaf Ebrahimi# Perform any sanity checks on option settings and/or unconsumed 2659*22dc650dSSadaf Ebrahimi# arguments. 2660*22dc650dSSadaf Ebrahimilibtool_validate_options () 2661*22dc650dSSadaf Ebrahimi{ 2662*22dc650dSSadaf Ebrahimi # save first non-option argument 2663*22dc650dSSadaf Ebrahimi if test 0 -lt $#; then 2664*22dc650dSSadaf Ebrahimi nonopt=$1 2665*22dc650dSSadaf Ebrahimi shift 2666*22dc650dSSadaf Ebrahimi fi 2667*22dc650dSSadaf Ebrahimi 2668*22dc650dSSadaf Ebrahimi # preserve --debug 2669*22dc650dSSadaf Ebrahimi test : = "$debug_cmd" || func_append preserve_args " --debug" 2670*22dc650dSSadaf Ebrahimi 2671*22dc650dSSadaf Ebrahimi case $host in 2672*22dc650dSSadaf Ebrahimi # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 2673*22dc650dSSadaf Ebrahimi # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 2674*22dc650dSSadaf Ebrahimi *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) 2675*22dc650dSSadaf Ebrahimi # don't eliminate duplications in $postdeps and $predeps 2676*22dc650dSSadaf Ebrahimi opt_duplicate_compiler_generated_deps=: 2677*22dc650dSSadaf Ebrahimi ;; 2678*22dc650dSSadaf Ebrahimi *) 2679*22dc650dSSadaf Ebrahimi opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 2680*22dc650dSSadaf Ebrahimi ;; 2681*22dc650dSSadaf Ebrahimi esac 2682*22dc650dSSadaf Ebrahimi 2683*22dc650dSSadaf Ebrahimi $opt_help || { 2684*22dc650dSSadaf Ebrahimi # Sanity checks first: 2685*22dc650dSSadaf Ebrahimi func_check_version_match 2686*22dc650dSSadaf Ebrahimi 2687*22dc650dSSadaf Ebrahimi test yes != "$build_libtool_libs" \ 2688*22dc650dSSadaf Ebrahimi && test yes != "$build_old_libs" \ 2689*22dc650dSSadaf Ebrahimi && func_fatal_configuration "not configured to build any kind of library" 2690*22dc650dSSadaf Ebrahimi 2691*22dc650dSSadaf Ebrahimi # Darwin sucks 2692*22dc650dSSadaf Ebrahimi eval std_shrext=\"$shrext_cmds\" 2693*22dc650dSSadaf Ebrahimi 2694*22dc650dSSadaf Ebrahimi # Only execute mode is allowed to have -dlopen flags. 2695*22dc650dSSadaf Ebrahimi if test -n "$opt_dlopen" && test execute != "$opt_mode"; then 2696*22dc650dSSadaf Ebrahimi func_error "unrecognized option '-dlopen'" 2697*22dc650dSSadaf Ebrahimi $ECHO "$help" 1>&2 2698*22dc650dSSadaf Ebrahimi exit $EXIT_FAILURE 2699*22dc650dSSadaf Ebrahimi fi 2700*22dc650dSSadaf Ebrahimi 2701*22dc650dSSadaf Ebrahimi # Change the help message to a mode-specific one. 2702*22dc650dSSadaf Ebrahimi generic_help=$help 2703*22dc650dSSadaf Ebrahimi help="Try '$progname --help --mode=$opt_mode' for more information." 2704*22dc650dSSadaf Ebrahimi } 2705*22dc650dSSadaf Ebrahimi 2706*22dc650dSSadaf Ebrahimi # Pass back the unparsed argument list 2707*22dc650dSSadaf Ebrahimi func_quote eval ${1+"$@"} 2708*22dc650dSSadaf Ebrahimi libtool_validate_options_result=$func_quote_result 2709*22dc650dSSadaf Ebrahimi} 2710*22dc650dSSadaf Ebrahimifunc_add_hook func_validate_options libtool_validate_options 2711*22dc650dSSadaf Ebrahimi 2712*22dc650dSSadaf Ebrahimi 2713*22dc650dSSadaf Ebrahimi# Process options as early as possible so that --help and --version 2714*22dc650dSSadaf Ebrahimi# can return quickly. 2715*22dc650dSSadaf Ebrahimifunc_options ${1+"$@"} 2716*22dc650dSSadaf Ebrahimieval set dummy "$func_options_result"; shift 2717*22dc650dSSadaf Ebrahimi 2718*22dc650dSSadaf Ebrahimi 2719*22dc650dSSadaf Ebrahimi 2720*22dc650dSSadaf Ebrahimi## ----------- ## 2721*22dc650dSSadaf Ebrahimi## Main. ## 2722*22dc650dSSadaf Ebrahimi## ----------- ## 2723*22dc650dSSadaf Ebrahimi 2724*22dc650dSSadaf Ebrahimimagic='%%%MAGIC variable%%%' 2725*22dc650dSSadaf Ebrahimimagic_exe='%%%MAGIC EXE variable%%%' 2726*22dc650dSSadaf Ebrahimi 2727*22dc650dSSadaf Ebrahimi# Global variables. 2728*22dc650dSSadaf Ebrahimiextracted_archives= 2729*22dc650dSSadaf Ebrahimiextracted_serial=0 2730*22dc650dSSadaf Ebrahimi 2731*22dc650dSSadaf Ebrahimi# If this variable is set in any of the actions, the command in it 2732*22dc650dSSadaf Ebrahimi# will be execed at the end. This prevents here-documents from being 2733*22dc650dSSadaf Ebrahimi# left over by shells. 2734*22dc650dSSadaf Ebrahimiexec_cmd= 2735*22dc650dSSadaf Ebrahimi 2736*22dc650dSSadaf Ebrahimi 2737*22dc650dSSadaf Ebrahimi# A function that is used when there is no print builtin or printf. 2738*22dc650dSSadaf Ebrahimifunc_fallback_echo () 2739*22dc650dSSadaf Ebrahimi{ 2740*22dc650dSSadaf Ebrahimi eval 'cat <<_LTECHO_EOF 2741*22dc650dSSadaf Ebrahimi$1 2742*22dc650dSSadaf Ebrahimi_LTECHO_EOF' 2743*22dc650dSSadaf Ebrahimi} 2744*22dc650dSSadaf Ebrahimi 2745*22dc650dSSadaf Ebrahimi# func_generated_by_libtool 2746*22dc650dSSadaf Ebrahimi# True iff stdin has been generated by Libtool. This function is only 2747*22dc650dSSadaf Ebrahimi# a basic sanity check; it will hardly flush out determined imposters. 2748*22dc650dSSadaf Ebrahimifunc_generated_by_libtool_p () 2749*22dc650dSSadaf Ebrahimi{ 2750*22dc650dSSadaf Ebrahimi $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 2751*22dc650dSSadaf Ebrahimi} 2752*22dc650dSSadaf Ebrahimi 2753*22dc650dSSadaf Ebrahimi# func_lalib_p file 2754*22dc650dSSadaf Ebrahimi# True iff FILE is a libtool '.la' library or '.lo' object file. 2755*22dc650dSSadaf Ebrahimi# This function is only a basic sanity check; it will hardly flush out 2756*22dc650dSSadaf Ebrahimi# determined imposters. 2757*22dc650dSSadaf Ebrahimifunc_lalib_p () 2758*22dc650dSSadaf Ebrahimi{ 2759*22dc650dSSadaf Ebrahimi test -f "$1" && 2760*22dc650dSSadaf Ebrahimi $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p 2761*22dc650dSSadaf Ebrahimi} 2762*22dc650dSSadaf Ebrahimi 2763*22dc650dSSadaf Ebrahimi# func_lalib_unsafe_p file 2764*22dc650dSSadaf Ebrahimi# True iff FILE is a libtool '.la' library or '.lo' object file. 2765*22dc650dSSadaf Ebrahimi# This function implements the same check as func_lalib_p without 2766*22dc650dSSadaf Ebrahimi# resorting to external programs. To this end, it redirects stdin and 2767*22dc650dSSadaf Ebrahimi# closes it afterwards, without saving the original file descriptor. 2768*22dc650dSSadaf Ebrahimi# As a safety measure, use it only where a negative result would be 2769*22dc650dSSadaf Ebrahimi# fatal anyway. Works if 'file' does not exist. 2770*22dc650dSSadaf Ebrahimifunc_lalib_unsafe_p () 2771*22dc650dSSadaf Ebrahimi{ 2772*22dc650dSSadaf Ebrahimi lalib_p=no 2773*22dc650dSSadaf Ebrahimi if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 2774*22dc650dSSadaf Ebrahimi for lalib_p_l in 1 2 3 4 2775*22dc650dSSadaf Ebrahimi do 2776*22dc650dSSadaf Ebrahimi read lalib_p_line 2777*22dc650dSSadaf Ebrahimi case $lalib_p_line in 2778*22dc650dSSadaf Ebrahimi \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 2779*22dc650dSSadaf Ebrahimi esac 2780*22dc650dSSadaf Ebrahimi done 2781*22dc650dSSadaf Ebrahimi exec 0<&5 5<&- 2782*22dc650dSSadaf Ebrahimi fi 2783*22dc650dSSadaf Ebrahimi test yes = "$lalib_p" 2784*22dc650dSSadaf Ebrahimi} 2785*22dc650dSSadaf Ebrahimi 2786*22dc650dSSadaf Ebrahimi# func_ltwrapper_script_p file 2787*22dc650dSSadaf Ebrahimi# True iff FILE is a libtool wrapper script 2788*22dc650dSSadaf Ebrahimi# This function is only a basic sanity check; it will hardly flush out 2789*22dc650dSSadaf Ebrahimi# determined imposters. 2790*22dc650dSSadaf Ebrahimifunc_ltwrapper_script_p () 2791*22dc650dSSadaf Ebrahimi{ 2792*22dc650dSSadaf Ebrahimi test -f "$1" && 2793*22dc650dSSadaf Ebrahimi $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p 2794*22dc650dSSadaf Ebrahimi} 2795*22dc650dSSadaf Ebrahimi 2796*22dc650dSSadaf Ebrahimi# func_ltwrapper_executable_p file 2797*22dc650dSSadaf Ebrahimi# True iff FILE is a libtool wrapper executable 2798*22dc650dSSadaf Ebrahimi# This function is only a basic sanity check; it will hardly flush out 2799*22dc650dSSadaf Ebrahimi# determined imposters. 2800*22dc650dSSadaf Ebrahimifunc_ltwrapper_executable_p () 2801*22dc650dSSadaf Ebrahimi{ 2802*22dc650dSSadaf Ebrahimi func_ltwrapper_exec_suffix= 2803*22dc650dSSadaf Ebrahimi case $1 in 2804*22dc650dSSadaf Ebrahimi *.exe) ;; 2805*22dc650dSSadaf Ebrahimi *) func_ltwrapper_exec_suffix=.exe ;; 2806*22dc650dSSadaf Ebrahimi esac 2807*22dc650dSSadaf Ebrahimi $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 2808*22dc650dSSadaf Ebrahimi} 2809*22dc650dSSadaf Ebrahimi 2810*22dc650dSSadaf Ebrahimi# func_ltwrapper_scriptname file 2811*22dc650dSSadaf Ebrahimi# Assumes file is an ltwrapper_executable 2812*22dc650dSSadaf Ebrahimi# uses $file to determine the appropriate filename for a 2813*22dc650dSSadaf Ebrahimi# temporary ltwrapper_script. 2814*22dc650dSSadaf Ebrahimifunc_ltwrapper_scriptname () 2815*22dc650dSSadaf Ebrahimi{ 2816*22dc650dSSadaf Ebrahimi func_dirname_and_basename "$1" "" "." 2817*22dc650dSSadaf Ebrahimi func_stripname '' '.exe' "$func_basename_result" 2818*22dc650dSSadaf Ebrahimi func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper 2819*22dc650dSSadaf Ebrahimi} 2820*22dc650dSSadaf Ebrahimi 2821*22dc650dSSadaf Ebrahimi# func_ltwrapper_p file 2822*22dc650dSSadaf Ebrahimi# True iff FILE is a libtool wrapper script or wrapper executable 2823*22dc650dSSadaf Ebrahimi# This function is only a basic sanity check; it will hardly flush out 2824*22dc650dSSadaf Ebrahimi# determined imposters. 2825*22dc650dSSadaf Ebrahimifunc_ltwrapper_p () 2826*22dc650dSSadaf Ebrahimi{ 2827*22dc650dSSadaf Ebrahimi func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 2828*22dc650dSSadaf Ebrahimi} 2829*22dc650dSSadaf Ebrahimi 2830*22dc650dSSadaf Ebrahimi 2831*22dc650dSSadaf Ebrahimi# func_execute_cmds commands fail_cmd 2832*22dc650dSSadaf Ebrahimi# Execute tilde-delimited COMMANDS. 2833*22dc650dSSadaf Ebrahimi# If FAIL_CMD is given, eval that upon failure. 2834*22dc650dSSadaf Ebrahimi# FAIL_CMD may read-access the current command in variable CMD! 2835*22dc650dSSadaf Ebrahimifunc_execute_cmds () 2836*22dc650dSSadaf Ebrahimi{ 2837*22dc650dSSadaf Ebrahimi $debug_cmd 2838*22dc650dSSadaf Ebrahimi 2839*22dc650dSSadaf Ebrahimi save_ifs=$IFS; IFS='~' 2840*22dc650dSSadaf Ebrahimi for cmd in $1; do 2841*22dc650dSSadaf Ebrahimi IFS=$sp$nl 2842*22dc650dSSadaf Ebrahimi eval cmd=\"$cmd\" 2843*22dc650dSSadaf Ebrahimi IFS=$save_ifs 2844*22dc650dSSadaf Ebrahimi func_show_eval "$cmd" "${2-:}" 2845*22dc650dSSadaf Ebrahimi done 2846*22dc650dSSadaf Ebrahimi IFS=$save_ifs 2847*22dc650dSSadaf Ebrahimi} 2848*22dc650dSSadaf Ebrahimi 2849*22dc650dSSadaf Ebrahimi 2850*22dc650dSSadaf Ebrahimi# func_source file 2851*22dc650dSSadaf Ebrahimi# Source FILE, adding directory component if necessary. 2852*22dc650dSSadaf Ebrahimi# Note that it is not necessary on cygwin/mingw to append a dot to 2853*22dc650dSSadaf Ebrahimi# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 2854*22dc650dSSadaf Ebrahimi# behavior happens only for exec(3), not for open(2)! Also, sourcing 2855*22dc650dSSadaf Ebrahimi# 'FILE.' does not work on cygwin managed mounts. 2856*22dc650dSSadaf Ebrahimifunc_source () 2857*22dc650dSSadaf Ebrahimi{ 2858*22dc650dSSadaf Ebrahimi $debug_cmd 2859*22dc650dSSadaf Ebrahimi 2860*22dc650dSSadaf Ebrahimi case $1 in 2861*22dc650dSSadaf Ebrahimi */* | *\\*) . "$1" ;; 2862*22dc650dSSadaf Ebrahimi *) . "./$1" ;; 2863*22dc650dSSadaf Ebrahimi esac 2864*22dc650dSSadaf Ebrahimi} 2865*22dc650dSSadaf Ebrahimi 2866*22dc650dSSadaf Ebrahimi 2867*22dc650dSSadaf Ebrahimi# func_resolve_sysroot PATH 2868*22dc650dSSadaf Ebrahimi# Replace a leading = in PATH with a sysroot. Store the result into 2869*22dc650dSSadaf Ebrahimi# func_resolve_sysroot_result 2870*22dc650dSSadaf Ebrahimifunc_resolve_sysroot () 2871*22dc650dSSadaf Ebrahimi{ 2872*22dc650dSSadaf Ebrahimi func_resolve_sysroot_result=$1 2873*22dc650dSSadaf Ebrahimi case $func_resolve_sysroot_result in 2874*22dc650dSSadaf Ebrahimi =*) 2875*22dc650dSSadaf Ebrahimi func_stripname '=' '' "$func_resolve_sysroot_result" 2876*22dc650dSSadaf Ebrahimi func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 2877*22dc650dSSadaf Ebrahimi ;; 2878*22dc650dSSadaf Ebrahimi esac 2879*22dc650dSSadaf Ebrahimi} 2880*22dc650dSSadaf Ebrahimi 2881*22dc650dSSadaf Ebrahimi# func_replace_sysroot PATH 2882*22dc650dSSadaf Ebrahimi# If PATH begins with the sysroot, replace it with = and 2883*22dc650dSSadaf Ebrahimi# store the result into func_replace_sysroot_result. 2884*22dc650dSSadaf Ebrahimifunc_replace_sysroot () 2885*22dc650dSSadaf Ebrahimi{ 2886*22dc650dSSadaf Ebrahimi case $lt_sysroot:$1 in 2887*22dc650dSSadaf Ebrahimi ?*:"$lt_sysroot"*) 2888*22dc650dSSadaf Ebrahimi func_stripname "$lt_sysroot" '' "$1" 2889*22dc650dSSadaf Ebrahimi func_replace_sysroot_result='='$func_stripname_result 2890*22dc650dSSadaf Ebrahimi ;; 2891*22dc650dSSadaf Ebrahimi *) 2892*22dc650dSSadaf Ebrahimi # Including no sysroot. 2893*22dc650dSSadaf Ebrahimi func_replace_sysroot_result=$1 2894*22dc650dSSadaf Ebrahimi ;; 2895*22dc650dSSadaf Ebrahimi esac 2896*22dc650dSSadaf Ebrahimi} 2897*22dc650dSSadaf Ebrahimi 2898*22dc650dSSadaf Ebrahimi# func_infer_tag arg 2899*22dc650dSSadaf Ebrahimi# Infer tagged configuration to use if any are available and 2900*22dc650dSSadaf Ebrahimi# if one wasn't chosen via the "--tag" command line option. 2901*22dc650dSSadaf Ebrahimi# Only attempt this if the compiler in the base compile 2902*22dc650dSSadaf Ebrahimi# command doesn't match the default compiler. 2903*22dc650dSSadaf Ebrahimi# arg is usually of the form 'gcc ...' 2904*22dc650dSSadaf Ebrahimifunc_infer_tag () 2905*22dc650dSSadaf Ebrahimi{ 2906*22dc650dSSadaf Ebrahimi $debug_cmd 2907*22dc650dSSadaf Ebrahimi 2908*22dc650dSSadaf Ebrahimi if test -n "$available_tags" && test -z "$tagname"; then 2909*22dc650dSSadaf Ebrahimi CC_quoted= 2910*22dc650dSSadaf Ebrahimi for arg in $CC; do 2911*22dc650dSSadaf Ebrahimi func_append_quoted CC_quoted "$arg" 2912*22dc650dSSadaf Ebrahimi done 2913*22dc650dSSadaf Ebrahimi CC_expanded=`func_echo_all $CC` 2914*22dc650dSSadaf Ebrahimi CC_quoted_expanded=`func_echo_all $CC_quoted` 2915*22dc650dSSadaf Ebrahimi case $@ in 2916*22dc650dSSadaf Ebrahimi # Blanks in the command may have been stripped by the calling shell, 2917*22dc650dSSadaf Ebrahimi # but not from the CC environment variable when configure was run. 2918*22dc650dSSadaf Ebrahimi " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2919*22dc650dSSadaf Ebrahimi " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 2920*22dc650dSSadaf Ebrahimi # Blanks at the start of $base_compile will cause this to fail 2921*22dc650dSSadaf Ebrahimi # if we don't check for them as well. 2922*22dc650dSSadaf Ebrahimi *) 2923*22dc650dSSadaf Ebrahimi for z in $available_tags; do 2924*22dc650dSSadaf Ebrahimi if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 2925*22dc650dSSadaf Ebrahimi # Evaluate the configuration. 2926*22dc650dSSadaf Ebrahimi eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 2927*22dc650dSSadaf Ebrahimi CC_quoted= 2928*22dc650dSSadaf Ebrahimi for arg in $CC; do 2929*22dc650dSSadaf Ebrahimi # Double-quote args containing other shell metacharacters. 2930*22dc650dSSadaf Ebrahimi func_append_quoted CC_quoted "$arg" 2931*22dc650dSSadaf Ebrahimi done 2932*22dc650dSSadaf Ebrahimi CC_expanded=`func_echo_all $CC` 2933*22dc650dSSadaf Ebrahimi CC_quoted_expanded=`func_echo_all $CC_quoted` 2934*22dc650dSSadaf Ebrahimi case "$@ " in 2935*22dc650dSSadaf Ebrahimi " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2936*22dc650dSSadaf Ebrahimi " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 2937*22dc650dSSadaf Ebrahimi # The compiler in the base compile command matches 2938*22dc650dSSadaf Ebrahimi # the one in the tagged configuration. 2939*22dc650dSSadaf Ebrahimi # Assume this is the tagged configuration we want. 2940*22dc650dSSadaf Ebrahimi tagname=$z 2941*22dc650dSSadaf Ebrahimi break 2942*22dc650dSSadaf Ebrahimi ;; 2943*22dc650dSSadaf Ebrahimi esac 2944*22dc650dSSadaf Ebrahimi fi 2945*22dc650dSSadaf Ebrahimi done 2946*22dc650dSSadaf Ebrahimi # If $tagname still isn't set, then no tagged configuration 2947*22dc650dSSadaf Ebrahimi # was found and let the user know that the "--tag" command 2948*22dc650dSSadaf Ebrahimi # line option must be used. 2949*22dc650dSSadaf Ebrahimi if test -z "$tagname"; then 2950*22dc650dSSadaf Ebrahimi func_echo "unable to infer tagged configuration" 2951*22dc650dSSadaf Ebrahimi func_fatal_error "specify a tag with '--tag'" 2952*22dc650dSSadaf Ebrahimi# else 2953*22dc650dSSadaf Ebrahimi# func_verbose "using $tagname tagged configuration" 2954*22dc650dSSadaf Ebrahimi fi 2955*22dc650dSSadaf Ebrahimi ;; 2956*22dc650dSSadaf Ebrahimi esac 2957*22dc650dSSadaf Ebrahimi fi 2958*22dc650dSSadaf Ebrahimi} 2959*22dc650dSSadaf Ebrahimi 2960*22dc650dSSadaf Ebrahimi 2961*22dc650dSSadaf Ebrahimi 2962*22dc650dSSadaf Ebrahimi# func_write_libtool_object output_name pic_name nonpic_name 2963*22dc650dSSadaf Ebrahimi# Create a libtool object file (analogous to a ".la" file), 2964*22dc650dSSadaf Ebrahimi# but don't create it if we're doing a dry run. 2965*22dc650dSSadaf Ebrahimifunc_write_libtool_object () 2966*22dc650dSSadaf Ebrahimi{ 2967*22dc650dSSadaf Ebrahimi write_libobj=$1 2968*22dc650dSSadaf Ebrahimi if test yes = "$build_libtool_libs"; then 2969*22dc650dSSadaf Ebrahimi write_lobj=\'$2\' 2970*22dc650dSSadaf Ebrahimi else 2971*22dc650dSSadaf Ebrahimi write_lobj=none 2972*22dc650dSSadaf Ebrahimi fi 2973*22dc650dSSadaf Ebrahimi 2974*22dc650dSSadaf Ebrahimi if test yes = "$build_old_libs"; then 2975*22dc650dSSadaf Ebrahimi write_oldobj=\'$3\' 2976*22dc650dSSadaf Ebrahimi else 2977*22dc650dSSadaf Ebrahimi write_oldobj=none 2978*22dc650dSSadaf Ebrahimi fi 2979*22dc650dSSadaf Ebrahimi 2980*22dc650dSSadaf Ebrahimi $opt_dry_run || { 2981*22dc650dSSadaf Ebrahimi cat >${write_libobj}T <<EOF 2982*22dc650dSSadaf Ebrahimi# $write_libobj - a libtool object file 2983*22dc650dSSadaf Ebrahimi# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 2984*22dc650dSSadaf Ebrahimi# 2985*22dc650dSSadaf Ebrahimi# Please DO NOT delete this file! 2986*22dc650dSSadaf Ebrahimi# It is necessary for linking the library. 2987*22dc650dSSadaf Ebrahimi 2988*22dc650dSSadaf Ebrahimi# Name of the PIC object. 2989*22dc650dSSadaf Ebrahimipic_object=$write_lobj 2990*22dc650dSSadaf Ebrahimi 2991*22dc650dSSadaf Ebrahimi# Name of the non-PIC object 2992*22dc650dSSadaf Ebrahiminon_pic_object=$write_oldobj 2993*22dc650dSSadaf Ebrahimi 2994*22dc650dSSadaf EbrahimiEOF 2995*22dc650dSSadaf Ebrahimi $MV "${write_libobj}T" "$write_libobj" 2996*22dc650dSSadaf Ebrahimi } 2997*22dc650dSSadaf Ebrahimi} 2998*22dc650dSSadaf Ebrahimi 2999*22dc650dSSadaf Ebrahimi 3000*22dc650dSSadaf Ebrahimi################################################## 3001*22dc650dSSadaf Ebrahimi# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 3002*22dc650dSSadaf Ebrahimi################################################## 3003*22dc650dSSadaf Ebrahimi 3004*22dc650dSSadaf Ebrahimi# func_convert_core_file_wine_to_w32 ARG 3005*22dc650dSSadaf Ebrahimi# Helper function used by file name conversion functions when $build is *nix, 3006*22dc650dSSadaf Ebrahimi# and $host is mingw, cygwin, or some other w32 environment. Relies on a 3007*22dc650dSSadaf Ebrahimi# correctly configured wine environment available, with the winepath program 3008*22dc650dSSadaf Ebrahimi# in $build's $PATH. 3009*22dc650dSSadaf Ebrahimi# 3010*22dc650dSSadaf Ebrahimi# ARG is the $build file name to be converted to w32 format. 3011*22dc650dSSadaf Ebrahimi# Result is available in $func_convert_core_file_wine_to_w32_result, and will 3012*22dc650dSSadaf Ebrahimi# be empty on error (or when ARG is empty) 3013*22dc650dSSadaf Ebrahimifunc_convert_core_file_wine_to_w32 () 3014*22dc650dSSadaf Ebrahimi{ 3015*22dc650dSSadaf Ebrahimi $debug_cmd 3016*22dc650dSSadaf Ebrahimi 3017*22dc650dSSadaf Ebrahimi func_convert_core_file_wine_to_w32_result=$1 3018*22dc650dSSadaf Ebrahimi if test -n "$1"; then 3019*22dc650dSSadaf Ebrahimi # Unfortunately, winepath does not exit with a non-zero error code, so we 3020*22dc650dSSadaf Ebrahimi # are forced to check the contents of stdout. On the other hand, if the 3021*22dc650dSSadaf Ebrahimi # command is not found, the shell will set an exit code of 127 and print 3022*22dc650dSSadaf Ebrahimi # *an error message* to stdout. So we must check for both error code of 3023*22dc650dSSadaf Ebrahimi # zero AND non-empty stdout, which explains the odd construction: 3024*22dc650dSSadaf Ebrahimi func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 3025*22dc650dSSadaf Ebrahimi if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then 3026*22dc650dSSadaf Ebrahimi func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 3027*22dc650dSSadaf Ebrahimi $SED -e "$sed_naive_backslashify"` 3028*22dc650dSSadaf Ebrahimi else 3029*22dc650dSSadaf Ebrahimi func_convert_core_file_wine_to_w32_result= 3030*22dc650dSSadaf Ebrahimi fi 3031*22dc650dSSadaf Ebrahimi fi 3032*22dc650dSSadaf Ebrahimi} 3033*22dc650dSSadaf Ebrahimi# end: func_convert_core_file_wine_to_w32 3034*22dc650dSSadaf Ebrahimi 3035*22dc650dSSadaf Ebrahimi 3036*22dc650dSSadaf Ebrahimi# func_convert_core_path_wine_to_w32 ARG 3037*22dc650dSSadaf Ebrahimi# Helper function used by path conversion functions when $build is *nix, and 3038*22dc650dSSadaf Ebrahimi# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 3039*22dc650dSSadaf Ebrahimi# configured wine environment available, with the winepath program in $build's 3040*22dc650dSSadaf Ebrahimi# $PATH. Assumes ARG has no leading or trailing path separator characters. 3041*22dc650dSSadaf Ebrahimi# 3042*22dc650dSSadaf Ebrahimi# ARG is path to be converted from $build format to win32. 3043*22dc650dSSadaf Ebrahimi# Result is available in $func_convert_core_path_wine_to_w32_result. 3044*22dc650dSSadaf Ebrahimi# Unconvertible file (directory) names in ARG are skipped; if no directory names 3045*22dc650dSSadaf Ebrahimi# are convertible, then the result may be empty. 3046*22dc650dSSadaf Ebrahimifunc_convert_core_path_wine_to_w32 () 3047*22dc650dSSadaf Ebrahimi{ 3048*22dc650dSSadaf Ebrahimi $debug_cmd 3049*22dc650dSSadaf Ebrahimi 3050*22dc650dSSadaf Ebrahimi # unfortunately, winepath doesn't convert paths, only file names 3051*22dc650dSSadaf Ebrahimi func_convert_core_path_wine_to_w32_result= 3052*22dc650dSSadaf Ebrahimi if test -n "$1"; then 3053*22dc650dSSadaf Ebrahimi oldIFS=$IFS 3054*22dc650dSSadaf Ebrahimi IFS=: 3055*22dc650dSSadaf Ebrahimi for func_convert_core_path_wine_to_w32_f in $1; do 3056*22dc650dSSadaf Ebrahimi IFS=$oldIFS 3057*22dc650dSSadaf Ebrahimi func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 3058*22dc650dSSadaf Ebrahimi if test -n "$func_convert_core_file_wine_to_w32_result"; then 3059*22dc650dSSadaf Ebrahimi if test -z "$func_convert_core_path_wine_to_w32_result"; then 3060*22dc650dSSadaf Ebrahimi func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result 3061*22dc650dSSadaf Ebrahimi else 3062*22dc650dSSadaf Ebrahimi func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 3063*22dc650dSSadaf Ebrahimi fi 3064*22dc650dSSadaf Ebrahimi fi 3065*22dc650dSSadaf Ebrahimi done 3066*22dc650dSSadaf Ebrahimi IFS=$oldIFS 3067*22dc650dSSadaf Ebrahimi fi 3068*22dc650dSSadaf Ebrahimi} 3069*22dc650dSSadaf Ebrahimi# end: func_convert_core_path_wine_to_w32 3070*22dc650dSSadaf Ebrahimi 3071*22dc650dSSadaf Ebrahimi 3072*22dc650dSSadaf Ebrahimi# func_cygpath ARGS... 3073*22dc650dSSadaf Ebrahimi# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 3074*22dc650dSSadaf Ebrahimi# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 3075*22dc650dSSadaf Ebrahimi# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 3076*22dc650dSSadaf Ebrahimi# (2), returns the Cygwin file name or path in func_cygpath_result (input 3077*22dc650dSSadaf Ebrahimi# file name or path is assumed to be in w32 format, as previously converted 3078*22dc650dSSadaf Ebrahimi# from $build's *nix or MSYS format). In case (3), returns the w32 file name 3079*22dc650dSSadaf Ebrahimi# or path in func_cygpath_result (input file name or path is assumed to be in 3080*22dc650dSSadaf Ebrahimi# Cygwin format). Returns an empty string on error. 3081*22dc650dSSadaf Ebrahimi# 3082*22dc650dSSadaf Ebrahimi# ARGS are passed to cygpath, with the last one being the file name or path to 3083*22dc650dSSadaf Ebrahimi# be converted. 3084*22dc650dSSadaf Ebrahimi# 3085*22dc650dSSadaf Ebrahimi# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 3086*22dc650dSSadaf Ebrahimi# environment variable; do not put it in $PATH. 3087*22dc650dSSadaf Ebrahimifunc_cygpath () 3088*22dc650dSSadaf Ebrahimi{ 3089*22dc650dSSadaf Ebrahimi $debug_cmd 3090*22dc650dSSadaf Ebrahimi 3091*22dc650dSSadaf Ebrahimi if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 3092*22dc650dSSadaf Ebrahimi func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 3093*22dc650dSSadaf Ebrahimi if test "$?" -ne 0; then 3094*22dc650dSSadaf Ebrahimi # on failure, ensure result is empty 3095*22dc650dSSadaf Ebrahimi func_cygpath_result= 3096*22dc650dSSadaf Ebrahimi fi 3097*22dc650dSSadaf Ebrahimi else 3098*22dc650dSSadaf Ebrahimi func_cygpath_result= 3099*22dc650dSSadaf Ebrahimi func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" 3100*22dc650dSSadaf Ebrahimi fi 3101*22dc650dSSadaf Ebrahimi} 3102*22dc650dSSadaf Ebrahimi#end: func_cygpath 3103*22dc650dSSadaf Ebrahimi 3104*22dc650dSSadaf Ebrahimi 3105*22dc650dSSadaf Ebrahimi# func_convert_core_msys_to_w32 ARG 3106*22dc650dSSadaf Ebrahimi# Convert file name or path ARG from MSYS format to w32 format. Return 3107*22dc650dSSadaf Ebrahimi# result in func_convert_core_msys_to_w32_result. 3108*22dc650dSSadaf Ebrahimifunc_convert_core_msys_to_w32 () 3109*22dc650dSSadaf Ebrahimi{ 3110*22dc650dSSadaf Ebrahimi $debug_cmd 3111*22dc650dSSadaf Ebrahimi 3112*22dc650dSSadaf Ebrahimi # awkward: cmd appends spaces to result 3113*22dc650dSSadaf Ebrahimi func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 3114*22dc650dSSadaf Ebrahimi $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` 3115*22dc650dSSadaf Ebrahimi} 3116*22dc650dSSadaf Ebrahimi#end: func_convert_core_msys_to_w32 3117*22dc650dSSadaf Ebrahimi 3118*22dc650dSSadaf Ebrahimi 3119*22dc650dSSadaf Ebrahimi# func_convert_file_check ARG1 ARG2 3120*22dc650dSSadaf Ebrahimi# Verify that ARG1 (a file name in $build format) was converted to $host 3121*22dc650dSSadaf Ebrahimi# format in ARG2. Otherwise, emit an error message, but continue (resetting 3122*22dc650dSSadaf Ebrahimi# func_to_host_file_result to ARG1). 3123*22dc650dSSadaf Ebrahimifunc_convert_file_check () 3124*22dc650dSSadaf Ebrahimi{ 3125*22dc650dSSadaf Ebrahimi $debug_cmd 3126*22dc650dSSadaf Ebrahimi 3127*22dc650dSSadaf Ebrahimi if test -z "$2" && test -n "$1"; then 3128*22dc650dSSadaf Ebrahimi func_error "Could not determine host file name corresponding to" 3129*22dc650dSSadaf Ebrahimi func_error " '$1'" 3130*22dc650dSSadaf Ebrahimi func_error "Continuing, but uninstalled executables may not work." 3131*22dc650dSSadaf Ebrahimi # Fallback: 3132*22dc650dSSadaf Ebrahimi func_to_host_file_result=$1 3133*22dc650dSSadaf Ebrahimi fi 3134*22dc650dSSadaf Ebrahimi} 3135*22dc650dSSadaf Ebrahimi# end func_convert_file_check 3136*22dc650dSSadaf Ebrahimi 3137*22dc650dSSadaf Ebrahimi 3138*22dc650dSSadaf Ebrahimi# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 3139*22dc650dSSadaf Ebrahimi# Verify that FROM_PATH (a path in $build format) was converted to $host 3140*22dc650dSSadaf Ebrahimi# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 3141*22dc650dSSadaf Ebrahimi# func_to_host_file_result to a simplistic fallback value (see below). 3142*22dc650dSSadaf Ebrahimifunc_convert_path_check () 3143*22dc650dSSadaf Ebrahimi{ 3144*22dc650dSSadaf Ebrahimi $debug_cmd 3145*22dc650dSSadaf Ebrahimi 3146*22dc650dSSadaf Ebrahimi if test -z "$4" && test -n "$3"; then 3147*22dc650dSSadaf Ebrahimi func_error "Could not determine the host path corresponding to" 3148*22dc650dSSadaf Ebrahimi func_error " '$3'" 3149*22dc650dSSadaf Ebrahimi func_error "Continuing, but uninstalled executables may not work." 3150*22dc650dSSadaf Ebrahimi # Fallback. This is a deliberately simplistic "conversion" and 3151*22dc650dSSadaf Ebrahimi # should not be "improved". See libtool.info. 3152*22dc650dSSadaf Ebrahimi if test "x$1" != "x$2"; then 3153*22dc650dSSadaf Ebrahimi lt_replace_pathsep_chars="s|$1|$2|g" 3154*22dc650dSSadaf Ebrahimi func_to_host_path_result=`echo "$3" | 3155*22dc650dSSadaf Ebrahimi $SED -e "$lt_replace_pathsep_chars"` 3156*22dc650dSSadaf Ebrahimi else 3157*22dc650dSSadaf Ebrahimi func_to_host_path_result=$3 3158*22dc650dSSadaf Ebrahimi fi 3159*22dc650dSSadaf Ebrahimi fi 3160*22dc650dSSadaf Ebrahimi} 3161*22dc650dSSadaf Ebrahimi# end func_convert_path_check 3162*22dc650dSSadaf Ebrahimi 3163*22dc650dSSadaf Ebrahimi 3164*22dc650dSSadaf Ebrahimi# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 3165*22dc650dSSadaf Ebrahimi# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 3166*22dc650dSSadaf Ebrahimi# and appending REPL if ORIG matches BACKPAT. 3167*22dc650dSSadaf Ebrahimifunc_convert_path_front_back_pathsep () 3168*22dc650dSSadaf Ebrahimi{ 3169*22dc650dSSadaf Ebrahimi $debug_cmd 3170*22dc650dSSadaf Ebrahimi 3171*22dc650dSSadaf Ebrahimi case $4 in 3172*22dc650dSSadaf Ebrahimi $1 ) func_to_host_path_result=$3$func_to_host_path_result 3173*22dc650dSSadaf Ebrahimi ;; 3174*22dc650dSSadaf Ebrahimi esac 3175*22dc650dSSadaf Ebrahimi case $4 in 3176*22dc650dSSadaf Ebrahimi $2 ) func_append func_to_host_path_result "$3" 3177*22dc650dSSadaf Ebrahimi ;; 3178*22dc650dSSadaf Ebrahimi esac 3179*22dc650dSSadaf Ebrahimi} 3180*22dc650dSSadaf Ebrahimi# end func_convert_path_front_back_pathsep 3181*22dc650dSSadaf Ebrahimi 3182*22dc650dSSadaf Ebrahimi 3183*22dc650dSSadaf Ebrahimi################################################## 3184*22dc650dSSadaf Ebrahimi# $build to $host FILE NAME CONVERSION FUNCTIONS # 3185*22dc650dSSadaf Ebrahimi################################################## 3186*22dc650dSSadaf Ebrahimi# invoked via '$to_host_file_cmd ARG' 3187*22dc650dSSadaf Ebrahimi# 3188*22dc650dSSadaf Ebrahimi# In each case, ARG is the path to be converted from $build to $host format. 3189*22dc650dSSadaf Ebrahimi# Result will be available in $func_to_host_file_result. 3190*22dc650dSSadaf Ebrahimi 3191*22dc650dSSadaf Ebrahimi 3192*22dc650dSSadaf Ebrahimi# func_to_host_file ARG 3193*22dc650dSSadaf Ebrahimi# Converts the file name ARG from $build format to $host format. Return result 3194*22dc650dSSadaf Ebrahimi# in func_to_host_file_result. 3195*22dc650dSSadaf Ebrahimifunc_to_host_file () 3196*22dc650dSSadaf Ebrahimi{ 3197*22dc650dSSadaf Ebrahimi $debug_cmd 3198*22dc650dSSadaf Ebrahimi 3199*22dc650dSSadaf Ebrahimi $to_host_file_cmd "$1" 3200*22dc650dSSadaf Ebrahimi} 3201*22dc650dSSadaf Ebrahimi# end func_to_host_file 3202*22dc650dSSadaf Ebrahimi 3203*22dc650dSSadaf Ebrahimi 3204*22dc650dSSadaf Ebrahimi# func_to_tool_file ARG LAZY 3205*22dc650dSSadaf Ebrahimi# converts the file name ARG from $build format to toolchain format. Return 3206*22dc650dSSadaf Ebrahimi# result in func_to_tool_file_result. If the conversion in use is listed 3207*22dc650dSSadaf Ebrahimi# in (the comma separated) LAZY, no conversion takes place. 3208*22dc650dSSadaf Ebrahimifunc_to_tool_file () 3209*22dc650dSSadaf Ebrahimi{ 3210*22dc650dSSadaf Ebrahimi $debug_cmd 3211*22dc650dSSadaf Ebrahimi 3212*22dc650dSSadaf Ebrahimi case ,$2, in 3213*22dc650dSSadaf Ebrahimi *,"$to_tool_file_cmd",*) 3214*22dc650dSSadaf Ebrahimi func_to_tool_file_result=$1 3215*22dc650dSSadaf Ebrahimi ;; 3216*22dc650dSSadaf Ebrahimi *) 3217*22dc650dSSadaf Ebrahimi $to_tool_file_cmd "$1" 3218*22dc650dSSadaf Ebrahimi func_to_tool_file_result=$func_to_host_file_result 3219*22dc650dSSadaf Ebrahimi ;; 3220*22dc650dSSadaf Ebrahimi esac 3221*22dc650dSSadaf Ebrahimi} 3222*22dc650dSSadaf Ebrahimi# end func_to_tool_file 3223*22dc650dSSadaf Ebrahimi 3224*22dc650dSSadaf Ebrahimi 3225*22dc650dSSadaf Ebrahimi# func_convert_file_noop ARG 3226*22dc650dSSadaf Ebrahimi# Copy ARG to func_to_host_file_result. 3227*22dc650dSSadaf Ebrahimifunc_convert_file_noop () 3228*22dc650dSSadaf Ebrahimi{ 3229*22dc650dSSadaf Ebrahimi func_to_host_file_result=$1 3230*22dc650dSSadaf Ebrahimi} 3231*22dc650dSSadaf Ebrahimi# end func_convert_file_noop 3232*22dc650dSSadaf Ebrahimi 3233*22dc650dSSadaf Ebrahimi 3234*22dc650dSSadaf Ebrahimi# func_convert_file_msys_to_w32 ARG 3235*22dc650dSSadaf Ebrahimi# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 3236*22dc650dSSadaf Ebrahimi# conversion to w32 is not available inside the cwrapper. Returns result in 3237*22dc650dSSadaf Ebrahimi# func_to_host_file_result. 3238*22dc650dSSadaf Ebrahimifunc_convert_file_msys_to_w32 () 3239*22dc650dSSadaf Ebrahimi{ 3240*22dc650dSSadaf Ebrahimi $debug_cmd 3241*22dc650dSSadaf Ebrahimi 3242*22dc650dSSadaf Ebrahimi func_to_host_file_result=$1 3243*22dc650dSSadaf Ebrahimi if test -n "$1"; then 3244*22dc650dSSadaf Ebrahimi func_convert_core_msys_to_w32 "$1" 3245*22dc650dSSadaf Ebrahimi func_to_host_file_result=$func_convert_core_msys_to_w32_result 3246*22dc650dSSadaf Ebrahimi fi 3247*22dc650dSSadaf Ebrahimi func_convert_file_check "$1" "$func_to_host_file_result" 3248*22dc650dSSadaf Ebrahimi} 3249*22dc650dSSadaf Ebrahimi# end func_convert_file_msys_to_w32 3250*22dc650dSSadaf Ebrahimi 3251*22dc650dSSadaf Ebrahimi 3252*22dc650dSSadaf Ebrahimi# func_convert_file_cygwin_to_w32 ARG 3253*22dc650dSSadaf Ebrahimi# Convert file name ARG from Cygwin to w32 format. Returns result in 3254*22dc650dSSadaf Ebrahimi# func_to_host_file_result. 3255*22dc650dSSadaf Ebrahimifunc_convert_file_cygwin_to_w32 () 3256*22dc650dSSadaf Ebrahimi{ 3257*22dc650dSSadaf Ebrahimi $debug_cmd 3258*22dc650dSSadaf Ebrahimi 3259*22dc650dSSadaf Ebrahimi func_to_host_file_result=$1 3260*22dc650dSSadaf Ebrahimi if test -n "$1"; then 3261*22dc650dSSadaf Ebrahimi # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 3262*22dc650dSSadaf Ebrahimi # LT_CYGPATH in this case. 3263*22dc650dSSadaf Ebrahimi func_to_host_file_result=`cygpath -m "$1"` 3264*22dc650dSSadaf Ebrahimi fi 3265*22dc650dSSadaf Ebrahimi func_convert_file_check "$1" "$func_to_host_file_result" 3266*22dc650dSSadaf Ebrahimi} 3267*22dc650dSSadaf Ebrahimi# end func_convert_file_cygwin_to_w32 3268*22dc650dSSadaf Ebrahimi 3269*22dc650dSSadaf Ebrahimi 3270*22dc650dSSadaf Ebrahimi# func_convert_file_nix_to_w32 ARG 3271*22dc650dSSadaf Ebrahimi# Convert file name ARG from *nix to w32 format. Requires a wine environment 3272*22dc650dSSadaf Ebrahimi# and a working winepath. Returns result in func_to_host_file_result. 3273*22dc650dSSadaf Ebrahimifunc_convert_file_nix_to_w32 () 3274*22dc650dSSadaf Ebrahimi{ 3275*22dc650dSSadaf Ebrahimi $debug_cmd 3276*22dc650dSSadaf Ebrahimi 3277*22dc650dSSadaf Ebrahimi func_to_host_file_result=$1 3278*22dc650dSSadaf Ebrahimi if test -n "$1"; then 3279*22dc650dSSadaf Ebrahimi func_convert_core_file_wine_to_w32 "$1" 3280*22dc650dSSadaf Ebrahimi func_to_host_file_result=$func_convert_core_file_wine_to_w32_result 3281*22dc650dSSadaf Ebrahimi fi 3282*22dc650dSSadaf Ebrahimi func_convert_file_check "$1" "$func_to_host_file_result" 3283*22dc650dSSadaf Ebrahimi} 3284*22dc650dSSadaf Ebrahimi# end func_convert_file_nix_to_w32 3285*22dc650dSSadaf Ebrahimi 3286*22dc650dSSadaf Ebrahimi 3287*22dc650dSSadaf Ebrahimi# func_convert_file_msys_to_cygwin ARG 3288*22dc650dSSadaf Ebrahimi# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3289*22dc650dSSadaf Ebrahimi# Returns result in func_to_host_file_result. 3290*22dc650dSSadaf Ebrahimifunc_convert_file_msys_to_cygwin () 3291*22dc650dSSadaf Ebrahimi{ 3292*22dc650dSSadaf Ebrahimi $debug_cmd 3293*22dc650dSSadaf Ebrahimi 3294*22dc650dSSadaf Ebrahimi func_to_host_file_result=$1 3295*22dc650dSSadaf Ebrahimi if test -n "$1"; then 3296*22dc650dSSadaf Ebrahimi func_convert_core_msys_to_w32 "$1" 3297*22dc650dSSadaf Ebrahimi func_cygpath -u "$func_convert_core_msys_to_w32_result" 3298*22dc650dSSadaf Ebrahimi func_to_host_file_result=$func_cygpath_result 3299*22dc650dSSadaf Ebrahimi fi 3300*22dc650dSSadaf Ebrahimi func_convert_file_check "$1" "$func_to_host_file_result" 3301*22dc650dSSadaf Ebrahimi} 3302*22dc650dSSadaf Ebrahimi# end func_convert_file_msys_to_cygwin 3303*22dc650dSSadaf Ebrahimi 3304*22dc650dSSadaf Ebrahimi 3305*22dc650dSSadaf Ebrahimi# func_convert_file_nix_to_cygwin ARG 3306*22dc650dSSadaf Ebrahimi# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 3307*22dc650dSSadaf Ebrahimi# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 3308*22dc650dSSadaf Ebrahimi# in func_to_host_file_result. 3309*22dc650dSSadaf Ebrahimifunc_convert_file_nix_to_cygwin () 3310*22dc650dSSadaf Ebrahimi{ 3311*22dc650dSSadaf Ebrahimi $debug_cmd 3312*22dc650dSSadaf Ebrahimi 3313*22dc650dSSadaf Ebrahimi func_to_host_file_result=$1 3314*22dc650dSSadaf Ebrahimi if test -n "$1"; then 3315*22dc650dSSadaf Ebrahimi # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 3316*22dc650dSSadaf Ebrahimi func_convert_core_file_wine_to_w32 "$1" 3317*22dc650dSSadaf Ebrahimi func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 3318*22dc650dSSadaf Ebrahimi func_to_host_file_result=$func_cygpath_result 3319*22dc650dSSadaf Ebrahimi fi 3320*22dc650dSSadaf Ebrahimi func_convert_file_check "$1" "$func_to_host_file_result" 3321*22dc650dSSadaf Ebrahimi} 3322*22dc650dSSadaf Ebrahimi# end func_convert_file_nix_to_cygwin 3323*22dc650dSSadaf Ebrahimi 3324*22dc650dSSadaf Ebrahimi 3325*22dc650dSSadaf Ebrahimi############################################# 3326*22dc650dSSadaf Ebrahimi# $build to $host PATH CONVERSION FUNCTIONS # 3327*22dc650dSSadaf Ebrahimi############################################# 3328*22dc650dSSadaf Ebrahimi# invoked via '$to_host_path_cmd ARG' 3329*22dc650dSSadaf Ebrahimi# 3330*22dc650dSSadaf Ebrahimi# In each case, ARG is the path to be converted from $build to $host format. 3331*22dc650dSSadaf Ebrahimi# The result will be available in $func_to_host_path_result. 3332*22dc650dSSadaf Ebrahimi# 3333*22dc650dSSadaf Ebrahimi# Path separators are also converted from $build format to $host format. If 3334*22dc650dSSadaf Ebrahimi# ARG begins or ends with a path separator character, it is preserved (but 3335*22dc650dSSadaf Ebrahimi# converted to $host format) on output. 3336*22dc650dSSadaf Ebrahimi# 3337*22dc650dSSadaf Ebrahimi# All path conversion functions are named using the following convention: 3338*22dc650dSSadaf Ebrahimi# file name conversion function : func_convert_file_X_to_Y () 3339*22dc650dSSadaf Ebrahimi# path conversion function : func_convert_path_X_to_Y () 3340*22dc650dSSadaf Ebrahimi# where, for any given $build/$host combination the 'X_to_Y' value is the 3341*22dc650dSSadaf Ebrahimi# same. If conversion functions are added for new $build/$host combinations, 3342*22dc650dSSadaf Ebrahimi# the two new functions must follow this pattern, or func_init_to_host_path_cmd 3343*22dc650dSSadaf Ebrahimi# will break. 3344*22dc650dSSadaf Ebrahimi 3345*22dc650dSSadaf Ebrahimi 3346*22dc650dSSadaf Ebrahimi# func_init_to_host_path_cmd 3347*22dc650dSSadaf Ebrahimi# Ensures that function "pointer" variable $to_host_path_cmd is set to the 3348*22dc650dSSadaf Ebrahimi# appropriate value, based on the value of $to_host_file_cmd. 3349*22dc650dSSadaf Ebrahimito_host_path_cmd= 3350*22dc650dSSadaf Ebrahimifunc_init_to_host_path_cmd () 3351*22dc650dSSadaf Ebrahimi{ 3352*22dc650dSSadaf Ebrahimi $debug_cmd 3353*22dc650dSSadaf Ebrahimi 3354*22dc650dSSadaf Ebrahimi if test -z "$to_host_path_cmd"; then 3355*22dc650dSSadaf Ebrahimi func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 3356*22dc650dSSadaf Ebrahimi to_host_path_cmd=func_convert_path_$func_stripname_result 3357*22dc650dSSadaf Ebrahimi fi 3358*22dc650dSSadaf Ebrahimi} 3359*22dc650dSSadaf Ebrahimi 3360*22dc650dSSadaf Ebrahimi 3361*22dc650dSSadaf Ebrahimi# func_to_host_path ARG 3362*22dc650dSSadaf Ebrahimi# Converts the path ARG from $build format to $host format. Return result 3363*22dc650dSSadaf Ebrahimi# in func_to_host_path_result. 3364*22dc650dSSadaf Ebrahimifunc_to_host_path () 3365*22dc650dSSadaf Ebrahimi{ 3366*22dc650dSSadaf Ebrahimi $debug_cmd 3367*22dc650dSSadaf Ebrahimi 3368*22dc650dSSadaf Ebrahimi func_init_to_host_path_cmd 3369*22dc650dSSadaf Ebrahimi $to_host_path_cmd "$1" 3370*22dc650dSSadaf Ebrahimi} 3371*22dc650dSSadaf Ebrahimi# end func_to_host_path 3372*22dc650dSSadaf Ebrahimi 3373*22dc650dSSadaf Ebrahimi 3374*22dc650dSSadaf Ebrahimi# func_convert_path_noop ARG 3375*22dc650dSSadaf Ebrahimi# Copy ARG to func_to_host_path_result. 3376*22dc650dSSadaf Ebrahimifunc_convert_path_noop () 3377*22dc650dSSadaf Ebrahimi{ 3378*22dc650dSSadaf Ebrahimi func_to_host_path_result=$1 3379*22dc650dSSadaf Ebrahimi} 3380*22dc650dSSadaf Ebrahimi# end func_convert_path_noop 3381*22dc650dSSadaf Ebrahimi 3382*22dc650dSSadaf Ebrahimi 3383*22dc650dSSadaf Ebrahimi# func_convert_path_msys_to_w32 ARG 3384*22dc650dSSadaf Ebrahimi# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 3385*22dc650dSSadaf Ebrahimi# conversion to w32 is not available inside the cwrapper. Returns result in 3386*22dc650dSSadaf Ebrahimi# func_to_host_path_result. 3387*22dc650dSSadaf Ebrahimifunc_convert_path_msys_to_w32 () 3388*22dc650dSSadaf Ebrahimi{ 3389*22dc650dSSadaf Ebrahimi $debug_cmd 3390*22dc650dSSadaf Ebrahimi 3391*22dc650dSSadaf Ebrahimi func_to_host_path_result=$1 3392*22dc650dSSadaf Ebrahimi if test -n "$1"; then 3393*22dc650dSSadaf Ebrahimi # Remove leading and trailing path separator characters from ARG. MSYS 3394*22dc650dSSadaf Ebrahimi # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 3395*22dc650dSSadaf Ebrahimi # and winepath ignores them completely. 3396*22dc650dSSadaf Ebrahimi func_stripname : : "$1" 3397*22dc650dSSadaf Ebrahimi func_to_host_path_tmp1=$func_stripname_result 3398*22dc650dSSadaf Ebrahimi func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 3399*22dc650dSSadaf Ebrahimi func_to_host_path_result=$func_convert_core_msys_to_w32_result 3400*22dc650dSSadaf Ebrahimi func_convert_path_check : ";" \ 3401*22dc650dSSadaf Ebrahimi "$func_to_host_path_tmp1" "$func_to_host_path_result" 3402*22dc650dSSadaf Ebrahimi func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3403*22dc650dSSadaf Ebrahimi fi 3404*22dc650dSSadaf Ebrahimi} 3405*22dc650dSSadaf Ebrahimi# end func_convert_path_msys_to_w32 3406*22dc650dSSadaf Ebrahimi 3407*22dc650dSSadaf Ebrahimi 3408*22dc650dSSadaf Ebrahimi# func_convert_path_cygwin_to_w32 ARG 3409*22dc650dSSadaf Ebrahimi# Convert path ARG from Cygwin to w32 format. Returns result in 3410*22dc650dSSadaf Ebrahimi# func_to_host_file_result. 3411*22dc650dSSadaf Ebrahimifunc_convert_path_cygwin_to_w32 () 3412*22dc650dSSadaf Ebrahimi{ 3413*22dc650dSSadaf Ebrahimi $debug_cmd 3414*22dc650dSSadaf Ebrahimi 3415*22dc650dSSadaf Ebrahimi func_to_host_path_result=$1 3416*22dc650dSSadaf Ebrahimi if test -n "$1"; then 3417*22dc650dSSadaf Ebrahimi # See func_convert_path_msys_to_w32: 3418*22dc650dSSadaf Ebrahimi func_stripname : : "$1" 3419*22dc650dSSadaf Ebrahimi func_to_host_path_tmp1=$func_stripname_result 3420*22dc650dSSadaf Ebrahimi func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 3421*22dc650dSSadaf Ebrahimi func_convert_path_check : ";" \ 3422*22dc650dSSadaf Ebrahimi "$func_to_host_path_tmp1" "$func_to_host_path_result" 3423*22dc650dSSadaf Ebrahimi func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3424*22dc650dSSadaf Ebrahimi fi 3425*22dc650dSSadaf Ebrahimi} 3426*22dc650dSSadaf Ebrahimi# end func_convert_path_cygwin_to_w32 3427*22dc650dSSadaf Ebrahimi 3428*22dc650dSSadaf Ebrahimi 3429*22dc650dSSadaf Ebrahimi# func_convert_path_nix_to_w32 ARG 3430*22dc650dSSadaf Ebrahimi# Convert path ARG from *nix to w32 format. Requires a wine environment and 3431*22dc650dSSadaf Ebrahimi# a working winepath. Returns result in func_to_host_file_result. 3432*22dc650dSSadaf Ebrahimifunc_convert_path_nix_to_w32 () 3433*22dc650dSSadaf Ebrahimi{ 3434*22dc650dSSadaf Ebrahimi $debug_cmd 3435*22dc650dSSadaf Ebrahimi 3436*22dc650dSSadaf Ebrahimi func_to_host_path_result=$1 3437*22dc650dSSadaf Ebrahimi if test -n "$1"; then 3438*22dc650dSSadaf Ebrahimi # See func_convert_path_msys_to_w32: 3439*22dc650dSSadaf Ebrahimi func_stripname : : "$1" 3440*22dc650dSSadaf Ebrahimi func_to_host_path_tmp1=$func_stripname_result 3441*22dc650dSSadaf Ebrahimi func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 3442*22dc650dSSadaf Ebrahimi func_to_host_path_result=$func_convert_core_path_wine_to_w32_result 3443*22dc650dSSadaf Ebrahimi func_convert_path_check : ";" \ 3444*22dc650dSSadaf Ebrahimi "$func_to_host_path_tmp1" "$func_to_host_path_result" 3445*22dc650dSSadaf Ebrahimi func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3446*22dc650dSSadaf Ebrahimi fi 3447*22dc650dSSadaf Ebrahimi} 3448*22dc650dSSadaf Ebrahimi# end func_convert_path_nix_to_w32 3449*22dc650dSSadaf Ebrahimi 3450*22dc650dSSadaf Ebrahimi 3451*22dc650dSSadaf Ebrahimi# func_convert_path_msys_to_cygwin ARG 3452*22dc650dSSadaf Ebrahimi# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3453*22dc650dSSadaf Ebrahimi# Returns result in func_to_host_file_result. 3454*22dc650dSSadaf Ebrahimifunc_convert_path_msys_to_cygwin () 3455*22dc650dSSadaf Ebrahimi{ 3456*22dc650dSSadaf Ebrahimi $debug_cmd 3457*22dc650dSSadaf Ebrahimi 3458*22dc650dSSadaf Ebrahimi func_to_host_path_result=$1 3459*22dc650dSSadaf Ebrahimi if test -n "$1"; then 3460*22dc650dSSadaf Ebrahimi # See func_convert_path_msys_to_w32: 3461*22dc650dSSadaf Ebrahimi func_stripname : : "$1" 3462*22dc650dSSadaf Ebrahimi func_to_host_path_tmp1=$func_stripname_result 3463*22dc650dSSadaf Ebrahimi func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 3464*22dc650dSSadaf Ebrahimi func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 3465*22dc650dSSadaf Ebrahimi func_to_host_path_result=$func_cygpath_result 3466*22dc650dSSadaf Ebrahimi func_convert_path_check : : \ 3467*22dc650dSSadaf Ebrahimi "$func_to_host_path_tmp1" "$func_to_host_path_result" 3468*22dc650dSSadaf Ebrahimi func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3469*22dc650dSSadaf Ebrahimi fi 3470*22dc650dSSadaf Ebrahimi} 3471*22dc650dSSadaf Ebrahimi# end func_convert_path_msys_to_cygwin 3472*22dc650dSSadaf Ebrahimi 3473*22dc650dSSadaf Ebrahimi 3474*22dc650dSSadaf Ebrahimi# func_convert_path_nix_to_cygwin ARG 3475*22dc650dSSadaf Ebrahimi# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 3476*22dc650dSSadaf Ebrahimi# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 3477*22dc650dSSadaf Ebrahimi# func_to_host_file_result. 3478*22dc650dSSadaf Ebrahimifunc_convert_path_nix_to_cygwin () 3479*22dc650dSSadaf Ebrahimi{ 3480*22dc650dSSadaf Ebrahimi $debug_cmd 3481*22dc650dSSadaf Ebrahimi 3482*22dc650dSSadaf Ebrahimi func_to_host_path_result=$1 3483*22dc650dSSadaf Ebrahimi if test -n "$1"; then 3484*22dc650dSSadaf Ebrahimi # Remove leading and trailing path separator characters from 3485*22dc650dSSadaf Ebrahimi # ARG. msys behavior is inconsistent here, cygpath turns them 3486*22dc650dSSadaf Ebrahimi # into '.;' and ';.', and winepath ignores them completely. 3487*22dc650dSSadaf Ebrahimi func_stripname : : "$1" 3488*22dc650dSSadaf Ebrahimi func_to_host_path_tmp1=$func_stripname_result 3489*22dc650dSSadaf Ebrahimi func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 3490*22dc650dSSadaf Ebrahimi func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 3491*22dc650dSSadaf Ebrahimi func_to_host_path_result=$func_cygpath_result 3492*22dc650dSSadaf Ebrahimi func_convert_path_check : : \ 3493*22dc650dSSadaf Ebrahimi "$func_to_host_path_tmp1" "$func_to_host_path_result" 3494*22dc650dSSadaf Ebrahimi func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3495*22dc650dSSadaf Ebrahimi fi 3496*22dc650dSSadaf Ebrahimi} 3497*22dc650dSSadaf Ebrahimi# end func_convert_path_nix_to_cygwin 3498*22dc650dSSadaf Ebrahimi 3499*22dc650dSSadaf Ebrahimi 3500*22dc650dSSadaf Ebrahimi# func_dll_def_p FILE 3501*22dc650dSSadaf Ebrahimi# True iff FILE is a Windows DLL '.def' file. 3502*22dc650dSSadaf Ebrahimi# Keep in sync with _LT_DLL_DEF_P in libtool.m4 3503*22dc650dSSadaf Ebrahimifunc_dll_def_p () 3504*22dc650dSSadaf Ebrahimi{ 3505*22dc650dSSadaf Ebrahimi $debug_cmd 3506*22dc650dSSadaf Ebrahimi 3507*22dc650dSSadaf Ebrahimi func_dll_def_p_tmp=`$SED -n \ 3508*22dc650dSSadaf Ebrahimi -e 's/^[ ]*//' \ 3509*22dc650dSSadaf Ebrahimi -e '/^\(;.*\)*$/d' \ 3510*22dc650dSSadaf Ebrahimi -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ 3511*22dc650dSSadaf Ebrahimi -e q \ 3512*22dc650dSSadaf Ebrahimi "$1"` 3513*22dc650dSSadaf Ebrahimi test DEF = "$func_dll_def_p_tmp" 3514*22dc650dSSadaf Ebrahimi} 3515*22dc650dSSadaf Ebrahimi 3516*22dc650dSSadaf Ebrahimi 3517*22dc650dSSadaf Ebrahimi# func_mode_compile arg... 3518*22dc650dSSadaf Ebrahimifunc_mode_compile () 3519*22dc650dSSadaf Ebrahimi{ 3520*22dc650dSSadaf Ebrahimi $debug_cmd 3521*22dc650dSSadaf Ebrahimi 3522*22dc650dSSadaf Ebrahimi # Get the compilation command and the source file. 3523*22dc650dSSadaf Ebrahimi base_compile= 3524*22dc650dSSadaf Ebrahimi srcfile=$nonopt # always keep a non-empty value in "srcfile" 3525*22dc650dSSadaf Ebrahimi suppress_opt=yes 3526*22dc650dSSadaf Ebrahimi suppress_output= 3527*22dc650dSSadaf Ebrahimi arg_mode=normal 3528*22dc650dSSadaf Ebrahimi libobj= 3529*22dc650dSSadaf Ebrahimi later= 3530*22dc650dSSadaf Ebrahimi pie_flag= 3531*22dc650dSSadaf Ebrahimi 3532*22dc650dSSadaf Ebrahimi for arg 3533*22dc650dSSadaf Ebrahimi do 3534*22dc650dSSadaf Ebrahimi case $arg_mode in 3535*22dc650dSSadaf Ebrahimi arg ) 3536*22dc650dSSadaf Ebrahimi # do not "continue". Instead, add this to base_compile 3537*22dc650dSSadaf Ebrahimi lastarg=$arg 3538*22dc650dSSadaf Ebrahimi arg_mode=normal 3539*22dc650dSSadaf Ebrahimi ;; 3540*22dc650dSSadaf Ebrahimi 3541*22dc650dSSadaf Ebrahimi target ) 3542*22dc650dSSadaf Ebrahimi libobj=$arg 3543*22dc650dSSadaf Ebrahimi arg_mode=normal 3544*22dc650dSSadaf Ebrahimi continue 3545*22dc650dSSadaf Ebrahimi ;; 3546*22dc650dSSadaf Ebrahimi 3547*22dc650dSSadaf Ebrahimi normal ) 3548*22dc650dSSadaf Ebrahimi # Accept any command-line options. 3549*22dc650dSSadaf Ebrahimi case $arg in 3550*22dc650dSSadaf Ebrahimi -o) 3551*22dc650dSSadaf Ebrahimi test -n "$libobj" && \ 3552*22dc650dSSadaf Ebrahimi func_fatal_error "you cannot specify '-o' more than once" 3553*22dc650dSSadaf Ebrahimi arg_mode=target 3554*22dc650dSSadaf Ebrahimi continue 3555*22dc650dSSadaf Ebrahimi ;; 3556*22dc650dSSadaf Ebrahimi 3557*22dc650dSSadaf Ebrahimi -pie | -fpie | -fPIE) 3558*22dc650dSSadaf Ebrahimi func_append pie_flag " $arg" 3559*22dc650dSSadaf Ebrahimi continue 3560*22dc650dSSadaf Ebrahimi ;; 3561*22dc650dSSadaf Ebrahimi 3562*22dc650dSSadaf Ebrahimi -shared | -static | -prefer-pic | -prefer-non-pic) 3563*22dc650dSSadaf Ebrahimi func_append later " $arg" 3564*22dc650dSSadaf Ebrahimi continue 3565*22dc650dSSadaf Ebrahimi ;; 3566*22dc650dSSadaf Ebrahimi 3567*22dc650dSSadaf Ebrahimi -no-suppress) 3568*22dc650dSSadaf Ebrahimi suppress_opt=no 3569*22dc650dSSadaf Ebrahimi continue 3570*22dc650dSSadaf Ebrahimi ;; 3571*22dc650dSSadaf Ebrahimi 3572*22dc650dSSadaf Ebrahimi -Xcompiler) 3573*22dc650dSSadaf Ebrahimi arg_mode=arg # the next one goes into the "base_compile" arg list 3574*22dc650dSSadaf Ebrahimi continue # The current "srcfile" will either be retained or 3575*22dc650dSSadaf Ebrahimi ;; # replaced later. I would guess that would be a bug. 3576*22dc650dSSadaf Ebrahimi 3577*22dc650dSSadaf Ebrahimi -Wc,*) 3578*22dc650dSSadaf Ebrahimi func_stripname '-Wc,' '' "$arg" 3579*22dc650dSSadaf Ebrahimi args=$func_stripname_result 3580*22dc650dSSadaf Ebrahimi lastarg= 3581*22dc650dSSadaf Ebrahimi save_ifs=$IFS; IFS=, 3582*22dc650dSSadaf Ebrahimi for arg in $args; do 3583*22dc650dSSadaf Ebrahimi IFS=$save_ifs 3584*22dc650dSSadaf Ebrahimi func_append_quoted lastarg "$arg" 3585*22dc650dSSadaf Ebrahimi done 3586*22dc650dSSadaf Ebrahimi IFS=$save_ifs 3587*22dc650dSSadaf Ebrahimi func_stripname ' ' '' "$lastarg" 3588*22dc650dSSadaf Ebrahimi lastarg=$func_stripname_result 3589*22dc650dSSadaf Ebrahimi 3590*22dc650dSSadaf Ebrahimi # Add the arguments to base_compile. 3591*22dc650dSSadaf Ebrahimi func_append base_compile " $lastarg" 3592*22dc650dSSadaf Ebrahimi continue 3593*22dc650dSSadaf Ebrahimi ;; 3594*22dc650dSSadaf Ebrahimi 3595*22dc650dSSadaf Ebrahimi *) 3596*22dc650dSSadaf Ebrahimi # Accept the current argument as the source file. 3597*22dc650dSSadaf Ebrahimi # The previous "srcfile" becomes the current argument. 3598*22dc650dSSadaf Ebrahimi # 3599*22dc650dSSadaf Ebrahimi lastarg=$srcfile 3600*22dc650dSSadaf Ebrahimi srcfile=$arg 3601*22dc650dSSadaf Ebrahimi ;; 3602*22dc650dSSadaf Ebrahimi esac # case $arg 3603*22dc650dSSadaf Ebrahimi ;; 3604*22dc650dSSadaf Ebrahimi esac # case $arg_mode 3605*22dc650dSSadaf Ebrahimi 3606*22dc650dSSadaf Ebrahimi # Aesthetically quote the previous argument. 3607*22dc650dSSadaf Ebrahimi func_append_quoted base_compile "$lastarg" 3608*22dc650dSSadaf Ebrahimi done # for arg 3609*22dc650dSSadaf Ebrahimi 3610*22dc650dSSadaf Ebrahimi case $arg_mode in 3611*22dc650dSSadaf Ebrahimi arg) 3612*22dc650dSSadaf Ebrahimi func_fatal_error "you must specify an argument for -Xcompile" 3613*22dc650dSSadaf Ebrahimi ;; 3614*22dc650dSSadaf Ebrahimi target) 3615*22dc650dSSadaf Ebrahimi func_fatal_error "you must specify a target with '-o'" 3616*22dc650dSSadaf Ebrahimi ;; 3617*22dc650dSSadaf Ebrahimi *) 3618*22dc650dSSadaf Ebrahimi # Get the name of the library object. 3619*22dc650dSSadaf Ebrahimi test -z "$libobj" && { 3620*22dc650dSSadaf Ebrahimi func_basename "$srcfile" 3621*22dc650dSSadaf Ebrahimi libobj=$func_basename_result 3622*22dc650dSSadaf Ebrahimi } 3623*22dc650dSSadaf Ebrahimi ;; 3624*22dc650dSSadaf Ebrahimi esac 3625*22dc650dSSadaf Ebrahimi 3626*22dc650dSSadaf Ebrahimi # Recognize several different file suffixes. 3627*22dc650dSSadaf Ebrahimi # If the user specifies -o file.o, it is replaced with file.lo 3628*22dc650dSSadaf Ebrahimi case $libobj in 3629*22dc650dSSadaf Ebrahimi *.[cCFSifmso] | \ 3630*22dc650dSSadaf Ebrahimi *.ada | *.adb | *.ads | *.asm | \ 3631*22dc650dSSadaf Ebrahimi *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 3632*22dc650dSSadaf Ebrahimi *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 3633*22dc650dSSadaf Ebrahimi func_xform "$libobj" 3634*22dc650dSSadaf Ebrahimi libobj=$func_xform_result 3635*22dc650dSSadaf Ebrahimi ;; 3636*22dc650dSSadaf Ebrahimi esac 3637*22dc650dSSadaf Ebrahimi 3638*22dc650dSSadaf Ebrahimi case $libobj in 3639*22dc650dSSadaf Ebrahimi *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 3640*22dc650dSSadaf Ebrahimi *) 3641*22dc650dSSadaf Ebrahimi func_fatal_error "cannot determine name of library object from '$libobj'" 3642*22dc650dSSadaf Ebrahimi ;; 3643*22dc650dSSadaf Ebrahimi esac 3644*22dc650dSSadaf Ebrahimi 3645*22dc650dSSadaf Ebrahimi func_infer_tag $base_compile 3646*22dc650dSSadaf Ebrahimi 3647*22dc650dSSadaf Ebrahimi for arg in $later; do 3648*22dc650dSSadaf Ebrahimi case $arg in 3649*22dc650dSSadaf Ebrahimi -shared) 3650*22dc650dSSadaf Ebrahimi test yes = "$build_libtool_libs" \ 3651*22dc650dSSadaf Ebrahimi || func_fatal_configuration "cannot build a shared library" 3652*22dc650dSSadaf Ebrahimi build_old_libs=no 3653*22dc650dSSadaf Ebrahimi continue 3654*22dc650dSSadaf Ebrahimi ;; 3655*22dc650dSSadaf Ebrahimi 3656*22dc650dSSadaf Ebrahimi -static) 3657*22dc650dSSadaf Ebrahimi build_libtool_libs=no 3658*22dc650dSSadaf Ebrahimi build_old_libs=yes 3659*22dc650dSSadaf Ebrahimi continue 3660*22dc650dSSadaf Ebrahimi ;; 3661*22dc650dSSadaf Ebrahimi 3662*22dc650dSSadaf Ebrahimi -prefer-pic) 3663*22dc650dSSadaf Ebrahimi pic_mode=yes 3664*22dc650dSSadaf Ebrahimi continue 3665*22dc650dSSadaf Ebrahimi ;; 3666*22dc650dSSadaf Ebrahimi 3667*22dc650dSSadaf Ebrahimi -prefer-non-pic) 3668*22dc650dSSadaf Ebrahimi pic_mode=no 3669*22dc650dSSadaf Ebrahimi continue 3670*22dc650dSSadaf Ebrahimi ;; 3671*22dc650dSSadaf Ebrahimi esac 3672*22dc650dSSadaf Ebrahimi done 3673*22dc650dSSadaf Ebrahimi 3674*22dc650dSSadaf Ebrahimi func_quote_arg pretty "$libobj" 3675*22dc650dSSadaf Ebrahimi test "X$libobj" != "X$func_quote_arg_result" \ 3676*22dc650dSSadaf Ebrahimi && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 3677*22dc650dSSadaf Ebrahimi && func_warning "libobj name '$libobj' may not contain shell special characters." 3678*22dc650dSSadaf Ebrahimi func_dirname_and_basename "$obj" "/" "" 3679*22dc650dSSadaf Ebrahimi objname=$func_basename_result 3680*22dc650dSSadaf Ebrahimi xdir=$func_dirname_result 3681*22dc650dSSadaf Ebrahimi lobj=$xdir$objdir/$objname 3682*22dc650dSSadaf Ebrahimi 3683*22dc650dSSadaf Ebrahimi test -z "$base_compile" && \ 3684*22dc650dSSadaf Ebrahimi func_fatal_help "you must specify a compilation command" 3685*22dc650dSSadaf Ebrahimi 3686*22dc650dSSadaf Ebrahimi # Delete any leftover library objects. 3687*22dc650dSSadaf Ebrahimi if test yes = "$build_old_libs"; then 3688*22dc650dSSadaf Ebrahimi removelist="$obj $lobj $libobj ${libobj}T" 3689*22dc650dSSadaf Ebrahimi else 3690*22dc650dSSadaf Ebrahimi removelist="$lobj $libobj ${libobj}T" 3691*22dc650dSSadaf Ebrahimi fi 3692*22dc650dSSadaf Ebrahimi 3693*22dc650dSSadaf Ebrahimi # On Cygwin there's no "real" PIC flag so we must build both object types 3694*22dc650dSSadaf Ebrahimi case $host_os in 3695*22dc650dSSadaf Ebrahimi cygwin* | mingw* | pw32* | os2* | cegcc*) 3696*22dc650dSSadaf Ebrahimi pic_mode=default 3697*22dc650dSSadaf Ebrahimi ;; 3698*22dc650dSSadaf Ebrahimi esac 3699*22dc650dSSadaf Ebrahimi if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then 3700*22dc650dSSadaf Ebrahimi # non-PIC code in shared libraries is not supported 3701*22dc650dSSadaf Ebrahimi pic_mode=default 3702*22dc650dSSadaf Ebrahimi fi 3703*22dc650dSSadaf Ebrahimi 3704*22dc650dSSadaf Ebrahimi # Calculate the filename of the output object if compiler does 3705*22dc650dSSadaf Ebrahimi # not support -o with -c 3706*22dc650dSSadaf Ebrahimi if test no = "$compiler_c_o"; then 3707*22dc650dSSadaf Ebrahimi output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext 3708*22dc650dSSadaf Ebrahimi lockfile=$output_obj.lock 3709*22dc650dSSadaf Ebrahimi else 3710*22dc650dSSadaf Ebrahimi output_obj= 3711*22dc650dSSadaf Ebrahimi need_locks=no 3712*22dc650dSSadaf Ebrahimi lockfile= 3713*22dc650dSSadaf Ebrahimi fi 3714*22dc650dSSadaf Ebrahimi 3715*22dc650dSSadaf Ebrahimi # Lock this critical section if it is needed 3716*22dc650dSSadaf Ebrahimi # We use this script file to make the link, it avoids creating a new file 3717*22dc650dSSadaf Ebrahimi if test yes = "$need_locks"; then 3718*22dc650dSSadaf Ebrahimi until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 3719*22dc650dSSadaf Ebrahimi func_echo "Waiting for $lockfile to be removed" 3720*22dc650dSSadaf Ebrahimi sleep 2 3721*22dc650dSSadaf Ebrahimi done 3722*22dc650dSSadaf Ebrahimi elif test warn = "$need_locks"; then 3723*22dc650dSSadaf Ebrahimi if test -f "$lockfile"; then 3724*22dc650dSSadaf Ebrahimi $ECHO "\ 3725*22dc650dSSadaf Ebrahimi*** ERROR, $lockfile exists and contains: 3726*22dc650dSSadaf Ebrahimi`cat $lockfile 2>/dev/null` 3727*22dc650dSSadaf Ebrahimi 3728*22dc650dSSadaf EbrahimiThis indicates that another process is trying to use the same 3729*22dc650dSSadaf Ebrahimitemporary object file, and libtool could not work around it because 3730*22dc650dSSadaf Ebrahimiyour compiler does not support '-c' and '-o' together. If you 3731*22dc650dSSadaf Ebrahimirepeat this compilation, it may succeed, by chance, but you had better 3732*22dc650dSSadaf Ebrahimiavoid parallel builds (make -j) in this platform, or get a better 3733*22dc650dSSadaf Ebrahimicompiler." 3734*22dc650dSSadaf Ebrahimi 3735*22dc650dSSadaf Ebrahimi $opt_dry_run || $RM $removelist 3736*22dc650dSSadaf Ebrahimi exit $EXIT_FAILURE 3737*22dc650dSSadaf Ebrahimi fi 3738*22dc650dSSadaf Ebrahimi func_append removelist " $output_obj" 3739*22dc650dSSadaf Ebrahimi $ECHO "$srcfile" > "$lockfile" 3740*22dc650dSSadaf Ebrahimi fi 3741*22dc650dSSadaf Ebrahimi 3742*22dc650dSSadaf Ebrahimi $opt_dry_run || $RM $removelist 3743*22dc650dSSadaf Ebrahimi func_append removelist " $lockfile" 3744*22dc650dSSadaf Ebrahimi trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 3745*22dc650dSSadaf Ebrahimi 3746*22dc650dSSadaf Ebrahimi func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 3747*22dc650dSSadaf Ebrahimi srcfile=$func_to_tool_file_result 3748*22dc650dSSadaf Ebrahimi func_quote_arg pretty "$srcfile" 3749*22dc650dSSadaf Ebrahimi qsrcfile=$func_quote_arg_result 3750*22dc650dSSadaf Ebrahimi 3751*22dc650dSSadaf Ebrahimi # Only build a PIC object if we are building libtool libraries. 3752*22dc650dSSadaf Ebrahimi if test yes = "$build_libtool_libs"; then 3753*22dc650dSSadaf Ebrahimi # Without this assignment, base_compile gets emptied. 3754*22dc650dSSadaf Ebrahimi fbsd_hideous_sh_bug=$base_compile 3755*22dc650dSSadaf Ebrahimi 3756*22dc650dSSadaf Ebrahimi if test no != "$pic_mode"; then 3757*22dc650dSSadaf Ebrahimi command="$base_compile $qsrcfile $pic_flag" 3758*22dc650dSSadaf Ebrahimi else 3759*22dc650dSSadaf Ebrahimi # Don't build PIC code 3760*22dc650dSSadaf Ebrahimi command="$base_compile $qsrcfile" 3761*22dc650dSSadaf Ebrahimi fi 3762*22dc650dSSadaf Ebrahimi 3763*22dc650dSSadaf Ebrahimi func_mkdir_p "$xdir$objdir" 3764*22dc650dSSadaf Ebrahimi 3765*22dc650dSSadaf Ebrahimi if test -z "$output_obj"; then 3766*22dc650dSSadaf Ebrahimi # Place PIC objects in $objdir 3767*22dc650dSSadaf Ebrahimi func_append command " -o $lobj" 3768*22dc650dSSadaf Ebrahimi fi 3769*22dc650dSSadaf Ebrahimi 3770*22dc650dSSadaf Ebrahimi func_show_eval_locale "$command" \ 3771*22dc650dSSadaf Ebrahimi 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 3772*22dc650dSSadaf Ebrahimi 3773*22dc650dSSadaf Ebrahimi if test warn = "$need_locks" && 3774*22dc650dSSadaf Ebrahimi test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3775*22dc650dSSadaf Ebrahimi $ECHO "\ 3776*22dc650dSSadaf Ebrahimi*** ERROR, $lockfile contains: 3777*22dc650dSSadaf Ebrahimi`cat $lockfile 2>/dev/null` 3778*22dc650dSSadaf Ebrahimi 3779*22dc650dSSadaf Ebrahimibut it should contain: 3780*22dc650dSSadaf Ebrahimi$srcfile 3781*22dc650dSSadaf Ebrahimi 3782*22dc650dSSadaf EbrahimiThis indicates that another process is trying to use the same 3783*22dc650dSSadaf Ebrahimitemporary object file, and libtool could not work around it because 3784*22dc650dSSadaf Ebrahimiyour compiler does not support '-c' and '-o' together. If you 3785*22dc650dSSadaf Ebrahimirepeat this compilation, it may succeed, by chance, but you had better 3786*22dc650dSSadaf Ebrahimiavoid parallel builds (make -j) in this platform, or get a better 3787*22dc650dSSadaf Ebrahimicompiler." 3788*22dc650dSSadaf Ebrahimi 3789*22dc650dSSadaf Ebrahimi $opt_dry_run || $RM $removelist 3790*22dc650dSSadaf Ebrahimi exit $EXIT_FAILURE 3791*22dc650dSSadaf Ebrahimi fi 3792*22dc650dSSadaf Ebrahimi 3793*22dc650dSSadaf Ebrahimi # Just move the object if needed, then go on to compile the next one 3794*22dc650dSSadaf Ebrahimi if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 3795*22dc650dSSadaf Ebrahimi func_show_eval '$MV "$output_obj" "$lobj"' \ 3796*22dc650dSSadaf Ebrahimi 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 3797*22dc650dSSadaf Ebrahimi fi 3798*22dc650dSSadaf Ebrahimi 3799*22dc650dSSadaf Ebrahimi # Allow error messages only from the first compilation. 3800*22dc650dSSadaf Ebrahimi if test yes = "$suppress_opt"; then 3801*22dc650dSSadaf Ebrahimi suppress_output=' >/dev/null 2>&1' 3802*22dc650dSSadaf Ebrahimi fi 3803*22dc650dSSadaf Ebrahimi fi 3804*22dc650dSSadaf Ebrahimi 3805*22dc650dSSadaf Ebrahimi # Only build a position-dependent object if we build old libraries. 3806*22dc650dSSadaf Ebrahimi if test yes = "$build_old_libs"; then 3807*22dc650dSSadaf Ebrahimi if test yes != "$pic_mode"; then 3808*22dc650dSSadaf Ebrahimi # Don't build PIC code 3809*22dc650dSSadaf Ebrahimi command="$base_compile $qsrcfile$pie_flag" 3810*22dc650dSSadaf Ebrahimi else 3811*22dc650dSSadaf Ebrahimi command="$base_compile $qsrcfile $pic_flag" 3812*22dc650dSSadaf Ebrahimi fi 3813*22dc650dSSadaf Ebrahimi if test yes = "$compiler_c_o"; then 3814*22dc650dSSadaf Ebrahimi func_append command " -o $obj" 3815*22dc650dSSadaf Ebrahimi fi 3816*22dc650dSSadaf Ebrahimi 3817*22dc650dSSadaf Ebrahimi # Suppress compiler output if we already did a PIC compilation. 3818*22dc650dSSadaf Ebrahimi func_append command "$suppress_output" 3819*22dc650dSSadaf Ebrahimi func_show_eval_locale "$command" \ 3820*22dc650dSSadaf Ebrahimi '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 3821*22dc650dSSadaf Ebrahimi 3822*22dc650dSSadaf Ebrahimi if test warn = "$need_locks" && 3823*22dc650dSSadaf Ebrahimi test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3824*22dc650dSSadaf Ebrahimi $ECHO "\ 3825*22dc650dSSadaf Ebrahimi*** ERROR, $lockfile contains: 3826*22dc650dSSadaf Ebrahimi`cat $lockfile 2>/dev/null` 3827*22dc650dSSadaf Ebrahimi 3828*22dc650dSSadaf Ebrahimibut it should contain: 3829*22dc650dSSadaf Ebrahimi$srcfile 3830*22dc650dSSadaf Ebrahimi 3831*22dc650dSSadaf EbrahimiThis indicates that another process is trying to use the same 3832*22dc650dSSadaf Ebrahimitemporary object file, and libtool could not work around it because 3833*22dc650dSSadaf Ebrahimiyour compiler does not support '-c' and '-o' together. If you 3834*22dc650dSSadaf Ebrahimirepeat this compilation, it may succeed, by chance, but you had better 3835*22dc650dSSadaf Ebrahimiavoid parallel builds (make -j) in this platform, or get a better 3836*22dc650dSSadaf Ebrahimicompiler." 3837*22dc650dSSadaf Ebrahimi 3838*22dc650dSSadaf Ebrahimi $opt_dry_run || $RM $removelist 3839*22dc650dSSadaf Ebrahimi exit $EXIT_FAILURE 3840*22dc650dSSadaf Ebrahimi fi 3841*22dc650dSSadaf Ebrahimi 3842*22dc650dSSadaf Ebrahimi # Just move the object if needed 3843*22dc650dSSadaf Ebrahimi if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 3844*22dc650dSSadaf Ebrahimi func_show_eval '$MV "$output_obj" "$obj"' \ 3845*22dc650dSSadaf Ebrahimi 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 3846*22dc650dSSadaf Ebrahimi fi 3847*22dc650dSSadaf Ebrahimi fi 3848*22dc650dSSadaf Ebrahimi 3849*22dc650dSSadaf Ebrahimi $opt_dry_run || { 3850*22dc650dSSadaf Ebrahimi func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 3851*22dc650dSSadaf Ebrahimi 3852*22dc650dSSadaf Ebrahimi # Unlock the critical section if it was locked 3853*22dc650dSSadaf Ebrahimi if test no != "$need_locks"; then 3854*22dc650dSSadaf Ebrahimi removelist=$lockfile 3855*22dc650dSSadaf Ebrahimi $RM "$lockfile" 3856*22dc650dSSadaf Ebrahimi fi 3857*22dc650dSSadaf Ebrahimi } 3858*22dc650dSSadaf Ebrahimi 3859*22dc650dSSadaf Ebrahimi exit $EXIT_SUCCESS 3860*22dc650dSSadaf Ebrahimi} 3861*22dc650dSSadaf Ebrahimi 3862*22dc650dSSadaf Ebrahimi$opt_help || { 3863*22dc650dSSadaf Ebrahimi test compile = "$opt_mode" && func_mode_compile ${1+"$@"} 3864*22dc650dSSadaf Ebrahimi} 3865*22dc650dSSadaf Ebrahimi 3866*22dc650dSSadaf Ebrahimifunc_mode_help () 3867*22dc650dSSadaf Ebrahimi{ 3868*22dc650dSSadaf Ebrahimi # We need to display help for each of the modes. 3869*22dc650dSSadaf Ebrahimi case $opt_mode in 3870*22dc650dSSadaf Ebrahimi "") 3871*22dc650dSSadaf Ebrahimi # Generic help is extracted from the usage comments 3872*22dc650dSSadaf Ebrahimi # at the start of this file. 3873*22dc650dSSadaf Ebrahimi func_help 3874*22dc650dSSadaf Ebrahimi ;; 3875*22dc650dSSadaf Ebrahimi 3876*22dc650dSSadaf Ebrahimi clean) 3877*22dc650dSSadaf Ebrahimi $ECHO \ 3878*22dc650dSSadaf Ebrahimi"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 3879*22dc650dSSadaf Ebrahimi 3880*22dc650dSSadaf EbrahimiRemove files from the build directory. 3881*22dc650dSSadaf Ebrahimi 3882*22dc650dSSadaf EbrahimiRM is the name of the program to use to delete files associated with each FILE 3883*22dc650dSSadaf Ebrahimi(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 3884*22dc650dSSadaf Ebrahimito RM. 3885*22dc650dSSadaf Ebrahimi 3886*22dc650dSSadaf EbrahimiIf FILE is a libtool library, object or program, all the files associated 3887*22dc650dSSadaf Ebrahimiwith it are deleted. Otherwise, only FILE itself is deleted using RM." 3888*22dc650dSSadaf Ebrahimi ;; 3889*22dc650dSSadaf Ebrahimi 3890*22dc650dSSadaf Ebrahimi compile) 3891*22dc650dSSadaf Ebrahimi $ECHO \ 3892*22dc650dSSadaf Ebrahimi"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 3893*22dc650dSSadaf Ebrahimi 3894*22dc650dSSadaf EbrahimiCompile a source file into a libtool library object. 3895*22dc650dSSadaf Ebrahimi 3896*22dc650dSSadaf EbrahimiThis mode accepts the following additional options: 3897*22dc650dSSadaf Ebrahimi 3898*22dc650dSSadaf Ebrahimi -o OUTPUT-FILE set the output file name to OUTPUT-FILE 3899*22dc650dSSadaf Ebrahimi -no-suppress do not suppress compiler output for multiple passes 3900*22dc650dSSadaf Ebrahimi -prefer-pic try to build PIC objects only 3901*22dc650dSSadaf Ebrahimi -prefer-non-pic try to build non-PIC objects only 3902*22dc650dSSadaf Ebrahimi -shared do not build a '.o' file suitable for static linking 3903*22dc650dSSadaf Ebrahimi -static only build a '.o' file suitable for static linking 3904*22dc650dSSadaf Ebrahimi -Wc,FLAG 3905*22dc650dSSadaf Ebrahimi -Xcompiler FLAG pass FLAG directly to the compiler 3906*22dc650dSSadaf Ebrahimi 3907*22dc650dSSadaf EbrahimiCOMPILE-COMMAND is a command to be used in creating a 'standard' object file 3908*22dc650dSSadaf Ebrahimifrom the given SOURCEFILE. 3909*22dc650dSSadaf Ebrahimi 3910*22dc650dSSadaf EbrahimiThe output file name is determined by removing the directory component from 3911*22dc650dSSadaf EbrahimiSOURCEFILE, then substituting the C source code suffix '.c' with the 3912*22dc650dSSadaf Ebrahimilibrary object suffix, '.lo'." 3913*22dc650dSSadaf Ebrahimi ;; 3914*22dc650dSSadaf Ebrahimi 3915*22dc650dSSadaf Ebrahimi execute) 3916*22dc650dSSadaf Ebrahimi $ECHO \ 3917*22dc650dSSadaf Ebrahimi"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 3918*22dc650dSSadaf Ebrahimi 3919*22dc650dSSadaf EbrahimiAutomatically set library path, then run a program. 3920*22dc650dSSadaf Ebrahimi 3921*22dc650dSSadaf EbrahimiThis mode accepts the following additional options: 3922*22dc650dSSadaf Ebrahimi 3923*22dc650dSSadaf Ebrahimi -dlopen FILE add the directory containing FILE to the library path 3924*22dc650dSSadaf Ebrahimi 3925*22dc650dSSadaf EbrahimiThis mode sets the library path environment variable according to '-dlopen' 3926*22dc650dSSadaf Ebrahimiflags. 3927*22dc650dSSadaf Ebrahimi 3928*22dc650dSSadaf EbrahimiIf any of the ARGS are libtool executable wrappers, then they are translated 3929*22dc650dSSadaf Ebrahimiinto their corresponding uninstalled binary, and any of their required library 3930*22dc650dSSadaf Ebrahimidirectories are added to the library path. 3931*22dc650dSSadaf Ebrahimi 3932*22dc650dSSadaf EbrahimiThen, COMMAND is executed, with ARGS as arguments." 3933*22dc650dSSadaf Ebrahimi ;; 3934*22dc650dSSadaf Ebrahimi 3935*22dc650dSSadaf Ebrahimi finish) 3936*22dc650dSSadaf Ebrahimi $ECHO \ 3937*22dc650dSSadaf Ebrahimi"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 3938*22dc650dSSadaf Ebrahimi 3939*22dc650dSSadaf EbrahimiComplete the installation of libtool libraries. 3940*22dc650dSSadaf Ebrahimi 3941*22dc650dSSadaf EbrahimiEach LIBDIR is a directory that contains libtool libraries. 3942*22dc650dSSadaf Ebrahimi 3943*22dc650dSSadaf EbrahimiThe commands that this mode executes may require superuser privileges. Use 3944*22dc650dSSadaf Ebrahimithe '--dry-run' option if you just want to see what would be executed." 3945*22dc650dSSadaf Ebrahimi ;; 3946*22dc650dSSadaf Ebrahimi 3947*22dc650dSSadaf Ebrahimi install) 3948*22dc650dSSadaf Ebrahimi $ECHO \ 3949*22dc650dSSadaf Ebrahimi"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 3950*22dc650dSSadaf Ebrahimi 3951*22dc650dSSadaf EbrahimiInstall executables or libraries. 3952*22dc650dSSadaf Ebrahimi 3953*22dc650dSSadaf EbrahimiINSTALL-COMMAND is the installation command. The first component should be 3954*22dc650dSSadaf Ebrahimieither the 'install' or 'cp' program. 3955*22dc650dSSadaf Ebrahimi 3956*22dc650dSSadaf EbrahimiThe following components of INSTALL-COMMAND are treated specially: 3957*22dc650dSSadaf Ebrahimi 3958*22dc650dSSadaf Ebrahimi -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 3959*22dc650dSSadaf Ebrahimi 3960*22dc650dSSadaf EbrahimiThe rest of the components are interpreted as arguments to that command (only 3961*22dc650dSSadaf EbrahimiBSD-compatible install options are recognized)." 3962*22dc650dSSadaf Ebrahimi ;; 3963*22dc650dSSadaf Ebrahimi 3964*22dc650dSSadaf Ebrahimi link) 3965*22dc650dSSadaf Ebrahimi $ECHO \ 3966*22dc650dSSadaf Ebrahimi"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 3967*22dc650dSSadaf Ebrahimi 3968*22dc650dSSadaf EbrahimiLink object files or libraries together to form another library, or to 3969*22dc650dSSadaf Ebrahimicreate an executable program. 3970*22dc650dSSadaf Ebrahimi 3971*22dc650dSSadaf EbrahimiLINK-COMMAND is a command using the C compiler that you would use to create 3972*22dc650dSSadaf Ebrahimia program from several object files. 3973*22dc650dSSadaf Ebrahimi 3974*22dc650dSSadaf EbrahimiThe following components of LINK-COMMAND are treated specially: 3975*22dc650dSSadaf Ebrahimi 3976*22dc650dSSadaf Ebrahimi -all-static do not do any dynamic linking at all 3977*22dc650dSSadaf Ebrahimi -avoid-version do not add a version suffix if possible 3978*22dc650dSSadaf Ebrahimi -bindir BINDIR specify path to binaries directory (for systems where 3979*22dc650dSSadaf Ebrahimi libraries must be found in the PATH setting at runtime) 3980*22dc650dSSadaf Ebrahimi -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime 3981*22dc650dSSadaf Ebrahimi -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 3982*22dc650dSSadaf Ebrahimi -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 3983*22dc650dSSadaf Ebrahimi -export-symbols SYMFILE 3984*22dc650dSSadaf Ebrahimi try to export only the symbols listed in SYMFILE 3985*22dc650dSSadaf Ebrahimi -export-symbols-regex REGEX 3986*22dc650dSSadaf Ebrahimi try to export only the symbols matching REGEX 3987*22dc650dSSadaf Ebrahimi -LLIBDIR search LIBDIR for required installed libraries 3988*22dc650dSSadaf Ebrahimi -lNAME OUTPUT-FILE requires the installed library libNAME 3989*22dc650dSSadaf Ebrahimi -module build a library that can dlopened 3990*22dc650dSSadaf Ebrahimi -no-fast-install disable the fast-install mode 3991*22dc650dSSadaf Ebrahimi -no-install link a not-installable executable 3992*22dc650dSSadaf Ebrahimi -no-undefined declare that a library does not refer to external symbols 3993*22dc650dSSadaf Ebrahimi -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 3994*22dc650dSSadaf Ebrahimi -objectlist FILE use a list of object files found in FILE to specify objects 3995*22dc650dSSadaf Ebrahimi -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) 3996*22dc650dSSadaf Ebrahimi -precious-files-regex REGEX 3997*22dc650dSSadaf Ebrahimi don't remove output files matching REGEX 3998*22dc650dSSadaf Ebrahimi -release RELEASE specify package release information 3999*22dc650dSSadaf Ebrahimi -rpath LIBDIR the created library will eventually be installed in LIBDIR 4000*22dc650dSSadaf Ebrahimi -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 4001*22dc650dSSadaf Ebrahimi -shared only do dynamic linking of libtool libraries 4002*22dc650dSSadaf Ebrahimi -shrext SUFFIX override the standard shared library file extension 4003*22dc650dSSadaf Ebrahimi -static do not do any dynamic linking of uninstalled libtool libraries 4004*22dc650dSSadaf Ebrahimi -static-libtool-libs 4005*22dc650dSSadaf Ebrahimi do not do any dynamic linking of libtool libraries 4006*22dc650dSSadaf Ebrahimi -version-info CURRENT[:REVISION[:AGE]] 4007*22dc650dSSadaf Ebrahimi specify library version info [each variable defaults to 0] 4008*22dc650dSSadaf Ebrahimi -weak LIBNAME declare that the target provides the LIBNAME interface 4009*22dc650dSSadaf Ebrahimi -Wc,FLAG 4010*22dc650dSSadaf Ebrahimi -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 4011*22dc650dSSadaf Ebrahimi -Wa,FLAG 4012*22dc650dSSadaf Ebrahimi -Xassembler FLAG pass linker-specific FLAG directly to the assembler 4013*22dc650dSSadaf Ebrahimi -Wl,FLAG 4014*22dc650dSSadaf Ebrahimi -Xlinker FLAG pass linker-specific FLAG directly to the linker 4015*22dc650dSSadaf Ebrahimi -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 4016*22dc650dSSadaf Ebrahimi 4017*22dc650dSSadaf EbrahimiAll other options (arguments beginning with '-') are ignored. 4018*22dc650dSSadaf Ebrahimi 4019*22dc650dSSadaf EbrahimiEvery other argument is treated as a filename. Files ending in '.la' are 4020*22dc650dSSadaf Ebrahimitreated as uninstalled libtool libraries, other files are standard or library 4021*22dc650dSSadaf Ebrahimiobject files. 4022*22dc650dSSadaf Ebrahimi 4023*22dc650dSSadaf EbrahimiIf the OUTPUT-FILE ends in '.la', then a libtool library is created, 4024*22dc650dSSadaf Ebrahimionly library objects ('.lo' files) may be specified, and '-rpath' is 4025*22dc650dSSadaf Ebrahimirequired, except when creating a convenience library. 4026*22dc650dSSadaf Ebrahimi 4027*22dc650dSSadaf EbrahimiIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created 4028*22dc650dSSadaf Ebrahimiusing 'ar' and 'ranlib', or on Windows using 'lib'. 4029*22dc650dSSadaf Ebrahimi 4030*22dc650dSSadaf EbrahimiIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file 4031*22dc650dSSadaf Ebrahimiis created, otherwise an executable program is created." 4032*22dc650dSSadaf Ebrahimi ;; 4033*22dc650dSSadaf Ebrahimi 4034*22dc650dSSadaf Ebrahimi uninstall) 4035*22dc650dSSadaf Ebrahimi $ECHO \ 4036*22dc650dSSadaf Ebrahimi"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 4037*22dc650dSSadaf Ebrahimi 4038*22dc650dSSadaf EbrahimiRemove libraries from an installation directory. 4039*22dc650dSSadaf Ebrahimi 4040*22dc650dSSadaf EbrahimiRM is the name of the program to use to delete files associated with each FILE 4041*22dc650dSSadaf Ebrahimi(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 4042*22dc650dSSadaf Ebrahimito RM. 4043*22dc650dSSadaf Ebrahimi 4044*22dc650dSSadaf EbrahimiIf FILE is a libtool library, all the files associated with it are deleted. 4045*22dc650dSSadaf EbrahimiOtherwise, only FILE itself is deleted using RM." 4046*22dc650dSSadaf Ebrahimi ;; 4047*22dc650dSSadaf Ebrahimi 4048*22dc650dSSadaf Ebrahimi *) 4049*22dc650dSSadaf Ebrahimi func_fatal_help "invalid operation mode '$opt_mode'" 4050*22dc650dSSadaf Ebrahimi ;; 4051*22dc650dSSadaf Ebrahimi esac 4052*22dc650dSSadaf Ebrahimi 4053*22dc650dSSadaf Ebrahimi echo 4054*22dc650dSSadaf Ebrahimi $ECHO "Try '$progname --help' for more information about other modes." 4055*22dc650dSSadaf Ebrahimi} 4056*22dc650dSSadaf Ebrahimi 4057*22dc650dSSadaf Ebrahimi# Now that we've collected a possible --mode arg, show help if necessary 4058*22dc650dSSadaf Ebrahimiif $opt_help; then 4059*22dc650dSSadaf Ebrahimi if test : = "$opt_help"; then 4060*22dc650dSSadaf Ebrahimi func_mode_help 4061*22dc650dSSadaf Ebrahimi else 4062*22dc650dSSadaf Ebrahimi { 4063*22dc650dSSadaf Ebrahimi func_help noexit 4064*22dc650dSSadaf Ebrahimi for opt_mode in compile link execute install finish uninstall clean; do 4065*22dc650dSSadaf Ebrahimi func_mode_help 4066*22dc650dSSadaf Ebrahimi done 4067*22dc650dSSadaf Ebrahimi } | $SED -n '1p; 2,$s/^Usage:/ or: /p' 4068*22dc650dSSadaf Ebrahimi { 4069*22dc650dSSadaf Ebrahimi func_help noexit 4070*22dc650dSSadaf Ebrahimi for opt_mode in compile link execute install finish uninstall clean; do 4071*22dc650dSSadaf Ebrahimi echo 4072*22dc650dSSadaf Ebrahimi func_mode_help 4073*22dc650dSSadaf Ebrahimi done 4074*22dc650dSSadaf Ebrahimi } | 4075*22dc650dSSadaf Ebrahimi $SED '1d 4076*22dc650dSSadaf Ebrahimi /^When reporting/,/^Report/{ 4077*22dc650dSSadaf Ebrahimi H 4078*22dc650dSSadaf Ebrahimi d 4079*22dc650dSSadaf Ebrahimi } 4080*22dc650dSSadaf Ebrahimi $x 4081*22dc650dSSadaf Ebrahimi /information about other modes/d 4082*22dc650dSSadaf Ebrahimi /more detailed .*MODE/d 4083*22dc650dSSadaf Ebrahimi s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 4084*22dc650dSSadaf Ebrahimi fi 4085*22dc650dSSadaf Ebrahimi exit $? 4086*22dc650dSSadaf Ebrahimifi 4087*22dc650dSSadaf Ebrahimi 4088*22dc650dSSadaf Ebrahimi 4089*22dc650dSSadaf Ebrahimi# func_mode_execute arg... 4090*22dc650dSSadaf Ebrahimifunc_mode_execute () 4091*22dc650dSSadaf Ebrahimi{ 4092*22dc650dSSadaf Ebrahimi $debug_cmd 4093*22dc650dSSadaf Ebrahimi 4094*22dc650dSSadaf Ebrahimi # The first argument is the command name. 4095*22dc650dSSadaf Ebrahimi cmd=$nonopt 4096*22dc650dSSadaf Ebrahimi test -z "$cmd" && \ 4097*22dc650dSSadaf Ebrahimi func_fatal_help "you must specify a COMMAND" 4098*22dc650dSSadaf Ebrahimi 4099*22dc650dSSadaf Ebrahimi # Handle -dlopen flags immediately. 4100*22dc650dSSadaf Ebrahimi for file in $opt_dlopen; do 4101*22dc650dSSadaf Ebrahimi test -f "$file" \ 4102*22dc650dSSadaf Ebrahimi || func_fatal_help "'$file' is not a file" 4103*22dc650dSSadaf Ebrahimi 4104*22dc650dSSadaf Ebrahimi dir= 4105*22dc650dSSadaf Ebrahimi case $file in 4106*22dc650dSSadaf Ebrahimi *.la) 4107*22dc650dSSadaf Ebrahimi func_resolve_sysroot "$file" 4108*22dc650dSSadaf Ebrahimi file=$func_resolve_sysroot_result 4109*22dc650dSSadaf Ebrahimi 4110*22dc650dSSadaf Ebrahimi # Check to see that this really is a libtool archive. 4111*22dc650dSSadaf Ebrahimi func_lalib_unsafe_p "$file" \ 4112*22dc650dSSadaf Ebrahimi || func_fatal_help "'$lib' is not a valid libtool archive" 4113*22dc650dSSadaf Ebrahimi 4114*22dc650dSSadaf Ebrahimi # Read the libtool library. 4115*22dc650dSSadaf Ebrahimi dlname= 4116*22dc650dSSadaf Ebrahimi library_names= 4117*22dc650dSSadaf Ebrahimi func_source "$file" 4118*22dc650dSSadaf Ebrahimi 4119*22dc650dSSadaf Ebrahimi # Skip this library if it cannot be dlopened. 4120*22dc650dSSadaf Ebrahimi if test -z "$dlname"; then 4121*22dc650dSSadaf Ebrahimi # Warn if it was a shared library. 4122*22dc650dSSadaf Ebrahimi test -n "$library_names" && \ 4123*22dc650dSSadaf Ebrahimi func_warning "'$file' was not linked with '-export-dynamic'" 4124*22dc650dSSadaf Ebrahimi continue 4125*22dc650dSSadaf Ebrahimi fi 4126*22dc650dSSadaf Ebrahimi 4127*22dc650dSSadaf Ebrahimi func_dirname "$file" "" "." 4128*22dc650dSSadaf Ebrahimi dir=$func_dirname_result 4129*22dc650dSSadaf Ebrahimi 4130*22dc650dSSadaf Ebrahimi if test -f "$dir/$objdir/$dlname"; then 4131*22dc650dSSadaf Ebrahimi func_append dir "/$objdir" 4132*22dc650dSSadaf Ebrahimi else 4133*22dc650dSSadaf Ebrahimi if test ! -f "$dir/$dlname"; then 4134*22dc650dSSadaf Ebrahimi func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" 4135*22dc650dSSadaf Ebrahimi fi 4136*22dc650dSSadaf Ebrahimi fi 4137*22dc650dSSadaf Ebrahimi ;; 4138*22dc650dSSadaf Ebrahimi 4139*22dc650dSSadaf Ebrahimi *.lo) 4140*22dc650dSSadaf Ebrahimi # Just add the directory containing the .lo file. 4141*22dc650dSSadaf Ebrahimi func_dirname "$file" "" "." 4142*22dc650dSSadaf Ebrahimi dir=$func_dirname_result 4143*22dc650dSSadaf Ebrahimi ;; 4144*22dc650dSSadaf Ebrahimi 4145*22dc650dSSadaf Ebrahimi *) 4146*22dc650dSSadaf Ebrahimi func_warning "'-dlopen' is ignored for non-libtool libraries and objects" 4147*22dc650dSSadaf Ebrahimi continue 4148*22dc650dSSadaf Ebrahimi ;; 4149*22dc650dSSadaf Ebrahimi esac 4150*22dc650dSSadaf Ebrahimi 4151*22dc650dSSadaf Ebrahimi # Get the absolute pathname. 4152*22dc650dSSadaf Ebrahimi absdir=`cd "$dir" && pwd` 4153*22dc650dSSadaf Ebrahimi test -n "$absdir" && dir=$absdir 4154*22dc650dSSadaf Ebrahimi 4155*22dc650dSSadaf Ebrahimi # Now add the directory to shlibpath_var. 4156*22dc650dSSadaf Ebrahimi if eval "test -z \"\$$shlibpath_var\""; then 4157*22dc650dSSadaf Ebrahimi eval "$shlibpath_var=\"\$dir\"" 4158*22dc650dSSadaf Ebrahimi else 4159*22dc650dSSadaf Ebrahimi eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 4160*22dc650dSSadaf Ebrahimi fi 4161*22dc650dSSadaf Ebrahimi done 4162*22dc650dSSadaf Ebrahimi 4163*22dc650dSSadaf Ebrahimi # This variable tells wrapper scripts just to set shlibpath_var 4164*22dc650dSSadaf Ebrahimi # rather than running their programs. 4165*22dc650dSSadaf Ebrahimi libtool_execute_magic=$magic 4166*22dc650dSSadaf Ebrahimi 4167*22dc650dSSadaf Ebrahimi # Check if any of the arguments is a wrapper script. 4168*22dc650dSSadaf Ebrahimi args= 4169*22dc650dSSadaf Ebrahimi for file 4170*22dc650dSSadaf Ebrahimi do 4171*22dc650dSSadaf Ebrahimi case $file in 4172*22dc650dSSadaf Ebrahimi -* | *.la | *.lo ) ;; 4173*22dc650dSSadaf Ebrahimi *) 4174*22dc650dSSadaf Ebrahimi # Do a test to see if this is really a libtool program. 4175*22dc650dSSadaf Ebrahimi if func_ltwrapper_script_p "$file"; then 4176*22dc650dSSadaf Ebrahimi func_source "$file" 4177*22dc650dSSadaf Ebrahimi # Transform arg to wrapped name. 4178*22dc650dSSadaf Ebrahimi file=$progdir/$program 4179*22dc650dSSadaf Ebrahimi elif func_ltwrapper_executable_p "$file"; then 4180*22dc650dSSadaf Ebrahimi func_ltwrapper_scriptname "$file" 4181*22dc650dSSadaf Ebrahimi func_source "$func_ltwrapper_scriptname_result" 4182*22dc650dSSadaf Ebrahimi # Transform arg to wrapped name. 4183*22dc650dSSadaf Ebrahimi file=$progdir/$program 4184*22dc650dSSadaf Ebrahimi fi 4185*22dc650dSSadaf Ebrahimi ;; 4186*22dc650dSSadaf Ebrahimi esac 4187*22dc650dSSadaf Ebrahimi # Quote arguments (to preserve shell metacharacters). 4188*22dc650dSSadaf Ebrahimi func_append_quoted args "$file" 4189*22dc650dSSadaf Ebrahimi done 4190*22dc650dSSadaf Ebrahimi 4191*22dc650dSSadaf Ebrahimi if $opt_dry_run; then 4192*22dc650dSSadaf Ebrahimi # Display what would be done. 4193*22dc650dSSadaf Ebrahimi if test -n "$shlibpath_var"; then 4194*22dc650dSSadaf Ebrahimi eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 4195*22dc650dSSadaf Ebrahimi echo "export $shlibpath_var" 4196*22dc650dSSadaf Ebrahimi fi 4197*22dc650dSSadaf Ebrahimi $ECHO "$cmd$args" 4198*22dc650dSSadaf Ebrahimi exit $EXIT_SUCCESS 4199*22dc650dSSadaf Ebrahimi else 4200*22dc650dSSadaf Ebrahimi if test -n "$shlibpath_var"; then 4201*22dc650dSSadaf Ebrahimi # Export the shlibpath_var. 4202*22dc650dSSadaf Ebrahimi eval "export $shlibpath_var" 4203*22dc650dSSadaf Ebrahimi fi 4204*22dc650dSSadaf Ebrahimi 4205*22dc650dSSadaf Ebrahimi # Restore saved environment variables 4206*22dc650dSSadaf Ebrahimi for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 4207*22dc650dSSadaf Ebrahimi do 4208*22dc650dSSadaf Ebrahimi eval "if test \"\${save_$lt_var+set}\" = set; then 4209*22dc650dSSadaf Ebrahimi $lt_var=\$save_$lt_var; export $lt_var 4210*22dc650dSSadaf Ebrahimi else 4211*22dc650dSSadaf Ebrahimi $lt_unset $lt_var 4212*22dc650dSSadaf Ebrahimi fi" 4213*22dc650dSSadaf Ebrahimi done 4214*22dc650dSSadaf Ebrahimi 4215*22dc650dSSadaf Ebrahimi # Now prepare to actually exec the command. 4216*22dc650dSSadaf Ebrahimi exec_cmd=\$cmd$args 4217*22dc650dSSadaf Ebrahimi fi 4218*22dc650dSSadaf Ebrahimi} 4219*22dc650dSSadaf Ebrahimi 4220*22dc650dSSadaf Ebrahimitest execute = "$opt_mode" && func_mode_execute ${1+"$@"} 4221*22dc650dSSadaf Ebrahimi 4222*22dc650dSSadaf Ebrahimi 4223*22dc650dSSadaf Ebrahimi# func_mode_finish arg... 4224*22dc650dSSadaf Ebrahimifunc_mode_finish () 4225*22dc650dSSadaf Ebrahimi{ 4226*22dc650dSSadaf Ebrahimi $debug_cmd 4227*22dc650dSSadaf Ebrahimi 4228*22dc650dSSadaf Ebrahimi libs= 4229*22dc650dSSadaf Ebrahimi libdirs= 4230*22dc650dSSadaf Ebrahimi admincmds= 4231*22dc650dSSadaf Ebrahimi 4232*22dc650dSSadaf Ebrahimi for opt in "$nonopt" ${1+"$@"} 4233*22dc650dSSadaf Ebrahimi do 4234*22dc650dSSadaf Ebrahimi if test -d "$opt"; then 4235*22dc650dSSadaf Ebrahimi func_append libdirs " $opt" 4236*22dc650dSSadaf Ebrahimi 4237*22dc650dSSadaf Ebrahimi elif test -f "$opt"; then 4238*22dc650dSSadaf Ebrahimi if func_lalib_unsafe_p "$opt"; then 4239*22dc650dSSadaf Ebrahimi func_append libs " $opt" 4240*22dc650dSSadaf Ebrahimi else 4241*22dc650dSSadaf Ebrahimi func_warning "'$opt' is not a valid libtool archive" 4242*22dc650dSSadaf Ebrahimi fi 4243*22dc650dSSadaf Ebrahimi 4244*22dc650dSSadaf Ebrahimi else 4245*22dc650dSSadaf Ebrahimi func_fatal_error "invalid argument '$opt'" 4246*22dc650dSSadaf Ebrahimi fi 4247*22dc650dSSadaf Ebrahimi done 4248*22dc650dSSadaf Ebrahimi 4249*22dc650dSSadaf Ebrahimi if test -n "$libs"; then 4250*22dc650dSSadaf Ebrahimi if test -n "$lt_sysroot"; then 4251*22dc650dSSadaf Ebrahimi sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 4252*22dc650dSSadaf Ebrahimi sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 4253*22dc650dSSadaf Ebrahimi else 4254*22dc650dSSadaf Ebrahimi sysroot_cmd= 4255*22dc650dSSadaf Ebrahimi fi 4256*22dc650dSSadaf Ebrahimi 4257*22dc650dSSadaf Ebrahimi # Remove sysroot references 4258*22dc650dSSadaf Ebrahimi if $opt_dry_run; then 4259*22dc650dSSadaf Ebrahimi for lib in $libs; do 4260*22dc650dSSadaf Ebrahimi echo "removing references to $lt_sysroot and '=' prefixes from $lib" 4261*22dc650dSSadaf Ebrahimi done 4262*22dc650dSSadaf Ebrahimi else 4263*22dc650dSSadaf Ebrahimi tmpdir=`func_mktempdir` 4264*22dc650dSSadaf Ebrahimi for lib in $libs; do 4265*22dc650dSSadaf Ebrahimi $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 4266*22dc650dSSadaf Ebrahimi > $tmpdir/tmp-la 4267*22dc650dSSadaf Ebrahimi mv -f $tmpdir/tmp-la $lib 4268*22dc650dSSadaf Ebrahimi done 4269*22dc650dSSadaf Ebrahimi ${RM}r "$tmpdir" 4270*22dc650dSSadaf Ebrahimi fi 4271*22dc650dSSadaf Ebrahimi fi 4272*22dc650dSSadaf Ebrahimi 4273*22dc650dSSadaf Ebrahimi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4274*22dc650dSSadaf Ebrahimi for libdir in $libdirs; do 4275*22dc650dSSadaf Ebrahimi if test -n "$finish_cmds"; then 4276*22dc650dSSadaf Ebrahimi # Do each command in the finish commands. 4277*22dc650dSSadaf Ebrahimi func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 4278*22dc650dSSadaf Ebrahimi'"$cmd"'"' 4279*22dc650dSSadaf Ebrahimi fi 4280*22dc650dSSadaf Ebrahimi if test -n "$finish_eval"; then 4281*22dc650dSSadaf Ebrahimi # Do the single finish_eval. 4282*22dc650dSSadaf Ebrahimi eval cmds=\"$finish_eval\" 4283*22dc650dSSadaf Ebrahimi $opt_dry_run || eval "$cmds" || func_append admincmds " 4284*22dc650dSSadaf Ebrahimi $cmds" 4285*22dc650dSSadaf Ebrahimi fi 4286*22dc650dSSadaf Ebrahimi done 4287*22dc650dSSadaf Ebrahimi fi 4288*22dc650dSSadaf Ebrahimi 4289*22dc650dSSadaf Ebrahimi # Exit here if they wanted silent mode. 4290*22dc650dSSadaf Ebrahimi $opt_quiet && exit $EXIT_SUCCESS 4291*22dc650dSSadaf Ebrahimi 4292*22dc650dSSadaf Ebrahimi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4293*22dc650dSSadaf Ebrahimi echo "----------------------------------------------------------------------" 4294*22dc650dSSadaf Ebrahimi echo "Libraries have been installed in:" 4295*22dc650dSSadaf Ebrahimi for libdir in $libdirs; do 4296*22dc650dSSadaf Ebrahimi $ECHO " $libdir" 4297*22dc650dSSadaf Ebrahimi done 4298*22dc650dSSadaf Ebrahimi echo 4299*22dc650dSSadaf Ebrahimi echo "If you ever happen to want to link against installed libraries" 4300*22dc650dSSadaf Ebrahimi echo "in a given directory, LIBDIR, you must either use libtool, and" 4301*22dc650dSSadaf Ebrahimi echo "specify the full pathname of the library, or use the '-LLIBDIR'" 4302*22dc650dSSadaf Ebrahimi echo "flag during linking and do at least one of the following:" 4303*22dc650dSSadaf Ebrahimi if test -n "$shlibpath_var"; then 4304*22dc650dSSadaf Ebrahimi echo " - add LIBDIR to the '$shlibpath_var' environment variable" 4305*22dc650dSSadaf Ebrahimi echo " during execution" 4306*22dc650dSSadaf Ebrahimi fi 4307*22dc650dSSadaf Ebrahimi if test -n "$runpath_var"; then 4308*22dc650dSSadaf Ebrahimi echo " - add LIBDIR to the '$runpath_var' environment variable" 4309*22dc650dSSadaf Ebrahimi echo " during linking" 4310*22dc650dSSadaf Ebrahimi fi 4311*22dc650dSSadaf Ebrahimi if test -n "$hardcode_libdir_flag_spec"; then 4312*22dc650dSSadaf Ebrahimi libdir=LIBDIR 4313*22dc650dSSadaf Ebrahimi eval flag=\"$hardcode_libdir_flag_spec\" 4314*22dc650dSSadaf Ebrahimi 4315*22dc650dSSadaf Ebrahimi $ECHO " - use the '$flag' linker flag" 4316*22dc650dSSadaf Ebrahimi fi 4317*22dc650dSSadaf Ebrahimi if test -n "$admincmds"; then 4318*22dc650dSSadaf Ebrahimi $ECHO " - have your system administrator run these commands:$admincmds" 4319*22dc650dSSadaf Ebrahimi fi 4320*22dc650dSSadaf Ebrahimi if test -f /etc/ld.so.conf; then 4321*22dc650dSSadaf Ebrahimi echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" 4322*22dc650dSSadaf Ebrahimi fi 4323*22dc650dSSadaf Ebrahimi echo 4324*22dc650dSSadaf Ebrahimi 4325*22dc650dSSadaf Ebrahimi echo "See any operating system documentation about shared libraries for" 4326*22dc650dSSadaf Ebrahimi case $host in 4327*22dc650dSSadaf Ebrahimi solaris2.[6789]|solaris2.1[0-9]) 4328*22dc650dSSadaf Ebrahimi echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 4329*22dc650dSSadaf Ebrahimi echo "pages." 4330*22dc650dSSadaf Ebrahimi ;; 4331*22dc650dSSadaf Ebrahimi *) 4332*22dc650dSSadaf Ebrahimi echo "more information, such as the ld(1) and ld.so(8) manual pages." 4333*22dc650dSSadaf Ebrahimi ;; 4334*22dc650dSSadaf Ebrahimi esac 4335*22dc650dSSadaf Ebrahimi echo "----------------------------------------------------------------------" 4336*22dc650dSSadaf Ebrahimi fi 4337*22dc650dSSadaf Ebrahimi exit $EXIT_SUCCESS 4338*22dc650dSSadaf Ebrahimi} 4339*22dc650dSSadaf Ebrahimi 4340*22dc650dSSadaf Ebrahimitest finish = "$opt_mode" && func_mode_finish ${1+"$@"} 4341*22dc650dSSadaf Ebrahimi 4342*22dc650dSSadaf Ebrahimi 4343*22dc650dSSadaf Ebrahimi# func_mode_install arg... 4344*22dc650dSSadaf Ebrahimifunc_mode_install () 4345*22dc650dSSadaf Ebrahimi{ 4346*22dc650dSSadaf Ebrahimi $debug_cmd 4347*22dc650dSSadaf Ebrahimi 4348*22dc650dSSadaf Ebrahimi # There may be an optional sh(1) argument at the beginning of 4349*22dc650dSSadaf Ebrahimi # install_prog (especially on Windows NT). 4350*22dc650dSSadaf Ebrahimi if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || 4351*22dc650dSSadaf Ebrahimi # Allow the use of GNU shtool's install command. 4352*22dc650dSSadaf Ebrahimi case $nonopt in *shtool*) :;; *) false;; esac 4353*22dc650dSSadaf Ebrahimi then 4354*22dc650dSSadaf Ebrahimi # Aesthetically quote it. 4355*22dc650dSSadaf Ebrahimi func_quote_arg pretty "$nonopt" 4356*22dc650dSSadaf Ebrahimi install_prog="$func_quote_arg_result " 4357*22dc650dSSadaf Ebrahimi arg=$1 4358*22dc650dSSadaf Ebrahimi shift 4359*22dc650dSSadaf Ebrahimi else 4360*22dc650dSSadaf Ebrahimi install_prog= 4361*22dc650dSSadaf Ebrahimi arg=$nonopt 4362*22dc650dSSadaf Ebrahimi fi 4363*22dc650dSSadaf Ebrahimi 4364*22dc650dSSadaf Ebrahimi # The real first argument should be the name of the installation program. 4365*22dc650dSSadaf Ebrahimi # Aesthetically quote it. 4366*22dc650dSSadaf Ebrahimi func_quote_arg pretty "$arg" 4367*22dc650dSSadaf Ebrahimi func_append install_prog "$func_quote_arg_result" 4368*22dc650dSSadaf Ebrahimi install_shared_prog=$install_prog 4369*22dc650dSSadaf Ebrahimi case " $install_prog " in 4370*22dc650dSSadaf Ebrahimi *[\\\ /]cp\ *) install_cp=: ;; 4371*22dc650dSSadaf Ebrahimi *) install_cp=false ;; 4372*22dc650dSSadaf Ebrahimi esac 4373*22dc650dSSadaf Ebrahimi 4374*22dc650dSSadaf Ebrahimi # We need to accept at least all the BSD install flags. 4375*22dc650dSSadaf Ebrahimi dest= 4376*22dc650dSSadaf Ebrahimi files= 4377*22dc650dSSadaf Ebrahimi opts= 4378*22dc650dSSadaf Ebrahimi prev= 4379*22dc650dSSadaf Ebrahimi install_type= 4380*22dc650dSSadaf Ebrahimi isdir=false 4381*22dc650dSSadaf Ebrahimi stripme= 4382*22dc650dSSadaf Ebrahimi no_mode=: 4383*22dc650dSSadaf Ebrahimi for arg 4384*22dc650dSSadaf Ebrahimi do 4385*22dc650dSSadaf Ebrahimi arg2= 4386*22dc650dSSadaf Ebrahimi if test -n "$dest"; then 4387*22dc650dSSadaf Ebrahimi func_append files " $dest" 4388*22dc650dSSadaf Ebrahimi dest=$arg 4389*22dc650dSSadaf Ebrahimi continue 4390*22dc650dSSadaf Ebrahimi fi 4391*22dc650dSSadaf Ebrahimi 4392*22dc650dSSadaf Ebrahimi case $arg in 4393*22dc650dSSadaf Ebrahimi -d) isdir=: ;; 4394*22dc650dSSadaf Ebrahimi -f) 4395*22dc650dSSadaf Ebrahimi if $install_cp; then :; else 4396*22dc650dSSadaf Ebrahimi prev=$arg 4397*22dc650dSSadaf Ebrahimi fi 4398*22dc650dSSadaf Ebrahimi ;; 4399*22dc650dSSadaf Ebrahimi -g | -m | -o) 4400*22dc650dSSadaf Ebrahimi prev=$arg 4401*22dc650dSSadaf Ebrahimi ;; 4402*22dc650dSSadaf Ebrahimi -s) 4403*22dc650dSSadaf Ebrahimi stripme=" -s" 4404*22dc650dSSadaf Ebrahimi continue 4405*22dc650dSSadaf Ebrahimi ;; 4406*22dc650dSSadaf Ebrahimi -*) 4407*22dc650dSSadaf Ebrahimi ;; 4408*22dc650dSSadaf Ebrahimi *) 4409*22dc650dSSadaf Ebrahimi # If the previous option needed an argument, then skip it. 4410*22dc650dSSadaf Ebrahimi if test -n "$prev"; then 4411*22dc650dSSadaf Ebrahimi if test X-m = "X$prev" && test -n "$install_override_mode"; then 4412*22dc650dSSadaf Ebrahimi arg2=$install_override_mode 4413*22dc650dSSadaf Ebrahimi no_mode=false 4414*22dc650dSSadaf Ebrahimi fi 4415*22dc650dSSadaf Ebrahimi prev= 4416*22dc650dSSadaf Ebrahimi else 4417*22dc650dSSadaf Ebrahimi dest=$arg 4418*22dc650dSSadaf Ebrahimi continue 4419*22dc650dSSadaf Ebrahimi fi 4420*22dc650dSSadaf Ebrahimi ;; 4421*22dc650dSSadaf Ebrahimi esac 4422*22dc650dSSadaf Ebrahimi 4423*22dc650dSSadaf Ebrahimi # Aesthetically quote the argument. 4424*22dc650dSSadaf Ebrahimi func_quote_arg pretty "$arg" 4425*22dc650dSSadaf Ebrahimi func_append install_prog " $func_quote_arg_result" 4426*22dc650dSSadaf Ebrahimi if test -n "$arg2"; then 4427*22dc650dSSadaf Ebrahimi func_quote_arg pretty "$arg2" 4428*22dc650dSSadaf Ebrahimi fi 4429*22dc650dSSadaf Ebrahimi func_append install_shared_prog " $func_quote_arg_result" 4430*22dc650dSSadaf Ebrahimi done 4431*22dc650dSSadaf Ebrahimi 4432*22dc650dSSadaf Ebrahimi test -z "$install_prog" && \ 4433*22dc650dSSadaf Ebrahimi func_fatal_help "you must specify an install program" 4434*22dc650dSSadaf Ebrahimi 4435*22dc650dSSadaf Ebrahimi test -n "$prev" && \ 4436*22dc650dSSadaf Ebrahimi func_fatal_help "the '$prev' option requires an argument" 4437*22dc650dSSadaf Ebrahimi 4438*22dc650dSSadaf Ebrahimi if test -n "$install_override_mode" && $no_mode; then 4439*22dc650dSSadaf Ebrahimi if $install_cp; then :; else 4440*22dc650dSSadaf Ebrahimi func_quote_arg pretty "$install_override_mode" 4441*22dc650dSSadaf Ebrahimi func_append install_shared_prog " -m $func_quote_arg_result" 4442*22dc650dSSadaf Ebrahimi fi 4443*22dc650dSSadaf Ebrahimi fi 4444*22dc650dSSadaf Ebrahimi 4445*22dc650dSSadaf Ebrahimi if test -z "$files"; then 4446*22dc650dSSadaf Ebrahimi if test -z "$dest"; then 4447*22dc650dSSadaf Ebrahimi func_fatal_help "no file or destination specified" 4448*22dc650dSSadaf Ebrahimi else 4449*22dc650dSSadaf Ebrahimi func_fatal_help "you must specify a destination" 4450*22dc650dSSadaf Ebrahimi fi 4451*22dc650dSSadaf Ebrahimi fi 4452*22dc650dSSadaf Ebrahimi 4453*22dc650dSSadaf Ebrahimi # Strip any trailing slash from the destination. 4454*22dc650dSSadaf Ebrahimi func_stripname '' '/' "$dest" 4455*22dc650dSSadaf Ebrahimi dest=$func_stripname_result 4456*22dc650dSSadaf Ebrahimi 4457*22dc650dSSadaf Ebrahimi # Check to see that the destination is a directory. 4458*22dc650dSSadaf Ebrahimi test -d "$dest" && isdir=: 4459*22dc650dSSadaf Ebrahimi if $isdir; then 4460*22dc650dSSadaf Ebrahimi destdir=$dest 4461*22dc650dSSadaf Ebrahimi destname= 4462*22dc650dSSadaf Ebrahimi else 4463*22dc650dSSadaf Ebrahimi func_dirname_and_basename "$dest" "" "." 4464*22dc650dSSadaf Ebrahimi destdir=$func_dirname_result 4465*22dc650dSSadaf Ebrahimi destname=$func_basename_result 4466*22dc650dSSadaf Ebrahimi 4467*22dc650dSSadaf Ebrahimi # Not a directory, so check to see that there is only one file specified. 4468*22dc650dSSadaf Ebrahimi set dummy $files; shift 4469*22dc650dSSadaf Ebrahimi test "$#" -gt 1 && \ 4470*22dc650dSSadaf Ebrahimi func_fatal_help "'$dest' is not a directory" 4471*22dc650dSSadaf Ebrahimi fi 4472*22dc650dSSadaf Ebrahimi case $destdir in 4473*22dc650dSSadaf Ebrahimi [\\/]* | [A-Za-z]:[\\/]*) ;; 4474*22dc650dSSadaf Ebrahimi *) 4475*22dc650dSSadaf Ebrahimi for file in $files; do 4476*22dc650dSSadaf Ebrahimi case $file in 4477*22dc650dSSadaf Ebrahimi *.lo) ;; 4478*22dc650dSSadaf Ebrahimi *) 4479*22dc650dSSadaf Ebrahimi func_fatal_help "'$destdir' must be an absolute directory name" 4480*22dc650dSSadaf Ebrahimi ;; 4481*22dc650dSSadaf Ebrahimi esac 4482*22dc650dSSadaf Ebrahimi done 4483*22dc650dSSadaf Ebrahimi ;; 4484*22dc650dSSadaf Ebrahimi esac 4485*22dc650dSSadaf Ebrahimi 4486*22dc650dSSadaf Ebrahimi # This variable tells wrapper scripts just to set variables rather 4487*22dc650dSSadaf Ebrahimi # than running their programs. 4488*22dc650dSSadaf Ebrahimi libtool_install_magic=$magic 4489*22dc650dSSadaf Ebrahimi 4490*22dc650dSSadaf Ebrahimi staticlibs= 4491*22dc650dSSadaf Ebrahimi future_libdirs= 4492*22dc650dSSadaf Ebrahimi current_libdirs= 4493*22dc650dSSadaf Ebrahimi for file in $files; do 4494*22dc650dSSadaf Ebrahimi 4495*22dc650dSSadaf Ebrahimi # Do each installation. 4496*22dc650dSSadaf Ebrahimi case $file in 4497*22dc650dSSadaf Ebrahimi *.$libext) 4498*22dc650dSSadaf Ebrahimi # Do the static libraries later. 4499*22dc650dSSadaf Ebrahimi func_append staticlibs " $file" 4500*22dc650dSSadaf Ebrahimi ;; 4501*22dc650dSSadaf Ebrahimi 4502*22dc650dSSadaf Ebrahimi *.la) 4503*22dc650dSSadaf Ebrahimi func_resolve_sysroot "$file" 4504*22dc650dSSadaf Ebrahimi file=$func_resolve_sysroot_result 4505*22dc650dSSadaf Ebrahimi 4506*22dc650dSSadaf Ebrahimi # Check to see that this really is a libtool archive. 4507*22dc650dSSadaf Ebrahimi func_lalib_unsafe_p "$file" \ 4508*22dc650dSSadaf Ebrahimi || func_fatal_help "'$file' is not a valid libtool archive" 4509*22dc650dSSadaf Ebrahimi 4510*22dc650dSSadaf Ebrahimi library_names= 4511*22dc650dSSadaf Ebrahimi old_library= 4512*22dc650dSSadaf Ebrahimi relink_command= 4513*22dc650dSSadaf Ebrahimi func_source "$file" 4514*22dc650dSSadaf Ebrahimi 4515*22dc650dSSadaf Ebrahimi # Add the libdir to current_libdirs if it is the destination. 4516*22dc650dSSadaf Ebrahimi if test "X$destdir" = "X$libdir"; then 4517*22dc650dSSadaf Ebrahimi case "$current_libdirs " in 4518*22dc650dSSadaf Ebrahimi *" $libdir "*) ;; 4519*22dc650dSSadaf Ebrahimi *) func_append current_libdirs " $libdir" ;; 4520*22dc650dSSadaf Ebrahimi esac 4521*22dc650dSSadaf Ebrahimi else 4522*22dc650dSSadaf Ebrahimi # Note the libdir as a future libdir. 4523*22dc650dSSadaf Ebrahimi case "$future_libdirs " in 4524*22dc650dSSadaf Ebrahimi *" $libdir "*) ;; 4525*22dc650dSSadaf Ebrahimi *) func_append future_libdirs " $libdir" ;; 4526*22dc650dSSadaf Ebrahimi esac 4527*22dc650dSSadaf Ebrahimi fi 4528*22dc650dSSadaf Ebrahimi 4529*22dc650dSSadaf Ebrahimi func_dirname "$file" "/" "" 4530*22dc650dSSadaf Ebrahimi dir=$func_dirname_result 4531*22dc650dSSadaf Ebrahimi func_append dir "$objdir" 4532*22dc650dSSadaf Ebrahimi 4533*22dc650dSSadaf Ebrahimi if test -n "$relink_command"; then 4534*22dc650dSSadaf Ebrahimi # Determine the prefix the user has applied to our future dir. 4535*22dc650dSSadaf Ebrahimi inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 4536*22dc650dSSadaf Ebrahimi 4537*22dc650dSSadaf Ebrahimi # Don't allow the user to place us outside of our expected 4538*22dc650dSSadaf Ebrahimi # location b/c this prevents finding dependent libraries that 4539*22dc650dSSadaf Ebrahimi # are installed to the same prefix. 4540*22dc650dSSadaf Ebrahimi # At present, this check doesn't affect windows .dll's that 4541*22dc650dSSadaf Ebrahimi # are installed into $libdir/../bin (currently, that works fine) 4542*22dc650dSSadaf Ebrahimi # but it's something to keep an eye on. 4543*22dc650dSSadaf Ebrahimi test "$inst_prefix_dir" = "$destdir" && \ 4544*22dc650dSSadaf Ebrahimi func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" 4545*22dc650dSSadaf Ebrahimi 4546*22dc650dSSadaf Ebrahimi if test -n "$inst_prefix_dir"; then 4547*22dc650dSSadaf Ebrahimi # Stick the inst_prefix_dir data into the link command. 4548*22dc650dSSadaf Ebrahimi relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 4549*22dc650dSSadaf Ebrahimi else 4550*22dc650dSSadaf Ebrahimi relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 4551*22dc650dSSadaf Ebrahimi fi 4552*22dc650dSSadaf Ebrahimi 4553*22dc650dSSadaf Ebrahimi func_warning "relinking '$file'" 4554*22dc650dSSadaf Ebrahimi func_show_eval "$relink_command" \ 4555*22dc650dSSadaf Ebrahimi 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' 4556*22dc650dSSadaf Ebrahimi fi 4557*22dc650dSSadaf Ebrahimi 4558*22dc650dSSadaf Ebrahimi # See the names of the shared library. 4559*22dc650dSSadaf Ebrahimi set dummy $library_names; shift 4560*22dc650dSSadaf Ebrahimi if test -n "$1"; then 4561*22dc650dSSadaf Ebrahimi realname=$1 4562*22dc650dSSadaf Ebrahimi shift 4563*22dc650dSSadaf Ebrahimi 4564*22dc650dSSadaf Ebrahimi srcname=$realname 4565*22dc650dSSadaf Ebrahimi test -n "$relink_command" && srcname=${realname}T 4566*22dc650dSSadaf Ebrahimi 4567*22dc650dSSadaf Ebrahimi # Install the shared library and build the symlinks. 4568*22dc650dSSadaf Ebrahimi func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 4569*22dc650dSSadaf Ebrahimi 'exit $?' 4570*22dc650dSSadaf Ebrahimi tstripme=$stripme 4571*22dc650dSSadaf Ebrahimi case $host_os in 4572*22dc650dSSadaf Ebrahimi cygwin* | mingw* | pw32* | cegcc*) 4573*22dc650dSSadaf Ebrahimi case $realname in 4574*22dc650dSSadaf Ebrahimi *.dll.a) 4575*22dc650dSSadaf Ebrahimi tstripme= 4576*22dc650dSSadaf Ebrahimi ;; 4577*22dc650dSSadaf Ebrahimi esac 4578*22dc650dSSadaf Ebrahimi ;; 4579*22dc650dSSadaf Ebrahimi os2*) 4580*22dc650dSSadaf Ebrahimi case $realname in 4581*22dc650dSSadaf Ebrahimi *_dll.a) 4582*22dc650dSSadaf Ebrahimi tstripme= 4583*22dc650dSSadaf Ebrahimi ;; 4584*22dc650dSSadaf Ebrahimi esac 4585*22dc650dSSadaf Ebrahimi ;; 4586*22dc650dSSadaf Ebrahimi esac 4587*22dc650dSSadaf Ebrahimi if test -n "$tstripme" && test -n "$striplib"; then 4588*22dc650dSSadaf Ebrahimi func_show_eval "$striplib $destdir/$realname" 'exit $?' 4589*22dc650dSSadaf Ebrahimi fi 4590*22dc650dSSadaf Ebrahimi 4591*22dc650dSSadaf Ebrahimi if test "$#" -gt 0; then 4592*22dc650dSSadaf Ebrahimi # Delete the old symlinks, and create new ones. 4593*22dc650dSSadaf Ebrahimi # Try 'ln -sf' first, because the 'ln' binary might depend on 4594*22dc650dSSadaf Ebrahimi # the symlink we replace! Solaris /bin/ln does not understand -f, 4595*22dc650dSSadaf Ebrahimi # so we also need to try rm && ln -s. 4596*22dc650dSSadaf Ebrahimi for linkname 4597*22dc650dSSadaf Ebrahimi do 4598*22dc650dSSadaf Ebrahimi test "$linkname" != "$realname" \ 4599*22dc650dSSadaf Ebrahimi && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 4600*22dc650dSSadaf Ebrahimi done 4601*22dc650dSSadaf Ebrahimi fi 4602*22dc650dSSadaf Ebrahimi 4603*22dc650dSSadaf Ebrahimi # Do each command in the postinstall commands. 4604*22dc650dSSadaf Ebrahimi lib=$destdir/$realname 4605*22dc650dSSadaf Ebrahimi func_execute_cmds "$postinstall_cmds" 'exit $?' 4606*22dc650dSSadaf Ebrahimi fi 4607*22dc650dSSadaf Ebrahimi 4608*22dc650dSSadaf Ebrahimi # Install the pseudo-library for information purposes. 4609*22dc650dSSadaf Ebrahimi func_basename "$file" 4610*22dc650dSSadaf Ebrahimi name=$func_basename_result 4611*22dc650dSSadaf Ebrahimi instname=$dir/${name}i 4612*22dc650dSSadaf Ebrahimi func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 4613*22dc650dSSadaf Ebrahimi 4614*22dc650dSSadaf Ebrahimi # Maybe install the static library, too. 4615*22dc650dSSadaf Ebrahimi test -n "$old_library" && func_append staticlibs " $dir/$old_library" 4616*22dc650dSSadaf Ebrahimi ;; 4617*22dc650dSSadaf Ebrahimi 4618*22dc650dSSadaf Ebrahimi *.lo) 4619*22dc650dSSadaf Ebrahimi # Install (i.e. copy) a libtool object. 4620*22dc650dSSadaf Ebrahimi 4621*22dc650dSSadaf Ebrahimi # Figure out destination file name, if it wasn't already specified. 4622*22dc650dSSadaf Ebrahimi if test -n "$destname"; then 4623*22dc650dSSadaf Ebrahimi destfile=$destdir/$destname 4624*22dc650dSSadaf Ebrahimi else 4625*22dc650dSSadaf Ebrahimi func_basename "$file" 4626*22dc650dSSadaf Ebrahimi destfile=$func_basename_result 4627*22dc650dSSadaf Ebrahimi destfile=$destdir/$destfile 4628*22dc650dSSadaf Ebrahimi fi 4629*22dc650dSSadaf Ebrahimi 4630*22dc650dSSadaf Ebrahimi # Deduce the name of the destination old-style object file. 4631*22dc650dSSadaf Ebrahimi case $destfile in 4632*22dc650dSSadaf Ebrahimi *.lo) 4633*22dc650dSSadaf Ebrahimi func_lo2o "$destfile" 4634*22dc650dSSadaf Ebrahimi staticdest=$func_lo2o_result 4635*22dc650dSSadaf Ebrahimi ;; 4636*22dc650dSSadaf Ebrahimi *.$objext) 4637*22dc650dSSadaf Ebrahimi staticdest=$destfile 4638*22dc650dSSadaf Ebrahimi destfile= 4639*22dc650dSSadaf Ebrahimi ;; 4640*22dc650dSSadaf Ebrahimi *) 4641*22dc650dSSadaf Ebrahimi func_fatal_help "cannot copy a libtool object to '$destfile'" 4642*22dc650dSSadaf Ebrahimi ;; 4643*22dc650dSSadaf Ebrahimi esac 4644*22dc650dSSadaf Ebrahimi 4645*22dc650dSSadaf Ebrahimi # Install the libtool object if requested. 4646*22dc650dSSadaf Ebrahimi test -n "$destfile" && \ 4647*22dc650dSSadaf Ebrahimi func_show_eval "$install_prog $file $destfile" 'exit $?' 4648*22dc650dSSadaf Ebrahimi 4649*22dc650dSSadaf Ebrahimi # Install the old object if enabled. 4650*22dc650dSSadaf Ebrahimi if test yes = "$build_old_libs"; then 4651*22dc650dSSadaf Ebrahimi # Deduce the name of the old-style object file. 4652*22dc650dSSadaf Ebrahimi func_lo2o "$file" 4653*22dc650dSSadaf Ebrahimi staticobj=$func_lo2o_result 4654*22dc650dSSadaf Ebrahimi func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 4655*22dc650dSSadaf Ebrahimi fi 4656*22dc650dSSadaf Ebrahimi exit $EXIT_SUCCESS 4657*22dc650dSSadaf Ebrahimi ;; 4658*22dc650dSSadaf Ebrahimi 4659*22dc650dSSadaf Ebrahimi *) 4660*22dc650dSSadaf Ebrahimi # Figure out destination file name, if it wasn't already specified. 4661*22dc650dSSadaf Ebrahimi if test -n "$destname"; then 4662*22dc650dSSadaf Ebrahimi destfile=$destdir/$destname 4663*22dc650dSSadaf Ebrahimi else 4664*22dc650dSSadaf Ebrahimi func_basename "$file" 4665*22dc650dSSadaf Ebrahimi destfile=$func_basename_result 4666*22dc650dSSadaf Ebrahimi destfile=$destdir/$destfile 4667*22dc650dSSadaf Ebrahimi fi 4668*22dc650dSSadaf Ebrahimi 4669*22dc650dSSadaf Ebrahimi # If the file is missing, and there is a .exe on the end, strip it 4670*22dc650dSSadaf Ebrahimi # because it is most likely a libtool script we actually want to 4671*22dc650dSSadaf Ebrahimi # install 4672*22dc650dSSadaf Ebrahimi stripped_ext= 4673*22dc650dSSadaf Ebrahimi case $file in 4674*22dc650dSSadaf Ebrahimi *.exe) 4675*22dc650dSSadaf Ebrahimi if test ! -f "$file"; then 4676*22dc650dSSadaf Ebrahimi func_stripname '' '.exe' "$file" 4677*22dc650dSSadaf Ebrahimi file=$func_stripname_result 4678*22dc650dSSadaf Ebrahimi stripped_ext=.exe 4679*22dc650dSSadaf Ebrahimi fi 4680*22dc650dSSadaf Ebrahimi ;; 4681*22dc650dSSadaf Ebrahimi esac 4682*22dc650dSSadaf Ebrahimi 4683*22dc650dSSadaf Ebrahimi # Do a test to see if this is really a libtool program. 4684*22dc650dSSadaf Ebrahimi case $host in 4685*22dc650dSSadaf Ebrahimi *cygwin* | *mingw*) 4686*22dc650dSSadaf Ebrahimi if func_ltwrapper_executable_p "$file"; then 4687*22dc650dSSadaf Ebrahimi func_ltwrapper_scriptname "$file" 4688*22dc650dSSadaf Ebrahimi wrapper=$func_ltwrapper_scriptname_result 4689*22dc650dSSadaf Ebrahimi else 4690*22dc650dSSadaf Ebrahimi func_stripname '' '.exe' "$file" 4691*22dc650dSSadaf Ebrahimi wrapper=$func_stripname_result 4692*22dc650dSSadaf Ebrahimi fi 4693*22dc650dSSadaf Ebrahimi ;; 4694*22dc650dSSadaf Ebrahimi *) 4695*22dc650dSSadaf Ebrahimi wrapper=$file 4696*22dc650dSSadaf Ebrahimi ;; 4697*22dc650dSSadaf Ebrahimi esac 4698*22dc650dSSadaf Ebrahimi if func_ltwrapper_script_p "$wrapper"; then 4699*22dc650dSSadaf Ebrahimi notinst_deplibs= 4700*22dc650dSSadaf Ebrahimi relink_command= 4701*22dc650dSSadaf Ebrahimi 4702*22dc650dSSadaf Ebrahimi func_source "$wrapper" 4703*22dc650dSSadaf Ebrahimi 4704*22dc650dSSadaf Ebrahimi # Check the variables that should have been set. 4705*22dc650dSSadaf Ebrahimi test -z "$generated_by_libtool_version" && \ 4706*22dc650dSSadaf Ebrahimi func_fatal_error "invalid libtool wrapper script '$wrapper'" 4707*22dc650dSSadaf Ebrahimi 4708*22dc650dSSadaf Ebrahimi finalize=: 4709*22dc650dSSadaf Ebrahimi for lib in $notinst_deplibs; do 4710*22dc650dSSadaf Ebrahimi # Check to see that each library is installed. 4711*22dc650dSSadaf Ebrahimi libdir= 4712*22dc650dSSadaf Ebrahimi if test -f "$lib"; then 4713*22dc650dSSadaf Ebrahimi func_source "$lib" 4714*22dc650dSSadaf Ebrahimi fi 4715*22dc650dSSadaf Ebrahimi libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` 4716*22dc650dSSadaf Ebrahimi if test -n "$libdir" && test ! -f "$libfile"; then 4717*22dc650dSSadaf Ebrahimi func_warning "'$lib' has not been installed in '$libdir'" 4718*22dc650dSSadaf Ebrahimi finalize=false 4719*22dc650dSSadaf Ebrahimi fi 4720*22dc650dSSadaf Ebrahimi done 4721*22dc650dSSadaf Ebrahimi 4722*22dc650dSSadaf Ebrahimi relink_command= 4723*22dc650dSSadaf Ebrahimi func_source "$wrapper" 4724*22dc650dSSadaf Ebrahimi 4725*22dc650dSSadaf Ebrahimi outputname= 4726*22dc650dSSadaf Ebrahimi if test no = "$fast_install" && test -n "$relink_command"; then 4727*22dc650dSSadaf Ebrahimi $opt_dry_run || { 4728*22dc650dSSadaf Ebrahimi if $finalize; then 4729*22dc650dSSadaf Ebrahimi tmpdir=`func_mktempdir` 4730*22dc650dSSadaf Ebrahimi func_basename "$file$stripped_ext" 4731*22dc650dSSadaf Ebrahimi file=$func_basename_result 4732*22dc650dSSadaf Ebrahimi outputname=$tmpdir/$file 4733*22dc650dSSadaf Ebrahimi # Replace the output file specification. 4734*22dc650dSSadaf Ebrahimi relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 4735*22dc650dSSadaf Ebrahimi 4736*22dc650dSSadaf Ebrahimi $opt_quiet || { 4737*22dc650dSSadaf Ebrahimi func_quote_arg expand,pretty "$relink_command" 4738*22dc650dSSadaf Ebrahimi eval "func_echo $func_quote_arg_result" 4739*22dc650dSSadaf Ebrahimi } 4740*22dc650dSSadaf Ebrahimi if eval "$relink_command"; then : 4741*22dc650dSSadaf Ebrahimi else 4742*22dc650dSSadaf Ebrahimi func_error "error: relink '$file' with the above command before installing it" 4743*22dc650dSSadaf Ebrahimi $opt_dry_run || ${RM}r "$tmpdir" 4744*22dc650dSSadaf Ebrahimi continue 4745*22dc650dSSadaf Ebrahimi fi 4746*22dc650dSSadaf Ebrahimi file=$outputname 4747*22dc650dSSadaf Ebrahimi else 4748*22dc650dSSadaf Ebrahimi func_warning "cannot relink '$file'" 4749*22dc650dSSadaf Ebrahimi fi 4750*22dc650dSSadaf Ebrahimi } 4751*22dc650dSSadaf Ebrahimi else 4752*22dc650dSSadaf Ebrahimi # Install the binary that we compiled earlier. 4753*22dc650dSSadaf Ebrahimi file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 4754*22dc650dSSadaf Ebrahimi fi 4755*22dc650dSSadaf Ebrahimi fi 4756*22dc650dSSadaf Ebrahimi 4757*22dc650dSSadaf Ebrahimi # remove .exe since cygwin /usr/bin/install will append another 4758*22dc650dSSadaf Ebrahimi # one anyway 4759*22dc650dSSadaf Ebrahimi case $install_prog,$host in 4760*22dc650dSSadaf Ebrahimi */usr/bin/install*,*cygwin*) 4761*22dc650dSSadaf Ebrahimi case $file:$destfile in 4762*22dc650dSSadaf Ebrahimi *.exe:*.exe) 4763*22dc650dSSadaf Ebrahimi # this is ok 4764*22dc650dSSadaf Ebrahimi ;; 4765*22dc650dSSadaf Ebrahimi *.exe:*) 4766*22dc650dSSadaf Ebrahimi destfile=$destfile.exe 4767*22dc650dSSadaf Ebrahimi ;; 4768*22dc650dSSadaf Ebrahimi *:*.exe) 4769*22dc650dSSadaf Ebrahimi func_stripname '' '.exe' "$destfile" 4770*22dc650dSSadaf Ebrahimi destfile=$func_stripname_result 4771*22dc650dSSadaf Ebrahimi ;; 4772*22dc650dSSadaf Ebrahimi esac 4773*22dc650dSSadaf Ebrahimi ;; 4774*22dc650dSSadaf Ebrahimi esac 4775*22dc650dSSadaf Ebrahimi func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 4776*22dc650dSSadaf Ebrahimi $opt_dry_run || if test -n "$outputname"; then 4777*22dc650dSSadaf Ebrahimi ${RM}r "$tmpdir" 4778*22dc650dSSadaf Ebrahimi fi 4779*22dc650dSSadaf Ebrahimi ;; 4780*22dc650dSSadaf Ebrahimi esac 4781*22dc650dSSadaf Ebrahimi done 4782*22dc650dSSadaf Ebrahimi 4783*22dc650dSSadaf Ebrahimi for file in $staticlibs; do 4784*22dc650dSSadaf Ebrahimi func_basename "$file" 4785*22dc650dSSadaf Ebrahimi name=$func_basename_result 4786*22dc650dSSadaf Ebrahimi 4787*22dc650dSSadaf Ebrahimi # Set up the ranlib parameters. 4788*22dc650dSSadaf Ebrahimi oldlib=$destdir/$name 4789*22dc650dSSadaf Ebrahimi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 4790*22dc650dSSadaf Ebrahimi tool_oldlib=$func_to_tool_file_result 4791*22dc650dSSadaf Ebrahimi 4792*22dc650dSSadaf Ebrahimi func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 4793*22dc650dSSadaf Ebrahimi 4794*22dc650dSSadaf Ebrahimi if test -n "$stripme" && test -n "$old_striplib"; then 4795*22dc650dSSadaf Ebrahimi func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 4796*22dc650dSSadaf Ebrahimi fi 4797*22dc650dSSadaf Ebrahimi 4798*22dc650dSSadaf Ebrahimi # Do each command in the postinstall commands. 4799*22dc650dSSadaf Ebrahimi func_execute_cmds "$old_postinstall_cmds" 'exit $?' 4800*22dc650dSSadaf Ebrahimi done 4801*22dc650dSSadaf Ebrahimi 4802*22dc650dSSadaf Ebrahimi test -n "$future_libdirs" && \ 4803*22dc650dSSadaf Ebrahimi func_warning "remember to run '$progname --finish$future_libdirs'" 4804*22dc650dSSadaf Ebrahimi 4805*22dc650dSSadaf Ebrahimi if test -n "$current_libdirs"; then 4806*22dc650dSSadaf Ebrahimi # Maybe just do a dry run. 4807*22dc650dSSadaf Ebrahimi $opt_dry_run && current_libdirs=" -n$current_libdirs" 4808*22dc650dSSadaf Ebrahimi exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' 4809*22dc650dSSadaf Ebrahimi else 4810*22dc650dSSadaf Ebrahimi exit $EXIT_SUCCESS 4811*22dc650dSSadaf Ebrahimi fi 4812*22dc650dSSadaf Ebrahimi} 4813*22dc650dSSadaf Ebrahimi 4814*22dc650dSSadaf Ebrahimitest install = "$opt_mode" && func_mode_install ${1+"$@"} 4815*22dc650dSSadaf Ebrahimi 4816*22dc650dSSadaf Ebrahimi 4817*22dc650dSSadaf Ebrahimi# func_generate_dlsyms outputname originator pic_p 4818*22dc650dSSadaf Ebrahimi# Extract symbols from dlprefiles and create ${outputname}S.o with 4819*22dc650dSSadaf Ebrahimi# a dlpreopen symbol table. 4820*22dc650dSSadaf Ebrahimifunc_generate_dlsyms () 4821*22dc650dSSadaf Ebrahimi{ 4822*22dc650dSSadaf Ebrahimi $debug_cmd 4823*22dc650dSSadaf Ebrahimi 4824*22dc650dSSadaf Ebrahimi my_outputname=$1 4825*22dc650dSSadaf Ebrahimi my_originator=$2 4826*22dc650dSSadaf Ebrahimi my_pic_p=${3-false} 4827*22dc650dSSadaf Ebrahimi my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` 4828*22dc650dSSadaf Ebrahimi my_dlsyms= 4829*22dc650dSSadaf Ebrahimi 4830*22dc650dSSadaf Ebrahimi if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 4831*22dc650dSSadaf Ebrahimi if test -n "$NM" && test -n "$global_symbol_pipe"; then 4832*22dc650dSSadaf Ebrahimi my_dlsyms=${my_outputname}S.c 4833*22dc650dSSadaf Ebrahimi else 4834*22dc650dSSadaf Ebrahimi func_error "not configured to extract global symbols from dlpreopened files" 4835*22dc650dSSadaf Ebrahimi fi 4836*22dc650dSSadaf Ebrahimi fi 4837*22dc650dSSadaf Ebrahimi 4838*22dc650dSSadaf Ebrahimi if test -n "$my_dlsyms"; then 4839*22dc650dSSadaf Ebrahimi case $my_dlsyms in 4840*22dc650dSSadaf Ebrahimi "") ;; 4841*22dc650dSSadaf Ebrahimi *.c) 4842*22dc650dSSadaf Ebrahimi # Discover the nlist of each of the dlfiles. 4843*22dc650dSSadaf Ebrahimi nlist=$output_objdir/$my_outputname.nm 4844*22dc650dSSadaf Ebrahimi 4845*22dc650dSSadaf Ebrahimi func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 4846*22dc650dSSadaf Ebrahimi 4847*22dc650dSSadaf Ebrahimi # Parse the name list into a source file. 4848*22dc650dSSadaf Ebrahimi func_verbose "creating $output_objdir/$my_dlsyms" 4849*22dc650dSSadaf Ebrahimi 4850*22dc650dSSadaf Ebrahimi $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 4851*22dc650dSSadaf Ebrahimi/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ 4852*22dc650dSSadaf Ebrahimi/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ 4853*22dc650dSSadaf Ebrahimi 4854*22dc650dSSadaf Ebrahimi#ifdef __cplusplus 4855*22dc650dSSadaf Ebrahimiextern \"C\" { 4856*22dc650dSSadaf Ebrahimi#endif 4857*22dc650dSSadaf Ebrahimi 4858*22dc650dSSadaf Ebrahimi#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 4859*22dc650dSSadaf Ebrahimi#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 4860*22dc650dSSadaf Ebrahimi#endif 4861*22dc650dSSadaf Ebrahimi 4862*22dc650dSSadaf Ebrahimi/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 4863*22dc650dSSadaf Ebrahimi#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE 4864*22dc650dSSadaf Ebrahimi/* DATA imports from DLLs on WIN32 can't be const, because runtime 4865*22dc650dSSadaf Ebrahimi relocations are performed -- see ld's documentation on pseudo-relocs. */ 4866*22dc650dSSadaf Ebrahimi# define LT_DLSYM_CONST 4867*22dc650dSSadaf Ebrahimi#elif defined __osf__ 4868*22dc650dSSadaf Ebrahimi/* This system does not cope well with relocations in const data. */ 4869*22dc650dSSadaf Ebrahimi# define LT_DLSYM_CONST 4870*22dc650dSSadaf Ebrahimi#else 4871*22dc650dSSadaf Ebrahimi# define LT_DLSYM_CONST const 4872*22dc650dSSadaf Ebrahimi#endif 4873*22dc650dSSadaf Ebrahimi 4874*22dc650dSSadaf Ebrahimi#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 4875*22dc650dSSadaf Ebrahimi 4876*22dc650dSSadaf Ebrahimi/* External symbol declarations for the compiler. */\ 4877*22dc650dSSadaf Ebrahimi" 4878*22dc650dSSadaf Ebrahimi 4879*22dc650dSSadaf Ebrahimi if test yes = "$dlself"; then 4880*22dc650dSSadaf Ebrahimi func_verbose "generating symbol list for '$output'" 4881*22dc650dSSadaf Ebrahimi 4882*22dc650dSSadaf Ebrahimi $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 4883*22dc650dSSadaf Ebrahimi 4884*22dc650dSSadaf Ebrahimi # Add our own program objects to the symbol list. 4885*22dc650dSSadaf Ebrahimi progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 4886*22dc650dSSadaf Ebrahimi for progfile in $progfiles; do 4887*22dc650dSSadaf Ebrahimi func_to_tool_file "$progfile" func_convert_file_msys_to_w32 4888*22dc650dSSadaf Ebrahimi func_verbose "extracting global C symbols from '$func_to_tool_file_result'" 4889*22dc650dSSadaf Ebrahimi $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 4890*22dc650dSSadaf Ebrahimi done 4891*22dc650dSSadaf Ebrahimi 4892*22dc650dSSadaf Ebrahimi if test -n "$exclude_expsyms"; then 4893*22dc650dSSadaf Ebrahimi $opt_dry_run || { 4894*22dc650dSSadaf Ebrahimi eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 4895*22dc650dSSadaf Ebrahimi eval '$MV "$nlist"T "$nlist"' 4896*22dc650dSSadaf Ebrahimi } 4897*22dc650dSSadaf Ebrahimi fi 4898*22dc650dSSadaf Ebrahimi 4899*22dc650dSSadaf Ebrahimi if test -n "$export_symbols_regex"; then 4900*22dc650dSSadaf Ebrahimi $opt_dry_run || { 4901*22dc650dSSadaf Ebrahimi eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 4902*22dc650dSSadaf Ebrahimi eval '$MV "$nlist"T "$nlist"' 4903*22dc650dSSadaf Ebrahimi } 4904*22dc650dSSadaf Ebrahimi fi 4905*22dc650dSSadaf Ebrahimi 4906*22dc650dSSadaf Ebrahimi # Prepare the list of exported symbols 4907*22dc650dSSadaf Ebrahimi if test -z "$export_symbols"; then 4908*22dc650dSSadaf Ebrahimi export_symbols=$output_objdir/$outputname.exp 4909*22dc650dSSadaf Ebrahimi $opt_dry_run || { 4910*22dc650dSSadaf Ebrahimi $RM $export_symbols 4911*22dc650dSSadaf Ebrahimi eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 4912*22dc650dSSadaf Ebrahimi case $host in 4913*22dc650dSSadaf Ebrahimi *cygwin* | *mingw* | *cegcc* ) 4914*22dc650dSSadaf Ebrahimi eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4915*22dc650dSSadaf Ebrahimi eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 4916*22dc650dSSadaf Ebrahimi ;; 4917*22dc650dSSadaf Ebrahimi esac 4918*22dc650dSSadaf Ebrahimi } 4919*22dc650dSSadaf Ebrahimi else 4920*22dc650dSSadaf Ebrahimi $opt_dry_run || { 4921*22dc650dSSadaf Ebrahimi eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 4922*22dc650dSSadaf Ebrahimi eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 4923*22dc650dSSadaf Ebrahimi eval '$MV "$nlist"T "$nlist"' 4924*22dc650dSSadaf Ebrahimi case $host in 4925*22dc650dSSadaf Ebrahimi *cygwin* | *mingw* | *cegcc* ) 4926*22dc650dSSadaf Ebrahimi eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4927*22dc650dSSadaf Ebrahimi eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 4928*22dc650dSSadaf Ebrahimi ;; 4929*22dc650dSSadaf Ebrahimi esac 4930*22dc650dSSadaf Ebrahimi } 4931*22dc650dSSadaf Ebrahimi fi 4932*22dc650dSSadaf Ebrahimi fi 4933*22dc650dSSadaf Ebrahimi 4934*22dc650dSSadaf Ebrahimi for dlprefile in $dlprefiles; do 4935*22dc650dSSadaf Ebrahimi func_verbose "extracting global C symbols from '$dlprefile'" 4936*22dc650dSSadaf Ebrahimi func_basename "$dlprefile" 4937*22dc650dSSadaf Ebrahimi name=$func_basename_result 4938*22dc650dSSadaf Ebrahimi case $host in 4939*22dc650dSSadaf Ebrahimi *cygwin* | *mingw* | *cegcc* ) 4940*22dc650dSSadaf Ebrahimi # if an import library, we need to obtain dlname 4941*22dc650dSSadaf Ebrahimi if func_win32_import_lib_p "$dlprefile"; then 4942*22dc650dSSadaf Ebrahimi func_tr_sh "$dlprefile" 4943*22dc650dSSadaf Ebrahimi eval "curr_lafile=\$libfile_$func_tr_sh_result" 4944*22dc650dSSadaf Ebrahimi dlprefile_dlbasename= 4945*22dc650dSSadaf Ebrahimi if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 4946*22dc650dSSadaf Ebrahimi # Use subshell, to avoid clobbering current variable values 4947*22dc650dSSadaf Ebrahimi dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 4948*22dc650dSSadaf Ebrahimi if test -n "$dlprefile_dlname"; then 4949*22dc650dSSadaf Ebrahimi func_basename "$dlprefile_dlname" 4950*22dc650dSSadaf Ebrahimi dlprefile_dlbasename=$func_basename_result 4951*22dc650dSSadaf Ebrahimi else 4952*22dc650dSSadaf Ebrahimi # no lafile. user explicitly requested -dlpreopen <import library>. 4953*22dc650dSSadaf Ebrahimi $sharedlib_from_linklib_cmd "$dlprefile" 4954*22dc650dSSadaf Ebrahimi dlprefile_dlbasename=$sharedlib_from_linklib_result 4955*22dc650dSSadaf Ebrahimi fi 4956*22dc650dSSadaf Ebrahimi fi 4957*22dc650dSSadaf Ebrahimi $opt_dry_run || { 4958*22dc650dSSadaf Ebrahimi if test -n "$dlprefile_dlbasename"; then 4959*22dc650dSSadaf Ebrahimi eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 4960*22dc650dSSadaf Ebrahimi else 4961*22dc650dSSadaf Ebrahimi func_warning "Could not compute DLL name from $name" 4962*22dc650dSSadaf Ebrahimi eval '$ECHO ": $name " >> "$nlist"' 4963*22dc650dSSadaf Ebrahimi fi 4964*22dc650dSSadaf Ebrahimi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4965*22dc650dSSadaf Ebrahimi eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 4966*22dc650dSSadaf Ebrahimi $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 4967*22dc650dSSadaf Ebrahimi } 4968*22dc650dSSadaf Ebrahimi else # not an import lib 4969*22dc650dSSadaf Ebrahimi $opt_dry_run || { 4970*22dc650dSSadaf Ebrahimi eval '$ECHO ": $name " >> "$nlist"' 4971*22dc650dSSadaf Ebrahimi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4972*22dc650dSSadaf Ebrahimi eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 4973*22dc650dSSadaf Ebrahimi } 4974*22dc650dSSadaf Ebrahimi fi 4975*22dc650dSSadaf Ebrahimi ;; 4976*22dc650dSSadaf Ebrahimi *) 4977*22dc650dSSadaf Ebrahimi $opt_dry_run || { 4978*22dc650dSSadaf Ebrahimi eval '$ECHO ": $name " >> "$nlist"' 4979*22dc650dSSadaf Ebrahimi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4980*22dc650dSSadaf Ebrahimi eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 4981*22dc650dSSadaf Ebrahimi } 4982*22dc650dSSadaf Ebrahimi ;; 4983*22dc650dSSadaf Ebrahimi esac 4984*22dc650dSSadaf Ebrahimi done 4985*22dc650dSSadaf Ebrahimi 4986*22dc650dSSadaf Ebrahimi $opt_dry_run || { 4987*22dc650dSSadaf Ebrahimi # Make sure we have at least an empty file. 4988*22dc650dSSadaf Ebrahimi test -f "$nlist" || : > "$nlist" 4989*22dc650dSSadaf Ebrahimi 4990*22dc650dSSadaf Ebrahimi if test -n "$exclude_expsyms"; then 4991*22dc650dSSadaf Ebrahimi $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 4992*22dc650dSSadaf Ebrahimi $MV "$nlist"T "$nlist" 4993*22dc650dSSadaf Ebrahimi fi 4994*22dc650dSSadaf Ebrahimi 4995*22dc650dSSadaf Ebrahimi # Try sorting and uniquifying the output. 4996*22dc650dSSadaf Ebrahimi if $GREP -v "^: " < "$nlist" | 4997*22dc650dSSadaf Ebrahimi if sort -k 3 </dev/null >/dev/null 2>&1; then 4998*22dc650dSSadaf Ebrahimi sort -k 3 4999*22dc650dSSadaf Ebrahimi else 5000*22dc650dSSadaf Ebrahimi sort +2 5001*22dc650dSSadaf Ebrahimi fi | 5002*22dc650dSSadaf Ebrahimi uniq > "$nlist"S; then 5003*22dc650dSSadaf Ebrahimi : 5004*22dc650dSSadaf Ebrahimi else 5005*22dc650dSSadaf Ebrahimi $GREP -v "^: " < "$nlist" > "$nlist"S 5006*22dc650dSSadaf Ebrahimi fi 5007*22dc650dSSadaf Ebrahimi 5008*22dc650dSSadaf Ebrahimi if test -f "$nlist"S; then 5009*22dc650dSSadaf Ebrahimi eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 5010*22dc650dSSadaf Ebrahimi else 5011*22dc650dSSadaf Ebrahimi echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 5012*22dc650dSSadaf Ebrahimi fi 5013*22dc650dSSadaf Ebrahimi 5014*22dc650dSSadaf Ebrahimi func_show_eval '$RM "${nlist}I"' 5015*22dc650dSSadaf Ebrahimi if test -n "$global_symbol_to_import"; then 5016*22dc650dSSadaf Ebrahimi eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' 5017*22dc650dSSadaf Ebrahimi fi 5018*22dc650dSSadaf Ebrahimi 5019*22dc650dSSadaf Ebrahimi echo >> "$output_objdir/$my_dlsyms" "\ 5020*22dc650dSSadaf Ebrahimi 5021*22dc650dSSadaf Ebrahimi/* The mapping between symbol names and symbols. */ 5022*22dc650dSSadaf Ebrahimitypedef struct { 5023*22dc650dSSadaf Ebrahimi const char *name; 5024*22dc650dSSadaf Ebrahimi void *address; 5025*22dc650dSSadaf Ebrahimi} lt_dlsymlist; 5026*22dc650dSSadaf Ebrahimiextern LT_DLSYM_CONST lt_dlsymlist 5027*22dc650dSSadaf Ebrahimilt_${my_prefix}_LTX_preloaded_symbols[];\ 5028*22dc650dSSadaf Ebrahimi" 5029*22dc650dSSadaf Ebrahimi 5030*22dc650dSSadaf Ebrahimi if test -s "$nlist"I; then 5031*22dc650dSSadaf Ebrahimi echo >> "$output_objdir/$my_dlsyms" "\ 5032*22dc650dSSadaf Ebrahimistatic void lt_syminit(void) 5033*22dc650dSSadaf Ebrahimi{ 5034*22dc650dSSadaf Ebrahimi LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; 5035*22dc650dSSadaf Ebrahimi for (; symbol->name; ++symbol) 5036*22dc650dSSadaf Ebrahimi {" 5037*22dc650dSSadaf Ebrahimi $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" 5038*22dc650dSSadaf Ebrahimi echo >> "$output_objdir/$my_dlsyms" "\ 5039*22dc650dSSadaf Ebrahimi } 5040*22dc650dSSadaf Ebrahimi}" 5041*22dc650dSSadaf Ebrahimi fi 5042*22dc650dSSadaf Ebrahimi echo >> "$output_objdir/$my_dlsyms" "\ 5043*22dc650dSSadaf EbrahimiLT_DLSYM_CONST lt_dlsymlist 5044*22dc650dSSadaf Ebrahimilt_${my_prefix}_LTX_preloaded_symbols[] = 5045*22dc650dSSadaf Ebrahimi{ {\"$my_originator\", (void *) 0}," 5046*22dc650dSSadaf Ebrahimi 5047*22dc650dSSadaf Ebrahimi if test -s "$nlist"I; then 5048*22dc650dSSadaf Ebrahimi echo >> "$output_objdir/$my_dlsyms" "\ 5049*22dc650dSSadaf Ebrahimi {\"@INIT@\", (void *) <_syminit}," 5050*22dc650dSSadaf Ebrahimi fi 5051*22dc650dSSadaf Ebrahimi 5052*22dc650dSSadaf Ebrahimi case $need_lib_prefix in 5053*22dc650dSSadaf Ebrahimi no) 5054*22dc650dSSadaf Ebrahimi eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 5055*22dc650dSSadaf Ebrahimi ;; 5056*22dc650dSSadaf Ebrahimi *) 5057*22dc650dSSadaf Ebrahimi eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 5058*22dc650dSSadaf Ebrahimi ;; 5059*22dc650dSSadaf Ebrahimi esac 5060*22dc650dSSadaf Ebrahimi echo >> "$output_objdir/$my_dlsyms" "\ 5061*22dc650dSSadaf Ebrahimi {0, (void *) 0} 5062*22dc650dSSadaf Ebrahimi}; 5063*22dc650dSSadaf Ebrahimi 5064*22dc650dSSadaf Ebrahimi/* This works around a problem in FreeBSD linker */ 5065*22dc650dSSadaf Ebrahimi#ifdef FREEBSD_WORKAROUND 5066*22dc650dSSadaf Ebrahimistatic const void *lt_preloaded_setup() { 5067*22dc650dSSadaf Ebrahimi return lt_${my_prefix}_LTX_preloaded_symbols; 5068*22dc650dSSadaf Ebrahimi} 5069*22dc650dSSadaf Ebrahimi#endif 5070*22dc650dSSadaf Ebrahimi 5071*22dc650dSSadaf Ebrahimi#ifdef __cplusplus 5072*22dc650dSSadaf Ebrahimi} 5073*22dc650dSSadaf Ebrahimi#endif\ 5074*22dc650dSSadaf Ebrahimi" 5075*22dc650dSSadaf Ebrahimi } # !$opt_dry_run 5076*22dc650dSSadaf Ebrahimi 5077*22dc650dSSadaf Ebrahimi pic_flag_for_symtable= 5078*22dc650dSSadaf Ebrahimi case "$compile_command " in 5079*22dc650dSSadaf Ebrahimi *" -static "*) ;; 5080*22dc650dSSadaf Ebrahimi *) 5081*22dc650dSSadaf Ebrahimi case $host in 5082*22dc650dSSadaf Ebrahimi # compiling the symbol table file with pic_flag works around 5083*22dc650dSSadaf Ebrahimi # a FreeBSD bug that causes programs to crash when -lm is 5084*22dc650dSSadaf Ebrahimi # linked before any other PIC object. But we must not use 5085*22dc650dSSadaf Ebrahimi # pic_flag when linking with -static. The problem exists in 5086*22dc650dSSadaf Ebrahimi # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 5087*22dc650dSSadaf Ebrahimi *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 5088*22dc650dSSadaf Ebrahimi pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 5089*22dc650dSSadaf Ebrahimi *-*-hpux*) 5090*22dc650dSSadaf Ebrahimi pic_flag_for_symtable=" $pic_flag" ;; 5091*22dc650dSSadaf Ebrahimi *) 5092*22dc650dSSadaf Ebrahimi $my_pic_p && pic_flag_for_symtable=" $pic_flag" 5093*22dc650dSSadaf Ebrahimi ;; 5094*22dc650dSSadaf Ebrahimi esac 5095*22dc650dSSadaf Ebrahimi ;; 5096*22dc650dSSadaf Ebrahimi esac 5097*22dc650dSSadaf Ebrahimi symtab_cflags= 5098*22dc650dSSadaf Ebrahimi for arg in $LTCFLAGS; do 5099*22dc650dSSadaf Ebrahimi case $arg in 5100*22dc650dSSadaf Ebrahimi -pie | -fpie | -fPIE) ;; 5101*22dc650dSSadaf Ebrahimi *) func_append symtab_cflags " $arg" ;; 5102*22dc650dSSadaf Ebrahimi esac 5103*22dc650dSSadaf Ebrahimi done 5104*22dc650dSSadaf Ebrahimi 5105*22dc650dSSadaf Ebrahimi # Now compile the dynamic symbol file. 5106*22dc650dSSadaf Ebrahimi func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 5107*22dc650dSSadaf Ebrahimi 5108*22dc650dSSadaf Ebrahimi # Clean up the generated files. 5109*22dc650dSSadaf Ebrahimi func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' 5110*22dc650dSSadaf Ebrahimi 5111*22dc650dSSadaf Ebrahimi # Transform the symbol file into the correct name. 5112*22dc650dSSadaf Ebrahimi symfileobj=$output_objdir/${my_outputname}S.$objext 5113*22dc650dSSadaf Ebrahimi case $host in 5114*22dc650dSSadaf Ebrahimi *cygwin* | *mingw* | *cegcc* ) 5115*22dc650dSSadaf Ebrahimi if test -f "$output_objdir/$my_outputname.def"; then 5116*22dc650dSSadaf Ebrahimi compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 5117*22dc650dSSadaf Ebrahimi finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 5118*22dc650dSSadaf Ebrahimi else 5119*22dc650dSSadaf Ebrahimi compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5120*22dc650dSSadaf Ebrahimi finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5121*22dc650dSSadaf Ebrahimi fi 5122*22dc650dSSadaf Ebrahimi ;; 5123*22dc650dSSadaf Ebrahimi *) 5124*22dc650dSSadaf Ebrahimi compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5125*22dc650dSSadaf Ebrahimi finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5126*22dc650dSSadaf Ebrahimi ;; 5127*22dc650dSSadaf Ebrahimi esac 5128*22dc650dSSadaf Ebrahimi ;; 5129*22dc650dSSadaf Ebrahimi *) 5130*22dc650dSSadaf Ebrahimi func_fatal_error "unknown suffix for '$my_dlsyms'" 5131*22dc650dSSadaf Ebrahimi ;; 5132*22dc650dSSadaf Ebrahimi esac 5133*22dc650dSSadaf Ebrahimi else 5134*22dc650dSSadaf Ebrahimi # We keep going just in case the user didn't refer to 5135*22dc650dSSadaf Ebrahimi # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 5136*22dc650dSSadaf Ebrahimi # really was required. 5137*22dc650dSSadaf Ebrahimi 5138*22dc650dSSadaf Ebrahimi # Nullify the symbol file. 5139*22dc650dSSadaf Ebrahimi compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 5140*22dc650dSSadaf Ebrahimi finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 5141*22dc650dSSadaf Ebrahimi fi 5142*22dc650dSSadaf Ebrahimi} 5143*22dc650dSSadaf Ebrahimi 5144*22dc650dSSadaf Ebrahimi# func_cygming_gnu_implib_p ARG 5145*22dc650dSSadaf Ebrahimi# This predicate returns with zero status (TRUE) if 5146*22dc650dSSadaf Ebrahimi# ARG is a GNU/binutils-style import library. Returns 5147*22dc650dSSadaf Ebrahimi# with nonzero status (FALSE) otherwise. 5148*22dc650dSSadaf Ebrahimifunc_cygming_gnu_implib_p () 5149*22dc650dSSadaf Ebrahimi{ 5150*22dc650dSSadaf Ebrahimi $debug_cmd 5151*22dc650dSSadaf Ebrahimi 5152*22dc650dSSadaf Ebrahimi func_to_tool_file "$1" func_convert_file_msys_to_w32 5153*22dc650dSSadaf Ebrahimi func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` 5154*22dc650dSSadaf Ebrahimi test -n "$func_cygming_gnu_implib_tmp" 5155*22dc650dSSadaf Ebrahimi} 5156*22dc650dSSadaf Ebrahimi 5157*22dc650dSSadaf Ebrahimi# func_cygming_ms_implib_p ARG 5158*22dc650dSSadaf Ebrahimi# This predicate returns with zero status (TRUE) if 5159*22dc650dSSadaf Ebrahimi# ARG is an MS-style import library. Returns 5160*22dc650dSSadaf Ebrahimi# with nonzero status (FALSE) otherwise. 5161*22dc650dSSadaf Ebrahimifunc_cygming_ms_implib_p () 5162*22dc650dSSadaf Ebrahimi{ 5163*22dc650dSSadaf Ebrahimi $debug_cmd 5164*22dc650dSSadaf Ebrahimi 5165*22dc650dSSadaf Ebrahimi func_to_tool_file "$1" func_convert_file_msys_to_w32 5166*22dc650dSSadaf Ebrahimi func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 5167*22dc650dSSadaf Ebrahimi test -n "$func_cygming_ms_implib_tmp" 5168*22dc650dSSadaf Ebrahimi} 5169*22dc650dSSadaf Ebrahimi 5170*22dc650dSSadaf Ebrahimi# func_win32_libid arg 5171*22dc650dSSadaf Ebrahimi# return the library type of file 'arg' 5172*22dc650dSSadaf Ebrahimi# 5173*22dc650dSSadaf Ebrahimi# Need a lot of goo to handle *both* DLLs and import libs 5174*22dc650dSSadaf Ebrahimi# Has to be a shell function in order to 'eat' the argument 5175*22dc650dSSadaf Ebrahimi# that is supplied when $file_magic_command is called. 5176*22dc650dSSadaf Ebrahimi# Despite the name, also deal with 64 bit binaries. 5177*22dc650dSSadaf Ebrahimifunc_win32_libid () 5178*22dc650dSSadaf Ebrahimi{ 5179*22dc650dSSadaf Ebrahimi $debug_cmd 5180*22dc650dSSadaf Ebrahimi 5181*22dc650dSSadaf Ebrahimi win32_libid_type=unknown 5182*22dc650dSSadaf Ebrahimi win32_fileres=`file -L $1 2>/dev/null` 5183*22dc650dSSadaf Ebrahimi case $win32_fileres in 5184*22dc650dSSadaf Ebrahimi *ar\ archive\ import\ library*) # definitely import 5185*22dc650dSSadaf Ebrahimi win32_libid_type="x86 archive import" 5186*22dc650dSSadaf Ebrahimi ;; 5187*22dc650dSSadaf Ebrahimi *ar\ archive*) # could be an import, or static 5188*22dc650dSSadaf Ebrahimi # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 5189*22dc650dSSadaf Ebrahimi if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 5190*22dc650dSSadaf Ebrahimi $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 5191*22dc650dSSadaf Ebrahimi case $nm_interface in 5192*22dc650dSSadaf Ebrahimi "MS dumpbin") 5193*22dc650dSSadaf Ebrahimi if func_cygming_ms_implib_p "$1" || 5194*22dc650dSSadaf Ebrahimi func_cygming_gnu_implib_p "$1" 5195*22dc650dSSadaf Ebrahimi then 5196*22dc650dSSadaf Ebrahimi win32_nmres=import 5197*22dc650dSSadaf Ebrahimi else 5198*22dc650dSSadaf Ebrahimi win32_nmres= 5199*22dc650dSSadaf Ebrahimi fi 5200*22dc650dSSadaf Ebrahimi ;; 5201*22dc650dSSadaf Ebrahimi *) 5202*22dc650dSSadaf Ebrahimi func_to_tool_file "$1" func_convert_file_msys_to_w32 5203*22dc650dSSadaf Ebrahimi win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 5204*22dc650dSSadaf Ebrahimi $SED -n -e ' 5205*22dc650dSSadaf Ebrahimi 1,100{ 5206*22dc650dSSadaf Ebrahimi / I /{ 5207*22dc650dSSadaf Ebrahimi s|.*|import| 5208*22dc650dSSadaf Ebrahimi p 5209*22dc650dSSadaf Ebrahimi q 5210*22dc650dSSadaf Ebrahimi } 5211*22dc650dSSadaf Ebrahimi }'` 5212*22dc650dSSadaf Ebrahimi ;; 5213*22dc650dSSadaf Ebrahimi esac 5214*22dc650dSSadaf Ebrahimi case $win32_nmres in 5215*22dc650dSSadaf Ebrahimi import*) win32_libid_type="x86 archive import";; 5216*22dc650dSSadaf Ebrahimi *) win32_libid_type="x86 archive static";; 5217*22dc650dSSadaf Ebrahimi esac 5218*22dc650dSSadaf Ebrahimi fi 5219*22dc650dSSadaf Ebrahimi ;; 5220*22dc650dSSadaf Ebrahimi *DLL*) 5221*22dc650dSSadaf Ebrahimi win32_libid_type="x86 DLL" 5222*22dc650dSSadaf Ebrahimi ;; 5223*22dc650dSSadaf Ebrahimi *executable*) # but shell scripts are "executable" too... 5224*22dc650dSSadaf Ebrahimi case $win32_fileres in 5225*22dc650dSSadaf Ebrahimi *MS\ Windows\ PE\ Intel*) 5226*22dc650dSSadaf Ebrahimi win32_libid_type="x86 DLL" 5227*22dc650dSSadaf Ebrahimi ;; 5228*22dc650dSSadaf Ebrahimi esac 5229*22dc650dSSadaf Ebrahimi ;; 5230*22dc650dSSadaf Ebrahimi esac 5231*22dc650dSSadaf Ebrahimi $ECHO "$win32_libid_type" 5232*22dc650dSSadaf Ebrahimi} 5233*22dc650dSSadaf Ebrahimi 5234*22dc650dSSadaf Ebrahimi# func_cygming_dll_for_implib ARG 5235*22dc650dSSadaf Ebrahimi# 5236*22dc650dSSadaf Ebrahimi# Platform-specific function to extract the 5237*22dc650dSSadaf Ebrahimi# name of the DLL associated with the specified 5238*22dc650dSSadaf Ebrahimi# import library ARG. 5239*22dc650dSSadaf Ebrahimi# Invoked by eval'ing the libtool variable 5240*22dc650dSSadaf Ebrahimi# $sharedlib_from_linklib_cmd 5241*22dc650dSSadaf Ebrahimi# Result is available in the variable 5242*22dc650dSSadaf Ebrahimi# $sharedlib_from_linklib_result 5243*22dc650dSSadaf Ebrahimifunc_cygming_dll_for_implib () 5244*22dc650dSSadaf Ebrahimi{ 5245*22dc650dSSadaf Ebrahimi $debug_cmd 5246*22dc650dSSadaf Ebrahimi 5247*22dc650dSSadaf Ebrahimi sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 5248*22dc650dSSadaf Ebrahimi} 5249*22dc650dSSadaf Ebrahimi 5250*22dc650dSSadaf Ebrahimi# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 5251*22dc650dSSadaf Ebrahimi# 5252*22dc650dSSadaf Ebrahimi# The is the core of a fallback implementation of a 5253*22dc650dSSadaf Ebrahimi# platform-specific function to extract the name of the 5254*22dc650dSSadaf Ebrahimi# DLL associated with the specified import library LIBNAME. 5255*22dc650dSSadaf Ebrahimi# 5256*22dc650dSSadaf Ebrahimi# SECTION_NAME is either .idata$6 or .idata$7, depending 5257*22dc650dSSadaf Ebrahimi# on the platform and compiler that created the implib. 5258*22dc650dSSadaf Ebrahimi# 5259*22dc650dSSadaf Ebrahimi# Echos the name of the DLL associated with the 5260*22dc650dSSadaf Ebrahimi# specified import library. 5261*22dc650dSSadaf Ebrahimifunc_cygming_dll_for_implib_fallback_core () 5262*22dc650dSSadaf Ebrahimi{ 5263*22dc650dSSadaf Ebrahimi $debug_cmd 5264*22dc650dSSadaf Ebrahimi 5265*22dc650dSSadaf Ebrahimi match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 5266*22dc650dSSadaf Ebrahimi $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 5267*22dc650dSSadaf Ebrahimi $SED '/^Contents of section '"$match_literal"':/{ 5268*22dc650dSSadaf Ebrahimi # Place marker at beginning of archive member dllname section 5269*22dc650dSSadaf Ebrahimi s/.*/====MARK====/ 5270*22dc650dSSadaf Ebrahimi p 5271*22dc650dSSadaf Ebrahimi d 5272*22dc650dSSadaf Ebrahimi } 5273*22dc650dSSadaf Ebrahimi # These lines can sometimes be longer than 43 characters, but 5274*22dc650dSSadaf Ebrahimi # are always uninteresting 5275*22dc650dSSadaf Ebrahimi /:[ ]*file format pe[i]\{,1\}-/d 5276*22dc650dSSadaf Ebrahimi /^In archive [^:]*:/d 5277*22dc650dSSadaf Ebrahimi # Ensure marker is printed 5278*22dc650dSSadaf Ebrahimi /^====MARK====/p 5279*22dc650dSSadaf Ebrahimi # Remove all lines with less than 43 characters 5280*22dc650dSSadaf Ebrahimi /^.\{43\}/!d 5281*22dc650dSSadaf Ebrahimi # From remaining lines, remove first 43 characters 5282*22dc650dSSadaf Ebrahimi s/^.\{43\}//' | 5283*22dc650dSSadaf Ebrahimi $SED -n ' 5284*22dc650dSSadaf Ebrahimi # Join marker and all lines until next marker into a single line 5285*22dc650dSSadaf Ebrahimi /^====MARK====/ b para 5286*22dc650dSSadaf Ebrahimi H 5287*22dc650dSSadaf Ebrahimi $ b para 5288*22dc650dSSadaf Ebrahimi b 5289*22dc650dSSadaf Ebrahimi :para 5290*22dc650dSSadaf Ebrahimi x 5291*22dc650dSSadaf Ebrahimi s/\n//g 5292*22dc650dSSadaf Ebrahimi # Remove the marker 5293*22dc650dSSadaf Ebrahimi s/^====MARK====// 5294*22dc650dSSadaf Ebrahimi # Remove trailing dots and whitespace 5295*22dc650dSSadaf Ebrahimi s/[\. \t]*$// 5296*22dc650dSSadaf Ebrahimi # Print 5297*22dc650dSSadaf Ebrahimi /./p' | 5298*22dc650dSSadaf Ebrahimi # we now have a list, one entry per line, of the stringified 5299*22dc650dSSadaf Ebrahimi # contents of the appropriate section of all members of the 5300*22dc650dSSadaf Ebrahimi # archive that possess that section. Heuristic: eliminate 5301*22dc650dSSadaf Ebrahimi # all those that have a first or second character that is 5302*22dc650dSSadaf Ebrahimi # a '.' (that is, objdump's representation of an unprintable 5303*22dc650dSSadaf Ebrahimi # character.) This should work for all archives with less than 5304*22dc650dSSadaf Ebrahimi # 0x302f exports -- but will fail for DLLs whose name actually 5305*22dc650dSSadaf Ebrahimi # begins with a literal '.' or a single character followed by 5306*22dc650dSSadaf Ebrahimi # a '.'. 5307*22dc650dSSadaf Ebrahimi # 5308*22dc650dSSadaf Ebrahimi # Of those that remain, print the first one. 5309*22dc650dSSadaf Ebrahimi $SED -e '/^\./d;/^.\./d;q' 5310*22dc650dSSadaf Ebrahimi} 5311*22dc650dSSadaf Ebrahimi 5312*22dc650dSSadaf Ebrahimi# func_cygming_dll_for_implib_fallback ARG 5313*22dc650dSSadaf Ebrahimi# Platform-specific function to extract the 5314*22dc650dSSadaf Ebrahimi# name of the DLL associated with the specified 5315*22dc650dSSadaf Ebrahimi# import library ARG. 5316*22dc650dSSadaf Ebrahimi# 5317*22dc650dSSadaf Ebrahimi# This fallback implementation is for use when $DLLTOOL 5318*22dc650dSSadaf Ebrahimi# does not support the --identify-strict option. 5319*22dc650dSSadaf Ebrahimi# Invoked by eval'ing the libtool variable 5320*22dc650dSSadaf Ebrahimi# $sharedlib_from_linklib_cmd 5321*22dc650dSSadaf Ebrahimi# Result is available in the variable 5322*22dc650dSSadaf Ebrahimi# $sharedlib_from_linklib_result 5323*22dc650dSSadaf Ebrahimifunc_cygming_dll_for_implib_fallback () 5324*22dc650dSSadaf Ebrahimi{ 5325*22dc650dSSadaf Ebrahimi $debug_cmd 5326*22dc650dSSadaf Ebrahimi 5327*22dc650dSSadaf Ebrahimi if func_cygming_gnu_implib_p "$1"; then 5328*22dc650dSSadaf Ebrahimi # binutils import library 5329*22dc650dSSadaf Ebrahimi sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 5330*22dc650dSSadaf Ebrahimi elif func_cygming_ms_implib_p "$1"; then 5331*22dc650dSSadaf Ebrahimi # ms-generated import library 5332*22dc650dSSadaf Ebrahimi sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 5333*22dc650dSSadaf Ebrahimi else 5334*22dc650dSSadaf Ebrahimi # unknown 5335*22dc650dSSadaf Ebrahimi sharedlib_from_linklib_result= 5336*22dc650dSSadaf Ebrahimi fi 5337*22dc650dSSadaf Ebrahimi} 5338*22dc650dSSadaf Ebrahimi 5339*22dc650dSSadaf Ebrahimi 5340*22dc650dSSadaf Ebrahimi# func_extract_an_archive dir oldlib 5341*22dc650dSSadaf Ebrahimifunc_extract_an_archive () 5342*22dc650dSSadaf Ebrahimi{ 5343*22dc650dSSadaf Ebrahimi $debug_cmd 5344*22dc650dSSadaf Ebrahimi 5345*22dc650dSSadaf Ebrahimi f_ex_an_ar_dir=$1; shift 5346*22dc650dSSadaf Ebrahimi f_ex_an_ar_oldlib=$1 5347*22dc650dSSadaf Ebrahimi if test yes = "$lock_old_archive_extraction"; then 5348*22dc650dSSadaf Ebrahimi lockfile=$f_ex_an_ar_oldlib.lock 5349*22dc650dSSadaf Ebrahimi until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 5350*22dc650dSSadaf Ebrahimi func_echo "Waiting for $lockfile to be removed" 5351*22dc650dSSadaf Ebrahimi sleep 2 5352*22dc650dSSadaf Ebrahimi done 5353*22dc650dSSadaf Ebrahimi fi 5354*22dc650dSSadaf Ebrahimi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 5355*22dc650dSSadaf Ebrahimi 'stat=$?; rm -f "$lockfile"; exit $stat' 5356*22dc650dSSadaf Ebrahimi if test yes = "$lock_old_archive_extraction"; then 5357*22dc650dSSadaf Ebrahimi $opt_dry_run || rm -f "$lockfile" 5358*22dc650dSSadaf Ebrahimi fi 5359*22dc650dSSadaf Ebrahimi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 5360*22dc650dSSadaf Ebrahimi : 5361*22dc650dSSadaf Ebrahimi else 5362*22dc650dSSadaf Ebrahimi func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 5363*22dc650dSSadaf Ebrahimi fi 5364*22dc650dSSadaf Ebrahimi} 5365*22dc650dSSadaf Ebrahimi 5366*22dc650dSSadaf Ebrahimi 5367*22dc650dSSadaf Ebrahimi# func_extract_archives gentop oldlib ... 5368*22dc650dSSadaf Ebrahimifunc_extract_archives () 5369*22dc650dSSadaf Ebrahimi{ 5370*22dc650dSSadaf Ebrahimi $debug_cmd 5371*22dc650dSSadaf Ebrahimi 5372*22dc650dSSadaf Ebrahimi my_gentop=$1; shift 5373*22dc650dSSadaf Ebrahimi my_oldlibs=${1+"$@"} 5374*22dc650dSSadaf Ebrahimi my_oldobjs= 5375*22dc650dSSadaf Ebrahimi my_xlib= 5376*22dc650dSSadaf Ebrahimi my_xabs= 5377*22dc650dSSadaf Ebrahimi my_xdir= 5378*22dc650dSSadaf Ebrahimi 5379*22dc650dSSadaf Ebrahimi for my_xlib in $my_oldlibs; do 5380*22dc650dSSadaf Ebrahimi # Extract the objects. 5381*22dc650dSSadaf Ebrahimi case $my_xlib in 5382*22dc650dSSadaf Ebrahimi [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; 5383*22dc650dSSadaf Ebrahimi *) my_xabs=`pwd`"/$my_xlib" ;; 5384*22dc650dSSadaf Ebrahimi esac 5385*22dc650dSSadaf Ebrahimi func_basename "$my_xlib" 5386*22dc650dSSadaf Ebrahimi my_xlib=$func_basename_result 5387*22dc650dSSadaf Ebrahimi my_xlib_u=$my_xlib 5388*22dc650dSSadaf Ebrahimi while :; do 5389*22dc650dSSadaf Ebrahimi case " $extracted_archives " in 5390*22dc650dSSadaf Ebrahimi *" $my_xlib_u "*) 5391*22dc650dSSadaf Ebrahimi func_arith $extracted_serial + 1 5392*22dc650dSSadaf Ebrahimi extracted_serial=$func_arith_result 5393*22dc650dSSadaf Ebrahimi my_xlib_u=lt$extracted_serial-$my_xlib ;; 5394*22dc650dSSadaf Ebrahimi *) break ;; 5395*22dc650dSSadaf Ebrahimi esac 5396*22dc650dSSadaf Ebrahimi done 5397*22dc650dSSadaf Ebrahimi extracted_archives="$extracted_archives $my_xlib_u" 5398*22dc650dSSadaf Ebrahimi my_xdir=$my_gentop/$my_xlib_u 5399*22dc650dSSadaf Ebrahimi 5400*22dc650dSSadaf Ebrahimi func_mkdir_p "$my_xdir" 5401*22dc650dSSadaf Ebrahimi 5402*22dc650dSSadaf Ebrahimi case $host in 5403*22dc650dSSadaf Ebrahimi *-darwin*) 5404*22dc650dSSadaf Ebrahimi func_verbose "Extracting $my_xabs" 5405*22dc650dSSadaf Ebrahimi # Do not bother doing anything if just a dry run 5406*22dc650dSSadaf Ebrahimi $opt_dry_run || { 5407*22dc650dSSadaf Ebrahimi darwin_orig_dir=`pwd` 5408*22dc650dSSadaf Ebrahimi cd $my_xdir || exit $? 5409*22dc650dSSadaf Ebrahimi darwin_archive=$my_xabs 5410*22dc650dSSadaf Ebrahimi darwin_curdir=`pwd` 5411*22dc650dSSadaf Ebrahimi func_basename "$darwin_archive" 5412*22dc650dSSadaf Ebrahimi darwin_base_archive=$func_basename_result 5413*22dc650dSSadaf Ebrahimi darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 5414*22dc650dSSadaf Ebrahimi if test -n "$darwin_arches"; then 5415*22dc650dSSadaf Ebrahimi darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 5416*22dc650dSSadaf Ebrahimi darwin_arch= 5417*22dc650dSSadaf Ebrahimi func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 5418*22dc650dSSadaf Ebrahimi for darwin_arch in $darwin_arches; do 5419*22dc650dSSadaf Ebrahimi func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" 5420*22dc650dSSadaf Ebrahimi $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" 5421*22dc650dSSadaf Ebrahimi cd "unfat-$$/$darwin_base_archive-$darwin_arch" 5422*22dc650dSSadaf Ebrahimi func_extract_an_archive "`pwd`" "$darwin_base_archive" 5423*22dc650dSSadaf Ebrahimi cd "$darwin_curdir" 5424*22dc650dSSadaf Ebrahimi $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" 5425*22dc650dSSadaf Ebrahimi done # $darwin_arches 5426*22dc650dSSadaf Ebrahimi ## Okay now we've a bunch of thin objects, gotta fatten them up :) 5427*22dc650dSSadaf Ebrahimi darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` 5428*22dc650dSSadaf Ebrahimi darwin_file= 5429*22dc650dSSadaf Ebrahimi darwin_files= 5430*22dc650dSSadaf Ebrahimi for darwin_file in $darwin_filelist; do 5431*22dc650dSSadaf Ebrahimi darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 5432*22dc650dSSadaf Ebrahimi $LIPO -create -output "$darwin_file" $darwin_files 5433*22dc650dSSadaf Ebrahimi done # $darwin_filelist 5434*22dc650dSSadaf Ebrahimi $RM -rf unfat-$$ 5435*22dc650dSSadaf Ebrahimi cd "$darwin_orig_dir" 5436*22dc650dSSadaf Ebrahimi else 5437*22dc650dSSadaf Ebrahimi cd $darwin_orig_dir 5438*22dc650dSSadaf Ebrahimi func_extract_an_archive "$my_xdir" "$my_xabs" 5439*22dc650dSSadaf Ebrahimi fi # $darwin_arches 5440*22dc650dSSadaf Ebrahimi } # !$opt_dry_run 5441*22dc650dSSadaf Ebrahimi ;; 5442*22dc650dSSadaf Ebrahimi *) 5443*22dc650dSSadaf Ebrahimi func_extract_an_archive "$my_xdir" "$my_xabs" 5444*22dc650dSSadaf Ebrahimi ;; 5445*22dc650dSSadaf Ebrahimi esac 5446*22dc650dSSadaf Ebrahimi my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 5447*22dc650dSSadaf Ebrahimi done 5448*22dc650dSSadaf Ebrahimi 5449*22dc650dSSadaf Ebrahimi func_extract_archives_result=$my_oldobjs 5450*22dc650dSSadaf Ebrahimi} 5451*22dc650dSSadaf Ebrahimi 5452*22dc650dSSadaf Ebrahimi 5453*22dc650dSSadaf Ebrahimi# func_emit_wrapper [arg=no] 5454*22dc650dSSadaf Ebrahimi# 5455*22dc650dSSadaf Ebrahimi# Emit a libtool wrapper script on stdout. 5456*22dc650dSSadaf Ebrahimi# Don't directly open a file because we may want to 5457*22dc650dSSadaf Ebrahimi# incorporate the script contents within a cygwin/mingw 5458*22dc650dSSadaf Ebrahimi# wrapper executable. Must ONLY be called from within 5459*22dc650dSSadaf Ebrahimi# func_mode_link because it depends on a number of variables 5460*22dc650dSSadaf Ebrahimi# set therein. 5461*22dc650dSSadaf Ebrahimi# 5462*22dc650dSSadaf Ebrahimi# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 5463*22dc650dSSadaf Ebrahimi# variable will take. If 'yes', then the emitted script 5464*22dc650dSSadaf Ebrahimi# will assume that the directory where it is stored is 5465*22dc650dSSadaf Ebrahimi# the $objdir directory. This is a cygwin/mingw-specific 5466*22dc650dSSadaf Ebrahimi# behavior. 5467*22dc650dSSadaf Ebrahimifunc_emit_wrapper () 5468*22dc650dSSadaf Ebrahimi{ 5469*22dc650dSSadaf Ebrahimi func_emit_wrapper_arg1=${1-no} 5470*22dc650dSSadaf Ebrahimi 5471*22dc650dSSadaf Ebrahimi $ECHO "\ 5472*22dc650dSSadaf Ebrahimi#! $SHELL 5473*22dc650dSSadaf Ebrahimi 5474*22dc650dSSadaf Ebrahimi# $output - temporary wrapper script for $objdir/$outputname 5475*22dc650dSSadaf Ebrahimi# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5476*22dc650dSSadaf Ebrahimi# 5477*22dc650dSSadaf Ebrahimi# The $output program cannot be directly executed until all the libtool 5478*22dc650dSSadaf Ebrahimi# libraries that it depends on are installed. 5479*22dc650dSSadaf Ebrahimi# 5480*22dc650dSSadaf Ebrahimi# This wrapper script should never be moved out of the build directory. 5481*22dc650dSSadaf Ebrahimi# If it is, it will not operate correctly. 5482*22dc650dSSadaf Ebrahimi 5483*22dc650dSSadaf Ebrahimi# Sed substitution that helps us do robust quoting. It backslashifies 5484*22dc650dSSadaf Ebrahimi# metacharacters that are still active within double-quoted strings. 5485*22dc650dSSadaf Ebrahimised_quote_subst='$sed_quote_subst' 5486*22dc650dSSadaf Ebrahimi 5487*22dc650dSSadaf Ebrahimi# Be Bourne compatible 5488*22dc650dSSadaf Ebrahimiif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 5489*22dc650dSSadaf Ebrahimi emulate sh 5490*22dc650dSSadaf Ebrahimi NULLCMD=: 5491*22dc650dSSadaf Ebrahimi # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 5492*22dc650dSSadaf Ebrahimi # is contrary to our usage. Disable this feature. 5493*22dc650dSSadaf Ebrahimi alias -g '\${1+\"\$@\"}'='\"\$@\"' 5494*22dc650dSSadaf Ebrahimi setopt NO_GLOB_SUBST 5495*22dc650dSSadaf Ebrahimielse 5496*22dc650dSSadaf Ebrahimi case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 5497*22dc650dSSadaf Ebrahimifi 5498*22dc650dSSadaf EbrahimiBIN_SH=xpg4; export BIN_SH # for Tru64 5499*22dc650dSSadaf EbrahimiDUALCASE=1; export DUALCASE # for MKS sh 5500*22dc650dSSadaf Ebrahimi 5501*22dc650dSSadaf Ebrahimi# The HP-UX ksh and POSIX shell print the target directory to stdout 5502*22dc650dSSadaf Ebrahimi# if CDPATH is set. 5503*22dc650dSSadaf Ebrahimi(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 5504*22dc650dSSadaf Ebrahimi 5505*22dc650dSSadaf Ebrahimirelink_command=\"$relink_command\" 5506*22dc650dSSadaf Ebrahimi 5507*22dc650dSSadaf Ebrahimi# This environment variable determines our operation mode. 5508*22dc650dSSadaf Ebrahimiif test \"\$libtool_install_magic\" = \"$magic\"; then 5509*22dc650dSSadaf Ebrahimi # install mode needs the following variables: 5510*22dc650dSSadaf Ebrahimi generated_by_libtool_version='$macro_version' 5511*22dc650dSSadaf Ebrahimi notinst_deplibs='$notinst_deplibs' 5512*22dc650dSSadaf Ebrahimielse 5513*22dc650dSSadaf Ebrahimi # When we are sourced in execute mode, \$file and \$ECHO are already set. 5514*22dc650dSSadaf Ebrahimi if test \"\$libtool_execute_magic\" != \"$magic\"; then 5515*22dc650dSSadaf Ebrahimi file=\"\$0\"" 5516*22dc650dSSadaf Ebrahimi 5517*22dc650dSSadaf Ebrahimi func_quote_arg pretty "$ECHO" 5518*22dc650dSSadaf Ebrahimi qECHO=$func_quote_arg_result 5519*22dc650dSSadaf Ebrahimi $ECHO "\ 5520*22dc650dSSadaf Ebrahimi 5521*22dc650dSSadaf Ebrahimi# A function that is used when there is no print builtin or printf. 5522*22dc650dSSadaf Ebrahimifunc_fallback_echo () 5523*22dc650dSSadaf Ebrahimi{ 5524*22dc650dSSadaf Ebrahimi eval 'cat <<_LTECHO_EOF 5525*22dc650dSSadaf Ebrahimi\$1 5526*22dc650dSSadaf Ebrahimi_LTECHO_EOF' 5527*22dc650dSSadaf Ebrahimi} 5528*22dc650dSSadaf Ebrahimi ECHO=$qECHO 5529*22dc650dSSadaf Ebrahimi fi 5530*22dc650dSSadaf Ebrahimi 5531*22dc650dSSadaf Ebrahimi# Very basic option parsing. These options are (a) specific to 5532*22dc650dSSadaf Ebrahimi# the libtool wrapper, (b) are identical between the wrapper 5533*22dc650dSSadaf Ebrahimi# /script/ and the wrapper /executable/ that is used only on 5534*22dc650dSSadaf Ebrahimi# windows platforms, and (c) all begin with the string "--lt-" 5535*22dc650dSSadaf Ebrahimi# (application programs are unlikely to have options that match 5536*22dc650dSSadaf Ebrahimi# this pattern). 5537*22dc650dSSadaf Ebrahimi# 5538*22dc650dSSadaf Ebrahimi# There are only two supported options: --lt-debug and 5539*22dc650dSSadaf Ebrahimi# --lt-dump-script. There is, deliberately, no --lt-help. 5540*22dc650dSSadaf Ebrahimi# 5541*22dc650dSSadaf Ebrahimi# The first argument to this parsing function should be the 5542*22dc650dSSadaf Ebrahimi# script's $0 value, followed by "$@". 5543*22dc650dSSadaf Ebrahimilt_option_debug= 5544*22dc650dSSadaf Ebrahimifunc_parse_lt_options () 5545*22dc650dSSadaf Ebrahimi{ 5546*22dc650dSSadaf Ebrahimi lt_script_arg0=\$0 5547*22dc650dSSadaf Ebrahimi shift 5548*22dc650dSSadaf Ebrahimi for lt_opt 5549*22dc650dSSadaf Ebrahimi do 5550*22dc650dSSadaf Ebrahimi case \"\$lt_opt\" in 5551*22dc650dSSadaf Ebrahimi --lt-debug) lt_option_debug=1 ;; 5552*22dc650dSSadaf Ebrahimi --lt-dump-script) 5553*22dc650dSSadaf Ebrahimi lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 5554*22dc650dSSadaf Ebrahimi test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 5555*22dc650dSSadaf Ebrahimi lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 5556*22dc650dSSadaf Ebrahimi cat \"\$lt_dump_D/\$lt_dump_F\" 5557*22dc650dSSadaf Ebrahimi exit 0 5558*22dc650dSSadaf Ebrahimi ;; 5559*22dc650dSSadaf Ebrahimi --lt-*) 5560*22dc650dSSadaf Ebrahimi \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 5561*22dc650dSSadaf Ebrahimi exit 1 5562*22dc650dSSadaf Ebrahimi ;; 5563*22dc650dSSadaf Ebrahimi esac 5564*22dc650dSSadaf Ebrahimi done 5565*22dc650dSSadaf Ebrahimi 5566*22dc650dSSadaf Ebrahimi # Print the debug banner immediately: 5567*22dc650dSSadaf Ebrahimi if test -n \"\$lt_option_debug\"; then 5568*22dc650dSSadaf Ebrahimi echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 5569*22dc650dSSadaf Ebrahimi fi 5570*22dc650dSSadaf Ebrahimi} 5571*22dc650dSSadaf Ebrahimi 5572*22dc650dSSadaf Ebrahimi# Used when --lt-debug. Prints its arguments to stdout 5573*22dc650dSSadaf Ebrahimi# (redirection is the responsibility of the caller) 5574*22dc650dSSadaf Ebrahimifunc_lt_dump_args () 5575*22dc650dSSadaf Ebrahimi{ 5576*22dc650dSSadaf Ebrahimi lt_dump_args_N=1; 5577*22dc650dSSadaf Ebrahimi for lt_arg 5578*22dc650dSSadaf Ebrahimi do 5579*22dc650dSSadaf Ebrahimi \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" 5580*22dc650dSSadaf Ebrahimi lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 5581*22dc650dSSadaf Ebrahimi done 5582*22dc650dSSadaf Ebrahimi} 5583*22dc650dSSadaf Ebrahimi 5584*22dc650dSSadaf Ebrahimi# Core function for launching the target application 5585*22dc650dSSadaf Ebrahimifunc_exec_program_core () 5586*22dc650dSSadaf Ebrahimi{ 5587*22dc650dSSadaf Ebrahimi" 5588*22dc650dSSadaf Ebrahimi case $host in 5589*22dc650dSSadaf Ebrahimi # Backslashes separate directories on plain windows 5590*22dc650dSSadaf Ebrahimi *-*-mingw | *-*-os2* | *-cegcc*) 5591*22dc650dSSadaf Ebrahimi $ECHO "\ 5592*22dc650dSSadaf Ebrahimi if test -n \"\$lt_option_debug\"; then 5593*22dc650dSSadaf Ebrahimi \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 5594*22dc650dSSadaf Ebrahimi func_lt_dump_args \${1+\"\$@\"} 1>&2 5595*22dc650dSSadaf Ebrahimi fi 5596*22dc650dSSadaf Ebrahimi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 5597*22dc650dSSadaf Ebrahimi" 5598*22dc650dSSadaf Ebrahimi ;; 5599*22dc650dSSadaf Ebrahimi 5600*22dc650dSSadaf Ebrahimi *) 5601*22dc650dSSadaf Ebrahimi $ECHO "\ 5602*22dc650dSSadaf Ebrahimi if test -n \"\$lt_option_debug\"; then 5603*22dc650dSSadaf Ebrahimi \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 5604*22dc650dSSadaf Ebrahimi func_lt_dump_args \${1+\"\$@\"} 1>&2 5605*22dc650dSSadaf Ebrahimi fi 5606*22dc650dSSadaf Ebrahimi exec \"\$progdir/\$program\" \${1+\"\$@\"} 5607*22dc650dSSadaf Ebrahimi" 5608*22dc650dSSadaf Ebrahimi ;; 5609*22dc650dSSadaf Ebrahimi esac 5610*22dc650dSSadaf Ebrahimi $ECHO "\ 5611*22dc650dSSadaf Ebrahimi \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 5612*22dc650dSSadaf Ebrahimi exit 1 5613*22dc650dSSadaf Ebrahimi} 5614*22dc650dSSadaf Ebrahimi 5615*22dc650dSSadaf Ebrahimi# A function to encapsulate launching the target application 5616*22dc650dSSadaf Ebrahimi# Strips options in the --lt-* namespace from \$@ and 5617*22dc650dSSadaf Ebrahimi# launches target application with the remaining arguments. 5618*22dc650dSSadaf Ebrahimifunc_exec_program () 5619*22dc650dSSadaf Ebrahimi{ 5620*22dc650dSSadaf Ebrahimi case \" \$* \" in 5621*22dc650dSSadaf Ebrahimi *\\ --lt-*) 5622*22dc650dSSadaf Ebrahimi for lt_wr_arg 5623*22dc650dSSadaf Ebrahimi do 5624*22dc650dSSadaf Ebrahimi case \$lt_wr_arg in 5625*22dc650dSSadaf Ebrahimi --lt-*) ;; 5626*22dc650dSSadaf Ebrahimi *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 5627*22dc650dSSadaf Ebrahimi esac 5628*22dc650dSSadaf Ebrahimi shift 5629*22dc650dSSadaf Ebrahimi done ;; 5630*22dc650dSSadaf Ebrahimi esac 5631*22dc650dSSadaf Ebrahimi func_exec_program_core \${1+\"\$@\"} 5632*22dc650dSSadaf Ebrahimi} 5633*22dc650dSSadaf Ebrahimi 5634*22dc650dSSadaf Ebrahimi # Parse options 5635*22dc650dSSadaf Ebrahimi func_parse_lt_options \"\$0\" \${1+\"\$@\"} 5636*22dc650dSSadaf Ebrahimi 5637*22dc650dSSadaf Ebrahimi # Find the directory that this script lives in. 5638*22dc650dSSadaf Ebrahimi thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 5639*22dc650dSSadaf Ebrahimi test \"x\$thisdir\" = \"x\$file\" && thisdir=. 5640*22dc650dSSadaf Ebrahimi 5641*22dc650dSSadaf Ebrahimi # Follow symbolic links until we get to the real thisdir. 5642*22dc650dSSadaf Ebrahimi file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 5643*22dc650dSSadaf Ebrahimi while test -n \"\$file\"; do 5644*22dc650dSSadaf Ebrahimi destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 5645*22dc650dSSadaf Ebrahimi 5646*22dc650dSSadaf Ebrahimi # If there was a directory component, then change thisdir. 5647*22dc650dSSadaf Ebrahimi if test \"x\$destdir\" != \"x\$file\"; then 5648*22dc650dSSadaf Ebrahimi case \"\$destdir\" in 5649*22dc650dSSadaf Ebrahimi [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 5650*22dc650dSSadaf Ebrahimi *) thisdir=\"\$thisdir/\$destdir\" ;; 5651*22dc650dSSadaf Ebrahimi esac 5652*22dc650dSSadaf Ebrahimi fi 5653*22dc650dSSadaf Ebrahimi 5654*22dc650dSSadaf Ebrahimi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 5655*22dc650dSSadaf Ebrahimi file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 5656*22dc650dSSadaf Ebrahimi done 5657*22dc650dSSadaf Ebrahimi 5658*22dc650dSSadaf Ebrahimi # Usually 'no', except on cygwin/mingw when embedded into 5659*22dc650dSSadaf Ebrahimi # the cwrapper. 5660*22dc650dSSadaf Ebrahimi WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 5661*22dc650dSSadaf Ebrahimi if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 5662*22dc650dSSadaf Ebrahimi # special case for '.' 5663*22dc650dSSadaf Ebrahimi if test \"\$thisdir\" = \".\"; then 5664*22dc650dSSadaf Ebrahimi thisdir=\`pwd\` 5665*22dc650dSSadaf Ebrahimi fi 5666*22dc650dSSadaf Ebrahimi # remove .libs from thisdir 5667*22dc650dSSadaf Ebrahimi case \"\$thisdir\" in 5668*22dc650dSSadaf Ebrahimi *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 5669*22dc650dSSadaf Ebrahimi $objdir ) thisdir=. ;; 5670*22dc650dSSadaf Ebrahimi esac 5671*22dc650dSSadaf Ebrahimi fi 5672*22dc650dSSadaf Ebrahimi 5673*22dc650dSSadaf Ebrahimi # Try to get the absolute directory name. 5674*22dc650dSSadaf Ebrahimi absdir=\`cd \"\$thisdir\" && pwd\` 5675*22dc650dSSadaf Ebrahimi test -n \"\$absdir\" && thisdir=\"\$absdir\" 5676*22dc650dSSadaf Ebrahimi" 5677*22dc650dSSadaf Ebrahimi 5678*22dc650dSSadaf Ebrahimi if test yes = "$fast_install"; then 5679*22dc650dSSadaf Ebrahimi $ECHO "\ 5680*22dc650dSSadaf Ebrahimi program=lt-'$outputname'$exeext 5681*22dc650dSSadaf Ebrahimi progdir=\"\$thisdir/$objdir\" 5682*22dc650dSSadaf Ebrahimi 5683*22dc650dSSadaf Ebrahimi if test ! -f \"\$progdir/\$program\" || 5684*22dc650dSSadaf Ebrahimi { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ 5685*22dc650dSSadaf Ebrahimi test \"X\$file\" != \"X\$progdir/\$program\"; }; then 5686*22dc650dSSadaf Ebrahimi 5687*22dc650dSSadaf Ebrahimi file=\"\$\$-\$program\" 5688*22dc650dSSadaf Ebrahimi 5689*22dc650dSSadaf Ebrahimi if test ! -d \"\$progdir\"; then 5690*22dc650dSSadaf Ebrahimi $MKDIR \"\$progdir\" 5691*22dc650dSSadaf Ebrahimi else 5692*22dc650dSSadaf Ebrahimi $RM \"\$progdir/\$file\" 5693*22dc650dSSadaf Ebrahimi fi" 5694*22dc650dSSadaf Ebrahimi 5695*22dc650dSSadaf Ebrahimi $ECHO "\ 5696*22dc650dSSadaf Ebrahimi 5697*22dc650dSSadaf Ebrahimi # relink executable if necessary 5698*22dc650dSSadaf Ebrahimi if test -n \"\$relink_command\"; then 5699*22dc650dSSadaf Ebrahimi if relink_command_output=\`eval \$relink_command 2>&1\`; then : 5700*22dc650dSSadaf Ebrahimi else 5701*22dc650dSSadaf Ebrahimi \$ECHO \"\$relink_command_output\" >&2 5702*22dc650dSSadaf Ebrahimi $RM \"\$progdir/\$file\" 5703*22dc650dSSadaf Ebrahimi exit 1 5704*22dc650dSSadaf Ebrahimi fi 5705*22dc650dSSadaf Ebrahimi fi 5706*22dc650dSSadaf Ebrahimi 5707*22dc650dSSadaf Ebrahimi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 5708*22dc650dSSadaf Ebrahimi { $RM \"\$progdir/\$program\"; 5709*22dc650dSSadaf Ebrahimi $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 5710*22dc650dSSadaf Ebrahimi $RM \"\$progdir/\$file\" 5711*22dc650dSSadaf Ebrahimi fi" 5712*22dc650dSSadaf Ebrahimi else 5713*22dc650dSSadaf Ebrahimi $ECHO "\ 5714*22dc650dSSadaf Ebrahimi program='$outputname' 5715*22dc650dSSadaf Ebrahimi progdir=\"\$thisdir/$objdir\" 5716*22dc650dSSadaf Ebrahimi" 5717*22dc650dSSadaf Ebrahimi fi 5718*22dc650dSSadaf Ebrahimi 5719*22dc650dSSadaf Ebrahimi $ECHO "\ 5720*22dc650dSSadaf Ebrahimi 5721*22dc650dSSadaf Ebrahimi if test -f \"\$progdir/\$program\"; then" 5722*22dc650dSSadaf Ebrahimi 5723*22dc650dSSadaf Ebrahimi # fixup the dll searchpath if we need to. 5724*22dc650dSSadaf Ebrahimi # 5725*22dc650dSSadaf Ebrahimi # Fix the DLL searchpath if we need to. Do this before prepending 5726*22dc650dSSadaf Ebrahimi # to shlibpath, because on Windows, both are PATH and uninstalled 5727*22dc650dSSadaf Ebrahimi # libraries must come first. 5728*22dc650dSSadaf Ebrahimi if test -n "$dllsearchpath"; then 5729*22dc650dSSadaf Ebrahimi $ECHO "\ 5730*22dc650dSSadaf Ebrahimi # Add the dll search path components to the executable PATH 5731*22dc650dSSadaf Ebrahimi PATH=$dllsearchpath:\$PATH 5732*22dc650dSSadaf Ebrahimi" 5733*22dc650dSSadaf Ebrahimi fi 5734*22dc650dSSadaf Ebrahimi 5735*22dc650dSSadaf Ebrahimi # Export our shlibpath_var if we have one. 5736*22dc650dSSadaf Ebrahimi if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5737*22dc650dSSadaf Ebrahimi $ECHO "\ 5738*22dc650dSSadaf Ebrahimi # Add our own library path to $shlibpath_var 5739*22dc650dSSadaf Ebrahimi $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 5740*22dc650dSSadaf Ebrahimi 5741*22dc650dSSadaf Ebrahimi # Some systems cannot cope with colon-terminated $shlibpath_var 5742*22dc650dSSadaf Ebrahimi # The second colon is a workaround for a bug in BeOS R4 sed 5743*22dc650dSSadaf Ebrahimi $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 5744*22dc650dSSadaf Ebrahimi 5745*22dc650dSSadaf Ebrahimi export $shlibpath_var 5746*22dc650dSSadaf Ebrahimi" 5747*22dc650dSSadaf Ebrahimi fi 5748*22dc650dSSadaf Ebrahimi 5749*22dc650dSSadaf Ebrahimi $ECHO "\ 5750*22dc650dSSadaf Ebrahimi if test \"\$libtool_execute_magic\" != \"$magic\"; then 5751*22dc650dSSadaf Ebrahimi # Run the actual program with our arguments. 5752*22dc650dSSadaf Ebrahimi func_exec_program \${1+\"\$@\"} 5753*22dc650dSSadaf Ebrahimi fi 5754*22dc650dSSadaf Ebrahimi else 5755*22dc650dSSadaf Ebrahimi # The program doesn't exist. 5756*22dc650dSSadaf Ebrahimi \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 5757*22dc650dSSadaf Ebrahimi \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 5758*22dc650dSSadaf Ebrahimi \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 5759*22dc650dSSadaf Ebrahimi exit 1 5760*22dc650dSSadaf Ebrahimi fi 5761*22dc650dSSadaf Ebrahimifi\ 5762*22dc650dSSadaf Ebrahimi" 5763*22dc650dSSadaf Ebrahimi} 5764*22dc650dSSadaf Ebrahimi 5765*22dc650dSSadaf Ebrahimi 5766*22dc650dSSadaf Ebrahimi# func_emit_cwrapperexe_src 5767*22dc650dSSadaf Ebrahimi# emit the source code for a wrapper executable on stdout 5768*22dc650dSSadaf Ebrahimi# Must ONLY be called from within func_mode_link because 5769*22dc650dSSadaf Ebrahimi# it depends on a number of variable set therein. 5770*22dc650dSSadaf Ebrahimifunc_emit_cwrapperexe_src () 5771*22dc650dSSadaf Ebrahimi{ 5772*22dc650dSSadaf Ebrahimi cat <<EOF 5773*22dc650dSSadaf Ebrahimi 5774*22dc650dSSadaf Ebrahimi/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 5775*22dc650dSSadaf Ebrahimi Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5776*22dc650dSSadaf Ebrahimi 5777*22dc650dSSadaf Ebrahimi The $output program cannot be directly executed until all the libtool 5778*22dc650dSSadaf Ebrahimi libraries that it depends on are installed. 5779*22dc650dSSadaf Ebrahimi 5780*22dc650dSSadaf Ebrahimi This wrapper executable should never be moved out of the build directory. 5781*22dc650dSSadaf Ebrahimi If it is, it will not operate correctly. 5782*22dc650dSSadaf Ebrahimi*/ 5783*22dc650dSSadaf EbrahimiEOF 5784*22dc650dSSadaf Ebrahimi cat <<"EOF" 5785*22dc650dSSadaf Ebrahimi#ifdef _MSC_VER 5786*22dc650dSSadaf Ebrahimi# define _CRT_SECURE_NO_DEPRECATE 1 5787*22dc650dSSadaf Ebrahimi#endif 5788*22dc650dSSadaf Ebrahimi#include <stdio.h> 5789*22dc650dSSadaf Ebrahimi#include <stdlib.h> 5790*22dc650dSSadaf Ebrahimi#ifdef _MSC_VER 5791*22dc650dSSadaf Ebrahimi# include <direct.h> 5792*22dc650dSSadaf Ebrahimi# include <process.h> 5793*22dc650dSSadaf Ebrahimi# include <io.h> 5794*22dc650dSSadaf Ebrahimi#else 5795*22dc650dSSadaf Ebrahimi# include <unistd.h> 5796*22dc650dSSadaf Ebrahimi# include <stdint.h> 5797*22dc650dSSadaf Ebrahimi# ifdef __CYGWIN__ 5798*22dc650dSSadaf Ebrahimi# include <io.h> 5799*22dc650dSSadaf Ebrahimi# endif 5800*22dc650dSSadaf Ebrahimi#endif 5801*22dc650dSSadaf Ebrahimi#include <malloc.h> 5802*22dc650dSSadaf Ebrahimi#include <stdarg.h> 5803*22dc650dSSadaf Ebrahimi#include <assert.h> 5804*22dc650dSSadaf Ebrahimi#include <string.h> 5805*22dc650dSSadaf Ebrahimi#include <ctype.h> 5806*22dc650dSSadaf Ebrahimi#include <errno.h> 5807*22dc650dSSadaf Ebrahimi#include <fcntl.h> 5808*22dc650dSSadaf Ebrahimi#include <sys/stat.h> 5809*22dc650dSSadaf Ebrahimi 5810*22dc650dSSadaf Ebrahimi#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 5811*22dc650dSSadaf Ebrahimi 5812*22dc650dSSadaf Ebrahimi/* declarations of non-ANSI functions */ 5813*22dc650dSSadaf Ebrahimi#if defined __MINGW32__ 5814*22dc650dSSadaf Ebrahimi# ifdef __STRICT_ANSI__ 5815*22dc650dSSadaf Ebrahimiint _putenv (const char *); 5816*22dc650dSSadaf Ebrahimi# endif 5817*22dc650dSSadaf Ebrahimi#elif defined __CYGWIN__ 5818*22dc650dSSadaf Ebrahimi# ifdef __STRICT_ANSI__ 5819*22dc650dSSadaf Ebrahimichar *realpath (const char *, char *); 5820*22dc650dSSadaf Ebrahimiint putenv (char *); 5821*22dc650dSSadaf Ebrahimiint setenv (const char *, const char *, int); 5822*22dc650dSSadaf Ebrahimi# endif 5823*22dc650dSSadaf Ebrahimi/* #elif defined other_platform || defined ... */ 5824*22dc650dSSadaf Ebrahimi#endif 5825*22dc650dSSadaf Ebrahimi 5826*22dc650dSSadaf Ebrahimi/* portability defines, excluding path handling macros */ 5827*22dc650dSSadaf Ebrahimi#if defined _MSC_VER 5828*22dc650dSSadaf Ebrahimi# define setmode _setmode 5829*22dc650dSSadaf Ebrahimi# define stat _stat 5830*22dc650dSSadaf Ebrahimi# define chmod _chmod 5831*22dc650dSSadaf Ebrahimi# define getcwd _getcwd 5832*22dc650dSSadaf Ebrahimi# define putenv _putenv 5833*22dc650dSSadaf Ebrahimi# define S_IXUSR _S_IEXEC 5834*22dc650dSSadaf Ebrahimi#elif defined __MINGW32__ 5835*22dc650dSSadaf Ebrahimi# define setmode _setmode 5836*22dc650dSSadaf Ebrahimi# define stat _stat 5837*22dc650dSSadaf Ebrahimi# define chmod _chmod 5838*22dc650dSSadaf Ebrahimi# define getcwd _getcwd 5839*22dc650dSSadaf Ebrahimi# define putenv _putenv 5840*22dc650dSSadaf Ebrahimi#elif defined __CYGWIN__ 5841*22dc650dSSadaf Ebrahimi# define HAVE_SETENV 5842*22dc650dSSadaf Ebrahimi# define FOPEN_WB "wb" 5843*22dc650dSSadaf Ebrahimi/* #elif defined other platforms ... */ 5844*22dc650dSSadaf Ebrahimi#endif 5845*22dc650dSSadaf Ebrahimi 5846*22dc650dSSadaf Ebrahimi#if defined PATH_MAX 5847*22dc650dSSadaf Ebrahimi# define LT_PATHMAX PATH_MAX 5848*22dc650dSSadaf Ebrahimi#elif defined MAXPATHLEN 5849*22dc650dSSadaf Ebrahimi# define LT_PATHMAX MAXPATHLEN 5850*22dc650dSSadaf Ebrahimi#else 5851*22dc650dSSadaf Ebrahimi# define LT_PATHMAX 1024 5852*22dc650dSSadaf Ebrahimi#endif 5853*22dc650dSSadaf Ebrahimi 5854*22dc650dSSadaf Ebrahimi#ifndef S_IXOTH 5855*22dc650dSSadaf Ebrahimi# define S_IXOTH 0 5856*22dc650dSSadaf Ebrahimi#endif 5857*22dc650dSSadaf Ebrahimi#ifndef S_IXGRP 5858*22dc650dSSadaf Ebrahimi# define S_IXGRP 0 5859*22dc650dSSadaf Ebrahimi#endif 5860*22dc650dSSadaf Ebrahimi 5861*22dc650dSSadaf Ebrahimi/* path handling portability macros */ 5862*22dc650dSSadaf Ebrahimi#ifndef DIR_SEPARATOR 5863*22dc650dSSadaf Ebrahimi# define DIR_SEPARATOR '/' 5864*22dc650dSSadaf Ebrahimi# define PATH_SEPARATOR ':' 5865*22dc650dSSadaf Ebrahimi#endif 5866*22dc650dSSadaf Ebrahimi 5867*22dc650dSSadaf Ebrahimi#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ 5868*22dc650dSSadaf Ebrahimi defined __OS2__ 5869*22dc650dSSadaf Ebrahimi# define HAVE_DOS_BASED_FILE_SYSTEM 5870*22dc650dSSadaf Ebrahimi# define FOPEN_WB "wb" 5871*22dc650dSSadaf Ebrahimi# ifndef DIR_SEPARATOR_2 5872*22dc650dSSadaf Ebrahimi# define DIR_SEPARATOR_2 '\\' 5873*22dc650dSSadaf Ebrahimi# endif 5874*22dc650dSSadaf Ebrahimi# ifndef PATH_SEPARATOR_2 5875*22dc650dSSadaf Ebrahimi# define PATH_SEPARATOR_2 ';' 5876*22dc650dSSadaf Ebrahimi# endif 5877*22dc650dSSadaf Ebrahimi#endif 5878*22dc650dSSadaf Ebrahimi 5879*22dc650dSSadaf Ebrahimi#ifndef DIR_SEPARATOR_2 5880*22dc650dSSadaf Ebrahimi# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 5881*22dc650dSSadaf Ebrahimi#else /* DIR_SEPARATOR_2 */ 5882*22dc650dSSadaf Ebrahimi# define IS_DIR_SEPARATOR(ch) \ 5883*22dc650dSSadaf Ebrahimi (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 5884*22dc650dSSadaf Ebrahimi#endif /* DIR_SEPARATOR_2 */ 5885*22dc650dSSadaf Ebrahimi 5886*22dc650dSSadaf Ebrahimi#ifndef PATH_SEPARATOR_2 5887*22dc650dSSadaf Ebrahimi# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 5888*22dc650dSSadaf Ebrahimi#else /* PATH_SEPARATOR_2 */ 5889*22dc650dSSadaf Ebrahimi# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 5890*22dc650dSSadaf Ebrahimi#endif /* PATH_SEPARATOR_2 */ 5891*22dc650dSSadaf Ebrahimi 5892*22dc650dSSadaf Ebrahimi#ifndef FOPEN_WB 5893*22dc650dSSadaf Ebrahimi# define FOPEN_WB "w" 5894*22dc650dSSadaf Ebrahimi#endif 5895*22dc650dSSadaf Ebrahimi#ifndef _O_BINARY 5896*22dc650dSSadaf Ebrahimi# define _O_BINARY 0 5897*22dc650dSSadaf Ebrahimi#endif 5898*22dc650dSSadaf Ebrahimi 5899*22dc650dSSadaf Ebrahimi#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 5900*22dc650dSSadaf Ebrahimi#define XFREE(stale) do { \ 5901*22dc650dSSadaf Ebrahimi if (stale) { free (stale); stale = 0; } \ 5902*22dc650dSSadaf Ebrahimi} while (0) 5903*22dc650dSSadaf Ebrahimi 5904*22dc650dSSadaf Ebrahimi#if defined LT_DEBUGWRAPPER 5905*22dc650dSSadaf Ebrahimistatic int lt_debug = 1; 5906*22dc650dSSadaf Ebrahimi#else 5907*22dc650dSSadaf Ebrahimistatic int lt_debug = 0; 5908*22dc650dSSadaf Ebrahimi#endif 5909*22dc650dSSadaf Ebrahimi 5910*22dc650dSSadaf Ebrahimiconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 5911*22dc650dSSadaf Ebrahimi 5912*22dc650dSSadaf Ebrahimivoid *xmalloc (size_t num); 5913*22dc650dSSadaf Ebrahimichar *xstrdup (const char *string); 5914*22dc650dSSadaf Ebrahimiconst char *base_name (const char *name); 5915*22dc650dSSadaf Ebrahimichar *find_executable (const char *wrapper); 5916*22dc650dSSadaf Ebrahimichar *chase_symlinks (const char *pathspec); 5917*22dc650dSSadaf Ebrahimiint make_executable (const char *path); 5918*22dc650dSSadaf Ebrahimiint check_executable (const char *path); 5919*22dc650dSSadaf Ebrahimichar *strendzap (char *str, const char *pat); 5920*22dc650dSSadaf Ebrahimivoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 5921*22dc650dSSadaf Ebrahimivoid lt_fatal (const char *file, int line, const char *message, ...); 5922*22dc650dSSadaf Ebrahimistatic const char *nonnull (const char *s); 5923*22dc650dSSadaf Ebrahimistatic const char *nonempty (const char *s); 5924*22dc650dSSadaf Ebrahimivoid lt_setenv (const char *name, const char *value); 5925*22dc650dSSadaf Ebrahimichar *lt_extend_str (const char *orig_value, const char *add, int to_end); 5926*22dc650dSSadaf Ebrahimivoid lt_update_exe_path (const char *name, const char *value); 5927*22dc650dSSadaf Ebrahimivoid lt_update_lib_path (const char *name, const char *value); 5928*22dc650dSSadaf Ebrahimichar **prepare_spawn (char **argv); 5929*22dc650dSSadaf Ebrahimivoid lt_dump_script (FILE *f); 5930*22dc650dSSadaf EbrahimiEOF 5931*22dc650dSSadaf Ebrahimi 5932*22dc650dSSadaf Ebrahimi cat <<EOF 5933*22dc650dSSadaf Ebrahimi#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) 5934*22dc650dSSadaf Ebrahimi# define externally_visible volatile 5935*22dc650dSSadaf Ebrahimi#else 5936*22dc650dSSadaf Ebrahimi# define externally_visible __attribute__((externally_visible)) volatile 5937*22dc650dSSadaf Ebrahimi#endif 5938*22dc650dSSadaf Ebrahimiexternally_visible const char * MAGIC_EXE = "$magic_exe"; 5939*22dc650dSSadaf Ebrahimiconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 5940*22dc650dSSadaf EbrahimiEOF 5941*22dc650dSSadaf Ebrahimi 5942*22dc650dSSadaf Ebrahimi if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5943*22dc650dSSadaf Ebrahimi func_to_host_path "$temp_rpath" 5944*22dc650dSSadaf Ebrahimi cat <<EOF 5945*22dc650dSSadaf Ebrahimiconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 5946*22dc650dSSadaf EbrahimiEOF 5947*22dc650dSSadaf Ebrahimi else 5948*22dc650dSSadaf Ebrahimi cat <<"EOF" 5949*22dc650dSSadaf Ebrahimiconst char * LIB_PATH_VALUE = ""; 5950*22dc650dSSadaf EbrahimiEOF 5951*22dc650dSSadaf Ebrahimi fi 5952*22dc650dSSadaf Ebrahimi 5953*22dc650dSSadaf Ebrahimi if test -n "$dllsearchpath"; then 5954*22dc650dSSadaf Ebrahimi func_to_host_path "$dllsearchpath:" 5955*22dc650dSSadaf Ebrahimi cat <<EOF 5956*22dc650dSSadaf Ebrahimiconst char * EXE_PATH_VARNAME = "PATH"; 5957*22dc650dSSadaf Ebrahimiconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 5958*22dc650dSSadaf EbrahimiEOF 5959*22dc650dSSadaf Ebrahimi else 5960*22dc650dSSadaf Ebrahimi cat <<"EOF" 5961*22dc650dSSadaf Ebrahimiconst char * EXE_PATH_VARNAME = ""; 5962*22dc650dSSadaf Ebrahimiconst char * EXE_PATH_VALUE = ""; 5963*22dc650dSSadaf EbrahimiEOF 5964*22dc650dSSadaf Ebrahimi fi 5965*22dc650dSSadaf Ebrahimi 5966*22dc650dSSadaf Ebrahimi if test yes = "$fast_install"; then 5967*22dc650dSSadaf Ebrahimi cat <<EOF 5968*22dc650dSSadaf Ebrahimiconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 5969*22dc650dSSadaf EbrahimiEOF 5970*22dc650dSSadaf Ebrahimi else 5971*22dc650dSSadaf Ebrahimi cat <<EOF 5972*22dc650dSSadaf Ebrahimiconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 5973*22dc650dSSadaf EbrahimiEOF 5974*22dc650dSSadaf Ebrahimi fi 5975*22dc650dSSadaf Ebrahimi 5976*22dc650dSSadaf Ebrahimi 5977*22dc650dSSadaf Ebrahimi cat <<"EOF" 5978*22dc650dSSadaf Ebrahimi 5979*22dc650dSSadaf Ebrahimi#define LTWRAPPER_OPTION_PREFIX "--lt-" 5980*22dc650dSSadaf Ebrahimi 5981*22dc650dSSadaf Ebrahimistatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 5982*22dc650dSSadaf Ebrahimistatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 5983*22dc650dSSadaf Ebrahimistatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 5984*22dc650dSSadaf Ebrahimi 5985*22dc650dSSadaf Ebrahimiint 5986*22dc650dSSadaf Ebrahimimain (int argc, char *argv[]) 5987*22dc650dSSadaf Ebrahimi{ 5988*22dc650dSSadaf Ebrahimi char **newargz; 5989*22dc650dSSadaf Ebrahimi int newargc; 5990*22dc650dSSadaf Ebrahimi char *tmp_pathspec; 5991*22dc650dSSadaf Ebrahimi char *actual_cwrapper_path; 5992*22dc650dSSadaf Ebrahimi char *actual_cwrapper_name; 5993*22dc650dSSadaf Ebrahimi char *target_name; 5994*22dc650dSSadaf Ebrahimi char *lt_argv_zero; 5995*22dc650dSSadaf Ebrahimi int rval = 127; 5996*22dc650dSSadaf Ebrahimi 5997*22dc650dSSadaf Ebrahimi int i; 5998*22dc650dSSadaf Ebrahimi 5999*22dc650dSSadaf Ebrahimi program_name = (char *) xstrdup (base_name (argv[0])); 6000*22dc650dSSadaf Ebrahimi newargz = XMALLOC (char *, (size_t) argc + 1); 6001*22dc650dSSadaf Ebrahimi 6002*22dc650dSSadaf Ebrahimi /* very simple arg parsing; don't want to rely on getopt 6003*22dc650dSSadaf Ebrahimi * also, copy all non cwrapper options to newargz, except 6004*22dc650dSSadaf Ebrahimi * argz[0], which is handled differently 6005*22dc650dSSadaf Ebrahimi */ 6006*22dc650dSSadaf Ebrahimi newargc=0; 6007*22dc650dSSadaf Ebrahimi for (i = 1; i < argc; i++) 6008*22dc650dSSadaf Ebrahimi { 6009*22dc650dSSadaf Ebrahimi if (STREQ (argv[i], dumpscript_opt)) 6010*22dc650dSSadaf Ebrahimi { 6011*22dc650dSSadaf EbrahimiEOF 6012*22dc650dSSadaf Ebrahimi case $host in 6013*22dc650dSSadaf Ebrahimi *mingw* | *cygwin* ) 6014*22dc650dSSadaf Ebrahimi # make stdout use "unix" line endings 6015*22dc650dSSadaf Ebrahimi echo " setmode(1,_O_BINARY);" 6016*22dc650dSSadaf Ebrahimi ;; 6017*22dc650dSSadaf Ebrahimi esac 6018*22dc650dSSadaf Ebrahimi 6019*22dc650dSSadaf Ebrahimi cat <<"EOF" 6020*22dc650dSSadaf Ebrahimi lt_dump_script (stdout); 6021*22dc650dSSadaf Ebrahimi return 0; 6022*22dc650dSSadaf Ebrahimi } 6023*22dc650dSSadaf Ebrahimi if (STREQ (argv[i], debug_opt)) 6024*22dc650dSSadaf Ebrahimi { 6025*22dc650dSSadaf Ebrahimi lt_debug = 1; 6026*22dc650dSSadaf Ebrahimi continue; 6027*22dc650dSSadaf Ebrahimi } 6028*22dc650dSSadaf Ebrahimi if (STREQ (argv[i], ltwrapper_option_prefix)) 6029*22dc650dSSadaf Ebrahimi { 6030*22dc650dSSadaf Ebrahimi /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 6031*22dc650dSSadaf Ebrahimi namespace, but it is not one of the ones we know about and 6032*22dc650dSSadaf Ebrahimi have already dealt with, above (inluding dump-script), then 6033*22dc650dSSadaf Ebrahimi report an error. Otherwise, targets might begin to believe 6034*22dc650dSSadaf Ebrahimi they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 6035*22dc650dSSadaf Ebrahimi namespace. The first time any user complains about this, we'll 6036*22dc650dSSadaf Ebrahimi need to make LTWRAPPER_OPTION_PREFIX a configure-time option 6037*22dc650dSSadaf Ebrahimi or a configure.ac-settable value. 6038*22dc650dSSadaf Ebrahimi */ 6039*22dc650dSSadaf Ebrahimi lt_fatal (__FILE__, __LINE__, 6040*22dc650dSSadaf Ebrahimi "unrecognized %s option: '%s'", 6041*22dc650dSSadaf Ebrahimi ltwrapper_option_prefix, argv[i]); 6042*22dc650dSSadaf Ebrahimi } 6043*22dc650dSSadaf Ebrahimi /* otherwise ... */ 6044*22dc650dSSadaf Ebrahimi newargz[++newargc] = xstrdup (argv[i]); 6045*22dc650dSSadaf Ebrahimi } 6046*22dc650dSSadaf Ebrahimi newargz[++newargc] = NULL; 6047*22dc650dSSadaf Ebrahimi 6048*22dc650dSSadaf EbrahimiEOF 6049*22dc650dSSadaf Ebrahimi cat <<EOF 6050*22dc650dSSadaf Ebrahimi /* The GNU banner must be the first non-error debug message */ 6051*22dc650dSSadaf Ebrahimi lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); 6052*22dc650dSSadaf EbrahimiEOF 6053*22dc650dSSadaf Ebrahimi cat <<"EOF" 6054*22dc650dSSadaf Ebrahimi lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 6055*22dc650dSSadaf Ebrahimi lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 6056*22dc650dSSadaf Ebrahimi 6057*22dc650dSSadaf Ebrahimi tmp_pathspec = find_executable (argv[0]); 6058*22dc650dSSadaf Ebrahimi if (tmp_pathspec == NULL) 6059*22dc650dSSadaf Ebrahimi lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 6060*22dc650dSSadaf Ebrahimi lt_debugprintf (__FILE__, __LINE__, 6061*22dc650dSSadaf Ebrahimi "(main) found exe (before symlink chase) at: %s\n", 6062*22dc650dSSadaf Ebrahimi tmp_pathspec); 6063*22dc650dSSadaf Ebrahimi 6064*22dc650dSSadaf Ebrahimi actual_cwrapper_path = chase_symlinks (tmp_pathspec); 6065*22dc650dSSadaf Ebrahimi lt_debugprintf (__FILE__, __LINE__, 6066*22dc650dSSadaf Ebrahimi "(main) found exe (after symlink chase) at: %s\n", 6067*22dc650dSSadaf Ebrahimi actual_cwrapper_path); 6068*22dc650dSSadaf Ebrahimi XFREE (tmp_pathspec); 6069*22dc650dSSadaf Ebrahimi 6070*22dc650dSSadaf Ebrahimi actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 6071*22dc650dSSadaf Ebrahimi strendzap (actual_cwrapper_path, actual_cwrapper_name); 6072*22dc650dSSadaf Ebrahimi 6073*22dc650dSSadaf Ebrahimi /* wrapper name transforms */ 6074*22dc650dSSadaf Ebrahimi strendzap (actual_cwrapper_name, ".exe"); 6075*22dc650dSSadaf Ebrahimi tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 6076*22dc650dSSadaf Ebrahimi XFREE (actual_cwrapper_name); 6077*22dc650dSSadaf Ebrahimi actual_cwrapper_name = tmp_pathspec; 6078*22dc650dSSadaf Ebrahimi tmp_pathspec = 0; 6079*22dc650dSSadaf Ebrahimi 6080*22dc650dSSadaf Ebrahimi /* target_name transforms -- use actual target program name; might have lt- prefix */ 6081*22dc650dSSadaf Ebrahimi target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 6082*22dc650dSSadaf Ebrahimi strendzap (target_name, ".exe"); 6083*22dc650dSSadaf Ebrahimi tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 6084*22dc650dSSadaf Ebrahimi XFREE (target_name); 6085*22dc650dSSadaf Ebrahimi target_name = tmp_pathspec; 6086*22dc650dSSadaf Ebrahimi tmp_pathspec = 0; 6087*22dc650dSSadaf Ebrahimi 6088*22dc650dSSadaf Ebrahimi lt_debugprintf (__FILE__, __LINE__, 6089*22dc650dSSadaf Ebrahimi "(main) libtool target name: %s\n", 6090*22dc650dSSadaf Ebrahimi target_name); 6091*22dc650dSSadaf EbrahimiEOF 6092*22dc650dSSadaf Ebrahimi 6093*22dc650dSSadaf Ebrahimi cat <<EOF 6094*22dc650dSSadaf Ebrahimi newargz[0] = 6095*22dc650dSSadaf Ebrahimi XMALLOC (char, (strlen (actual_cwrapper_path) + 6096*22dc650dSSadaf Ebrahimi strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 6097*22dc650dSSadaf Ebrahimi strcpy (newargz[0], actual_cwrapper_path); 6098*22dc650dSSadaf Ebrahimi strcat (newargz[0], "$objdir"); 6099*22dc650dSSadaf Ebrahimi strcat (newargz[0], "/"); 6100*22dc650dSSadaf EbrahimiEOF 6101*22dc650dSSadaf Ebrahimi 6102*22dc650dSSadaf Ebrahimi cat <<"EOF" 6103*22dc650dSSadaf Ebrahimi /* stop here, and copy so we don't have to do this twice */ 6104*22dc650dSSadaf Ebrahimi tmp_pathspec = xstrdup (newargz[0]); 6105*22dc650dSSadaf Ebrahimi 6106*22dc650dSSadaf Ebrahimi /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 6107*22dc650dSSadaf Ebrahimi strcat (newargz[0], actual_cwrapper_name); 6108*22dc650dSSadaf Ebrahimi 6109*22dc650dSSadaf Ebrahimi /* DO want the lt- prefix here if it exists, so use target_name */ 6110*22dc650dSSadaf Ebrahimi lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 6111*22dc650dSSadaf Ebrahimi XFREE (tmp_pathspec); 6112*22dc650dSSadaf Ebrahimi tmp_pathspec = NULL; 6113*22dc650dSSadaf EbrahimiEOF 6114*22dc650dSSadaf Ebrahimi 6115*22dc650dSSadaf Ebrahimi case $host_os in 6116*22dc650dSSadaf Ebrahimi mingw*) 6117*22dc650dSSadaf Ebrahimi cat <<"EOF" 6118*22dc650dSSadaf Ebrahimi { 6119*22dc650dSSadaf Ebrahimi char* p; 6120*22dc650dSSadaf Ebrahimi while ((p = strchr (newargz[0], '\\')) != NULL) 6121*22dc650dSSadaf Ebrahimi { 6122*22dc650dSSadaf Ebrahimi *p = '/'; 6123*22dc650dSSadaf Ebrahimi } 6124*22dc650dSSadaf Ebrahimi while ((p = strchr (lt_argv_zero, '\\')) != NULL) 6125*22dc650dSSadaf Ebrahimi { 6126*22dc650dSSadaf Ebrahimi *p = '/'; 6127*22dc650dSSadaf Ebrahimi } 6128*22dc650dSSadaf Ebrahimi } 6129*22dc650dSSadaf EbrahimiEOF 6130*22dc650dSSadaf Ebrahimi ;; 6131*22dc650dSSadaf Ebrahimi esac 6132*22dc650dSSadaf Ebrahimi 6133*22dc650dSSadaf Ebrahimi cat <<"EOF" 6134*22dc650dSSadaf Ebrahimi XFREE (target_name); 6135*22dc650dSSadaf Ebrahimi XFREE (actual_cwrapper_path); 6136*22dc650dSSadaf Ebrahimi XFREE (actual_cwrapper_name); 6137*22dc650dSSadaf Ebrahimi 6138*22dc650dSSadaf Ebrahimi lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 6139*22dc650dSSadaf Ebrahimi lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 6140*22dc650dSSadaf Ebrahimi /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 6141*22dc650dSSadaf Ebrahimi be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 6142*22dc650dSSadaf Ebrahimi because on Windows, both *_VARNAMEs are PATH but uninstalled 6143*22dc650dSSadaf Ebrahimi libraries must come first. */ 6144*22dc650dSSadaf Ebrahimi lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 6145*22dc650dSSadaf Ebrahimi lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 6146*22dc650dSSadaf Ebrahimi 6147*22dc650dSSadaf Ebrahimi lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 6148*22dc650dSSadaf Ebrahimi nonnull (lt_argv_zero)); 6149*22dc650dSSadaf Ebrahimi for (i = 0; i < newargc; i++) 6150*22dc650dSSadaf Ebrahimi { 6151*22dc650dSSadaf Ebrahimi lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 6152*22dc650dSSadaf Ebrahimi i, nonnull (newargz[i])); 6153*22dc650dSSadaf Ebrahimi } 6154*22dc650dSSadaf Ebrahimi 6155*22dc650dSSadaf EbrahimiEOF 6156*22dc650dSSadaf Ebrahimi 6157*22dc650dSSadaf Ebrahimi case $host_os in 6158*22dc650dSSadaf Ebrahimi mingw*) 6159*22dc650dSSadaf Ebrahimi cat <<"EOF" 6160*22dc650dSSadaf Ebrahimi /* execv doesn't actually work on mingw as expected on unix */ 6161*22dc650dSSadaf Ebrahimi newargz = prepare_spawn (newargz); 6162*22dc650dSSadaf Ebrahimi rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 6163*22dc650dSSadaf Ebrahimi if (rval == -1) 6164*22dc650dSSadaf Ebrahimi { 6165*22dc650dSSadaf Ebrahimi /* failed to start process */ 6166*22dc650dSSadaf Ebrahimi lt_debugprintf (__FILE__, __LINE__, 6167*22dc650dSSadaf Ebrahimi "(main) failed to launch target \"%s\": %s\n", 6168*22dc650dSSadaf Ebrahimi lt_argv_zero, nonnull (strerror (errno))); 6169*22dc650dSSadaf Ebrahimi return 127; 6170*22dc650dSSadaf Ebrahimi } 6171*22dc650dSSadaf Ebrahimi return rval; 6172*22dc650dSSadaf EbrahimiEOF 6173*22dc650dSSadaf Ebrahimi ;; 6174*22dc650dSSadaf Ebrahimi *) 6175*22dc650dSSadaf Ebrahimi cat <<"EOF" 6176*22dc650dSSadaf Ebrahimi execv (lt_argv_zero, newargz); 6177*22dc650dSSadaf Ebrahimi return rval; /* =127, but avoids unused variable warning */ 6178*22dc650dSSadaf EbrahimiEOF 6179*22dc650dSSadaf Ebrahimi ;; 6180*22dc650dSSadaf Ebrahimi esac 6181*22dc650dSSadaf Ebrahimi 6182*22dc650dSSadaf Ebrahimi cat <<"EOF" 6183*22dc650dSSadaf Ebrahimi} 6184*22dc650dSSadaf Ebrahimi 6185*22dc650dSSadaf Ebrahimivoid * 6186*22dc650dSSadaf Ebrahimixmalloc (size_t num) 6187*22dc650dSSadaf Ebrahimi{ 6188*22dc650dSSadaf Ebrahimi void *p = (void *) malloc (num); 6189*22dc650dSSadaf Ebrahimi if (!p) 6190*22dc650dSSadaf Ebrahimi lt_fatal (__FILE__, __LINE__, "memory exhausted"); 6191*22dc650dSSadaf Ebrahimi 6192*22dc650dSSadaf Ebrahimi return p; 6193*22dc650dSSadaf Ebrahimi} 6194*22dc650dSSadaf Ebrahimi 6195*22dc650dSSadaf Ebrahimichar * 6196*22dc650dSSadaf Ebrahimixstrdup (const char *string) 6197*22dc650dSSadaf Ebrahimi{ 6198*22dc650dSSadaf Ebrahimi return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 6199*22dc650dSSadaf Ebrahimi string) : NULL; 6200*22dc650dSSadaf Ebrahimi} 6201*22dc650dSSadaf Ebrahimi 6202*22dc650dSSadaf Ebrahimiconst char * 6203*22dc650dSSadaf Ebrahimibase_name (const char *name) 6204*22dc650dSSadaf Ebrahimi{ 6205*22dc650dSSadaf Ebrahimi const char *base; 6206*22dc650dSSadaf Ebrahimi 6207*22dc650dSSadaf Ebrahimi#if defined HAVE_DOS_BASED_FILE_SYSTEM 6208*22dc650dSSadaf Ebrahimi /* Skip over the disk name in MSDOS pathnames. */ 6209*22dc650dSSadaf Ebrahimi if (isalpha ((unsigned char) name[0]) && name[1] == ':') 6210*22dc650dSSadaf Ebrahimi name += 2; 6211*22dc650dSSadaf Ebrahimi#endif 6212*22dc650dSSadaf Ebrahimi 6213*22dc650dSSadaf Ebrahimi for (base = name; *name; name++) 6214*22dc650dSSadaf Ebrahimi if (IS_DIR_SEPARATOR (*name)) 6215*22dc650dSSadaf Ebrahimi base = name + 1; 6216*22dc650dSSadaf Ebrahimi return base; 6217*22dc650dSSadaf Ebrahimi} 6218*22dc650dSSadaf Ebrahimi 6219*22dc650dSSadaf Ebrahimiint 6220*22dc650dSSadaf Ebrahimicheck_executable (const char *path) 6221*22dc650dSSadaf Ebrahimi{ 6222*22dc650dSSadaf Ebrahimi struct stat st; 6223*22dc650dSSadaf Ebrahimi 6224*22dc650dSSadaf Ebrahimi lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 6225*22dc650dSSadaf Ebrahimi nonempty (path)); 6226*22dc650dSSadaf Ebrahimi if ((!path) || (!*path)) 6227*22dc650dSSadaf Ebrahimi return 0; 6228*22dc650dSSadaf Ebrahimi 6229*22dc650dSSadaf Ebrahimi if ((stat (path, &st) >= 0) 6230*22dc650dSSadaf Ebrahimi && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 6231*22dc650dSSadaf Ebrahimi return 1; 6232*22dc650dSSadaf Ebrahimi else 6233*22dc650dSSadaf Ebrahimi return 0; 6234*22dc650dSSadaf Ebrahimi} 6235*22dc650dSSadaf Ebrahimi 6236*22dc650dSSadaf Ebrahimiint 6237*22dc650dSSadaf Ebrahimimake_executable (const char *path) 6238*22dc650dSSadaf Ebrahimi{ 6239*22dc650dSSadaf Ebrahimi int rval = 0; 6240*22dc650dSSadaf Ebrahimi struct stat st; 6241*22dc650dSSadaf Ebrahimi 6242*22dc650dSSadaf Ebrahimi lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 6243*22dc650dSSadaf Ebrahimi nonempty (path)); 6244*22dc650dSSadaf Ebrahimi if ((!path) || (!*path)) 6245*22dc650dSSadaf Ebrahimi return 0; 6246*22dc650dSSadaf Ebrahimi 6247*22dc650dSSadaf Ebrahimi if (stat (path, &st) >= 0) 6248*22dc650dSSadaf Ebrahimi { 6249*22dc650dSSadaf Ebrahimi rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 6250*22dc650dSSadaf Ebrahimi } 6251*22dc650dSSadaf Ebrahimi return rval; 6252*22dc650dSSadaf Ebrahimi} 6253*22dc650dSSadaf Ebrahimi 6254*22dc650dSSadaf Ebrahimi/* Searches for the full path of the wrapper. Returns 6255*22dc650dSSadaf Ebrahimi newly allocated full path name if found, NULL otherwise 6256*22dc650dSSadaf Ebrahimi Does not chase symlinks, even on platforms that support them. 6257*22dc650dSSadaf Ebrahimi*/ 6258*22dc650dSSadaf Ebrahimichar * 6259*22dc650dSSadaf Ebrahimifind_executable (const char *wrapper) 6260*22dc650dSSadaf Ebrahimi{ 6261*22dc650dSSadaf Ebrahimi int has_slash = 0; 6262*22dc650dSSadaf Ebrahimi const char *p; 6263*22dc650dSSadaf Ebrahimi const char *p_next; 6264*22dc650dSSadaf Ebrahimi /* static buffer for getcwd */ 6265*22dc650dSSadaf Ebrahimi char tmp[LT_PATHMAX + 1]; 6266*22dc650dSSadaf Ebrahimi size_t tmp_len; 6267*22dc650dSSadaf Ebrahimi char *concat_name; 6268*22dc650dSSadaf Ebrahimi 6269*22dc650dSSadaf Ebrahimi lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 6270*22dc650dSSadaf Ebrahimi nonempty (wrapper)); 6271*22dc650dSSadaf Ebrahimi 6272*22dc650dSSadaf Ebrahimi if ((wrapper == NULL) || (*wrapper == '\0')) 6273*22dc650dSSadaf Ebrahimi return NULL; 6274*22dc650dSSadaf Ebrahimi 6275*22dc650dSSadaf Ebrahimi /* Absolute path? */ 6276*22dc650dSSadaf Ebrahimi#if defined HAVE_DOS_BASED_FILE_SYSTEM 6277*22dc650dSSadaf Ebrahimi if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 6278*22dc650dSSadaf Ebrahimi { 6279*22dc650dSSadaf Ebrahimi concat_name = xstrdup (wrapper); 6280*22dc650dSSadaf Ebrahimi if (check_executable (concat_name)) 6281*22dc650dSSadaf Ebrahimi return concat_name; 6282*22dc650dSSadaf Ebrahimi XFREE (concat_name); 6283*22dc650dSSadaf Ebrahimi } 6284*22dc650dSSadaf Ebrahimi else 6285*22dc650dSSadaf Ebrahimi { 6286*22dc650dSSadaf Ebrahimi#endif 6287*22dc650dSSadaf Ebrahimi if (IS_DIR_SEPARATOR (wrapper[0])) 6288*22dc650dSSadaf Ebrahimi { 6289*22dc650dSSadaf Ebrahimi concat_name = xstrdup (wrapper); 6290*22dc650dSSadaf Ebrahimi if (check_executable (concat_name)) 6291*22dc650dSSadaf Ebrahimi return concat_name; 6292*22dc650dSSadaf Ebrahimi XFREE (concat_name); 6293*22dc650dSSadaf Ebrahimi } 6294*22dc650dSSadaf Ebrahimi#if defined HAVE_DOS_BASED_FILE_SYSTEM 6295*22dc650dSSadaf Ebrahimi } 6296*22dc650dSSadaf Ebrahimi#endif 6297*22dc650dSSadaf Ebrahimi 6298*22dc650dSSadaf Ebrahimi for (p = wrapper; *p; p++) 6299*22dc650dSSadaf Ebrahimi if (*p == '/') 6300*22dc650dSSadaf Ebrahimi { 6301*22dc650dSSadaf Ebrahimi has_slash = 1; 6302*22dc650dSSadaf Ebrahimi break; 6303*22dc650dSSadaf Ebrahimi } 6304*22dc650dSSadaf Ebrahimi if (!has_slash) 6305*22dc650dSSadaf Ebrahimi { 6306*22dc650dSSadaf Ebrahimi /* no slashes; search PATH */ 6307*22dc650dSSadaf Ebrahimi const char *path = getenv ("PATH"); 6308*22dc650dSSadaf Ebrahimi if (path != NULL) 6309*22dc650dSSadaf Ebrahimi { 6310*22dc650dSSadaf Ebrahimi for (p = path; *p; p = p_next) 6311*22dc650dSSadaf Ebrahimi { 6312*22dc650dSSadaf Ebrahimi const char *q; 6313*22dc650dSSadaf Ebrahimi size_t p_len; 6314*22dc650dSSadaf Ebrahimi for (q = p; *q; q++) 6315*22dc650dSSadaf Ebrahimi if (IS_PATH_SEPARATOR (*q)) 6316*22dc650dSSadaf Ebrahimi break; 6317*22dc650dSSadaf Ebrahimi p_len = (size_t) (q - p); 6318*22dc650dSSadaf Ebrahimi p_next = (*q == '\0' ? q : q + 1); 6319*22dc650dSSadaf Ebrahimi if (p_len == 0) 6320*22dc650dSSadaf Ebrahimi { 6321*22dc650dSSadaf Ebrahimi /* empty path: current directory */ 6322*22dc650dSSadaf Ebrahimi if (getcwd (tmp, LT_PATHMAX) == NULL) 6323*22dc650dSSadaf Ebrahimi lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6324*22dc650dSSadaf Ebrahimi nonnull (strerror (errno))); 6325*22dc650dSSadaf Ebrahimi tmp_len = strlen (tmp); 6326*22dc650dSSadaf Ebrahimi concat_name = 6327*22dc650dSSadaf Ebrahimi XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6328*22dc650dSSadaf Ebrahimi memcpy (concat_name, tmp, tmp_len); 6329*22dc650dSSadaf Ebrahimi concat_name[tmp_len] = '/'; 6330*22dc650dSSadaf Ebrahimi strcpy (concat_name + tmp_len + 1, wrapper); 6331*22dc650dSSadaf Ebrahimi } 6332*22dc650dSSadaf Ebrahimi else 6333*22dc650dSSadaf Ebrahimi { 6334*22dc650dSSadaf Ebrahimi concat_name = 6335*22dc650dSSadaf Ebrahimi XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 6336*22dc650dSSadaf Ebrahimi memcpy (concat_name, p, p_len); 6337*22dc650dSSadaf Ebrahimi concat_name[p_len] = '/'; 6338*22dc650dSSadaf Ebrahimi strcpy (concat_name + p_len + 1, wrapper); 6339*22dc650dSSadaf Ebrahimi } 6340*22dc650dSSadaf Ebrahimi if (check_executable (concat_name)) 6341*22dc650dSSadaf Ebrahimi return concat_name; 6342*22dc650dSSadaf Ebrahimi XFREE (concat_name); 6343*22dc650dSSadaf Ebrahimi } 6344*22dc650dSSadaf Ebrahimi } 6345*22dc650dSSadaf Ebrahimi /* not found in PATH; assume curdir */ 6346*22dc650dSSadaf Ebrahimi } 6347*22dc650dSSadaf Ebrahimi /* Relative path | not found in path: prepend cwd */ 6348*22dc650dSSadaf Ebrahimi if (getcwd (tmp, LT_PATHMAX) == NULL) 6349*22dc650dSSadaf Ebrahimi lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6350*22dc650dSSadaf Ebrahimi nonnull (strerror (errno))); 6351*22dc650dSSadaf Ebrahimi tmp_len = strlen (tmp); 6352*22dc650dSSadaf Ebrahimi concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6353*22dc650dSSadaf Ebrahimi memcpy (concat_name, tmp, tmp_len); 6354*22dc650dSSadaf Ebrahimi concat_name[tmp_len] = '/'; 6355*22dc650dSSadaf Ebrahimi strcpy (concat_name + tmp_len + 1, wrapper); 6356*22dc650dSSadaf Ebrahimi 6357*22dc650dSSadaf Ebrahimi if (check_executable (concat_name)) 6358*22dc650dSSadaf Ebrahimi return concat_name; 6359*22dc650dSSadaf Ebrahimi XFREE (concat_name); 6360*22dc650dSSadaf Ebrahimi return NULL; 6361*22dc650dSSadaf Ebrahimi} 6362*22dc650dSSadaf Ebrahimi 6363*22dc650dSSadaf Ebrahimichar * 6364*22dc650dSSadaf Ebrahimichase_symlinks (const char *pathspec) 6365*22dc650dSSadaf Ebrahimi{ 6366*22dc650dSSadaf Ebrahimi#ifndef S_ISLNK 6367*22dc650dSSadaf Ebrahimi return xstrdup (pathspec); 6368*22dc650dSSadaf Ebrahimi#else 6369*22dc650dSSadaf Ebrahimi char buf[LT_PATHMAX]; 6370*22dc650dSSadaf Ebrahimi struct stat s; 6371*22dc650dSSadaf Ebrahimi char *tmp_pathspec = xstrdup (pathspec); 6372*22dc650dSSadaf Ebrahimi char *p; 6373*22dc650dSSadaf Ebrahimi int has_symlinks = 0; 6374*22dc650dSSadaf Ebrahimi while (strlen (tmp_pathspec) && !has_symlinks) 6375*22dc650dSSadaf Ebrahimi { 6376*22dc650dSSadaf Ebrahimi lt_debugprintf (__FILE__, __LINE__, 6377*22dc650dSSadaf Ebrahimi "checking path component for symlinks: %s\n", 6378*22dc650dSSadaf Ebrahimi tmp_pathspec); 6379*22dc650dSSadaf Ebrahimi if (lstat (tmp_pathspec, &s) == 0) 6380*22dc650dSSadaf Ebrahimi { 6381*22dc650dSSadaf Ebrahimi if (S_ISLNK (s.st_mode) != 0) 6382*22dc650dSSadaf Ebrahimi { 6383*22dc650dSSadaf Ebrahimi has_symlinks = 1; 6384*22dc650dSSadaf Ebrahimi break; 6385*22dc650dSSadaf Ebrahimi } 6386*22dc650dSSadaf Ebrahimi 6387*22dc650dSSadaf Ebrahimi /* search backwards for last DIR_SEPARATOR */ 6388*22dc650dSSadaf Ebrahimi p = tmp_pathspec + strlen (tmp_pathspec) - 1; 6389*22dc650dSSadaf Ebrahimi while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6390*22dc650dSSadaf Ebrahimi p--; 6391*22dc650dSSadaf Ebrahimi if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6392*22dc650dSSadaf Ebrahimi { 6393*22dc650dSSadaf Ebrahimi /* no more DIR_SEPARATORS left */ 6394*22dc650dSSadaf Ebrahimi break; 6395*22dc650dSSadaf Ebrahimi } 6396*22dc650dSSadaf Ebrahimi *p = '\0'; 6397*22dc650dSSadaf Ebrahimi } 6398*22dc650dSSadaf Ebrahimi else 6399*22dc650dSSadaf Ebrahimi { 6400*22dc650dSSadaf Ebrahimi lt_fatal (__FILE__, __LINE__, 6401*22dc650dSSadaf Ebrahimi "error accessing file \"%s\": %s", 6402*22dc650dSSadaf Ebrahimi tmp_pathspec, nonnull (strerror (errno))); 6403*22dc650dSSadaf Ebrahimi } 6404*22dc650dSSadaf Ebrahimi } 6405*22dc650dSSadaf Ebrahimi XFREE (tmp_pathspec); 6406*22dc650dSSadaf Ebrahimi 6407*22dc650dSSadaf Ebrahimi if (!has_symlinks) 6408*22dc650dSSadaf Ebrahimi { 6409*22dc650dSSadaf Ebrahimi return xstrdup (pathspec); 6410*22dc650dSSadaf Ebrahimi } 6411*22dc650dSSadaf Ebrahimi 6412*22dc650dSSadaf Ebrahimi tmp_pathspec = realpath (pathspec, buf); 6413*22dc650dSSadaf Ebrahimi if (tmp_pathspec == 0) 6414*22dc650dSSadaf Ebrahimi { 6415*22dc650dSSadaf Ebrahimi lt_fatal (__FILE__, __LINE__, 6416*22dc650dSSadaf Ebrahimi "could not follow symlinks for %s", pathspec); 6417*22dc650dSSadaf Ebrahimi } 6418*22dc650dSSadaf Ebrahimi return xstrdup (tmp_pathspec); 6419*22dc650dSSadaf Ebrahimi#endif 6420*22dc650dSSadaf Ebrahimi} 6421*22dc650dSSadaf Ebrahimi 6422*22dc650dSSadaf Ebrahimichar * 6423*22dc650dSSadaf Ebrahimistrendzap (char *str, const char *pat) 6424*22dc650dSSadaf Ebrahimi{ 6425*22dc650dSSadaf Ebrahimi size_t len, patlen; 6426*22dc650dSSadaf Ebrahimi 6427*22dc650dSSadaf Ebrahimi assert (str != NULL); 6428*22dc650dSSadaf Ebrahimi assert (pat != NULL); 6429*22dc650dSSadaf Ebrahimi 6430*22dc650dSSadaf Ebrahimi len = strlen (str); 6431*22dc650dSSadaf Ebrahimi patlen = strlen (pat); 6432*22dc650dSSadaf Ebrahimi 6433*22dc650dSSadaf Ebrahimi if (patlen <= len) 6434*22dc650dSSadaf Ebrahimi { 6435*22dc650dSSadaf Ebrahimi str += len - patlen; 6436*22dc650dSSadaf Ebrahimi if (STREQ (str, pat)) 6437*22dc650dSSadaf Ebrahimi *str = '\0'; 6438*22dc650dSSadaf Ebrahimi } 6439*22dc650dSSadaf Ebrahimi return str; 6440*22dc650dSSadaf Ebrahimi} 6441*22dc650dSSadaf Ebrahimi 6442*22dc650dSSadaf Ebrahimivoid 6443*22dc650dSSadaf Ebrahimilt_debugprintf (const char *file, int line, const char *fmt, ...) 6444*22dc650dSSadaf Ebrahimi{ 6445*22dc650dSSadaf Ebrahimi va_list args; 6446*22dc650dSSadaf Ebrahimi if (lt_debug) 6447*22dc650dSSadaf Ebrahimi { 6448*22dc650dSSadaf Ebrahimi (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 6449*22dc650dSSadaf Ebrahimi va_start (args, fmt); 6450*22dc650dSSadaf Ebrahimi (void) vfprintf (stderr, fmt, args); 6451*22dc650dSSadaf Ebrahimi va_end (args); 6452*22dc650dSSadaf Ebrahimi } 6453*22dc650dSSadaf Ebrahimi} 6454*22dc650dSSadaf Ebrahimi 6455*22dc650dSSadaf Ebrahimistatic void 6456*22dc650dSSadaf Ebrahimilt_error_core (int exit_status, const char *file, 6457*22dc650dSSadaf Ebrahimi int line, const char *mode, 6458*22dc650dSSadaf Ebrahimi const char *message, va_list ap) 6459*22dc650dSSadaf Ebrahimi{ 6460*22dc650dSSadaf Ebrahimi fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 6461*22dc650dSSadaf Ebrahimi vfprintf (stderr, message, ap); 6462*22dc650dSSadaf Ebrahimi fprintf (stderr, ".\n"); 6463*22dc650dSSadaf Ebrahimi 6464*22dc650dSSadaf Ebrahimi if (exit_status >= 0) 6465*22dc650dSSadaf Ebrahimi exit (exit_status); 6466*22dc650dSSadaf Ebrahimi} 6467*22dc650dSSadaf Ebrahimi 6468*22dc650dSSadaf Ebrahimivoid 6469*22dc650dSSadaf Ebrahimilt_fatal (const char *file, int line, const char *message, ...) 6470*22dc650dSSadaf Ebrahimi{ 6471*22dc650dSSadaf Ebrahimi va_list ap; 6472*22dc650dSSadaf Ebrahimi va_start (ap, message); 6473*22dc650dSSadaf Ebrahimi lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 6474*22dc650dSSadaf Ebrahimi va_end (ap); 6475*22dc650dSSadaf Ebrahimi} 6476*22dc650dSSadaf Ebrahimi 6477*22dc650dSSadaf Ebrahimistatic const char * 6478*22dc650dSSadaf Ebrahiminonnull (const char *s) 6479*22dc650dSSadaf Ebrahimi{ 6480*22dc650dSSadaf Ebrahimi return s ? s : "(null)"; 6481*22dc650dSSadaf Ebrahimi} 6482*22dc650dSSadaf Ebrahimi 6483*22dc650dSSadaf Ebrahimistatic const char * 6484*22dc650dSSadaf Ebrahiminonempty (const char *s) 6485*22dc650dSSadaf Ebrahimi{ 6486*22dc650dSSadaf Ebrahimi return (s && !*s) ? "(empty)" : nonnull (s); 6487*22dc650dSSadaf Ebrahimi} 6488*22dc650dSSadaf Ebrahimi 6489*22dc650dSSadaf Ebrahimivoid 6490*22dc650dSSadaf Ebrahimilt_setenv (const char *name, const char *value) 6491*22dc650dSSadaf Ebrahimi{ 6492*22dc650dSSadaf Ebrahimi lt_debugprintf (__FILE__, __LINE__, 6493*22dc650dSSadaf Ebrahimi "(lt_setenv) setting '%s' to '%s'\n", 6494*22dc650dSSadaf Ebrahimi nonnull (name), nonnull (value)); 6495*22dc650dSSadaf Ebrahimi { 6496*22dc650dSSadaf Ebrahimi#ifdef HAVE_SETENV 6497*22dc650dSSadaf Ebrahimi /* always make a copy, for consistency with !HAVE_SETENV */ 6498*22dc650dSSadaf Ebrahimi char *str = xstrdup (value); 6499*22dc650dSSadaf Ebrahimi setenv (name, str, 1); 6500*22dc650dSSadaf Ebrahimi#else 6501*22dc650dSSadaf Ebrahimi size_t len = strlen (name) + 1 + strlen (value) + 1; 6502*22dc650dSSadaf Ebrahimi char *str = XMALLOC (char, len); 6503*22dc650dSSadaf Ebrahimi sprintf (str, "%s=%s", name, value); 6504*22dc650dSSadaf Ebrahimi if (putenv (str) != EXIT_SUCCESS) 6505*22dc650dSSadaf Ebrahimi { 6506*22dc650dSSadaf Ebrahimi XFREE (str); 6507*22dc650dSSadaf Ebrahimi } 6508*22dc650dSSadaf Ebrahimi#endif 6509*22dc650dSSadaf Ebrahimi } 6510*22dc650dSSadaf Ebrahimi} 6511*22dc650dSSadaf Ebrahimi 6512*22dc650dSSadaf Ebrahimichar * 6513*22dc650dSSadaf Ebrahimilt_extend_str (const char *orig_value, const char *add, int to_end) 6514*22dc650dSSadaf Ebrahimi{ 6515*22dc650dSSadaf Ebrahimi char *new_value; 6516*22dc650dSSadaf Ebrahimi if (orig_value && *orig_value) 6517*22dc650dSSadaf Ebrahimi { 6518*22dc650dSSadaf Ebrahimi size_t orig_value_len = strlen (orig_value); 6519*22dc650dSSadaf Ebrahimi size_t add_len = strlen (add); 6520*22dc650dSSadaf Ebrahimi new_value = XMALLOC (char, add_len + orig_value_len + 1); 6521*22dc650dSSadaf Ebrahimi if (to_end) 6522*22dc650dSSadaf Ebrahimi { 6523*22dc650dSSadaf Ebrahimi strcpy (new_value, orig_value); 6524*22dc650dSSadaf Ebrahimi strcpy (new_value + orig_value_len, add); 6525*22dc650dSSadaf Ebrahimi } 6526*22dc650dSSadaf Ebrahimi else 6527*22dc650dSSadaf Ebrahimi { 6528*22dc650dSSadaf Ebrahimi strcpy (new_value, add); 6529*22dc650dSSadaf Ebrahimi strcpy (new_value + add_len, orig_value); 6530*22dc650dSSadaf Ebrahimi } 6531*22dc650dSSadaf Ebrahimi } 6532*22dc650dSSadaf Ebrahimi else 6533*22dc650dSSadaf Ebrahimi { 6534*22dc650dSSadaf Ebrahimi new_value = xstrdup (add); 6535*22dc650dSSadaf Ebrahimi } 6536*22dc650dSSadaf Ebrahimi return new_value; 6537*22dc650dSSadaf Ebrahimi} 6538*22dc650dSSadaf Ebrahimi 6539*22dc650dSSadaf Ebrahimivoid 6540*22dc650dSSadaf Ebrahimilt_update_exe_path (const char *name, const char *value) 6541*22dc650dSSadaf Ebrahimi{ 6542*22dc650dSSadaf Ebrahimi lt_debugprintf (__FILE__, __LINE__, 6543*22dc650dSSadaf Ebrahimi "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 6544*22dc650dSSadaf Ebrahimi nonnull (name), nonnull (value)); 6545*22dc650dSSadaf Ebrahimi 6546*22dc650dSSadaf Ebrahimi if (name && *name && value && *value) 6547*22dc650dSSadaf Ebrahimi { 6548*22dc650dSSadaf Ebrahimi char *new_value = lt_extend_str (getenv (name), value, 0); 6549*22dc650dSSadaf Ebrahimi /* some systems can't cope with a ':'-terminated path #' */ 6550*22dc650dSSadaf Ebrahimi size_t len = strlen (new_value); 6551*22dc650dSSadaf Ebrahimi while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 6552*22dc650dSSadaf Ebrahimi { 6553*22dc650dSSadaf Ebrahimi new_value[--len] = '\0'; 6554*22dc650dSSadaf Ebrahimi } 6555*22dc650dSSadaf Ebrahimi lt_setenv (name, new_value); 6556*22dc650dSSadaf Ebrahimi XFREE (new_value); 6557*22dc650dSSadaf Ebrahimi } 6558*22dc650dSSadaf Ebrahimi} 6559*22dc650dSSadaf Ebrahimi 6560*22dc650dSSadaf Ebrahimivoid 6561*22dc650dSSadaf Ebrahimilt_update_lib_path (const char *name, const char *value) 6562*22dc650dSSadaf Ebrahimi{ 6563*22dc650dSSadaf Ebrahimi lt_debugprintf (__FILE__, __LINE__, 6564*22dc650dSSadaf Ebrahimi "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 6565*22dc650dSSadaf Ebrahimi nonnull (name), nonnull (value)); 6566*22dc650dSSadaf Ebrahimi 6567*22dc650dSSadaf Ebrahimi if (name && *name && value && *value) 6568*22dc650dSSadaf Ebrahimi { 6569*22dc650dSSadaf Ebrahimi char *new_value = lt_extend_str (getenv (name), value, 0); 6570*22dc650dSSadaf Ebrahimi lt_setenv (name, new_value); 6571*22dc650dSSadaf Ebrahimi XFREE (new_value); 6572*22dc650dSSadaf Ebrahimi } 6573*22dc650dSSadaf Ebrahimi} 6574*22dc650dSSadaf Ebrahimi 6575*22dc650dSSadaf EbrahimiEOF 6576*22dc650dSSadaf Ebrahimi case $host_os in 6577*22dc650dSSadaf Ebrahimi mingw*) 6578*22dc650dSSadaf Ebrahimi cat <<"EOF" 6579*22dc650dSSadaf Ebrahimi 6580*22dc650dSSadaf Ebrahimi/* Prepares an argument vector before calling spawn(). 6581*22dc650dSSadaf Ebrahimi Note that spawn() does not by itself call the command interpreter 6582*22dc650dSSadaf Ebrahimi (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 6583*22dc650dSSadaf Ebrahimi ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 6584*22dc650dSSadaf Ebrahimi GetVersionEx(&v); 6585*22dc650dSSadaf Ebrahimi v.dwPlatformId == VER_PLATFORM_WIN32_NT; 6586*22dc650dSSadaf Ebrahimi }) ? "cmd.exe" : "command.com"). 6587*22dc650dSSadaf Ebrahimi Instead it simply concatenates the arguments, separated by ' ', and calls 6588*22dc650dSSadaf Ebrahimi CreateProcess(). We must quote the arguments since Win32 CreateProcess() 6589*22dc650dSSadaf Ebrahimi interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 6590*22dc650dSSadaf Ebrahimi special way: 6591*22dc650dSSadaf Ebrahimi - Space and tab are interpreted as delimiters. They are not treated as 6592*22dc650dSSadaf Ebrahimi delimiters if they are surrounded by double quotes: "...". 6593*22dc650dSSadaf Ebrahimi - Unescaped double quotes are removed from the input. Their only effect is 6594*22dc650dSSadaf Ebrahimi that within double quotes, space and tab are treated like normal 6595*22dc650dSSadaf Ebrahimi characters. 6596*22dc650dSSadaf Ebrahimi - Backslashes not followed by double quotes are not special. 6597*22dc650dSSadaf Ebrahimi - But 2*n+1 backslashes followed by a double quote become 6598*22dc650dSSadaf Ebrahimi n backslashes followed by a double quote (n >= 0): 6599*22dc650dSSadaf Ebrahimi \" -> " 6600*22dc650dSSadaf Ebrahimi \\\" -> \" 6601*22dc650dSSadaf Ebrahimi \\\\\" -> \\" 6602*22dc650dSSadaf Ebrahimi */ 6603*22dc650dSSadaf Ebrahimi#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" 6604*22dc650dSSadaf Ebrahimi#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" 6605*22dc650dSSadaf Ebrahimichar ** 6606*22dc650dSSadaf Ebrahimiprepare_spawn (char **argv) 6607*22dc650dSSadaf Ebrahimi{ 6608*22dc650dSSadaf Ebrahimi size_t argc; 6609*22dc650dSSadaf Ebrahimi char **new_argv; 6610*22dc650dSSadaf Ebrahimi size_t i; 6611*22dc650dSSadaf Ebrahimi 6612*22dc650dSSadaf Ebrahimi /* Count number of arguments. */ 6613*22dc650dSSadaf Ebrahimi for (argc = 0; argv[argc] != NULL; argc++) 6614*22dc650dSSadaf Ebrahimi ; 6615*22dc650dSSadaf Ebrahimi 6616*22dc650dSSadaf Ebrahimi /* Allocate new argument vector. */ 6617*22dc650dSSadaf Ebrahimi new_argv = XMALLOC (char *, argc + 1); 6618*22dc650dSSadaf Ebrahimi 6619*22dc650dSSadaf Ebrahimi /* Put quoted arguments into the new argument vector. */ 6620*22dc650dSSadaf Ebrahimi for (i = 0; i < argc; i++) 6621*22dc650dSSadaf Ebrahimi { 6622*22dc650dSSadaf Ebrahimi const char *string = argv[i]; 6623*22dc650dSSadaf Ebrahimi 6624*22dc650dSSadaf Ebrahimi if (string[0] == '\0') 6625*22dc650dSSadaf Ebrahimi new_argv[i] = xstrdup ("\"\""); 6626*22dc650dSSadaf Ebrahimi else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 6627*22dc650dSSadaf Ebrahimi { 6628*22dc650dSSadaf Ebrahimi int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 6629*22dc650dSSadaf Ebrahimi size_t length; 6630*22dc650dSSadaf Ebrahimi unsigned int backslashes; 6631*22dc650dSSadaf Ebrahimi const char *s; 6632*22dc650dSSadaf Ebrahimi char *quoted_string; 6633*22dc650dSSadaf Ebrahimi char *p; 6634*22dc650dSSadaf Ebrahimi 6635*22dc650dSSadaf Ebrahimi length = 0; 6636*22dc650dSSadaf Ebrahimi backslashes = 0; 6637*22dc650dSSadaf Ebrahimi if (quote_around) 6638*22dc650dSSadaf Ebrahimi length++; 6639*22dc650dSSadaf Ebrahimi for (s = string; *s != '\0'; s++) 6640*22dc650dSSadaf Ebrahimi { 6641*22dc650dSSadaf Ebrahimi char c = *s; 6642*22dc650dSSadaf Ebrahimi if (c == '"') 6643*22dc650dSSadaf Ebrahimi length += backslashes + 1; 6644*22dc650dSSadaf Ebrahimi length++; 6645*22dc650dSSadaf Ebrahimi if (c == '\\') 6646*22dc650dSSadaf Ebrahimi backslashes++; 6647*22dc650dSSadaf Ebrahimi else 6648*22dc650dSSadaf Ebrahimi backslashes = 0; 6649*22dc650dSSadaf Ebrahimi } 6650*22dc650dSSadaf Ebrahimi if (quote_around) 6651*22dc650dSSadaf Ebrahimi length += backslashes + 1; 6652*22dc650dSSadaf Ebrahimi 6653*22dc650dSSadaf Ebrahimi quoted_string = XMALLOC (char, length + 1); 6654*22dc650dSSadaf Ebrahimi 6655*22dc650dSSadaf Ebrahimi p = quoted_string; 6656*22dc650dSSadaf Ebrahimi backslashes = 0; 6657*22dc650dSSadaf Ebrahimi if (quote_around) 6658*22dc650dSSadaf Ebrahimi *p++ = '"'; 6659*22dc650dSSadaf Ebrahimi for (s = string; *s != '\0'; s++) 6660*22dc650dSSadaf Ebrahimi { 6661*22dc650dSSadaf Ebrahimi char c = *s; 6662*22dc650dSSadaf Ebrahimi if (c == '"') 6663*22dc650dSSadaf Ebrahimi { 6664*22dc650dSSadaf Ebrahimi unsigned int j; 6665*22dc650dSSadaf Ebrahimi for (j = backslashes + 1; j > 0; j--) 6666*22dc650dSSadaf Ebrahimi *p++ = '\\'; 6667*22dc650dSSadaf Ebrahimi } 6668*22dc650dSSadaf Ebrahimi *p++ = c; 6669*22dc650dSSadaf Ebrahimi if (c == '\\') 6670*22dc650dSSadaf Ebrahimi backslashes++; 6671*22dc650dSSadaf Ebrahimi else 6672*22dc650dSSadaf Ebrahimi backslashes = 0; 6673*22dc650dSSadaf Ebrahimi } 6674*22dc650dSSadaf Ebrahimi if (quote_around) 6675*22dc650dSSadaf Ebrahimi { 6676*22dc650dSSadaf Ebrahimi unsigned int j; 6677*22dc650dSSadaf Ebrahimi for (j = backslashes; j > 0; j--) 6678*22dc650dSSadaf Ebrahimi *p++ = '\\'; 6679*22dc650dSSadaf Ebrahimi *p++ = '"'; 6680*22dc650dSSadaf Ebrahimi } 6681*22dc650dSSadaf Ebrahimi *p = '\0'; 6682*22dc650dSSadaf Ebrahimi 6683*22dc650dSSadaf Ebrahimi new_argv[i] = quoted_string; 6684*22dc650dSSadaf Ebrahimi } 6685*22dc650dSSadaf Ebrahimi else 6686*22dc650dSSadaf Ebrahimi new_argv[i] = (char *) string; 6687*22dc650dSSadaf Ebrahimi } 6688*22dc650dSSadaf Ebrahimi new_argv[argc] = NULL; 6689*22dc650dSSadaf Ebrahimi 6690*22dc650dSSadaf Ebrahimi return new_argv; 6691*22dc650dSSadaf Ebrahimi} 6692*22dc650dSSadaf EbrahimiEOF 6693*22dc650dSSadaf Ebrahimi ;; 6694*22dc650dSSadaf Ebrahimi esac 6695*22dc650dSSadaf Ebrahimi 6696*22dc650dSSadaf Ebrahimi cat <<"EOF" 6697*22dc650dSSadaf Ebrahimivoid lt_dump_script (FILE* f) 6698*22dc650dSSadaf Ebrahimi{ 6699*22dc650dSSadaf EbrahimiEOF 6700*22dc650dSSadaf Ebrahimi func_emit_wrapper yes | 6701*22dc650dSSadaf Ebrahimi $SED -n -e ' 6702*22dc650dSSadaf Ebrahimis/^\(.\{79\}\)\(..*\)/\1\ 6703*22dc650dSSadaf Ebrahimi\2/ 6704*22dc650dSSadaf Ebrahimih 6705*22dc650dSSadaf Ebrahimis/\([\\"]\)/\\\1/g 6706*22dc650dSSadaf Ebrahimis/$/\\n/ 6707*22dc650dSSadaf Ebrahimis/\([^\n]*\).*/ fputs ("\1", f);/p 6708*22dc650dSSadaf Ebrahimig 6709*22dc650dSSadaf EbrahimiD' 6710*22dc650dSSadaf Ebrahimi cat <<"EOF" 6711*22dc650dSSadaf Ebrahimi} 6712*22dc650dSSadaf EbrahimiEOF 6713*22dc650dSSadaf Ebrahimi} 6714*22dc650dSSadaf Ebrahimi# end: func_emit_cwrapperexe_src 6715*22dc650dSSadaf Ebrahimi 6716*22dc650dSSadaf Ebrahimi# func_win32_import_lib_p ARG 6717*22dc650dSSadaf Ebrahimi# True if ARG is an import lib, as indicated by $file_magic_cmd 6718*22dc650dSSadaf Ebrahimifunc_win32_import_lib_p () 6719*22dc650dSSadaf Ebrahimi{ 6720*22dc650dSSadaf Ebrahimi $debug_cmd 6721*22dc650dSSadaf Ebrahimi 6722*22dc650dSSadaf Ebrahimi case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 6723*22dc650dSSadaf Ebrahimi *import*) : ;; 6724*22dc650dSSadaf Ebrahimi *) false ;; 6725*22dc650dSSadaf Ebrahimi esac 6726*22dc650dSSadaf Ebrahimi} 6727*22dc650dSSadaf Ebrahimi 6728*22dc650dSSadaf Ebrahimi# func_suncc_cstd_abi 6729*22dc650dSSadaf Ebrahimi# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! 6730*22dc650dSSadaf Ebrahimi# Several compiler flags select an ABI that is incompatible with the 6731*22dc650dSSadaf Ebrahimi# Cstd library. Avoid specifying it if any are in CXXFLAGS. 6732*22dc650dSSadaf Ebrahimifunc_suncc_cstd_abi () 6733*22dc650dSSadaf Ebrahimi{ 6734*22dc650dSSadaf Ebrahimi $debug_cmd 6735*22dc650dSSadaf Ebrahimi 6736*22dc650dSSadaf Ebrahimi case " $compile_command " in 6737*22dc650dSSadaf Ebrahimi *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) 6738*22dc650dSSadaf Ebrahimi suncc_use_cstd_abi=no 6739*22dc650dSSadaf Ebrahimi ;; 6740*22dc650dSSadaf Ebrahimi *) 6741*22dc650dSSadaf Ebrahimi suncc_use_cstd_abi=yes 6742*22dc650dSSadaf Ebrahimi ;; 6743*22dc650dSSadaf Ebrahimi esac 6744*22dc650dSSadaf Ebrahimi} 6745*22dc650dSSadaf Ebrahimi 6746*22dc650dSSadaf Ebrahimi# func_mode_link arg... 6747*22dc650dSSadaf Ebrahimifunc_mode_link () 6748*22dc650dSSadaf Ebrahimi{ 6749*22dc650dSSadaf Ebrahimi $debug_cmd 6750*22dc650dSSadaf Ebrahimi 6751*22dc650dSSadaf Ebrahimi case $host in 6752*22dc650dSSadaf Ebrahimi *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 6753*22dc650dSSadaf Ebrahimi # It is impossible to link a dll without this setting, and 6754*22dc650dSSadaf Ebrahimi # we shouldn't force the makefile maintainer to figure out 6755*22dc650dSSadaf Ebrahimi # what system we are compiling for in order to pass an extra 6756*22dc650dSSadaf Ebrahimi # flag for every libtool invocation. 6757*22dc650dSSadaf Ebrahimi # allow_undefined=no 6758*22dc650dSSadaf Ebrahimi 6759*22dc650dSSadaf Ebrahimi # FIXME: Unfortunately, there are problems with the above when trying 6760*22dc650dSSadaf Ebrahimi # to make a dll that has undefined symbols, in which case not 6761*22dc650dSSadaf Ebrahimi # even a static library is built. For now, we need to specify 6762*22dc650dSSadaf Ebrahimi # -no-undefined on the libtool link line when we can be certain 6763*22dc650dSSadaf Ebrahimi # that all symbols are satisfied, otherwise we get a static library. 6764*22dc650dSSadaf Ebrahimi allow_undefined=yes 6765*22dc650dSSadaf Ebrahimi ;; 6766*22dc650dSSadaf Ebrahimi *) 6767*22dc650dSSadaf Ebrahimi allow_undefined=yes 6768*22dc650dSSadaf Ebrahimi ;; 6769*22dc650dSSadaf Ebrahimi esac 6770*22dc650dSSadaf Ebrahimi libtool_args=$nonopt 6771*22dc650dSSadaf Ebrahimi base_compile="$nonopt $@" 6772*22dc650dSSadaf Ebrahimi compile_command=$nonopt 6773*22dc650dSSadaf Ebrahimi finalize_command=$nonopt 6774*22dc650dSSadaf Ebrahimi 6775*22dc650dSSadaf Ebrahimi compile_rpath= 6776*22dc650dSSadaf Ebrahimi finalize_rpath= 6777*22dc650dSSadaf Ebrahimi compile_shlibpath= 6778*22dc650dSSadaf Ebrahimi finalize_shlibpath= 6779*22dc650dSSadaf Ebrahimi convenience= 6780*22dc650dSSadaf Ebrahimi old_convenience= 6781*22dc650dSSadaf Ebrahimi deplibs= 6782*22dc650dSSadaf Ebrahimi old_deplibs= 6783*22dc650dSSadaf Ebrahimi compiler_flags= 6784*22dc650dSSadaf Ebrahimi linker_flags= 6785*22dc650dSSadaf Ebrahimi dllsearchpath= 6786*22dc650dSSadaf Ebrahimi lib_search_path=`pwd` 6787*22dc650dSSadaf Ebrahimi inst_prefix_dir= 6788*22dc650dSSadaf Ebrahimi new_inherited_linker_flags= 6789*22dc650dSSadaf Ebrahimi 6790*22dc650dSSadaf Ebrahimi avoid_version=no 6791*22dc650dSSadaf Ebrahimi bindir= 6792*22dc650dSSadaf Ebrahimi dlfiles= 6793*22dc650dSSadaf Ebrahimi dlprefiles= 6794*22dc650dSSadaf Ebrahimi dlself=no 6795*22dc650dSSadaf Ebrahimi export_dynamic=no 6796*22dc650dSSadaf Ebrahimi export_symbols= 6797*22dc650dSSadaf Ebrahimi export_symbols_regex= 6798*22dc650dSSadaf Ebrahimi generated= 6799*22dc650dSSadaf Ebrahimi libobjs= 6800*22dc650dSSadaf Ebrahimi ltlibs= 6801*22dc650dSSadaf Ebrahimi module=no 6802*22dc650dSSadaf Ebrahimi no_install=no 6803*22dc650dSSadaf Ebrahimi objs= 6804*22dc650dSSadaf Ebrahimi os2dllname= 6805*22dc650dSSadaf Ebrahimi non_pic_objects= 6806*22dc650dSSadaf Ebrahimi precious_files_regex= 6807*22dc650dSSadaf Ebrahimi prefer_static_libs=no 6808*22dc650dSSadaf Ebrahimi preload=false 6809*22dc650dSSadaf Ebrahimi prev= 6810*22dc650dSSadaf Ebrahimi prevarg= 6811*22dc650dSSadaf Ebrahimi release= 6812*22dc650dSSadaf Ebrahimi rpath= 6813*22dc650dSSadaf Ebrahimi xrpath= 6814*22dc650dSSadaf Ebrahimi perm_rpath= 6815*22dc650dSSadaf Ebrahimi temp_rpath= 6816*22dc650dSSadaf Ebrahimi thread_safe=no 6817*22dc650dSSadaf Ebrahimi vinfo= 6818*22dc650dSSadaf Ebrahimi vinfo_number=no 6819*22dc650dSSadaf Ebrahimi weak_libs= 6820*22dc650dSSadaf Ebrahimi single_module=$wl-single_module 6821*22dc650dSSadaf Ebrahimi func_infer_tag $base_compile 6822*22dc650dSSadaf Ebrahimi 6823*22dc650dSSadaf Ebrahimi # We need to know -static, to get the right output filenames. 6824*22dc650dSSadaf Ebrahimi for arg 6825*22dc650dSSadaf Ebrahimi do 6826*22dc650dSSadaf Ebrahimi case $arg in 6827*22dc650dSSadaf Ebrahimi -shared) 6828*22dc650dSSadaf Ebrahimi test yes != "$build_libtool_libs" \ 6829*22dc650dSSadaf Ebrahimi && func_fatal_configuration "cannot build a shared library" 6830*22dc650dSSadaf Ebrahimi build_old_libs=no 6831*22dc650dSSadaf Ebrahimi break 6832*22dc650dSSadaf Ebrahimi ;; 6833*22dc650dSSadaf Ebrahimi -all-static | -static | -static-libtool-libs) 6834*22dc650dSSadaf Ebrahimi case $arg in 6835*22dc650dSSadaf Ebrahimi -all-static) 6836*22dc650dSSadaf Ebrahimi if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then 6837*22dc650dSSadaf Ebrahimi func_warning "complete static linking is impossible in this configuration" 6838*22dc650dSSadaf Ebrahimi fi 6839*22dc650dSSadaf Ebrahimi if test -n "$link_static_flag"; then 6840*22dc650dSSadaf Ebrahimi dlopen_self=$dlopen_self_static 6841*22dc650dSSadaf Ebrahimi fi 6842*22dc650dSSadaf Ebrahimi prefer_static_libs=yes 6843*22dc650dSSadaf Ebrahimi ;; 6844*22dc650dSSadaf Ebrahimi -static) 6845*22dc650dSSadaf Ebrahimi if test -z "$pic_flag" && test -n "$link_static_flag"; then 6846*22dc650dSSadaf Ebrahimi dlopen_self=$dlopen_self_static 6847*22dc650dSSadaf Ebrahimi fi 6848*22dc650dSSadaf Ebrahimi prefer_static_libs=built 6849*22dc650dSSadaf Ebrahimi ;; 6850*22dc650dSSadaf Ebrahimi -static-libtool-libs) 6851*22dc650dSSadaf Ebrahimi if test -z "$pic_flag" && test -n "$link_static_flag"; then 6852*22dc650dSSadaf Ebrahimi dlopen_self=$dlopen_self_static 6853*22dc650dSSadaf Ebrahimi fi 6854*22dc650dSSadaf Ebrahimi prefer_static_libs=yes 6855*22dc650dSSadaf Ebrahimi ;; 6856*22dc650dSSadaf Ebrahimi esac 6857*22dc650dSSadaf Ebrahimi build_libtool_libs=no 6858*22dc650dSSadaf Ebrahimi build_old_libs=yes 6859*22dc650dSSadaf Ebrahimi break 6860*22dc650dSSadaf Ebrahimi ;; 6861*22dc650dSSadaf Ebrahimi esac 6862*22dc650dSSadaf Ebrahimi done 6863*22dc650dSSadaf Ebrahimi 6864*22dc650dSSadaf Ebrahimi # See if our shared archives depend on static archives. 6865*22dc650dSSadaf Ebrahimi test -n "$old_archive_from_new_cmds" && build_old_libs=yes 6866*22dc650dSSadaf Ebrahimi 6867*22dc650dSSadaf Ebrahimi # Go through the arguments, transforming them on the way. 6868*22dc650dSSadaf Ebrahimi while test "$#" -gt 0; do 6869*22dc650dSSadaf Ebrahimi arg=$1 6870*22dc650dSSadaf Ebrahimi shift 6871*22dc650dSSadaf Ebrahimi func_quote_arg pretty,unquoted "$arg" 6872*22dc650dSSadaf Ebrahimi qarg=$func_quote_arg_unquoted_result 6873*22dc650dSSadaf Ebrahimi func_append libtool_args " $func_quote_arg_result" 6874*22dc650dSSadaf Ebrahimi 6875*22dc650dSSadaf Ebrahimi # If the previous option needs an argument, assign it. 6876*22dc650dSSadaf Ebrahimi if test -n "$prev"; then 6877*22dc650dSSadaf Ebrahimi case $prev in 6878*22dc650dSSadaf Ebrahimi output) 6879*22dc650dSSadaf Ebrahimi func_append compile_command " @OUTPUT@" 6880*22dc650dSSadaf Ebrahimi func_append finalize_command " @OUTPUT@" 6881*22dc650dSSadaf Ebrahimi ;; 6882*22dc650dSSadaf Ebrahimi esac 6883*22dc650dSSadaf Ebrahimi 6884*22dc650dSSadaf Ebrahimi case $prev in 6885*22dc650dSSadaf Ebrahimi bindir) 6886*22dc650dSSadaf Ebrahimi bindir=$arg 6887*22dc650dSSadaf Ebrahimi prev= 6888*22dc650dSSadaf Ebrahimi continue 6889*22dc650dSSadaf Ebrahimi ;; 6890*22dc650dSSadaf Ebrahimi dlfiles|dlprefiles) 6891*22dc650dSSadaf Ebrahimi $preload || { 6892*22dc650dSSadaf Ebrahimi # Add the symbol object into the linking commands. 6893*22dc650dSSadaf Ebrahimi func_append compile_command " @SYMFILE@" 6894*22dc650dSSadaf Ebrahimi func_append finalize_command " @SYMFILE@" 6895*22dc650dSSadaf Ebrahimi preload=: 6896*22dc650dSSadaf Ebrahimi } 6897*22dc650dSSadaf Ebrahimi case $arg in 6898*22dc650dSSadaf Ebrahimi *.la | *.lo) ;; # We handle these cases below. 6899*22dc650dSSadaf Ebrahimi force) 6900*22dc650dSSadaf Ebrahimi if test no = "$dlself"; then 6901*22dc650dSSadaf Ebrahimi dlself=needless 6902*22dc650dSSadaf Ebrahimi export_dynamic=yes 6903*22dc650dSSadaf Ebrahimi fi 6904*22dc650dSSadaf Ebrahimi prev= 6905*22dc650dSSadaf Ebrahimi continue 6906*22dc650dSSadaf Ebrahimi ;; 6907*22dc650dSSadaf Ebrahimi self) 6908*22dc650dSSadaf Ebrahimi if test dlprefiles = "$prev"; then 6909*22dc650dSSadaf Ebrahimi dlself=yes 6910*22dc650dSSadaf Ebrahimi elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then 6911*22dc650dSSadaf Ebrahimi dlself=yes 6912*22dc650dSSadaf Ebrahimi else 6913*22dc650dSSadaf Ebrahimi dlself=needless 6914*22dc650dSSadaf Ebrahimi export_dynamic=yes 6915*22dc650dSSadaf Ebrahimi fi 6916*22dc650dSSadaf Ebrahimi prev= 6917*22dc650dSSadaf Ebrahimi continue 6918*22dc650dSSadaf Ebrahimi ;; 6919*22dc650dSSadaf Ebrahimi *) 6920*22dc650dSSadaf Ebrahimi if test dlfiles = "$prev"; then 6921*22dc650dSSadaf Ebrahimi func_append dlfiles " $arg" 6922*22dc650dSSadaf Ebrahimi else 6923*22dc650dSSadaf Ebrahimi func_append dlprefiles " $arg" 6924*22dc650dSSadaf Ebrahimi fi 6925*22dc650dSSadaf Ebrahimi prev= 6926*22dc650dSSadaf Ebrahimi continue 6927*22dc650dSSadaf Ebrahimi ;; 6928*22dc650dSSadaf Ebrahimi esac 6929*22dc650dSSadaf Ebrahimi ;; 6930*22dc650dSSadaf Ebrahimi expsyms) 6931*22dc650dSSadaf Ebrahimi export_symbols=$arg 6932*22dc650dSSadaf Ebrahimi test -f "$arg" \ 6933*22dc650dSSadaf Ebrahimi || func_fatal_error "symbol file '$arg' does not exist" 6934*22dc650dSSadaf Ebrahimi prev= 6935*22dc650dSSadaf Ebrahimi continue 6936*22dc650dSSadaf Ebrahimi ;; 6937*22dc650dSSadaf Ebrahimi expsyms_regex) 6938*22dc650dSSadaf Ebrahimi export_symbols_regex=$arg 6939*22dc650dSSadaf Ebrahimi prev= 6940*22dc650dSSadaf Ebrahimi continue 6941*22dc650dSSadaf Ebrahimi ;; 6942*22dc650dSSadaf Ebrahimi framework) 6943*22dc650dSSadaf Ebrahimi case $host in 6944*22dc650dSSadaf Ebrahimi *-*-darwin*) 6945*22dc650dSSadaf Ebrahimi case "$deplibs " in 6946*22dc650dSSadaf Ebrahimi *" $qarg.ltframework "*) ;; 6947*22dc650dSSadaf Ebrahimi *) func_append deplibs " $qarg.ltframework" # this is fixed later 6948*22dc650dSSadaf Ebrahimi ;; 6949*22dc650dSSadaf Ebrahimi esac 6950*22dc650dSSadaf Ebrahimi ;; 6951*22dc650dSSadaf Ebrahimi esac 6952*22dc650dSSadaf Ebrahimi prev= 6953*22dc650dSSadaf Ebrahimi continue 6954*22dc650dSSadaf Ebrahimi ;; 6955*22dc650dSSadaf Ebrahimi inst_prefix) 6956*22dc650dSSadaf Ebrahimi inst_prefix_dir=$arg 6957*22dc650dSSadaf Ebrahimi prev= 6958*22dc650dSSadaf Ebrahimi continue 6959*22dc650dSSadaf Ebrahimi ;; 6960*22dc650dSSadaf Ebrahimi mllvm) 6961*22dc650dSSadaf Ebrahimi # Clang does not use LLVM to link, so we can simply discard any 6962*22dc650dSSadaf Ebrahimi # '-mllvm $arg' options when doing the link step. 6963*22dc650dSSadaf Ebrahimi prev= 6964*22dc650dSSadaf Ebrahimi continue 6965*22dc650dSSadaf Ebrahimi ;; 6966*22dc650dSSadaf Ebrahimi objectlist) 6967*22dc650dSSadaf Ebrahimi if test -f "$arg"; then 6968*22dc650dSSadaf Ebrahimi save_arg=$arg 6969*22dc650dSSadaf Ebrahimi moreargs= 6970*22dc650dSSadaf Ebrahimi for fil in `cat "$save_arg"` 6971*22dc650dSSadaf Ebrahimi do 6972*22dc650dSSadaf Ebrahimi# func_append moreargs " $fil" 6973*22dc650dSSadaf Ebrahimi arg=$fil 6974*22dc650dSSadaf Ebrahimi # A libtool-controlled object. 6975*22dc650dSSadaf Ebrahimi 6976*22dc650dSSadaf Ebrahimi # Check to see that this really is a libtool object. 6977*22dc650dSSadaf Ebrahimi if func_lalib_unsafe_p "$arg"; then 6978*22dc650dSSadaf Ebrahimi pic_object= 6979*22dc650dSSadaf Ebrahimi non_pic_object= 6980*22dc650dSSadaf Ebrahimi 6981*22dc650dSSadaf Ebrahimi # Read the .lo file 6982*22dc650dSSadaf Ebrahimi func_source "$arg" 6983*22dc650dSSadaf Ebrahimi 6984*22dc650dSSadaf Ebrahimi if test -z "$pic_object" || 6985*22dc650dSSadaf Ebrahimi test -z "$non_pic_object" || 6986*22dc650dSSadaf Ebrahimi test none = "$pic_object" && 6987*22dc650dSSadaf Ebrahimi test none = "$non_pic_object"; then 6988*22dc650dSSadaf Ebrahimi func_fatal_error "cannot find name of object for '$arg'" 6989*22dc650dSSadaf Ebrahimi fi 6990*22dc650dSSadaf Ebrahimi 6991*22dc650dSSadaf Ebrahimi # Extract subdirectory from the argument. 6992*22dc650dSSadaf Ebrahimi func_dirname "$arg" "/" "" 6993*22dc650dSSadaf Ebrahimi xdir=$func_dirname_result 6994*22dc650dSSadaf Ebrahimi 6995*22dc650dSSadaf Ebrahimi if test none != "$pic_object"; then 6996*22dc650dSSadaf Ebrahimi # Prepend the subdirectory the object is found in. 6997*22dc650dSSadaf Ebrahimi pic_object=$xdir$pic_object 6998*22dc650dSSadaf Ebrahimi 6999*22dc650dSSadaf Ebrahimi if test dlfiles = "$prev"; then 7000*22dc650dSSadaf Ebrahimi if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 7001*22dc650dSSadaf Ebrahimi func_append dlfiles " $pic_object" 7002*22dc650dSSadaf Ebrahimi prev= 7003*22dc650dSSadaf Ebrahimi continue 7004*22dc650dSSadaf Ebrahimi else 7005*22dc650dSSadaf Ebrahimi # If libtool objects are unsupported, then we need to preload. 7006*22dc650dSSadaf Ebrahimi prev=dlprefiles 7007*22dc650dSSadaf Ebrahimi fi 7008*22dc650dSSadaf Ebrahimi fi 7009*22dc650dSSadaf Ebrahimi 7010*22dc650dSSadaf Ebrahimi # CHECK ME: I think I busted this. -Ossama 7011*22dc650dSSadaf Ebrahimi if test dlprefiles = "$prev"; then 7012*22dc650dSSadaf Ebrahimi # Preload the old-style object. 7013*22dc650dSSadaf Ebrahimi func_append dlprefiles " $pic_object" 7014*22dc650dSSadaf Ebrahimi prev= 7015*22dc650dSSadaf Ebrahimi fi 7016*22dc650dSSadaf Ebrahimi 7017*22dc650dSSadaf Ebrahimi # A PIC object. 7018*22dc650dSSadaf Ebrahimi func_append libobjs " $pic_object" 7019*22dc650dSSadaf Ebrahimi arg=$pic_object 7020*22dc650dSSadaf Ebrahimi fi 7021*22dc650dSSadaf Ebrahimi 7022*22dc650dSSadaf Ebrahimi # Non-PIC object. 7023*22dc650dSSadaf Ebrahimi if test none != "$non_pic_object"; then 7024*22dc650dSSadaf Ebrahimi # Prepend the subdirectory the object is found in. 7025*22dc650dSSadaf Ebrahimi non_pic_object=$xdir$non_pic_object 7026*22dc650dSSadaf Ebrahimi 7027*22dc650dSSadaf Ebrahimi # A standard non-PIC object 7028*22dc650dSSadaf Ebrahimi func_append non_pic_objects " $non_pic_object" 7029*22dc650dSSadaf Ebrahimi if test -z "$pic_object" || test none = "$pic_object"; then 7030*22dc650dSSadaf Ebrahimi arg=$non_pic_object 7031*22dc650dSSadaf Ebrahimi fi 7032*22dc650dSSadaf Ebrahimi else 7033*22dc650dSSadaf Ebrahimi # If the PIC object exists, use it instead. 7034*22dc650dSSadaf Ebrahimi # $xdir was prepended to $pic_object above. 7035*22dc650dSSadaf Ebrahimi non_pic_object=$pic_object 7036*22dc650dSSadaf Ebrahimi func_append non_pic_objects " $non_pic_object" 7037*22dc650dSSadaf Ebrahimi fi 7038*22dc650dSSadaf Ebrahimi else 7039*22dc650dSSadaf Ebrahimi # Only an error if not doing a dry-run. 7040*22dc650dSSadaf Ebrahimi if $opt_dry_run; then 7041*22dc650dSSadaf Ebrahimi # Extract subdirectory from the argument. 7042*22dc650dSSadaf Ebrahimi func_dirname "$arg" "/" "" 7043*22dc650dSSadaf Ebrahimi xdir=$func_dirname_result 7044*22dc650dSSadaf Ebrahimi 7045*22dc650dSSadaf Ebrahimi func_lo2o "$arg" 7046*22dc650dSSadaf Ebrahimi pic_object=$xdir$objdir/$func_lo2o_result 7047*22dc650dSSadaf Ebrahimi non_pic_object=$xdir$func_lo2o_result 7048*22dc650dSSadaf Ebrahimi func_append libobjs " $pic_object" 7049*22dc650dSSadaf Ebrahimi func_append non_pic_objects " $non_pic_object" 7050*22dc650dSSadaf Ebrahimi else 7051*22dc650dSSadaf Ebrahimi func_fatal_error "'$arg' is not a valid libtool object" 7052*22dc650dSSadaf Ebrahimi fi 7053*22dc650dSSadaf Ebrahimi fi 7054*22dc650dSSadaf Ebrahimi done 7055*22dc650dSSadaf Ebrahimi else 7056*22dc650dSSadaf Ebrahimi func_fatal_error "link input file '$arg' does not exist" 7057*22dc650dSSadaf Ebrahimi fi 7058*22dc650dSSadaf Ebrahimi arg=$save_arg 7059*22dc650dSSadaf Ebrahimi prev= 7060*22dc650dSSadaf Ebrahimi continue 7061*22dc650dSSadaf Ebrahimi ;; 7062*22dc650dSSadaf Ebrahimi os2dllname) 7063*22dc650dSSadaf Ebrahimi os2dllname=$arg 7064*22dc650dSSadaf Ebrahimi prev= 7065*22dc650dSSadaf Ebrahimi continue 7066*22dc650dSSadaf Ebrahimi ;; 7067*22dc650dSSadaf Ebrahimi precious_regex) 7068*22dc650dSSadaf Ebrahimi precious_files_regex=$arg 7069*22dc650dSSadaf Ebrahimi prev= 7070*22dc650dSSadaf Ebrahimi continue 7071*22dc650dSSadaf Ebrahimi ;; 7072*22dc650dSSadaf Ebrahimi release) 7073*22dc650dSSadaf Ebrahimi release=-$arg 7074*22dc650dSSadaf Ebrahimi prev= 7075*22dc650dSSadaf Ebrahimi continue 7076*22dc650dSSadaf Ebrahimi ;; 7077*22dc650dSSadaf Ebrahimi rpath | xrpath) 7078*22dc650dSSadaf Ebrahimi # We need an absolute path. 7079*22dc650dSSadaf Ebrahimi case $arg in 7080*22dc650dSSadaf Ebrahimi [\\/]* | [A-Za-z]:[\\/]*) ;; 7081*22dc650dSSadaf Ebrahimi *) 7082*22dc650dSSadaf Ebrahimi func_fatal_error "only absolute run-paths are allowed" 7083*22dc650dSSadaf Ebrahimi ;; 7084*22dc650dSSadaf Ebrahimi esac 7085*22dc650dSSadaf Ebrahimi if test rpath = "$prev"; then 7086*22dc650dSSadaf Ebrahimi case "$rpath " in 7087*22dc650dSSadaf Ebrahimi *" $arg "*) ;; 7088*22dc650dSSadaf Ebrahimi *) func_append rpath " $arg" ;; 7089*22dc650dSSadaf Ebrahimi esac 7090*22dc650dSSadaf Ebrahimi else 7091*22dc650dSSadaf Ebrahimi case "$xrpath " in 7092*22dc650dSSadaf Ebrahimi *" $arg "*) ;; 7093*22dc650dSSadaf Ebrahimi *) func_append xrpath " $arg" ;; 7094*22dc650dSSadaf Ebrahimi esac 7095*22dc650dSSadaf Ebrahimi fi 7096*22dc650dSSadaf Ebrahimi prev= 7097*22dc650dSSadaf Ebrahimi continue 7098*22dc650dSSadaf Ebrahimi ;; 7099*22dc650dSSadaf Ebrahimi shrext) 7100*22dc650dSSadaf Ebrahimi shrext_cmds=$arg 7101*22dc650dSSadaf Ebrahimi prev= 7102*22dc650dSSadaf Ebrahimi continue 7103*22dc650dSSadaf Ebrahimi ;; 7104*22dc650dSSadaf Ebrahimi weak) 7105*22dc650dSSadaf Ebrahimi func_append weak_libs " $arg" 7106*22dc650dSSadaf Ebrahimi prev= 7107*22dc650dSSadaf Ebrahimi continue 7108*22dc650dSSadaf Ebrahimi ;; 7109*22dc650dSSadaf Ebrahimi xassembler) 7110*22dc650dSSadaf Ebrahimi func_append compiler_flags " -Xassembler $qarg" 7111*22dc650dSSadaf Ebrahimi prev= 7112*22dc650dSSadaf Ebrahimi func_append compile_command " -Xassembler $qarg" 7113*22dc650dSSadaf Ebrahimi func_append finalize_command " -Xassembler $qarg" 7114*22dc650dSSadaf Ebrahimi continue 7115*22dc650dSSadaf Ebrahimi ;; 7116*22dc650dSSadaf Ebrahimi xcclinker) 7117*22dc650dSSadaf Ebrahimi func_append linker_flags " $qarg" 7118*22dc650dSSadaf Ebrahimi func_append compiler_flags " $qarg" 7119*22dc650dSSadaf Ebrahimi prev= 7120*22dc650dSSadaf Ebrahimi func_append compile_command " $qarg" 7121*22dc650dSSadaf Ebrahimi func_append finalize_command " $qarg" 7122*22dc650dSSadaf Ebrahimi continue 7123*22dc650dSSadaf Ebrahimi ;; 7124*22dc650dSSadaf Ebrahimi xcompiler) 7125*22dc650dSSadaf Ebrahimi func_append compiler_flags " $qarg" 7126*22dc650dSSadaf Ebrahimi prev= 7127*22dc650dSSadaf Ebrahimi func_append compile_command " $qarg" 7128*22dc650dSSadaf Ebrahimi func_append finalize_command " $qarg" 7129*22dc650dSSadaf Ebrahimi continue 7130*22dc650dSSadaf Ebrahimi ;; 7131*22dc650dSSadaf Ebrahimi xlinker) 7132*22dc650dSSadaf Ebrahimi func_append linker_flags " $qarg" 7133*22dc650dSSadaf Ebrahimi func_append compiler_flags " $wl$qarg" 7134*22dc650dSSadaf Ebrahimi prev= 7135*22dc650dSSadaf Ebrahimi func_append compile_command " $wl$qarg" 7136*22dc650dSSadaf Ebrahimi func_append finalize_command " $wl$qarg" 7137*22dc650dSSadaf Ebrahimi continue 7138*22dc650dSSadaf Ebrahimi ;; 7139*22dc650dSSadaf Ebrahimi *) 7140*22dc650dSSadaf Ebrahimi eval "$prev=\"\$arg\"" 7141*22dc650dSSadaf Ebrahimi prev= 7142*22dc650dSSadaf Ebrahimi continue 7143*22dc650dSSadaf Ebrahimi ;; 7144*22dc650dSSadaf Ebrahimi esac 7145*22dc650dSSadaf Ebrahimi fi # test -n "$prev" 7146*22dc650dSSadaf Ebrahimi 7147*22dc650dSSadaf Ebrahimi prevarg=$arg 7148*22dc650dSSadaf Ebrahimi 7149*22dc650dSSadaf Ebrahimi case $arg in 7150*22dc650dSSadaf Ebrahimi -all-static) 7151*22dc650dSSadaf Ebrahimi if test -n "$link_static_flag"; then 7152*22dc650dSSadaf Ebrahimi # See comment for -static flag below, for more details. 7153*22dc650dSSadaf Ebrahimi func_append compile_command " $link_static_flag" 7154*22dc650dSSadaf Ebrahimi func_append finalize_command " $link_static_flag" 7155*22dc650dSSadaf Ebrahimi fi 7156*22dc650dSSadaf Ebrahimi continue 7157*22dc650dSSadaf Ebrahimi ;; 7158*22dc650dSSadaf Ebrahimi 7159*22dc650dSSadaf Ebrahimi -allow-undefined) 7160*22dc650dSSadaf Ebrahimi # FIXME: remove this flag sometime in the future. 7161*22dc650dSSadaf Ebrahimi func_fatal_error "'-allow-undefined' must not be used because it is the default" 7162*22dc650dSSadaf Ebrahimi ;; 7163*22dc650dSSadaf Ebrahimi 7164*22dc650dSSadaf Ebrahimi -avoid-version) 7165*22dc650dSSadaf Ebrahimi avoid_version=yes 7166*22dc650dSSadaf Ebrahimi continue 7167*22dc650dSSadaf Ebrahimi ;; 7168*22dc650dSSadaf Ebrahimi 7169*22dc650dSSadaf Ebrahimi -bindir) 7170*22dc650dSSadaf Ebrahimi prev=bindir 7171*22dc650dSSadaf Ebrahimi continue 7172*22dc650dSSadaf Ebrahimi ;; 7173*22dc650dSSadaf Ebrahimi 7174*22dc650dSSadaf Ebrahimi -dlopen) 7175*22dc650dSSadaf Ebrahimi prev=dlfiles 7176*22dc650dSSadaf Ebrahimi continue 7177*22dc650dSSadaf Ebrahimi ;; 7178*22dc650dSSadaf Ebrahimi 7179*22dc650dSSadaf Ebrahimi -dlpreopen) 7180*22dc650dSSadaf Ebrahimi prev=dlprefiles 7181*22dc650dSSadaf Ebrahimi continue 7182*22dc650dSSadaf Ebrahimi ;; 7183*22dc650dSSadaf Ebrahimi 7184*22dc650dSSadaf Ebrahimi -export-dynamic) 7185*22dc650dSSadaf Ebrahimi export_dynamic=yes 7186*22dc650dSSadaf Ebrahimi continue 7187*22dc650dSSadaf Ebrahimi ;; 7188*22dc650dSSadaf Ebrahimi 7189*22dc650dSSadaf Ebrahimi -export-symbols | -export-symbols-regex) 7190*22dc650dSSadaf Ebrahimi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 7191*22dc650dSSadaf Ebrahimi func_fatal_error "more than one -exported-symbols argument is not allowed" 7192*22dc650dSSadaf Ebrahimi fi 7193*22dc650dSSadaf Ebrahimi if test X-export-symbols = "X$arg"; then 7194*22dc650dSSadaf Ebrahimi prev=expsyms 7195*22dc650dSSadaf Ebrahimi else 7196*22dc650dSSadaf Ebrahimi prev=expsyms_regex 7197*22dc650dSSadaf Ebrahimi fi 7198*22dc650dSSadaf Ebrahimi continue 7199*22dc650dSSadaf Ebrahimi ;; 7200*22dc650dSSadaf Ebrahimi 7201*22dc650dSSadaf Ebrahimi -framework) 7202*22dc650dSSadaf Ebrahimi prev=framework 7203*22dc650dSSadaf Ebrahimi continue 7204*22dc650dSSadaf Ebrahimi ;; 7205*22dc650dSSadaf Ebrahimi 7206*22dc650dSSadaf Ebrahimi -inst-prefix-dir) 7207*22dc650dSSadaf Ebrahimi prev=inst_prefix 7208*22dc650dSSadaf Ebrahimi continue 7209*22dc650dSSadaf Ebrahimi ;; 7210*22dc650dSSadaf Ebrahimi 7211*22dc650dSSadaf Ebrahimi # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 7212*22dc650dSSadaf Ebrahimi # so, if we see these flags be careful not to treat them like -L 7213*22dc650dSSadaf Ebrahimi -L[A-Z][A-Z]*:*) 7214*22dc650dSSadaf Ebrahimi case $with_gcc/$host in 7215*22dc650dSSadaf Ebrahimi no/*-*-irix* | /*-*-irix*) 7216*22dc650dSSadaf Ebrahimi func_append compile_command " $arg" 7217*22dc650dSSadaf Ebrahimi func_append finalize_command " $arg" 7218*22dc650dSSadaf Ebrahimi ;; 7219*22dc650dSSadaf Ebrahimi esac 7220*22dc650dSSadaf Ebrahimi continue 7221*22dc650dSSadaf Ebrahimi ;; 7222*22dc650dSSadaf Ebrahimi 7223*22dc650dSSadaf Ebrahimi -L*) 7224*22dc650dSSadaf Ebrahimi func_stripname "-L" '' "$arg" 7225*22dc650dSSadaf Ebrahimi if test -z "$func_stripname_result"; then 7226*22dc650dSSadaf Ebrahimi if test "$#" -gt 0; then 7227*22dc650dSSadaf Ebrahimi func_fatal_error "require no space between '-L' and '$1'" 7228*22dc650dSSadaf Ebrahimi else 7229*22dc650dSSadaf Ebrahimi func_fatal_error "need path for '-L' option" 7230*22dc650dSSadaf Ebrahimi fi 7231*22dc650dSSadaf Ebrahimi fi 7232*22dc650dSSadaf Ebrahimi func_resolve_sysroot "$func_stripname_result" 7233*22dc650dSSadaf Ebrahimi dir=$func_resolve_sysroot_result 7234*22dc650dSSadaf Ebrahimi # We need an absolute path. 7235*22dc650dSSadaf Ebrahimi case $dir in 7236*22dc650dSSadaf Ebrahimi [\\/]* | [A-Za-z]:[\\/]*) ;; 7237*22dc650dSSadaf Ebrahimi *) 7238*22dc650dSSadaf Ebrahimi absdir=`cd "$dir" && pwd` 7239*22dc650dSSadaf Ebrahimi test -z "$absdir" && \ 7240*22dc650dSSadaf Ebrahimi func_fatal_error "cannot determine absolute directory name of '$dir'" 7241*22dc650dSSadaf Ebrahimi dir=$absdir 7242*22dc650dSSadaf Ebrahimi ;; 7243*22dc650dSSadaf Ebrahimi esac 7244*22dc650dSSadaf Ebrahimi case "$deplibs " in 7245*22dc650dSSadaf Ebrahimi *" -L$dir "* | *" $arg "*) 7246*22dc650dSSadaf Ebrahimi # Will only happen for absolute or sysroot arguments 7247*22dc650dSSadaf Ebrahimi ;; 7248*22dc650dSSadaf Ebrahimi *) 7249*22dc650dSSadaf Ebrahimi # Preserve sysroot, but never include relative directories 7250*22dc650dSSadaf Ebrahimi case $dir in 7251*22dc650dSSadaf Ebrahimi [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 7252*22dc650dSSadaf Ebrahimi *) func_append deplibs " -L$dir" ;; 7253*22dc650dSSadaf Ebrahimi esac 7254*22dc650dSSadaf Ebrahimi func_append lib_search_path " $dir" 7255*22dc650dSSadaf Ebrahimi ;; 7256*22dc650dSSadaf Ebrahimi esac 7257*22dc650dSSadaf Ebrahimi case $host in 7258*22dc650dSSadaf Ebrahimi *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 7259*22dc650dSSadaf Ebrahimi testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 7260*22dc650dSSadaf Ebrahimi case :$dllsearchpath: in 7261*22dc650dSSadaf Ebrahimi *":$dir:"*) ;; 7262*22dc650dSSadaf Ebrahimi ::) dllsearchpath=$dir;; 7263*22dc650dSSadaf Ebrahimi *) func_append dllsearchpath ":$dir";; 7264*22dc650dSSadaf Ebrahimi esac 7265*22dc650dSSadaf Ebrahimi case :$dllsearchpath: in 7266*22dc650dSSadaf Ebrahimi *":$testbindir:"*) ;; 7267*22dc650dSSadaf Ebrahimi ::) dllsearchpath=$testbindir;; 7268*22dc650dSSadaf Ebrahimi *) func_append dllsearchpath ":$testbindir";; 7269*22dc650dSSadaf Ebrahimi esac 7270*22dc650dSSadaf Ebrahimi ;; 7271*22dc650dSSadaf Ebrahimi esac 7272*22dc650dSSadaf Ebrahimi continue 7273*22dc650dSSadaf Ebrahimi ;; 7274*22dc650dSSadaf Ebrahimi 7275*22dc650dSSadaf Ebrahimi -l*) 7276*22dc650dSSadaf Ebrahimi if test X-lc = "X$arg" || test X-lm = "X$arg"; then 7277*22dc650dSSadaf Ebrahimi case $host in 7278*22dc650dSSadaf Ebrahimi *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 7279*22dc650dSSadaf Ebrahimi # These systems don't actually have a C or math library (as such) 7280*22dc650dSSadaf Ebrahimi continue 7281*22dc650dSSadaf Ebrahimi ;; 7282*22dc650dSSadaf Ebrahimi *-*-os2*) 7283*22dc650dSSadaf Ebrahimi # These systems don't actually have a C library (as such) 7284*22dc650dSSadaf Ebrahimi test X-lc = "X$arg" && continue 7285*22dc650dSSadaf Ebrahimi ;; 7286*22dc650dSSadaf Ebrahimi *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) 7287*22dc650dSSadaf Ebrahimi # Do not include libc due to us having libc/libc_r. 7288*22dc650dSSadaf Ebrahimi test X-lc = "X$arg" && continue 7289*22dc650dSSadaf Ebrahimi ;; 7290*22dc650dSSadaf Ebrahimi *-*-rhapsody* | *-*-darwin1.[012]) 7291*22dc650dSSadaf Ebrahimi # Rhapsody C and math libraries are in the System framework 7292*22dc650dSSadaf Ebrahimi func_append deplibs " System.ltframework" 7293*22dc650dSSadaf Ebrahimi continue 7294*22dc650dSSadaf Ebrahimi ;; 7295*22dc650dSSadaf Ebrahimi *-*-sco3.2v5* | *-*-sco5v6*) 7296*22dc650dSSadaf Ebrahimi # Causes problems with __ctype 7297*22dc650dSSadaf Ebrahimi test X-lc = "X$arg" && continue 7298*22dc650dSSadaf Ebrahimi ;; 7299*22dc650dSSadaf Ebrahimi *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7300*22dc650dSSadaf Ebrahimi # Compiler inserts libc in the correct place for threads to work 7301*22dc650dSSadaf Ebrahimi test X-lc = "X$arg" && continue 7302*22dc650dSSadaf Ebrahimi ;; 7303*22dc650dSSadaf Ebrahimi esac 7304*22dc650dSSadaf Ebrahimi elif test X-lc_r = "X$arg"; then 7305*22dc650dSSadaf Ebrahimi case $host in 7306*22dc650dSSadaf Ebrahimi *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) 7307*22dc650dSSadaf Ebrahimi # Do not include libc_r directly, use -pthread flag. 7308*22dc650dSSadaf Ebrahimi continue 7309*22dc650dSSadaf Ebrahimi ;; 7310*22dc650dSSadaf Ebrahimi esac 7311*22dc650dSSadaf Ebrahimi fi 7312*22dc650dSSadaf Ebrahimi func_append deplibs " $arg" 7313*22dc650dSSadaf Ebrahimi continue 7314*22dc650dSSadaf Ebrahimi ;; 7315*22dc650dSSadaf Ebrahimi 7316*22dc650dSSadaf Ebrahimi -mllvm) 7317*22dc650dSSadaf Ebrahimi prev=mllvm 7318*22dc650dSSadaf Ebrahimi continue 7319*22dc650dSSadaf Ebrahimi ;; 7320*22dc650dSSadaf Ebrahimi 7321*22dc650dSSadaf Ebrahimi -module) 7322*22dc650dSSadaf Ebrahimi module=yes 7323*22dc650dSSadaf Ebrahimi continue 7324*22dc650dSSadaf Ebrahimi ;; 7325*22dc650dSSadaf Ebrahimi 7326*22dc650dSSadaf Ebrahimi # Tru64 UNIX uses -model [arg] to determine the layout of C++ 7327*22dc650dSSadaf Ebrahimi # classes, name mangling, and exception handling. 7328*22dc650dSSadaf Ebrahimi # Darwin uses the -arch flag to determine output architecture. 7329*22dc650dSSadaf Ebrahimi -model|-arch|-isysroot|--sysroot) 7330*22dc650dSSadaf Ebrahimi func_append compiler_flags " $arg" 7331*22dc650dSSadaf Ebrahimi func_append compile_command " $arg" 7332*22dc650dSSadaf Ebrahimi func_append finalize_command " $arg" 7333*22dc650dSSadaf Ebrahimi prev=xcompiler 7334*22dc650dSSadaf Ebrahimi continue 7335*22dc650dSSadaf Ebrahimi ;; 7336*22dc650dSSadaf Ebrahimi # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199. 7337*22dc650dSSadaf Ebrahimi -pthread) 7338*22dc650dSSadaf Ebrahimi case $host in 7339*22dc650dSSadaf Ebrahimi *solaris2*) ;; 7340*22dc650dSSadaf Ebrahimi *) 7341*22dc650dSSadaf Ebrahimi case "$new_inherited_linker_flags " in 7342*22dc650dSSadaf Ebrahimi *" $arg "*) ;; 7343*22dc650dSSadaf Ebrahimi * ) func_append new_inherited_linker_flags " $arg" ;; 7344*22dc650dSSadaf Ebrahimi esac 7345*22dc650dSSadaf Ebrahimi ;; 7346*22dc650dSSadaf Ebrahimi esac 7347*22dc650dSSadaf Ebrahimi continue 7348*22dc650dSSadaf Ebrahimi ;; 7349*22dc650dSSadaf Ebrahimi -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \ 7350*22dc650dSSadaf Ebrahimi |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 7351*22dc650dSSadaf Ebrahimi func_append compiler_flags " $arg" 7352*22dc650dSSadaf Ebrahimi func_append compile_command " $arg" 7353*22dc650dSSadaf Ebrahimi func_append finalize_command " $arg" 7354*22dc650dSSadaf Ebrahimi case "$new_inherited_linker_flags " in 7355*22dc650dSSadaf Ebrahimi *" $arg "*) ;; 7356*22dc650dSSadaf Ebrahimi * ) func_append new_inherited_linker_flags " $arg" ;; 7357*22dc650dSSadaf Ebrahimi esac 7358*22dc650dSSadaf Ebrahimi continue 7359*22dc650dSSadaf Ebrahimi ;; 7360*22dc650dSSadaf Ebrahimi 7361*22dc650dSSadaf Ebrahimi -multi_module) 7362*22dc650dSSadaf Ebrahimi single_module=$wl-multi_module 7363*22dc650dSSadaf Ebrahimi continue 7364*22dc650dSSadaf Ebrahimi ;; 7365*22dc650dSSadaf Ebrahimi 7366*22dc650dSSadaf Ebrahimi -no-fast-install) 7367*22dc650dSSadaf Ebrahimi fast_install=no 7368*22dc650dSSadaf Ebrahimi continue 7369*22dc650dSSadaf Ebrahimi ;; 7370*22dc650dSSadaf Ebrahimi 7371*22dc650dSSadaf Ebrahimi -no-install) 7372*22dc650dSSadaf Ebrahimi case $host in 7373*22dc650dSSadaf Ebrahimi *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 7374*22dc650dSSadaf Ebrahimi # The PATH hackery in wrapper scripts is required on Windows 7375*22dc650dSSadaf Ebrahimi # and Darwin in order for the loader to find any dlls it needs. 7376*22dc650dSSadaf Ebrahimi func_warning "'-no-install' is ignored for $host" 7377*22dc650dSSadaf Ebrahimi func_warning "assuming '-no-fast-install' instead" 7378*22dc650dSSadaf Ebrahimi fast_install=no 7379*22dc650dSSadaf Ebrahimi ;; 7380*22dc650dSSadaf Ebrahimi *) no_install=yes ;; 7381*22dc650dSSadaf Ebrahimi esac 7382*22dc650dSSadaf Ebrahimi continue 7383*22dc650dSSadaf Ebrahimi ;; 7384*22dc650dSSadaf Ebrahimi 7385*22dc650dSSadaf Ebrahimi -no-undefined) 7386*22dc650dSSadaf Ebrahimi allow_undefined=no 7387*22dc650dSSadaf Ebrahimi continue 7388*22dc650dSSadaf Ebrahimi ;; 7389*22dc650dSSadaf Ebrahimi 7390*22dc650dSSadaf Ebrahimi -objectlist) 7391*22dc650dSSadaf Ebrahimi prev=objectlist 7392*22dc650dSSadaf Ebrahimi continue 7393*22dc650dSSadaf Ebrahimi ;; 7394*22dc650dSSadaf Ebrahimi 7395*22dc650dSSadaf Ebrahimi -os2dllname) 7396*22dc650dSSadaf Ebrahimi prev=os2dllname 7397*22dc650dSSadaf Ebrahimi continue 7398*22dc650dSSadaf Ebrahimi ;; 7399*22dc650dSSadaf Ebrahimi 7400*22dc650dSSadaf Ebrahimi -o) prev=output ;; 7401*22dc650dSSadaf Ebrahimi 7402*22dc650dSSadaf Ebrahimi -precious-files-regex) 7403*22dc650dSSadaf Ebrahimi prev=precious_regex 7404*22dc650dSSadaf Ebrahimi continue 7405*22dc650dSSadaf Ebrahimi ;; 7406*22dc650dSSadaf Ebrahimi 7407*22dc650dSSadaf Ebrahimi -release) 7408*22dc650dSSadaf Ebrahimi prev=release 7409*22dc650dSSadaf Ebrahimi continue 7410*22dc650dSSadaf Ebrahimi ;; 7411*22dc650dSSadaf Ebrahimi 7412*22dc650dSSadaf Ebrahimi -rpath) 7413*22dc650dSSadaf Ebrahimi prev=rpath 7414*22dc650dSSadaf Ebrahimi continue 7415*22dc650dSSadaf Ebrahimi ;; 7416*22dc650dSSadaf Ebrahimi 7417*22dc650dSSadaf Ebrahimi -R) 7418*22dc650dSSadaf Ebrahimi prev=xrpath 7419*22dc650dSSadaf Ebrahimi continue 7420*22dc650dSSadaf Ebrahimi ;; 7421*22dc650dSSadaf Ebrahimi 7422*22dc650dSSadaf Ebrahimi -R*) 7423*22dc650dSSadaf Ebrahimi func_stripname '-R' '' "$arg" 7424*22dc650dSSadaf Ebrahimi dir=$func_stripname_result 7425*22dc650dSSadaf Ebrahimi # We need an absolute path. 7426*22dc650dSSadaf Ebrahimi case $dir in 7427*22dc650dSSadaf Ebrahimi [\\/]* | [A-Za-z]:[\\/]*) ;; 7428*22dc650dSSadaf Ebrahimi =*) 7429*22dc650dSSadaf Ebrahimi func_stripname '=' '' "$dir" 7430*22dc650dSSadaf Ebrahimi dir=$lt_sysroot$func_stripname_result 7431*22dc650dSSadaf Ebrahimi ;; 7432*22dc650dSSadaf Ebrahimi *) 7433*22dc650dSSadaf Ebrahimi func_fatal_error "only absolute run-paths are allowed" 7434*22dc650dSSadaf Ebrahimi ;; 7435*22dc650dSSadaf Ebrahimi esac 7436*22dc650dSSadaf Ebrahimi case "$xrpath " in 7437*22dc650dSSadaf Ebrahimi *" $dir "*) ;; 7438*22dc650dSSadaf Ebrahimi *) func_append xrpath " $dir" ;; 7439*22dc650dSSadaf Ebrahimi esac 7440*22dc650dSSadaf Ebrahimi continue 7441*22dc650dSSadaf Ebrahimi ;; 7442*22dc650dSSadaf Ebrahimi 7443*22dc650dSSadaf Ebrahimi -shared) 7444*22dc650dSSadaf Ebrahimi # The effects of -shared are defined in a previous loop. 7445*22dc650dSSadaf Ebrahimi continue 7446*22dc650dSSadaf Ebrahimi ;; 7447*22dc650dSSadaf Ebrahimi 7448*22dc650dSSadaf Ebrahimi -shrext) 7449*22dc650dSSadaf Ebrahimi prev=shrext 7450*22dc650dSSadaf Ebrahimi continue 7451*22dc650dSSadaf Ebrahimi ;; 7452*22dc650dSSadaf Ebrahimi 7453*22dc650dSSadaf Ebrahimi -static | -static-libtool-libs) 7454*22dc650dSSadaf Ebrahimi # The effects of -static are defined in a previous loop. 7455*22dc650dSSadaf Ebrahimi # We used to do the same as -all-static on platforms that 7456*22dc650dSSadaf Ebrahimi # didn't have a PIC flag, but the assumption that the effects 7457*22dc650dSSadaf Ebrahimi # would be equivalent was wrong. It would break on at least 7458*22dc650dSSadaf Ebrahimi # Digital Unix and AIX. 7459*22dc650dSSadaf Ebrahimi continue 7460*22dc650dSSadaf Ebrahimi ;; 7461*22dc650dSSadaf Ebrahimi 7462*22dc650dSSadaf Ebrahimi -thread-safe) 7463*22dc650dSSadaf Ebrahimi thread_safe=yes 7464*22dc650dSSadaf Ebrahimi continue 7465*22dc650dSSadaf Ebrahimi ;; 7466*22dc650dSSadaf Ebrahimi 7467*22dc650dSSadaf Ebrahimi -version-info) 7468*22dc650dSSadaf Ebrahimi prev=vinfo 7469*22dc650dSSadaf Ebrahimi continue 7470*22dc650dSSadaf Ebrahimi ;; 7471*22dc650dSSadaf Ebrahimi 7472*22dc650dSSadaf Ebrahimi -version-number) 7473*22dc650dSSadaf Ebrahimi prev=vinfo 7474*22dc650dSSadaf Ebrahimi vinfo_number=yes 7475*22dc650dSSadaf Ebrahimi continue 7476*22dc650dSSadaf Ebrahimi ;; 7477*22dc650dSSadaf Ebrahimi 7478*22dc650dSSadaf Ebrahimi -weak) 7479*22dc650dSSadaf Ebrahimi prev=weak 7480*22dc650dSSadaf Ebrahimi continue 7481*22dc650dSSadaf Ebrahimi ;; 7482*22dc650dSSadaf Ebrahimi 7483*22dc650dSSadaf Ebrahimi -Wc,*) 7484*22dc650dSSadaf Ebrahimi func_stripname '-Wc,' '' "$arg" 7485*22dc650dSSadaf Ebrahimi args=$func_stripname_result 7486*22dc650dSSadaf Ebrahimi arg= 7487*22dc650dSSadaf Ebrahimi save_ifs=$IFS; IFS=, 7488*22dc650dSSadaf Ebrahimi for flag in $args; do 7489*22dc650dSSadaf Ebrahimi IFS=$save_ifs 7490*22dc650dSSadaf Ebrahimi func_quote_arg pretty "$flag" 7491*22dc650dSSadaf Ebrahimi func_append arg " $func_quote_arg_result" 7492*22dc650dSSadaf Ebrahimi func_append compiler_flags " $func_quote_arg_result" 7493*22dc650dSSadaf Ebrahimi done 7494*22dc650dSSadaf Ebrahimi IFS=$save_ifs 7495*22dc650dSSadaf Ebrahimi func_stripname ' ' '' "$arg" 7496*22dc650dSSadaf Ebrahimi arg=$func_stripname_result 7497*22dc650dSSadaf Ebrahimi ;; 7498*22dc650dSSadaf Ebrahimi 7499*22dc650dSSadaf Ebrahimi -Wl,*) 7500*22dc650dSSadaf Ebrahimi func_stripname '-Wl,' '' "$arg" 7501*22dc650dSSadaf Ebrahimi args=$func_stripname_result 7502*22dc650dSSadaf Ebrahimi arg= 7503*22dc650dSSadaf Ebrahimi save_ifs=$IFS; IFS=, 7504*22dc650dSSadaf Ebrahimi for flag in $args; do 7505*22dc650dSSadaf Ebrahimi IFS=$save_ifs 7506*22dc650dSSadaf Ebrahimi func_quote_arg pretty "$flag" 7507*22dc650dSSadaf Ebrahimi func_append arg " $wl$func_quote_arg_result" 7508*22dc650dSSadaf Ebrahimi func_append compiler_flags " $wl$func_quote_arg_result" 7509*22dc650dSSadaf Ebrahimi func_append linker_flags " $func_quote_arg_result" 7510*22dc650dSSadaf Ebrahimi done 7511*22dc650dSSadaf Ebrahimi IFS=$save_ifs 7512*22dc650dSSadaf Ebrahimi func_stripname ' ' '' "$arg" 7513*22dc650dSSadaf Ebrahimi arg=$func_stripname_result 7514*22dc650dSSadaf Ebrahimi ;; 7515*22dc650dSSadaf Ebrahimi 7516*22dc650dSSadaf Ebrahimi -Xassembler) 7517*22dc650dSSadaf Ebrahimi prev=xassembler 7518*22dc650dSSadaf Ebrahimi continue 7519*22dc650dSSadaf Ebrahimi ;; 7520*22dc650dSSadaf Ebrahimi 7521*22dc650dSSadaf Ebrahimi -Xcompiler) 7522*22dc650dSSadaf Ebrahimi prev=xcompiler 7523*22dc650dSSadaf Ebrahimi continue 7524*22dc650dSSadaf Ebrahimi ;; 7525*22dc650dSSadaf Ebrahimi 7526*22dc650dSSadaf Ebrahimi -Xlinker) 7527*22dc650dSSadaf Ebrahimi prev=xlinker 7528*22dc650dSSadaf Ebrahimi continue 7529*22dc650dSSadaf Ebrahimi ;; 7530*22dc650dSSadaf Ebrahimi 7531*22dc650dSSadaf Ebrahimi -XCClinker) 7532*22dc650dSSadaf Ebrahimi prev=xcclinker 7533*22dc650dSSadaf Ebrahimi continue 7534*22dc650dSSadaf Ebrahimi ;; 7535*22dc650dSSadaf Ebrahimi 7536*22dc650dSSadaf Ebrahimi # -msg_* for osf cc 7537*22dc650dSSadaf Ebrahimi -msg_*) 7538*22dc650dSSadaf Ebrahimi func_quote_arg pretty "$arg" 7539*22dc650dSSadaf Ebrahimi arg=$func_quote_arg_result 7540*22dc650dSSadaf Ebrahimi ;; 7541*22dc650dSSadaf Ebrahimi 7542*22dc650dSSadaf Ebrahimi # Flags to be passed through unchanged, with rationale: 7543*22dc650dSSadaf Ebrahimi # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 7544*22dc650dSSadaf Ebrahimi # -r[0-9][0-9]* specify processor for the SGI compiler 7545*22dc650dSSadaf Ebrahimi # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 7546*22dc650dSSadaf Ebrahimi # +DA*, +DD* enable 64-bit mode for the HP compiler 7547*22dc650dSSadaf Ebrahimi # -q* compiler args for the IBM compiler 7548*22dc650dSSadaf Ebrahimi # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 7549*22dc650dSSadaf Ebrahimi # -F/path path to uninstalled frameworks, gcc on darwin 7550*22dc650dSSadaf Ebrahimi # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 7551*22dc650dSSadaf Ebrahimi # -fstack-protector* stack protector flags for GCC 7552*22dc650dSSadaf Ebrahimi # @file GCC response files 7553*22dc650dSSadaf Ebrahimi # -tp=* Portland pgcc target processor selection 7554*22dc650dSSadaf Ebrahimi # --sysroot=* for sysroot support 7555*22dc650dSSadaf Ebrahimi # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 7556*22dc650dSSadaf Ebrahimi # -specs=* GCC specs files 7557*22dc650dSSadaf Ebrahimi # -stdlib=* select c++ std lib with clang 7558*22dc650dSSadaf Ebrahimi # -fsanitize=* Clang/GCC memory and address sanitizer 7559*22dc650dSSadaf Ebrahimi # -fuse-ld=* Linker select flags for GCC 7560*22dc650dSSadaf Ebrahimi # -Wa,* Pass flags directly to the assembler 7561*22dc650dSSadaf Ebrahimi -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 7562*22dc650dSSadaf Ebrahimi -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 7563*22dc650dSSadaf Ebrahimi -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ 7564*22dc650dSSadaf Ebrahimi -specs=*|-fsanitize=*|-fuse-ld=*|-Wa,*) 7565*22dc650dSSadaf Ebrahimi func_quote_arg pretty "$arg" 7566*22dc650dSSadaf Ebrahimi arg=$func_quote_arg_result 7567*22dc650dSSadaf Ebrahimi func_append compile_command " $arg" 7568*22dc650dSSadaf Ebrahimi func_append finalize_command " $arg" 7569*22dc650dSSadaf Ebrahimi func_append compiler_flags " $arg" 7570*22dc650dSSadaf Ebrahimi continue 7571*22dc650dSSadaf Ebrahimi ;; 7572*22dc650dSSadaf Ebrahimi 7573*22dc650dSSadaf Ebrahimi -Z*) 7574*22dc650dSSadaf Ebrahimi if test os2 = "`expr $host : '.*\(os2\)'`"; then 7575*22dc650dSSadaf Ebrahimi # OS/2 uses -Zxxx to specify OS/2-specific options 7576*22dc650dSSadaf Ebrahimi compiler_flags="$compiler_flags $arg" 7577*22dc650dSSadaf Ebrahimi func_append compile_command " $arg" 7578*22dc650dSSadaf Ebrahimi func_append finalize_command " $arg" 7579*22dc650dSSadaf Ebrahimi case $arg in 7580*22dc650dSSadaf Ebrahimi -Zlinker | -Zstack) 7581*22dc650dSSadaf Ebrahimi prev=xcompiler 7582*22dc650dSSadaf Ebrahimi ;; 7583*22dc650dSSadaf Ebrahimi esac 7584*22dc650dSSadaf Ebrahimi continue 7585*22dc650dSSadaf Ebrahimi else 7586*22dc650dSSadaf Ebrahimi # Otherwise treat like 'Some other compiler flag' below 7587*22dc650dSSadaf Ebrahimi func_quote_arg pretty "$arg" 7588*22dc650dSSadaf Ebrahimi arg=$func_quote_arg_result 7589*22dc650dSSadaf Ebrahimi fi 7590*22dc650dSSadaf Ebrahimi ;; 7591*22dc650dSSadaf Ebrahimi 7592*22dc650dSSadaf Ebrahimi # Some other compiler flag. 7593*22dc650dSSadaf Ebrahimi -* | +*) 7594*22dc650dSSadaf Ebrahimi func_quote_arg pretty "$arg" 7595*22dc650dSSadaf Ebrahimi arg=$func_quote_arg_result 7596*22dc650dSSadaf Ebrahimi ;; 7597*22dc650dSSadaf Ebrahimi 7598*22dc650dSSadaf Ebrahimi *.$objext) 7599*22dc650dSSadaf Ebrahimi # A standard object. 7600*22dc650dSSadaf Ebrahimi func_append objs " $arg" 7601*22dc650dSSadaf Ebrahimi ;; 7602*22dc650dSSadaf Ebrahimi 7603*22dc650dSSadaf Ebrahimi *.lo) 7604*22dc650dSSadaf Ebrahimi # A libtool-controlled object. 7605*22dc650dSSadaf Ebrahimi 7606*22dc650dSSadaf Ebrahimi # Check to see that this really is a libtool object. 7607*22dc650dSSadaf Ebrahimi if func_lalib_unsafe_p "$arg"; then 7608*22dc650dSSadaf Ebrahimi pic_object= 7609*22dc650dSSadaf Ebrahimi non_pic_object= 7610*22dc650dSSadaf Ebrahimi 7611*22dc650dSSadaf Ebrahimi # Read the .lo file 7612*22dc650dSSadaf Ebrahimi func_source "$arg" 7613*22dc650dSSadaf Ebrahimi 7614*22dc650dSSadaf Ebrahimi if test -z "$pic_object" || 7615*22dc650dSSadaf Ebrahimi test -z "$non_pic_object" || 7616*22dc650dSSadaf Ebrahimi test none = "$pic_object" && 7617*22dc650dSSadaf Ebrahimi test none = "$non_pic_object"; then 7618*22dc650dSSadaf Ebrahimi func_fatal_error "cannot find name of object for '$arg'" 7619*22dc650dSSadaf Ebrahimi fi 7620*22dc650dSSadaf Ebrahimi 7621*22dc650dSSadaf Ebrahimi # Extract subdirectory from the argument. 7622*22dc650dSSadaf Ebrahimi func_dirname "$arg" "/" "" 7623*22dc650dSSadaf Ebrahimi xdir=$func_dirname_result 7624*22dc650dSSadaf Ebrahimi 7625*22dc650dSSadaf Ebrahimi test none = "$pic_object" || { 7626*22dc650dSSadaf Ebrahimi # Prepend the subdirectory the object is found in. 7627*22dc650dSSadaf Ebrahimi pic_object=$xdir$pic_object 7628*22dc650dSSadaf Ebrahimi 7629*22dc650dSSadaf Ebrahimi if test dlfiles = "$prev"; then 7630*22dc650dSSadaf Ebrahimi if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 7631*22dc650dSSadaf Ebrahimi func_append dlfiles " $pic_object" 7632*22dc650dSSadaf Ebrahimi prev= 7633*22dc650dSSadaf Ebrahimi continue 7634*22dc650dSSadaf Ebrahimi else 7635*22dc650dSSadaf Ebrahimi # If libtool objects are unsupported, then we need to preload. 7636*22dc650dSSadaf Ebrahimi prev=dlprefiles 7637*22dc650dSSadaf Ebrahimi fi 7638*22dc650dSSadaf Ebrahimi fi 7639*22dc650dSSadaf Ebrahimi 7640*22dc650dSSadaf Ebrahimi # CHECK ME: I think I busted this. -Ossama 7641*22dc650dSSadaf Ebrahimi if test dlprefiles = "$prev"; then 7642*22dc650dSSadaf Ebrahimi # Preload the old-style object. 7643*22dc650dSSadaf Ebrahimi func_append dlprefiles " $pic_object" 7644*22dc650dSSadaf Ebrahimi prev= 7645*22dc650dSSadaf Ebrahimi fi 7646*22dc650dSSadaf Ebrahimi 7647*22dc650dSSadaf Ebrahimi # A PIC object. 7648*22dc650dSSadaf Ebrahimi func_append libobjs " $pic_object" 7649*22dc650dSSadaf Ebrahimi arg=$pic_object 7650*22dc650dSSadaf Ebrahimi } 7651*22dc650dSSadaf Ebrahimi 7652*22dc650dSSadaf Ebrahimi # Non-PIC object. 7653*22dc650dSSadaf Ebrahimi if test none != "$non_pic_object"; then 7654*22dc650dSSadaf Ebrahimi # Prepend the subdirectory the object is found in. 7655*22dc650dSSadaf Ebrahimi non_pic_object=$xdir$non_pic_object 7656*22dc650dSSadaf Ebrahimi 7657*22dc650dSSadaf Ebrahimi # A standard non-PIC object 7658*22dc650dSSadaf Ebrahimi func_append non_pic_objects " $non_pic_object" 7659*22dc650dSSadaf Ebrahimi if test -z "$pic_object" || test none = "$pic_object"; then 7660*22dc650dSSadaf Ebrahimi arg=$non_pic_object 7661*22dc650dSSadaf Ebrahimi fi 7662*22dc650dSSadaf Ebrahimi else 7663*22dc650dSSadaf Ebrahimi # If the PIC object exists, use it instead. 7664*22dc650dSSadaf Ebrahimi # $xdir was prepended to $pic_object above. 7665*22dc650dSSadaf Ebrahimi non_pic_object=$pic_object 7666*22dc650dSSadaf Ebrahimi func_append non_pic_objects " $non_pic_object" 7667*22dc650dSSadaf Ebrahimi fi 7668*22dc650dSSadaf Ebrahimi else 7669*22dc650dSSadaf Ebrahimi # Only an error if not doing a dry-run. 7670*22dc650dSSadaf Ebrahimi if $opt_dry_run; then 7671*22dc650dSSadaf Ebrahimi # Extract subdirectory from the argument. 7672*22dc650dSSadaf Ebrahimi func_dirname "$arg" "/" "" 7673*22dc650dSSadaf Ebrahimi xdir=$func_dirname_result 7674*22dc650dSSadaf Ebrahimi 7675*22dc650dSSadaf Ebrahimi func_lo2o "$arg" 7676*22dc650dSSadaf Ebrahimi pic_object=$xdir$objdir/$func_lo2o_result 7677*22dc650dSSadaf Ebrahimi non_pic_object=$xdir$func_lo2o_result 7678*22dc650dSSadaf Ebrahimi func_append libobjs " $pic_object" 7679*22dc650dSSadaf Ebrahimi func_append non_pic_objects " $non_pic_object" 7680*22dc650dSSadaf Ebrahimi else 7681*22dc650dSSadaf Ebrahimi func_fatal_error "'$arg' is not a valid libtool object" 7682*22dc650dSSadaf Ebrahimi fi 7683*22dc650dSSadaf Ebrahimi fi 7684*22dc650dSSadaf Ebrahimi ;; 7685*22dc650dSSadaf Ebrahimi 7686*22dc650dSSadaf Ebrahimi *.$libext) 7687*22dc650dSSadaf Ebrahimi # An archive. 7688*22dc650dSSadaf Ebrahimi func_append deplibs " $arg" 7689*22dc650dSSadaf Ebrahimi func_append old_deplibs " $arg" 7690*22dc650dSSadaf Ebrahimi continue 7691*22dc650dSSadaf Ebrahimi ;; 7692*22dc650dSSadaf Ebrahimi 7693*22dc650dSSadaf Ebrahimi *.la) 7694*22dc650dSSadaf Ebrahimi # A libtool-controlled library. 7695*22dc650dSSadaf Ebrahimi 7696*22dc650dSSadaf Ebrahimi func_resolve_sysroot "$arg" 7697*22dc650dSSadaf Ebrahimi if test dlfiles = "$prev"; then 7698*22dc650dSSadaf Ebrahimi # This library was specified with -dlopen. 7699*22dc650dSSadaf Ebrahimi func_append dlfiles " $func_resolve_sysroot_result" 7700*22dc650dSSadaf Ebrahimi prev= 7701*22dc650dSSadaf Ebrahimi elif test dlprefiles = "$prev"; then 7702*22dc650dSSadaf Ebrahimi # The library was specified with -dlpreopen. 7703*22dc650dSSadaf Ebrahimi func_append dlprefiles " $func_resolve_sysroot_result" 7704*22dc650dSSadaf Ebrahimi prev= 7705*22dc650dSSadaf Ebrahimi else 7706*22dc650dSSadaf Ebrahimi func_append deplibs " $func_resolve_sysroot_result" 7707*22dc650dSSadaf Ebrahimi fi 7708*22dc650dSSadaf Ebrahimi continue 7709*22dc650dSSadaf Ebrahimi ;; 7710*22dc650dSSadaf Ebrahimi 7711*22dc650dSSadaf Ebrahimi # Some other compiler argument. 7712*22dc650dSSadaf Ebrahimi *) 7713*22dc650dSSadaf Ebrahimi # Unknown arguments in both finalize_command and compile_command need 7714*22dc650dSSadaf Ebrahimi # to be aesthetically quoted because they are evaled later. 7715*22dc650dSSadaf Ebrahimi func_quote_arg pretty "$arg" 7716*22dc650dSSadaf Ebrahimi arg=$func_quote_arg_result 7717*22dc650dSSadaf Ebrahimi ;; 7718*22dc650dSSadaf Ebrahimi esac # arg 7719*22dc650dSSadaf Ebrahimi 7720*22dc650dSSadaf Ebrahimi # Now actually substitute the argument into the commands. 7721*22dc650dSSadaf Ebrahimi if test -n "$arg"; then 7722*22dc650dSSadaf Ebrahimi func_append compile_command " $arg" 7723*22dc650dSSadaf Ebrahimi func_append finalize_command " $arg" 7724*22dc650dSSadaf Ebrahimi fi 7725*22dc650dSSadaf Ebrahimi done # argument parsing loop 7726*22dc650dSSadaf Ebrahimi 7727*22dc650dSSadaf Ebrahimi test -n "$prev" && \ 7728*22dc650dSSadaf Ebrahimi func_fatal_help "the '$prevarg' option requires an argument" 7729*22dc650dSSadaf Ebrahimi 7730*22dc650dSSadaf Ebrahimi if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then 7731*22dc650dSSadaf Ebrahimi eval arg=\"$export_dynamic_flag_spec\" 7732*22dc650dSSadaf Ebrahimi func_append compile_command " $arg" 7733*22dc650dSSadaf Ebrahimi func_append finalize_command " $arg" 7734*22dc650dSSadaf Ebrahimi fi 7735*22dc650dSSadaf Ebrahimi 7736*22dc650dSSadaf Ebrahimi oldlibs= 7737*22dc650dSSadaf Ebrahimi # calculate the name of the file, without its directory 7738*22dc650dSSadaf Ebrahimi func_basename "$output" 7739*22dc650dSSadaf Ebrahimi outputname=$func_basename_result 7740*22dc650dSSadaf Ebrahimi libobjs_save=$libobjs 7741*22dc650dSSadaf Ebrahimi 7742*22dc650dSSadaf Ebrahimi if test -n "$shlibpath_var"; then 7743*22dc650dSSadaf Ebrahimi # get the directories listed in $shlibpath_var 7744*22dc650dSSadaf Ebrahimi eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` 7745*22dc650dSSadaf Ebrahimi else 7746*22dc650dSSadaf Ebrahimi shlib_search_path= 7747*22dc650dSSadaf Ebrahimi fi 7748*22dc650dSSadaf Ebrahimi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 7749*22dc650dSSadaf Ebrahimi eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 7750*22dc650dSSadaf Ebrahimi 7751*22dc650dSSadaf Ebrahimi # Definition is injected by LT_CONFIG during libtool generation. 7752*22dc650dSSadaf Ebrahimi func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" 7753*22dc650dSSadaf Ebrahimi 7754*22dc650dSSadaf Ebrahimi func_dirname "$output" "/" "" 7755*22dc650dSSadaf Ebrahimi output_objdir=$func_dirname_result$objdir 7756*22dc650dSSadaf Ebrahimi func_to_tool_file "$output_objdir/" 7757*22dc650dSSadaf Ebrahimi tool_output_objdir=$func_to_tool_file_result 7758*22dc650dSSadaf Ebrahimi # Create the object directory. 7759*22dc650dSSadaf Ebrahimi func_mkdir_p "$output_objdir" 7760*22dc650dSSadaf Ebrahimi 7761*22dc650dSSadaf Ebrahimi # Determine the type of output 7762*22dc650dSSadaf Ebrahimi case $output in 7763*22dc650dSSadaf Ebrahimi "") 7764*22dc650dSSadaf Ebrahimi func_fatal_help "you must specify an output file" 7765*22dc650dSSadaf Ebrahimi ;; 7766*22dc650dSSadaf Ebrahimi *.$libext) linkmode=oldlib ;; 7767*22dc650dSSadaf Ebrahimi *.lo | *.$objext) linkmode=obj ;; 7768*22dc650dSSadaf Ebrahimi *.la) linkmode=lib ;; 7769*22dc650dSSadaf Ebrahimi *) linkmode=prog ;; # Anything else should be a program. 7770*22dc650dSSadaf Ebrahimi esac 7771*22dc650dSSadaf Ebrahimi 7772*22dc650dSSadaf Ebrahimi specialdeplibs= 7773*22dc650dSSadaf Ebrahimi 7774*22dc650dSSadaf Ebrahimi libs= 7775*22dc650dSSadaf Ebrahimi # Find all interdependent deplibs by searching for libraries 7776*22dc650dSSadaf Ebrahimi # that are linked more than once (e.g. -la -lb -la) 7777*22dc650dSSadaf Ebrahimi for deplib in $deplibs; do 7778*22dc650dSSadaf Ebrahimi if $opt_preserve_dup_deps; then 7779*22dc650dSSadaf Ebrahimi case "$libs " in 7780*22dc650dSSadaf Ebrahimi *" $deplib "*) func_append specialdeplibs " $deplib" ;; 7781*22dc650dSSadaf Ebrahimi esac 7782*22dc650dSSadaf Ebrahimi fi 7783*22dc650dSSadaf Ebrahimi func_append libs " $deplib" 7784*22dc650dSSadaf Ebrahimi done 7785*22dc650dSSadaf Ebrahimi 7786*22dc650dSSadaf Ebrahimi if test lib = "$linkmode"; then 7787*22dc650dSSadaf Ebrahimi libs="$predeps $libs $compiler_lib_search_path $postdeps" 7788*22dc650dSSadaf Ebrahimi 7789*22dc650dSSadaf Ebrahimi # Compute libraries that are listed more than once in $predeps 7790*22dc650dSSadaf Ebrahimi # $postdeps and mark them as special (i.e., whose duplicates are 7791*22dc650dSSadaf Ebrahimi # not to be eliminated). 7792*22dc650dSSadaf Ebrahimi pre_post_deps= 7793*22dc650dSSadaf Ebrahimi if $opt_duplicate_compiler_generated_deps; then 7794*22dc650dSSadaf Ebrahimi for pre_post_dep in $predeps $postdeps; do 7795*22dc650dSSadaf Ebrahimi case "$pre_post_deps " in 7796*22dc650dSSadaf Ebrahimi *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 7797*22dc650dSSadaf Ebrahimi esac 7798*22dc650dSSadaf Ebrahimi func_append pre_post_deps " $pre_post_dep" 7799*22dc650dSSadaf Ebrahimi done 7800*22dc650dSSadaf Ebrahimi fi 7801*22dc650dSSadaf Ebrahimi pre_post_deps= 7802*22dc650dSSadaf Ebrahimi fi 7803*22dc650dSSadaf Ebrahimi 7804*22dc650dSSadaf Ebrahimi deplibs= 7805*22dc650dSSadaf Ebrahimi newdependency_libs= 7806*22dc650dSSadaf Ebrahimi newlib_search_path= 7807*22dc650dSSadaf Ebrahimi need_relink=no # whether we're linking any uninstalled libtool libraries 7808*22dc650dSSadaf Ebrahimi notinst_deplibs= # not-installed libtool libraries 7809*22dc650dSSadaf Ebrahimi notinst_path= # paths that contain not-installed libtool libraries 7810*22dc650dSSadaf Ebrahimi 7811*22dc650dSSadaf Ebrahimi case $linkmode in 7812*22dc650dSSadaf Ebrahimi lib) 7813*22dc650dSSadaf Ebrahimi passes="conv dlpreopen link" 7814*22dc650dSSadaf Ebrahimi for file in $dlfiles $dlprefiles; do 7815*22dc650dSSadaf Ebrahimi case $file in 7816*22dc650dSSadaf Ebrahimi *.la) ;; 7817*22dc650dSSadaf Ebrahimi *) 7818*22dc650dSSadaf Ebrahimi func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" 7819*22dc650dSSadaf Ebrahimi ;; 7820*22dc650dSSadaf Ebrahimi esac 7821*22dc650dSSadaf Ebrahimi done 7822*22dc650dSSadaf Ebrahimi ;; 7823*22dc650dSSadaf Ebrahimi prog) 7824*22dc650dSSadaf Ebrahimi compile_deplibs= 7825*22dc650dSSadaf Ebrahimi finalize_deplibs= 7826*22dc650dSSadaf Ebrahimi alldeplibs=false 7827*22dc650dSSadaf Ebrahimi newdlfiles= 7828*22dc650dSSadaf Ebrahimi newdlprefiles= 7829*22dc650dSSadaf Ebrahimi passes="conv scan dlopen dlpreopen link" 7830*22dc650dSSadaf Ebrahimi ;; 7831*22dc650dSSadaf Ebrahimi *) passes="conv" 7832*22dc650dSSadaf Ebrahimi ;; 7833*22dc650dSSadaf Ebrahimi esac 7834*22dc650dSSadaf Ebrahimi 7835*22dc650dSSadaf Ebrahimi for pass in $passes; do 7836*22dc650dSSadaf Ebrahimi # The preopen pass in lib mode reverses $deplibs; put it back here 7837*22dc650dSSadaf Ebrahimi # so that -L comes before libs that need it for instance... 7838*22dc650dSSadaf Ebrahimi if test lib,link = "$linkmode,$pass"; then 7839*22dc650dSSadaf Ebrahimi ## FIXME: Find the place where the list is rebuilt in the wrong 7840*22dc650dSSadaf Ebrahimi ## order, and fix it there properly 7841*22dc650dSSadaf Ebrahimi tmp_deplibs= 7842*22dc650dSSadaf Ebrahimi for deplib in $deplibs; do 7843*22dc650dSSadaf Ebrahimi tmp_deplibs="$deplib $tmp_deplibs" 7844*22dc650dSSadaf Ebrahimi done 7845*22dc650dSSadaf Ebrahimi deplibs=$tmp_deplibs 7846*22dc650dSSadaf Ebrahimi fi 7847*22dc650dSSadaf Ebrahimi 7848*22dc650dSSadaf Ebrahimi if test lib,link = "$linkmode,$pass" || 7849*22dc650dSSadaf Ebrahimi test prog,scan = "$linkmode,$pass"; then 7850*22dc650dSSadaf Ebrahimi libs=$deplibs 7851*22dc650dSSadaf Ebrahimi deplibs= 7852*22dc650dSSadaf Ebrahimi fi 7853*22dc650dSSadaf Ebrahimi if test prog = "$linkmode"; then 7854*22dc650dSSadaf Ebrahimi case $pass in 7855*22dc650dSSadaf Ebrahimi dlopen) libs=$dlfiles ;; 7856*22dc650dSSadaf Ebrahimi dlpreopen) libs=$dlprefiles ;; 7857*22dc650dSSadaf Ebrahimi link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 7858*22dc650dSSadaf Ebrahimi esac 7859*22dc650dSSadaf Ebrahimi fi 7860*22dc650dSSadaf Ebrahimi if test lib,dlpreopen = "$linkmode,$pass"; then 7861*22dc650dSSadaf Ebrahimi # Collect and forward deplibs of preopened libtool libs 7862*22dc650dSSadaf Ebrahimi for lib in $dlprefiles; do 7863*22dc650dSSadaf Ebrahimi # Ignore non-libtool-libs 7864*22dc650dSSadaf Ebrahimi dependency_libs= 7865*22dc650dSSadaf Ebrahimi func_resolve_sysroot "$lib" 7866*22dc650dSSadaf Ebrahimi case $lib in 7867*22dc650dSSadaf Ebrahimi *.la) func_source "$func_resolve_sysroot_result" ;; 7868*22dc650dSSadaf Ebrahimi esac 7869*22dc650dSSadaf Ebrahimi 7870*22dc650dSSadaf Ebrahimi # Collect preopened libtool deplibs, except any this library 7871*22dc650dSSadaf Ebrahimi # has declared as weak libs 7872*22dc650dSSadaf Ebrahimi for deplib in $dependency_libs; do 7873*22dc650dSSadaf Ebrahimi func_basename "$deplib" 7874*22dc650dSSadaf Ebrahimi deplib_base=$func_basename_result 7875*22dc650dSSadaf Ebrahimi case " $weak_libs " in 7876*22dc650dSSadaf Ebrahimi *" $deplib_base "*) ;; 7877*22dc650dSSadaf Ebrahimi *) func_append deplibs " $deplib" ;; 7878*22dc650dSSadaf Ebrahimi esac 7879*22dc650dSSadaf Ebrahimi done 7880*22dc650dSSadaf Ebrahimi done 7881*22dc650dSSadaf Ebrahimi libs=$dlprefiles 7882*22dc650dSSadaf Ebrahimi fi 7883*22dc650dSSadaf Ebrahimi if test dlopen = "$pass"; then 7884*22dc650dSSadaf Ebrahimi # Collect dlpreopened libraries 7885*22dc650dSSadaf Ebrahimi save_deplibs=$deplibs 7886*22dc650dSSadaf Ebrahimi deplibs= 7887*22dc650dSSadaf Ebrahimi fi 7888*22dc650dSSadaf Ebrahimi 7889*22dc650dSSadaf Ebrahimi for deplib in $libs; do 7890*22dc650dSSadaf Ebrahimi lib= 7891*22dc650dSSadaf Ebrahimi found=false 7892*22dc650dSSadaf Ebrahimi case $deplib in 7893*22dc650dSSadaf Ebrahimi -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 7894*22dc650dSSadaf Ebrahimi |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 7895*22dc650dSSadaf Ebrahimi if test prog,link = "$linkmode,$pass"; then 7896*22dc650dSSadaf Ebrahimi compile_deplibs="$deplib $compile_deplibs" 7897*22dc650dSSadaf Ebrahimi finalize_deplibs="$deplib $finalize_deplibs" 7898*22dc650dSSadaf Ebrahimi else 7899*22dc650dSSadaf Ebrahimi func_append compiler_flags " $deplib" 7900*22dc650dSSadaf Ebrahimi if test lib = "$linkmode"; then 7901*22dc650dSSadaf Ebrahimi case "$new_inherited_linker_flags " in 7902*22dc650dSSadaf Ebrahimi *" $deplib "*) ;; 7903*22dc650dSSadaf Ebrahimi * ) func_append new_inherited_linker_flags " $deplib" ;; 7904*22dc650dSSadaf Ebrahimi esac 7905*22dc650dSSadaf Ebrahimi fi 7906*22dc650dSSadaf Ebrahimi fi 7907*22dc650dSSadaf Ebrahimi continue 7908*22dc650dSSadaf Ebrahimi ;; 7909*22dc650dSSadaf Ebrahimi -l*) 7910*22dc650dSSadaf Ebrahimi if test lib != "$linkmode" && test prog != "$linkmode"; then 7911*22dc650dSSadaf Ebrahimi func_warning "'-l' is ignored for archives/objects" 7912*22dc650dSSadaf Ebrahimi continue 7913*22dc650dSSadaf Ebrahimi fi 7914*22dc650dSSadaf Ebrahimi func_stripname '-l' '' "$deplib" 7915*22dc650dSSadaf Ebrahimi name=$func_stripname_result 7916*22dc650dSSadaf Ebrahimi if test lib = "$linkmode"; then 7917*22dc650dSSadaf Ebrahimi searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 7918*22dc650dSSadaf Ebrahimi else 7919*22dc650dSSadaf Ebrahimi searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 7920*22dc650dSSadaf Ebrahimi fi 7921*22dc650dSSadaf Ebrahimi for searchdir in $searchdirs; do 7922*22dc650dSSadaf Ebrahimi for search_ext in .la $std_shrext .so .a; do 7923*22dc650dSSadaf Ebrahimi # Search the libtool library 7924*22dc650dSSadaf Ebrahimi lib=$searchdir/lib$name$search_ext 7925*22dc650dSSadaf Ebrahimi if test -f "$lib"; then 7926*22dc650dSSadaf Ebrahimi if test .la = "$search_ext"; then 7927*22dc650dSSadaf Ebrahimi found=: 7928*22dc650dSSadaf Ebrahimi else 7929*22dc650dSSadaf Ebrahimi found=false 7930*22dc650dSSadaf Ebrahimi fi 7931*22dc650dSSadaf Ebrahimi break 2 7932*22dc650dSSadaf Ebrahimi fi 7933*22dc650dSSadaf Ebrahimi done 7934*22dc650dSSadaf Ebrahimi done 7935*22dc650dSSadaf Ebrahimi if $found; then 7936*22dc650dSSadaf Ebrahimi # deplib is a libtool library 7937*22dc650dSSadaf Ebrahimi # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 7938*22dc650dSSadaf Ebrahimi # We need to do some special things here, and not later. 7939*22dc650dSSadaf Ebrahimi if test yes = "$allow_libtool_libs_with_static_runtimes"; then 7940*22dc650dSSadaf Ebrahimi case " $predeps $postdeps " in 7941*22dc650dSSadaf Ebrahimi *" $deplib "*) 7942*22dc650dSSadaf Ebrahimi if func_lalib_p "$lib"; then 7943*22dc650dSSadaf Ebrahimi library_names= 7944*22dc650dSSadaf Ebrahimi old_library= 7945*22dc650dSSadaf Ebrahimi func_source "$lib" 7946*22dc650dSSadaf Ebrahimi for l in $old_library $library_names; do 7947*22dc650dSSadaf Ebrahimi ll=$l 7948*22dc650dSSadaf Ebrahimi done 7949*22dc650dSSadaf Ebrahimi if test "X$ll" = "X$old_library"; then # only static version available 7950*22dc650dSSadaf Ebrahimi found=false 7951*22dc650dSSadaf Ebrahimi func_dirname "$lib" "" "." 7952*22dc650dSSadaf Ebrahimi ladir=$func_dirname_result 7953*22dc650dSSadaf Ebrahimi lib=$ladir/$old_library 7954*22dc650dSSadaf Ebrahimi if test prog,link = "$linkmode,$pass"; then 7955*22dc650dSSadaf Ebrahimi compile_deplibs="$deplib $compile_deplibs" 7956*22dc650dSSadaf Ebrahimi finalize_deplibs="$deplib $finalize_deplibs" 7957*22dc650dSSadaf Ebrahimi else 7958*22dc650dSSadaf Ebrahimi deplibs="$deplib $deplibs" 7959*22dc650dSSadaf Ebrahimi test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 7960*22dc650dSSadaf Ebrahimi fi 7961*22dc650dSSadaf Ebrahimi continue 7962*22dc650dSSadaf Ebrahimi fi 7963*22dc650dSSadaf Ebrahimi fi 7964*22dc650dSSadaf Ebrahimi ;; 7965*22dc650dSSadaf Ebrahimi *) ;; 7966*22dc650dSSadaf Ebrahimi esac 7967*22dc650dSSadaf Ebrahimi fi 7968*22dc650dSSadaf Ebrahimi else 7969*22dc650dSSadaf Ebrahimi # deplib doesn't seem to be a libtool library 7970*22dc650dSSadaf Ebrahimi if test prog,link = "$linkmode,$pass"; then 7971*22dc650dSSadaf Ebrahimi compile_deplibs="$deplib $compile_deplibs" 7972*22dc650dSSadaf Ebrahimi finalize_deplibs="$deplib $finalize_deplibs" 7973*22dc650dSSadaf Ebrahimi else 7974*22dc650dSSadaf Ebrahimi deplibs="$deplib $deplibs" 7975*22dc650dSSadaf Ebrahimi test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 7976*22dc650dSSadaf Ebrahimi fi 7977*22dc650dSSadaf Ebrahimi continue 7978*22dc650dSSadaf Ebrahimi fi 7979*22dc650dSSadaf Ebrahimi ;; # -l 7980*22dc650dSSadaf Ebrahimi *.ltframework) 7981*22dc650dSSadaf Ebrahimi if test prog,link = "$linkmode,$pass"; then 7982*22dc650dSSadaf Ebrahimi compile_deplibs="$deplib $compile_deplibs" 7983*22dc650dSSadaf Ebrahimi finalize_deplibs="$deplib $finalize_deplibs" 7984*22dc650dSSadaf Ebrahimi else 7985*22dc650dSSadaf Ebrahimi deplibs="$deplib $deplibs" 7986*22dc650dSSadaf Ebrahimi if test lib = "$linkmode"; then 7987*22dc650dSSadaf Ebrahimi case "$new_inherited_linker_flags " in 7988*22dc650dSSadaf Ebrahimi *" $deplib "*) ;; 7989*22dc650dSSadaf Ebrahimi * ) func_append new_inherited_linker_flags " $deplib" ;; 7990*22dc650dSSadaf Ebrahimi esac 7991*22dc650dSSadaf Ebrahimi fi 7992*22dc650dSSadaf Ebrahimi fi 7993*22dc650dSSadaf Ebrahimi continue 7994*22dc650dSSadaf Ebrahimi ;; 7995*22dc650dSSadaf Ebrahimi -L*) 7996*22dc650dSSadaf Ebrahimi case $linkmode in 7997*22dc650dSSadaf Ebrahimi lib) 7998*22dc650dSSadaf Ebrahimi deplibs="$deplib $deplibs" 7999*22dc650dSSadaf Ebrahimi test conv = "$pass" && continue 8000*22dc650dSSadaf Ebrahimi newdependency_libs="$deplib $newdependency_libs" 8001*22dc650dSSadaf Ebrahimi func_stripname '-L' '' "$deplib" 8002*22dc650dSSadaf Ebrahimi func_resolve_sysroot "$func_stripname_result" 8003*22dc650dSSadaf Ebrahimi func_append newlib_search_path " $func_resolve_sysroot_result" 8004*22dc650dSSadaf Ebrahimi ;; 8005*22dc650dSSadaf Ebrahimi prog) 8006*22dc650dSSadaf Ebrahimi if test conv = "$pass"; then 8007*22dc650dSSadaf Ebrahimi deplibs="$deplib $deplibs" 8008*22dc650dSSadaf Ebrahimi continue 8009*22dc650dSSadaf Ebrahimi fi 8010*22dc650dSSadaf Ebrahimi if test scan = "$pass"; then 8011*22dc650dSSadaf Ebrahimi deplibs="$deplib $deplibs" 8012*22dc650dSSadaf Ebrahimi else 8013*22dc650dSSadaf Ebrahimi compile_deplibs="$deplib $compile_deplibs" 8014*22dc650dSSadaf Ebrahimi finalize_deplibs="$deplib $finalize_deplibs" 8015*22dc650dSSadaf Ebrahimi fi 8016*22dc650dSSadaf Ebrahimi func_stripname '-L' '' "$deplib" 8017*22dc650dSSadaf Ebrahimi func_resolve_sysroot "$func_stripname_result" 8018*22dc650dSSadaf Ebrahimi func_append newlib_search_path " $func_resolve_sysroot_result" 8019*22dc650dSSadaf Ebrahimi ;; 8020*22dc650dSSadaf Ebrahimi *) 8021*22dc650dSSadaf Ebrahimi func_warning "'-L' is ignored for archives/objects" 8022*22dc650dSSadaf Ebrahimi ;; 8023*22dc650dSSadaf Ebrahimi esac # linkmode 8024*22dc650dSSadaf Ebrahimi continue 8025*22dc650dSSadaf Ebrahimi ;; # -L 8026*22dc650dSSadaf Ebrahimi -R*) 8027*22dc650dSSadaf Ebrahimi if test link = "$pass"; then 8028*22dc650dSSadaf Ebrahimi func_stripname '-R' '' "$deplib" 8029*22dc650dSSadaf Ebrahimi func_resolve_sysroot "$func_stripname_result" 8030*22dc650dSSadaf Ebrahimi dir=$func_resolve_sysroot_result 8031*22dc650dSSadaf Ebrahimi # Make sure the xrpath contains only unique directories. 8032*22dc650dSSadaf Ebrahimi case "$xrpath " in 8033*22dc650dSSadaf Ebrahimi *" $dir "*) ;; 8034*22dc650dSSadaf Ebrahimi *) func_append xrpath " $dir" ;; 8035*22dc650dSSadaf Ebrahimi esac 8036*22dc650dSSadaf Ebrahimi fi 8037*22dc650dSSadaf Ebrahimi deplibs="$deplib $deplibs" 8038*22dc650dSSadaf Ebrahimi continue 8039*22dc650dSSadaf Ebrahimi ;; 8040*22dc650dSSadaf Ebrahimi *.la) 8041*22dc650dSSadaf Ebrahimi func_resolve_sysroot "$deplib" 8042*22dc650dSSadaf Ebrahimi lib=$func_resolve_sysroot_result 8043*22dc650dSSadaf Ebrahimi ;; 8044*22dc650dSSadaf Ebrahimi *.$libext) 8045*22dc650dSSadaf Ebrahimi if test conv = "$pass"; then 8046*22dc650dSSadaf Ebrahimi deplibs="$deplib $deplibs" 8047*22dc650dSSadaf Ebrahimi continue 8048*22dc650dSSadaf Ebrahimi fi 8049*22dc650dSSadaf Ebrahimi case $linkmode in 8050*22dc650dSSadaf Ebrahimi lib) 8051*22dc650dSSadaf Ebrahimi # Linking convenience modules into shared libraries is allowed, 8052*22dc650dSSadaf Ebrahimi # but linking other static libraries is non-portable. 8053*22dc650dSSadaf Ebrahimi case " $dlpreconveniencelibs " in 8054*22dc650dSSadaf Ebrahimi *" $deplib "*) ;; 8055*22dc650dSSadaf Ebrahimi *) 8056*22dc650dSSadaf Ebrahimi valid_a_lib=false 8057*22dc650dSSadaf Ebrahimi case $deplibs_check_method in 8058*22dc650dSSadaf Ebrahimi match_pattern*) 8059*22dc650dSSadaf Ebrahimi set dummy $deplibs_check_method; shift 8060*22dc650dSSadaf Ebrahimi match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 8061*22dc650dSSadaf Ebrahimi if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 8062*22dc650dSSadaf Ebrahimi | $EGREP "$match_pattern_regex" > /dev/null; then 8063*22dc650dSSadaf Ebrahimi valid_a_lib=: 8064*22dc650dSSadaf Ebrahimi fi 8065*22dc650dSSadaf Ebrahimi ;; 8066*22dc650dSSadaf Ebrahimi pass_all) 8067*22dc650dSSadaf Ebrahimi valid_a_lib=: 8068*22dc650dSSadaf Ebrahimi ;; 8069*22dc650dSSadaf Ebrahimi esac 8070*22dc650dSSadaf Ebrahimi if $valid_a_lib; then 8071*22dc650dSSadaf Ebrahimi echo 8072*22dc650dSSadaf Ebrahimi $ECHO "*** Warning: Linking the shared library $output against the" 8073*22dc650dSSadaf Ebrahimi $ECHO "*** static library $deplib is not portable!" 8074*22dc650dSSadaf Ebrahimi deplibs="$deplib $deplibs" 8075*22dc650dSSadaf Ebrahimi else 8076*22dc650dSSadaf Ebrahimi echo 8077*22dc650dSSadaf Ebrahimi $ECHO "*** Warning: Trying to link with static lib archive $deplib." 8078*22dc650dSSadaf Ebrahimi echo "*** I have the capability to make that library automatically link in when" 8079*22dc650dSSadaf Ebrahimi echo "*** you link to this library. But I can only do this if you have a" 8080*22dc650dSSadaf Ebrahimi echo "*** shared version of the library, which you do not appear to have" 8081*22dc650dSSadaf Ebrahimi echo "*** because the file extensions .$libext of this argument makes me believe" 8082*22dc650dSSadaf Ebrahimi echo "*** that it is just a static archive that I should not use here." 8083*22dc650dSSadaf Ebrahimi fi 8084*22dc650dSSadaf Ebrahimi ;; 8085*22dc650dSSadaf Ebrahimi esac 8086*22dc650dSSadaf Ebrahimi continue 8087*22dc650dSSadaf Ebrahimi ;; 8088*22dc650dSSadaf Ebrahimi prog) 8089*22dc650dSSadaf Ebrahimi if test link != "$pass"; then 8090*22dc650dSSadaf Ebrahimi deplibs="$deplib $deplibs" 8091*22dc650dSSadaf Ebrahimi else 8092*22dc650dSSadaf Ebrahimi compile_deplibs="$deplib $compile_deplibs" 8093*22dc650dSSadaf Ebrahimi finalize_deplibs="$deplib $finalize_deplibs" 8094*22dc650dSSadaf Ebrahimi fi 8095*22dc650dSSadaf Ebrahimi continue 8096*22dc650dSSadaf Ebrahimi ;; 8097*22dc650dSSadaf Ebrahimi esac # linkmode 8098*22dc650dSSadaf Ebrahimi ;; # *.$libext 8099*22dc650dSSadaf Ebrahimi *.lo | *.$objext) 8100*22dc650dSSadaf Ebrahimi if test conv = "$pass"; then 8101*22dc650dSSadaf Ebrahimi deplibs="$deplib $deplibs" 8102*22dc650dSSadaf Ebrahimi elif test prog = "$linkmode"; then 8103*22dc650dSSadaf Ebrahimi if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then 8104*22dc650dSSadaf Ebrahimi # If there is no dlopen support or we're linking statically, 8105*22dc650dSSadaf Ebrahimi # we need to preload. 8106*22dc650dSSadaf Ebrahimi func_append newdlprefiles " $deplib" 8107*22dc650dSSadaf Ebrahimi compile_deplibs="$deplib $compile_deplibs" 8108*22dc650dSSadaf Ebrahimi finalize_deplibs="$deplib $finalize_deplibs" 8109*22dc650dSSadaf Ebrahimi else 8110*22dc650dSSadaf Ebrahimi func_append newdlfiles " $deplib" 8111*22dc650dSSadaf Ebrahimi fi 8112*22dc650dSSadaf Ebrahimi fi 8113*22dc650dSSadaf Ebrahimi continue 8114*22dc650dSSadaf Ebrahimi ;; 8115*22dc650dSSadaf Ebrahimi %DEPLIBS%) 8116*22dc650dSSadaf Ebrahimi alldeplibs=: 8117*22dc650dSSadaf Ebrahimi continue 8118*22dc650dSSadaf Ebrahimi ;; 8119*22dc650dSSadaf Ebrahimi esac # case $deplib 8120*22dc650dSSadaf Ebrahimi 8121*22dc650dSSadaf Ebrahimi $found || test -f "$lib" \ 8122*22dc650dSSadaf Ebrahimi || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" 8123*22dc650dSSadaf Ebrahimi 8124*22dc650dSSadaf Ebrahimi # Check to see that this really is a libtool archive. 8125*22dc650dSSadaf Ebrahimi func_lalib_unsafe_p "$lib" \ 8126*22dc650dSSadaf Ebrahimi || func_fatal_error "'$lib' is not a valid libtool archive" 8127*22dc650dSSadaf Ebrahimi 8128*22dc650dSSadaf Ebrahimi func_dirname "$lib" "" "." 8129*22dc650dSSadaf Ebrahimi ladir=$func_dirname_result 8130*22dc650dSSadaf Ebrahimi 8131*22dc650dSSadaf Ebrahimi dlname= 8132*22dc650dSSadaf Ebrahimi dlopen= 8133*22dc650dSSadaf Ebrahimi dlpreopen= 8134*22dc650dSSadaf Ebrahimi libdir= 8135*22dc650dSSadaf Ebrahimi library_names= 8136*22dc650dSSadaf Ebrahimi old_library= 8137*22dc650dSSadaf Ebrahimi inherited_linker_flags= 8138*22dc650dSSadaf Ebrahimi # If the library was installed with an old release of libtool, 8139*22dc650dSSadaf Ebrahimi # it will not redefine variables installed, or shouldnotlink 8140*22dc650dSSadaf Ebrahimi installed=yes 8141*22dc650dSSadaf Ebrahimi shouldnotlink=no 8142*22dc650dSSadaf Ebrahimi avoidtemprpath= 8143*22dc650dSSadaf Ebrahimi 8144*22dc650dSSadaf Ebrahimi 8145*22dc650dSSadaf Ebrahimi # Read the .la file 8146*22dc650dSSadaf Ebrahimi func_source "$lib" 8147*22dc650dSSadaf Ebrahimi 8148*22dc650dSSadaf Ebrahimi # Convert "-framework foo" to "foo.ltframework" 8149*22dc650dSSadaf Ebrahimi if test -n "$inherited_linker_flags"; then 8150*22dc650dSSadaf Ebrahimi tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 8151*22dc650dSSadaf Ebrahimi for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 8152*22dc650dSSadaf Ebrahimi case " $new_inherited_linker_flags " in 8153*22dc650dSSadaf Ebrahimi *" $tmp_inherited_linker_flag "*) ;; 8154*22dc650dSSadaf Ebrahimi *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 8155*22dc650dSSadaf Ebrahimi esac 8156*22dc650dSSadaf Ebrahimi done 8157*22dc650dSSadaf Ebrahimi fi 8158*22dc650dSSadaf Ebrahimi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8159*22dc650dSSadaf Ebrahimi if test lib,link = "$linkmode,$pass" || 8160*22dc650dSSadaf Ebrahimi test prog,scan = "$linkmode,$pass" || 8161*22dc650dSSadaf Ebrahimi { test prog != "$linkmode" && test lib != "$linkmode"; }; then 8162*22dc650dSSadaf Ebrahimi test -n "$dlopen" && func_append dlfiles " $dlopen" 8163*22dc650dSSadaf Ebrahimi test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 8164*22dc650dSSadaf Ebrahimi fi 8165*22dc650dSSadaf Ebrahimi 8166*22dc650dSSadaf Ebrahimi if test conv = "$pass"; then 8167*22dc650dSSadaf Ebrahimi # Only check for convenience libraries 8168*22dc650dSSadaf Ebrahimi deplibs="$lib $deplibs" 8169*22dc650dSSadaf Ebrahimi if test -z "$libdir"; then 8170*22dc650dSSadaf Ebrahimi if test -z "$old_library"; then 8171*22dc650dSSadaf Ebrahimi func_fatal_error "cannot find name of link library for '$lib'" 8172*22dc650dSSadaf Ebrahimi fi 8173*22dc650dSSadaf Ebrahimi # It is a libtool convenience library, so add in its objects. 8174*22dc650dSSadaf Ebrahimi func_append convenience " $ladir/$objdir/$old_library" 8175*22dc650dSSadaf Ebrahimi func_append old_convenience " $ladir/$objdir/$old_library" 8176*22dc650dSSadaf Ebrahimi elif test prog != "$linkmode" && test lib != "$linkmode"; then 8177*22dc650dSSadaf Ebrahimi func_fatal_error "'$lib' is not a convenience library" 8178*22dc650dSSadaf Ebrahimi fi 8179*22dc650dSSadaf Ebrahimi tmp_libs= 8180*22dc650dSSadaf Ebrahimi for deplib in $dependency_libs; do 8181*22dc650dSSadaf Ebrahimi deplibs="$deplib $deplibs" 8182*22dc650dSSadaf Ebrahimi if $opt_preserve_dup_deps; then 8183*22dc650dSSadaf Ebrahimi case "$tmp_libs " in 8184*22dc650dSSadaf Ebrahimi *" $deplib "*) func_append specialdeplibs " $deplib" ;; 8185*22dc650dSSadaf Ebrahimi esac 8186*22dc650dSSadaf Ebrahimi fi 8187*22dc650dSSadaf Ebrahimi func_append tmp_libs " $deplib" 8188*22dc650dSSadaf Ebrahimi done 8189*22dc650dSSadaf Ebrahimi continue 8190*22dc650dSSadaf Ebrahimi fi # $pass = conv 8191*22dc650dSSadaf Ebrahimi 8192*22dc650dSSadaf Ebrahimi 8193*22dc650dSSadaf Ebrahimi # Get the name of the library we link against. 8194*22dc650dSSadaf Ebrahimi linklib= 8195*22dc650dSSadaf Ebrahimi if test -n "$old_library" && 8196*22dc650dSSadaf Ebrahimi { test yes = "$prefer_static_libs" || 8197*22dc650dSSadaf Ebrahimi test built,no = "$prefer_static_libs,$installed"; }; then 8198*22dc650dSSadaf Ebrahimi linklib=$old_library 8199*22dc650dSSadaf Ebrahimi else 8200*22dc650dSSadaf Ebrahimi for l in $old_library $library_names; do 8201*22dc650dSSadaf Ebrahimi linklib=$l 8202*22dc650dSSadaf Ebrahimi done 8203*22dc650dSSadaf Ebrahimi fi 8204*22dc650dSSadaf Ebrahimi if test -z "$linklib"; then 8205*22dc650dSSadaf Ebrahimi func_fatal_error "cannot find name of link library for '$lib'" 8206*22dc650dSSadaf Ebrahimi fi 8207*22dc650dSSadaf Ebrahimi 8208*22dc650dSSadaf Ebrahimi # This library was specified with -dlopen. 8209*22dc650dSSadaf Ebrahimi if test dlopen = "$pass"; then 8210*22dc650dSSadaf Ebrahimi test -z "$libdir" \ 8211*22dc650dSSadaf Ebrahimi && func_fatal_error "cannot -dlopen a convenience library: '$lib'" 8212*22dc650dSSadaf Ebrahimi if test -z "$dlname" || 8213*22dc650dSSadaf Ebrahimi test yes != "$dlopen_support" || 8214*22dc650dSSadaf Ebrahimi test no = "$build_libtool_libs" 8215*22dc650dSSadaf Ebrahimi then 8216*22dc650dSSadaf Ebrahimi # If there is no dlname, no dlopen support or we're linking 8217*22dc650dSSadaf Ebrahimi # statically, we need to preload. We also need to preload any 8218*22dc650dSSadaf Ebrahimi # dependent libraries so libltdl's deplib preloader doesn't 8219*22dc650dSSadaf Ebrahimi # bomb out in the load deplibs phase. 8220*22dc650dSSadaf Ebrahimi func_append dlprefiles " $lib $dependency_libs" 8221*22dc650dSSadaf Ebrahimi else 8222*22dc650dSSadaf Ebrahimi func_append newdlfiles " $lib" 8223*22dc650dSSadaf Ebrahimi fi 8224*22dc650dSSadaf Ebrahimi continue 8225*22dc650dSSadaf Ebrahimi fi # $pass = dlopen 8226*22dc650dSSadaf Ebrahimi 8227*22dc650dSSadaf Ebrahimi # We need an absolute path. 8228*22dc650dSSadaf Ebrahimi case $ladir in 8229*22dc650dSSadaf Ebrahimi [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; 8230*22dc650dSSadaf Ebrahimi *) 8231*22dc650dSSadaf Ebrahimi abs_ladir=`cd "$ladir" && pwd` 8232*22dc650dSSadaf Ebrahimi if test -z "$abs_ladir"; then 8233*22dc650dSSadaf Ebrahimi func_warning "cannot determine absolute directory name of '$ladir'" 8234*22dc650dSSadaf Ebrahimi func_warning "passing it literally to the linker, although it might fail" 8235*22dc650dSSadaf Ebrahimi abs_ladir=$ladir 8236*22dc650dSSadaf Ebrahimi fi 8237*22dc650dSSadaf Ebrahimi ;; 8238*22dc650dSSadaf Ebrahimi esac 8239*22dc650dSSadaf Ebrahimi func_basename "$lib" 8240*22dc650dSSadaf Ebrahimi laname=$func_basename_result 8241*22dc650dSSadaf Ebrahimi 8242*22dc650dSSadaf Ebrahimi # Find the relevant object directory and library name. 8243*22dc650dSSadaf Ebrahimi if test yes = "$installed"; then 8244*22dc650dSSadaf Ebrahimi if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 8245*22dc650dSSadaf Ebrahimi func_warning "library '$lib' was moved." 8246*22dc650dSSadaf Ebrahimi dir=$ladir 8247*22dc650dSSadaf Ebrahimi absdir=$abs_ladir 8248*22dc650dSSadaf Ebrahimi libdir=$abs_ladir 8249*22dc650dSSadaf Ebrahimi else 8250*22dc650dSSadaf Ebrahimi dir=$lt_sysroot$libdir 8251*22dc650dSSadaf Ebrahimi absdir=$lt_sysroot$libdir 8252*22dc650dSSadaf Ebrahimi fi 8253*22dc650dSSadaf Ebrahimi test yes = "$hardcode_automatic" && avoidtemprpath=yes 8254*22dc650dSSadaf Ebrahimi else 8255*22dc650dSSadaf Ebrahimi if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 8256*22dc650dSSadaf Ebrahimi dir=$ladir 8257*22dc650dSSadaf Ebrahimi absdir=$abs_ladir 8258*22dc650dSSadaf Ebrahimi # Remove this search path later 8259*22dc650dSSadaf Ebrahimi func_append notinst_path " $abs_ladir" 8260*22dc650dSSadaf Ebrahimi else 8261*22dc650dSSadaf Ebrahimi dir=$ladir/$objdir 8262*22dc650dSSadaf Ebrahimi absdir=$abs_ladir/$objdir 8263*22dc650dSSadaf Ebrahimi # Remove this search path later 8264*22dc650dSSadaf Ebrahimi func_append notinst_path " $abs_ladir" 8265*22dc650dSSadaf Ebrahimi fi 8266*22dc650dSSadaf Ebrahimi fi # $installed = yes 8267*22dc650dSSadaf Ebrahimi func_stripname 'lib' '.la' "$laname" 8268*22dc650dSSadaf Ebrahimi name=$func_stripname_result 8269*22dc650dSSadaf Ebrahimi 8270*22dc650dSSadaf Ebrahimi # This library was specified with -dlpreopen. 8271*22dc650dSSadaf Ebrahimi if test dlpreopen = "$pass"; then 8272*22dc650dSSadaf Ebrahimi if test -z "$libdir" && test prog = "$linkmode"; then 8273*22dc650dSSadaf Ebrahimi func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" 8274*22dc650dSSadaf Ebrahimi fi 8275*22dc650dSSadaf Ebrahimi case $host in 8276*22dc650dSSadaf Ebrahimi # special handling for platforms with PE-DLLs. 8277*22dc650dSSadaf Ebrahimi *cygwin* | *mingw* | *cegcc* ) 8278*22dc650dSSadaf Ebrahimi # Linker will automatically link against shared library if both 8279*22dc650dSSadaf Ebrahimi # static and shared are present. Therefore, ensure we extract 8280*22dc650dSSadaf Ebrahimi # symbols from the import library if a shared library is present 8281*22dc650dSSadaf Ebrahimi # (otherwise, the dlopen module name will be incorrect). We do 8282*22dc650dSSadaf Ebrahimi # this by putting the import library name into $newdlprefiles. 8283*22dc650dSSadaf Ebrahimi # We recover the dlopen module name by 'saving' the la file 8284*22dc650dSSadaf Ebrahimi # name in a special purpose variable, and (later) extracting the 8285*22dc650dSSadaf Ebrahimi # dlname from the la file. 8286*22dc650dSSadaf Ebrahimi if test -n "$dlname"; then 8287*22dc650dSSadaf Ebrahimi func_tr_sh "$dir/$linklib" 8288*22dc650dSSadaf Ebrahimi eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 8289*22dc650dSSadaf Ebrahimi func_append newdlprefiles " $dir/$linklib" 8290*22dc650dSSadaf Ebrahimi else 8291*22dc650dSSadaf Ebrahimi func_append newdlprefiles " $dir/$old_library" 8292*22dc650dSSadaf Ebrahimi # Keep a list of preopened convenience libraries to check 8293*22dc650dSSadaf Ebrahimi # that they are being used correctly in the link pass. 8294*22dc650dSSadaf Ebrahimi test -z "$libdir" && \ 8295*22dc650dSSadaf Ebrahimi func_append dlpreconveniencelibs " $dir/$old_library" 8296*22dc650dSSadaf Ebrahimi fi 8297*22dc650dSSadaf Ebrahimi ;; 8298*22dc650dSSadaf Ebrahimi * ) 8299*22dc650dSSadaf Ebrahimi # Prefer using a static library (so that no silly _DYNAMIC symbols 8300*22dc650dSSadaf Ebrahimi # are required to link). 8301*22dc650dSSadaf Ebrahimi if test -n "$old_library"; then 8302*22dc650dSSadaf Ebrahimi func_append newdlprefiles " $dir/$old_library" 8303*22dc650dSSadaf Ebrahimi # Keep a list of preopened convenience libraries to check 8304*22dc650dSSadaf Ebrahimi # that they are being used correctly in the link pass. 8305*22dc650dSSadaf Ebrahimi test -z "$libdir" && \ 8306*22dc650dSSadaf Ebrahimi func_append dlpreconveniencelibs " $dir/$old_library" 8307*22dc650dSSadaf Ebrahimi # Otherwise, use the dlname, so that lt_dlopen finds it. 8308*22dc650dSSadaf Ebrahimi elif test -n "$dlname"; then 8309*22dc650dSSadaf Ebrahimi func_append newdlprefiles " $dir/$dlname" 8310*22dc650dSSadaf Ebrahimi else 8311*22dc650dSSadaf Ebrahimi func_append newdlprefiles " $dir/$linklib" 8312*22dc650dSSadaf Ebrahimi fi 8313*22dc650dSSadaf Ebrahimi ;; 8314*22dc650dSSadaf Ebrahimi esac 8315*22dc650dSSadaf Ebrahimi fi # $pass = dlpreopen 8316*22dc650dSSadaf Ebrahimi 8317*22dc650dSSadaf Ebrahimi if test -z "$libdir"; then 8318*22dc650dSSadaf Ebrahimi # Link the convenience library 8319*22dc650dSSadaf Ebrahimi if test lib = "$linkmode"; then 8320*22dc650dSSadaf Ebrahimi deplibs="$dir/$old_library $deplibs" 8321*22dc650dSSadaf Ebrahimi elif test prog,link = "$linkmode,$pass"; then 8322*22dc650dSSadaf Ebrahimi compile_deplibs="$dir/$old_library $compile_deplibs" 8323*22dc650dSSadaf Ebrahimi finalize_deplibs="$dir/$old_library $finalize_deplibs" 8324*22dc650dSSadaf Ebrahimi else 8325*22dc650dSSadaf Ebrahimi deplibs="$lib $deplibs" # used for prog,scan pass 8326*22dc650dSSadaf Ebrahimi fi 8327*22dc650dSSadaf Ebrahimi continue 8328*22dc650dSSadaf Ebrahimi fi 8329*22dc650dSSadaf Ebrahimi 8330*22dc650dSSadaf Ebrahimi 8331*22dc650dSSadaf Ebrahimi if test prog = "$linkmode" && test link != "$pass"; then 8332*22dc650dSSadaf Ebrahimi func_append newlib_search_path " $ladir" 8333*22dc650dSSadaf Ebrahimi deplibs="$lib $deplibs" 8334*22dc650dSSadaf Ebrahimi 8335*22dc650dSSadaf Ebrahimi linkalldeplibs=false 8336*22dc650dSSadaf Ebrahimi if test no != "$link_all_deplibs" || test -z "$library_names" || 8337*22dc650dSSadaf Ebrahimi test no = "$build_libtool_libs"; then 8338*22dc650dSSadaf Ebrahimi linkalldeplibs=: 8339*22dc650dSSadaf Ebrahimi fi 8340*22dc650dSSadaf Ebrahimi 8341*22dc650dSSadaf Ebrahimi tmp_libs= 8342*22dc650dSSadaf Ebrahimi for deplib in $dependency_libs; do 8343*22dc650dSSadaf Ebrahimi case $deplib in 8344*22dc650dSSadaf Ebrahimi -L*) func_stripname '-L' '' "$deplib" 8345*22dc650dSSadaf Ebrahimi func_resolve_sysroot "$func_stripname_result" 8346*22dc650dSSadaf Ebrahimi func_append newlib_search_path " $func_resolve_sysroot_result" 8347*22dc650dSSadaf Ebrahimi ;; 8348*22dc650dSSadaf Ebrahimi esac 8349*22dc650dSSadaf Ebrahimi # Need to link against all dependency_libs? 8350*22dc650dSSadaf Ebrahimi if $linkalldeplibs; then 8351*22dc650dSSadaf Ebrahimi deplibs="$deplib $deplibs" 8352*22dc650dSSadaf Ebrahimi else 8353*22dc650dSSadaf Ebrahimi # Need to hardcode shared library paths 8354*22dc650dSSadaf Ebrahimi # or/and link against static libraries 8355*22dc650dSSadaf Ebrahimi newdependency_libs="$deplib $newdependency_libs" 8356*22dc650dSSadaf Ebrahimi fi 8357*22dc650dSSadaf Ebrahimi if $opt_preserve_dup_deps; then 8358*22dc650dSSadaf Ebrahimi case "$tmp_libs " in 8359*22dc650dSSadaf Ebrahimi *" $deplib "*) func_append specialdeplibs " $deplib" ;; 8360*22dc650dSSadaf Ebrahimi esac 8361*22dc650dSSadaf Ebrahimi fi 8362*22dc650dSSadaf Ebrahimi func_append tmp_libs " $deplib" 8363*22dc650dSSadaf Ebrahimi done # for deplib 8364*22dc650dSSadaf Ebrahimi continue 8365*22dc650dSSadaf Ebrahimi fi # $linkmode = prog... 8366*22dc650dSSadaf Ebrahimi 8367*22dc650dSSadaf Ebrahimi if test prog,link = "$linkmode,$pass"; then 8368*22dc650dSSadaf Ebrahimi if test -n "$library_names" && 8369*22dc650dSSadaf Ebrahimi { { test no = "$prefer_static_libs" || 8370*22dc650dSSadaf Ebrahimi test built,yes = "$prefer_static_libs,$installed"; } || 8371*22dc650dSSadaf Ebrahimi test -z "$old_library"; }; then 8372*22dc650dSSadaf Ebrahimi # We need to hardcode the library path 8373*22dc650dSSadaf Ebrahimi if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then 8374*22dc650dSSadaf Ebrahimi # Make sure the rpath contains only unique directories. 8375*22dc650dSSadaf Ebrahimi case $temp_rpath: in 8376*22dc650dSSadaf Ebrahimi *"$absdir:"*) ;; 8377*22dc650dSSadaf Ebrahimi *) func_append temp_rpath "$absdir:" ;; 8378*22dc650dSSadaf Ebrahimi esac 8379*22dc650dSSadaf Ebrahimi fi 8380*22dc650dSSadaf Ebrahimi 8381*22dc650dSSadaf Ebrahimi # Hardcode the library path. 8382*22dc650dSSadaf Ebrahimi # Skip directories that are in the system default run-time 8383*22dc650dSSadaf Ebrahimi # search path. 8384*22dc650dSSadaf Ebrahimi case " $sys_lib_dlsearch_path " in 8385*22dc650dSSadaf Ebrahimi *" $absdir "*) ;; 8386*22dc650dSSadaf Ebrahimi *) 8387*22dc650dSSadaf Ebrahimi case "$compile_rpath " in 8388*22dc650dSSadaf Ebrahimi *" $absdir "*) ;; 8389*22dc650dSSadaf Ebrahimi *) func_append compile_rpath " $absdir" ;; 8390*22dc650dSSadaf Ebrahimi esac 8391*22dc650dSSadaf Ebrahimi ;; 8392*22dc650dSSadaf Ebrahimi esac 8393*22dc650dSSadaf Ebrahimi case " $sys_lib_dlsearch_path " in 8394*22dc650dSSadaf Ebrahimi *" $libdir "*) ;; 8395*22dc650dSSadaf Ebrahimi *) 8396*22dc650dSSadaf Ebrahimi case "$finalize_rpath " in 8397*22dc650dSSadaf Ebrahimi *" $libdir "*) ;; 8398*22dc650dSSadaf Ebrahimi *) func_append finalize_rpath " $libdir" ;; 8399*22dc650dSSadaf Ebrahimi esac 8400*22dc650dSSadaf Ebrahimi ;; 8401*22dc650dSSadaf Ebrahimi esac 8402*22dc650dSSadaf Ebrahimi fi # $linkmode,$pass = prog,link... 8403*22dc650dSSadaf Ebrahimi 8404*22dc650dSSadaf Ebrahimi if $alldeplibs && 8405*22dc650dSSadaf Ebrahimi { test pass_all = "$deplibs_check_method" || 8406*22dc650dSSadaf Ebrahimi { test yes = "$build_libtool_libs" && 8407*22dc650dSSadaf Ebrahimi test -n "$library_names"; }; }; then 8408*22dc650dSSadaf Ebrahimi # We only need to search for static libraries 8409*22dc650dSSadaf Ebrahimi continue 8410*22dc650dSSadaf Ebrahimi fi 8411*22dc650dSSadaf Ebrahimi fi 8412*22dc650dSSadaf Ebrahimi 8413*22dc650dSSadaf Ebrahimi link_static=no # Whether the deplib will be linked statically 8414*22dc650dSSadaf Ebrahimi use_static_libs=$prefer_static_libs 8415*22dc650dSSadaf Ebrahimi if test built = "$use_static_libs" && test yes = "$installed"; then 8416*22dc650dSSadaf Ebrahimi use_static_libs=no 8417*22dc650dSSadaf Ebrahimi fi 8418*22dc650dSSadaf Ebrahimi if test -n "$library_names" && 8419*22dc650dSSadaf Ebrahimi { test no = "$use_static_libs" || test -z "$old_library"; }; then 8420*22dc650dSSadaf Ebrahimi case $host in 8421*22dc650dSSadaf Ebrahimi *cygwin* | *mingw* | *cegcc* | *os2*) 8422*22dc650dSSadaf Ebrahimi # No point in relinking DLLs because paths are not encoded 8423*22dc650dSSadaf Ebrahimi func_append notinst_deplibs " $lib" 8424*22dc650dSSadaf Ebrahimi need_relink=no 8425*22dc650dSSadaf Ebrahimi ;; 8426*22dc650dSSadaf Ebrahimi *) 8427*22dc650dSSadaf Ebrahimi if test no = "$installed"; then 8428*22dc650dSSadaf Ebrahimi func_append notinst_deplibs " $lib" 8429*22dc650dSSadaf Ebrahimi need_relink=yes 8430*22dc650dSSadaf Ebrahimi fi 8431*22dc650dSSadaf Ebrahimi ;; 8432*22dc650dSSadaf Ebrahimi esac 8433*22dc650dSSadaf Ebrahimi # This is a shared library 8434*22dc650dSSadaf Ebrahimi 8435*22dc650dSSadaf Ebrahimi # Warn about portability, can't link against -module's on some 8436*22dc650dSSadaf Ebrahimi # systems (darwin). Don't bleat about dlopened modules though! 8437*22dc650dSSadaf Ebrahimi dlopenmodule= 8438*22dc650dSSadaf Ebrahimi for dlpremoduletest in $dlprefiles; do 8439*22dc650dSSadaf Ebrahimi if test "X$dlpremoduletest" = "X$lib"; then 8440*22dc650dSSadaf Ebrahimi dlopenmodule=$dlpremoduletest 8441*22dc650dSSadaf Ebrahimi break 8442*22dc650dSSadaf Ebrahimi fi 8443*22dc650dSSadaf Ebrahimi done 8444*22dc650dSSadaf Ebrahimi if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then 8445*22dc650dSSadaf Ebrahimi echo 8446*22dc650dSSadaf Ebrahimi if test prog = "$linkmode"; then 8447*22dc650dSSadaf Ebrahimi $ECHO "*** Warning: Linking the executable $output against the loadable module" 8448*22dc650dSSadaf Ebrahimi else 8449*22dc650dSSadaf Ebrahimi $ECHO "*** Warning: Linking the shared library $output against the loadable module" 8450*22dc650dSSadaf Ebrahimi fi 8451*22dc650dSSadaf Ebrahimi $ECHO "*** $linklib is not portable!" 8452*22dc650dSSadaf Ebrahimi fi 8453*22dc650dSSadaf Ebrahimi if test lib = "$linkmode" && 8454*22dc650dSSadaf Ebrahimi test yes = "$hardcode_into_libs"; then 8455*22dc650dSSadaf Ebrahimi # Hardcode the library path. 8456*22dc650dSSadaf Ebrahimi # Skip directories that are in the system default run-time 8457*22dc650dSSadaf Ebrahimi # search path. 8458*22dc650dSSadaf Ebrahimi case " $sys_lib_dlsearch_path " in 8459*22dc650dSSadaf Ebrahimi *" $absdir "*) ;; 8460*22dc650dSSadaf Ebrahimi *) 8461*22dc650dSSadaf Ebrahimi case "$compile_rpath " in 8462*22dc650dSSadaf Ebrahimi *" $absdir "*) ;; 8463*22dc650dSSadaf Ebrahimi *) func_append compile_rpath " $absdir" ;; 8464*22dc650dSSadaf Ebrahimi esac 8465*22dc650dSSadaf Ebrahimi ;; 8466*22dc650dSSadaf Ebrahimi esac 8467*22dc650dSSadaf Ebrahimi case " $sys_lib_dlsearch_path " in 8468*22dc650dSSadaf Ebrahimi *" $libdir "*) ;; 8469*22dc650dSSadaf Ebrahimi *) 8470*22dc650dSSadaf Ebrahimi case "$finalize_rpath " in 8471*22dc650dSSadaf Ebrahimi *" $libdir "*) ;; 8472*22dc650dSSadaf Ebrahimi *) func_append finalize_rpath " $libdir" ;; 8473*22dc650dSSadaf Ebrahimi esac 8474*22dc650dSSadaf Ebrahimi ;; 8475*22dc650dSSadaf Ebrahimi esac 8476*22dc650dSSadaf Ebrahimi fi 8477*22dc650dSSadaf Ebrahimi 8478*22dc650dSSadaf Ebrahimi if test -n "$old_archive_from_expsyms_cmds"; then 8479*22dc650dSSadaf Ebrahimi # figure out the soname 8480*22dc650dSSadaf Ebrahimi set dummy $library_names 8481*22dc650dSSadaf Ebrahimi shift 8482*22dc650dSSadaf Ebrahimi realname=$1 8483*22dc650dSSadaf Ebrahimi shift 8484*22dc650dSSadaf Ebrahimi libname=`eval "\\$ECHO \"$libname_spec\""` 8485*22dc650dSSadaf Ebrahimi # use dlname if we got it. it's perfectly good, no? 8486*22dc650dSSadaf Ebrahimi if test -n "$dlname"; then 8487*22dc650dSSadaf Ebrahimi soname=$dlname 8488*22dc650dSSadaf Ebrahimi elif test -n "$soname_spec"; then 8489*22dc650dSSadaf Ebrahimi # bleh windows 8490*22dc650dSSadaf Ebrahimi case $host in 8491*22dc650dSSadaf Ebrahimi *cygwin* | mingw* | *cegcc* | *os2*) 8492*22dc650dSSadaf Ebrahimi func_arith $current - $age 8493*22dc650dSSadaf Ebrahimi major=$func_arith_result 8494*22dc650dSSadaf Ebrahimi versuffix=-$major 8495*22dc650dSSadaf Ebrahimi ;; 8496*22dc650dSSadaf Ebrahimi esac 8497*22dc650dSSadaf Ebrahimi eval soname=\"$soname_spec\" 8498*22dc650dSSadaf Ebrahimi else 8499*22dc650dSSadaf Ebrahimi soname=$realname 8500*22dc650dSSadaf Ebrahimi fi 8501*22dc650dSSadaf Ebrahimi 8502*22dc650dSSadaf Ebrahimi # Make a new name for the extract_expsyms_cmds to use 8503*22dc650dSSadaf Ebrahimi soroot=$soname 8504*22dc650dSSadaf Ebrahimi func_basename "$soroot" 8505*22dc650dSSadaf Ebrahimi soname=$func_basename_result 8506*22dc650dSSadaf Ebrahimi func_stripname 'lib' '.dll' "$soname" 8507*22dc650dSSadaf Ebrahimi newlib=libimp-$func_stripname_result.a 8508*22dc650dSSadaf Ebrahimi 8509*22dc650dSSadaf Ebrahimi # If the library has no export list, then create one now 8510*22dc650dSSadaf Ebrahimi if test -f "$output_objdir/$soname-def"; then : 8511*22dc650dSSadaf Ebrahimi else 8512*22dc650dSSadaf Ebrahimi func_verbose "extracting exported symbol list from '$soname'" 8513*22dc650dSSadaf Ebrahimi func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 8514*22dc650dSSadaf Ebrahimi fi 8515*22dc650dSSadaf Ebrahimi 8516*22dc650dSSadaf Ebrahimi # Create $newlib 8517*22dc650dSSadaf Ebrahimi if test -f "$output_objdir/$newlib"; then :; else 8518*22dc650dSSadaf Ebrahimi func_verbose "generating import library for '$soname'" 8519*22dc650dSSadaf Ebrahimi func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 8520*22dc650dSSadaf Ebrahimi fi 8521*22dc650dSSadaf Ebrahimi # make sure the library variables are pointing to the new library 8522*22dc650dSSadaf Ebrahimi dir=$output_objdir 8523*22dc650dSSadaf Ebrahimi linklib=$newlib 8524*22dc650dSSadaf Ebrahimi fi # test -n "$old_archive_from_expsyms_cmds" 8525*22dc650dSSadaf Ebrahimi 8526*22dc650dSSadaf Ebrahimi if test prog = "$linkmode" || test relink != "$opt_mode"; then 8527*22dc650dSSadaf Ebrahimi add_shlibpath= 8528*22dc650dSSadaf Ebrahimi add_dir= 8529*22dc650dSSadaf Ebrahimi add= 8530*22dc650dSSadaf Ebrahimi lib_linked=yes 8531*22dc650dSSadaf Ebrahimi case $hardcode_action in 8532*22dc650dSSadaf Ebrahimi immediate | unsupported) 8533*22dc650dSSadaf Ebrahimi if test no = "$hardcode_direct"; then 8534*22dc650dSSadaf Ebrahimi add=$dir/$linklib 8535*22dc650dSSadaf Ebrahimi case $host in 8536*22dc650dSSadaf Ebrahimi *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; 8537*22dc650dSSadaf Ebrahimi *-*-sysv4*uw2*) add_dir=-L$dir ;; 8538*22dc650dSSadaf Ebrahimi *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 8539*22dc650dSSadaf Ebrahimi *-*-unixware7*) add_dir=-L$dir ;; 8540*22dc650dSSadaf Ebrahimi *-*-darwin* ) 8541*22dc650dSSadaf Ebrahimi # if the lib is a (non-dlopened) module then we cannot 8542*22dc650dSSadaf Ebrahimi # link against it, someone is ignoring the earlier warnings 8543*22dc650dSSadaf Ebrahimi if /usr/bin/file -L $add 2> /dev/null | 8544*22dc650dSSadaf Ebrahimi $GREP ": [^:]* bundle" >/dev/null; then 8545*22dc650dSSadaf Ebrahimi if test "X$dlopenmodule" != "X$lib"; then 8546*22dc650dSSadaf Ebrahimi $ECHO "*** Warning: lib $linklib is a module, not a shared library" 8547*22dc650dSSadaf Ebrahimi if test -z "$old_library"; then 8548*22dc650dSSadaf Ebrahimi echo 8549*22dc650dSSadaf Ebrahimi echo "*** And there doesn't seem to be a static archive available" 8550*22dc650dSSadaf Ebrahimi echo "*** The link will probably fail, sorry" 8551*22dc650dSSadaf Ebrahimi else 8552*22dc650dSSadaf Ebrahimi add=$dir/$old_library 8553*22dc650dSSadaf Ebrahimi fi 8554*22dc650dSSadaf Ebrahimi elif test -n "$old_library"; then 8555*22dc650dSSadaf Ebrahimi add=$dir/$old_library 8556*22dc650dSSadaf Ebrahimi fi 8557*22dc650dSSadaf Ebrahimi fi 8558*22dc650dSSadaf Ebrahimi esac 8559*22dc650dSSadaf Ebrahimi elif test no = "$hardcode_minus_L"; then 8560*22dc650dSSadaf Ebrahimi case $host in 8561*22dc650dSSadaf Ebrahimi *-*-sunos*) add_shlibpath=$dir ;; 8562*22dc650dSSadaf Ebrahimi esac 8563*22dc650dSSadaf Ebrahimi add_dir=-L$dir 8564*22dc650dSSadaf Ebrahimi add=-l$name 8565*22dc650dSSadaf Ebrahimi elif test no = "$hardcode_shlibpath_var"; then 8566*22dc650dSSadaf Ebrahimi add_shlibpath=$dir 8567*22dc650dSSadaf Ebrahimi add=-l$name 8568*22dc650dSSadaf Ebrahimi else 8569*22dc650dSSadaf Ebrahimi lib_linked=no 8570*22dc650dSSadaf Ebrahimi fi 8571*22dc650dSSadaf Ebrahimi ;; 8572*22dc650dSSadaf Ebrahimi relink) 8573*22dc650dSSadaf Ebrahimi if test yes = "$hardcode_direct" && 8574*22dc650dSSadaf Ebrahimi test no = "$hardcode_direct_absolute"; then 8575*22dc650dSSadaf Ebrahimi add=$dir/$linklib 8576*22dc650dSSadaf Ebrahimi elif test yes = "$hardcode_minus_L"; then 8577*22dc650dSSadaf Ebrahimi add_dir=-L$absdir 8578*22dc650dSSadaf Ebrahimi # Try looking first in the location we're being installed to. 8579*22dc650dSSadaf Ebrahimi if test -n "$inst_prefix_dir"; then 8580*22dc650dSSadaf Ebrahimi case $libdir in 8581*22dc650dSSadaf Ebrahimi [\\/]*) 8582*22dc650dSSadaf Ebrahimi func_append add_dir " -L$inst_prefix_dir$libdir" 8583*22dc650dSSadaf Ebrahimi ;; 8584*22dc650dSSadaf Ebrahimi esac 8585*22dc650dSSadaf Ebrahimi fi 8586*22dc650dSSadaf Ebrahimi add=-l$name 8587*22dc650dSSadaf Ebrahimi elif test yes = "$hardcode_shlibpath_var"; then 8588*22dc650dSSadaf Ebrahimi add_shlibpath=$dir 8589*22dc650dSSadaf Ebrahimi add=-l$name 8590*22dc650dSSadaf Ebrahimi else 8591*22dc650dSSadaf Ebrahimi lib_linked=no 8592*22dc650dSSadaf Ebrahimi fi 8593*22dc650dSSadaf Ebrahimi ;; 8594*22dc650dSSadaf Ebrahimi *) lib_linked=no ;; 8595*22dc650dSSadaf Ebrahimi esac 8596*22dc650dSSadaf Ebrahimi 8597*22dc650dSSadaf Ebrahimi if test yes != "$lib_linked"; then 8598*22dc650dSSadaf Ebrahimi func_fatal_configuration "unsupported hardcode properties" 8599*22dc650dSSadaf Ebrahimi fi 8600*22dc650dSSadaf Ebrahimi 8601*22dc650dSSadaf Ebrahimi if test -n "$add_shlibpath"; then 8602*22dc650dSSadaf Ebrahimi case :$compile_shlibpath: in 8603*22dc650dSSadaf Ebrahimi *":$add_shlibpath:"*) ;; 8604*22dc650dSSadaf Ebrahimi *) func_append compile_shlibpath "$add_shlibpath:" ;; 8605*22dc650dSSadaf Ebrahimi esac 8606*22dc650dSSadaf Ebrahimi fi 8607*22dc650dSSadaf Ebrahimi if test prog = "$linkmode"; then 8608*22dc650dSSadaf Ebrahimi test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 8609*22dc650dSSadaf Ebrahimi test -n "$add" && compile_deplibs="$add $compile_deplibs" 8610*22dc650dSSadaf Ebrahimi else 8611*22dc650dSSadaf Ebrahimi test -n "$add_dir" && deplibs="$add_dir $deplibs" 8612*22dc650dSSadaf Ebrahimi test -n "$add" && deplibs="$add $deplibs" 8613*22dc650dSSadaf Ebrahimi if test yes != "$hardcode_direct" && 8614*22dc650dSSadaf Ebrahimi test yes != "$hardcode_minus_L" && 8615*22dc650dSSadaf Ebrahimi test yes = "$hardcode_shlibpath_var"; then 8616*22dc650dSSadaf Ebrahimi case :$finalize_shlibpath: in 8617*22dc650dSSadaf Ebrahimi *":$libdir:"*) ;; 8618*22dc650dSSadaf Ebrahimi *) func_append finalize_shlibpath "$libdir:" ;; 8619*22dc650dSSadaf Ebrahimi esac 8620*22dc650dSSadaf Ebrahimi fi 8621*22dc650dSSadaf Ebrahimi fi 8622*22dc650dSSadaf Ebrahimi fi 8623*22dc650dSSadaf Ebrahimi 8624*22dc650dSSadaf Ebrahimi if test prog = "$linkmode" || test relink = "$opt_mode"; then 8625*22dc650dSSadaf Ebrahimi add_shlibpath= 8626*22dc650dSSadaf Ebrahimi add_dir= 8627*22dc650dSSadaf Ebrahimi add= 8628*22dc650dSSadaf Ebrahimi # Finalize command for both is simple: just hardcode it. 8629*22dc650dSSadaf Ebrahimi if test yes = "$hardcode_direct" && 8630*22dc650dSSadaf Ebrahimi test no = "$hardcode_direct_absolute"; then 8631*22dc650dSSadaf Ebrahimi add=$libdir/$linklib 8632*22dc650dSSadaf Ebrahimi elif test yes = "$hardcode_minus_L"; then 8633*22dc650dSSadaf Ebrahimi add_dir=-L$libdir 8634*22dc650dSSadaf Ebrahimi add=-l$name 8635*22dc650dSSadaf Ebrahimi elif test yes = "$hardcode_shlibpath_var"; then 8636*22dc650dSSadaf Ebrahimi case :$finalize_shlibpath: in 8637*22dc650dSSadaf Ebrahimi *":$libdir:"*) ;; 8638*22dc650dSSadaf Ebrahimi *) func_append finalize_shlibpath "$libdir:" ;; 8639*22dc650dSSadaf Ebrahimi esac 8640*22dc650dSSadaf Ebrahimi add=-l$name 8641*22dc650dSSadaf Ebrahimi elif test yes = "$hardcode_automatic"; then 8642*22dc650dSSadaf Ebrahimi if test -n "$inst_prefix_dir" && 8643*22dc650dSSadaf Ebrahimi test -f "$inst_prefix_dir$libdir/$linklib"; then 8644*22dc650dSSadaf Ebrahimi add=$inst_prefix_dir$libdir/$linklib 8645*22dc650dSSadaf Ebrahimi else 8646*22dc650dSSadaf Ebrahimi add=$libdir/$linklib 8647*22dc650dSSadaf Ebrahimi fi 8648*22dc650dSSadaf Ebrahimi else 8649*22dc650dSSadaf Ebrahimi # We cannot seem to hardcode it, guess we'll fake it. 8650*22dc650dSSadaf Ebrahimi add_dir=-L$libdir 8651*22dc650dSSadaf Ebrahimi # Try looking first in the location we're being installed to. 8652*22dc650dSSadaf Ebrahimi if test -n "$inst_prefix_dir"; then 8653*22dc650dSSadaf Ebrahimi case $libdir in 8654*22dc650dSSadaf Ebrahimi [\\/]*) 8655*22dc650dSSadaf Ebrahimi func_append add_dir " -L$inst_prefix_dir$libdir" 8656*22dc650dSSadaf Ebrahimi ;; 8657*22dc650dSSadaf Ebrahimi esac 8658*22dc650dSSadaf Ebrahimi fi 8659*22dc650dSSadaf Ebrahimi add=-l$name 8660*22dc650dSSadaf Ebrahimi fi 8661*22dc650dSSadaf Ebrahimi 8662*22dc650dSSadaf Ebrahimi if test prog = "$linkmode"; then 8663*22dc650dSSadaf Ebrahimi test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 8664*22dc650dSSadaf Ebrahimi test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 8665*22dc650dSSadaf Ebrahimi else 8666*22dc650dSSadaf Ebrahimi test -n "$add_dir" && deplibs="$add_dir $deplibs" 8667*22dc650dSSadaf Ebrahimi test -n "$add" && deplibs="$add $deplibs" 8668*22dc650dSSadaf Ebrahimi fi 8669*22dc650dSSadaf Ebrahimi fi 8670*22dc650dSSadaf Ebrahimi elif test prog = "$linkmode"; then 8671*22dc650dSSadaf Ebrahimi # Here we assume that one of hardcode_direct or hardcode_minus_L 8672*22dc650dSSadaf Ebrahimi # is not unsupported. This is valid on all known static and 8673*22dc650dSSadaf Ebrahimi # shared platforms. 8674*22dc650dSSadaf Ebrahimi if test unsupported != "$hardcode_direct"; then 8675*22dc650dSSadaf Ebrahimi test -n "$old_library" && linklib=$old_library 8676*22dc650dSSadaf Ebrahimi compile_deplibs="$dir/$linklib $compile_deplibs" 8677*22dc650dSSadaf Ebrahimi finalize_deplibs="$dir/$linklib $finalize_deplibs" 8678*22dc650dSSadaf Ebrahimi else 8679*22dc650dSSadaf Ebrahimi compile_deplibs="-l$name -L$dir $compile_deplibs" 8680*22dc650dSSadaf Ebrahimi finalize_deplibs="-l$name -L$dir $finalize_deplibs" 8681*22dc650dSSadaf Ebrahimi fi 8682*22dc650dSSadaf Ebrahimi elif test yes = "$build_libtool_libs"; then 8683*22dc650dSSadaf Ebrahimi # Not a shared library 8684*22dc650dSSadaf Ebrahimi if test pass_all != "$deplibs_check_method"; then 8685*22dc650dSSadaf Ebrahimi # We're trying link a shared library against a static one 8686*22dc650dSSadaf Ebrahimi # but the system doesn't support it. 8687*22dc650dSSadaf Ebrahimi 8688*22dc650dSSadaf Ebrahimi # Just print a warning and add the library to dependency_libs so 8689*22dc650dSSadaf Ebrahimi # that the program can be linked against the static library. 8690*22dc650dSSadaf Ebrahimi echo 8691*22dc650dSSadaf Ebrahimi $ECHO "*** Warning: This system cannot link to static lib archive $lib." 8692*22dc650dSSadaf Ebrahimi echo "*** I have the capability to make that library automatically link in when" 8693*22dc650dSSadaf Ebrahimi echo "*** you link to this library. But I can only do this if you have a" 8694*22dc650dSSadaf Ebrahimi echo "*** shared version of the library, which you do not appear to have." 8695*22dc650dSSadaf Ebrahimi if test yes = "$module"; then 8696*22dc650dSSadaf Ebrahimi echo "*** But as you try to build a module library, libtool will still create " 8697*22dc650dSSadaf Ebrahimi echo "*** a static module, that should work as long as the dlopening application" 8698*22dc650dSSadaf Ebrahimi echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 8699*22dc650dSSadaf Ebrahimi if test -z "$global_symbol_pipe"; then 8700*22dc650dSSadaf Ebrahimi echo 8701*22dc650dSSadaf Ebrahimi echo "*** However, this would only work if libtool was able to extract symbol" 8702*22dc650dSSadaf Ebrahimi echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 8703*22dc650dSSadaf Ebrahimi echo "*** not find such a program. So, this module is probably useless." 8704*22dc650dSSadaf Ebrahimi echo "*** 'nm' from GNU binutils and a full rebuild may help." 8705*22dc650dSSadaf Ebrahimi fi 8706*22dc650dSSadaf Ebrahimi if test no = "$build_old_libs"; then 8707*22dc650dSSadaf Ebrahimi build_libtool_libs=module 8708*22dc650dSSadaf Ebrahimi build_old_libs=yes 8709*22dc650dSSadaf Ebrahimi else 8710*22dc650dSSadaf Ebrahimi build_libtool_libs=no 8711*22dc650dSSadaf Ebrahimi fi 8712*22dc650dSSadaf Ebrahimi fi 8713*22dc650dSSadaf Ebrahimi else 8714*22dc650dSSadaf Ebrahimi deplibs="$dir/$old_library $deplibs" 8715*22dc650dSSadaf Ebrahimi link_static=yes 8716*22dc650dSSadaf Ebrahimi fi 8717*22dc650dSSadaf Ebrahimi fi # link shared/static library? 8718*22dc650dSSadaf Ebrahimi 8719*22dc650dSSadaf Ebrahimi if test lib = "$linkmode"; then 8720*22dc650dSSadaf Ebrahimi if test -n "$dependency_libs" && 8721*22dc650dSSadaf Ebrahimi { test yes != "$hardcode_into_libs" || 8722*22dc650dSSadaf Ebrahimi test yes = "$build_old_libs" || 8723*22dc650dSSadaf Ebrahimi test yes = "$link_static"; }; then 8724*22dc650dSSadaf Ebrahimi # Extract -R from dependency_libs 8725*22dc650dSSadaf Ebrahimi temp_deplibs= 8726*22dc650dSSadaf Ebrahimi for libdir in $dependency_libs; do 8727*22dc650dSSadaf Ebrahimi case $libdir in 8728*22dc650dSSadaf Ebrahimi -R*) func_stripname '-R' '' "$libdir" 8729*22dc650dSSadaf Ebrahimi temp_xrpath=$func_stripname_result 8730*22dc650dSSadaf Ebrahimi case " $xrpath " in 8731*22dc650dSSadaf Ebrahimi *" $temp_xrpath "*) ;; 8732*22dc650dSSadaf Ebrahimi *) func_append xrpath " $temp_xrpath";; 8733*22dc650dSSadaf Ebrahimi esac;; 8734*22dc650dSSadaf Ebrahimi *) func_append temp_deplibs " $libdir";; 8735*22dc650dSSadaf Ebrahimi esac 8736*22dc650dSSadaf Ebrahimi done 8737*22dc650dSSadaf Ebrahimi dependency_libs=$temp_deplibs 8738*22dc650dSSadaf Ebrahimi fi 8739*22dc650dSSadaf Ebrahimi 8740*22dc650dSSadaf Ebrahimi func_append newlib_search_path " $absdir" 8741*22dc650dSSadaf Ebrahimi # Link against this library 8742*22dc650dSSadaf Ebrahimi test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 8743*22dc650dSSadaf Ebrahimi # ... and its dependency_libs 8744*22dc650dSSadaf Ebrahimi tmp_libs= 8745*22dc650dSSadaf Ebrahimi for deplib in $dependency_libs; do 8746*22dc650dSSadaf Ebrahimi newdependency_libs="$deplib $newdependency_libs" 8747*22dc650dSSadaf Ebrahimi case $deplib in 8748*22dc650dSSadaf Ebrahimi -L*) func_stripname '-L' '' "$deplib" 8749*22dc650dSSadaf Ebrahimi func_resolve_sysroot "$func_stripname_result";; 8750*22dc650dSSadaf Ebrahimi *) func_resolve_sysroot "$deplib" ;; 8751*22dc650dSSadaf Ebrahimi esac 8752*22dc650dSSadaf Ebrahimi if $opt_preserve_dup_deps; then 8753*22dc650dSSadaf Ebrahimi case "$tmp_libs " in 8754*22dc650dSSadaf Ebrahimi *" $func_resolve_sysroot_result "*) 8755*22dc650dSSadaf Ebrahimi func_append specialdeplibs " $func_resolve_sysroot_result" ;; 8756*22dc650dSSadaf Ebrahimi esac 8757*22dc650dSSadaf Ebrahimi fi 8758*22dc650dSSadaf Ebrahimi func_append tmp_libs " $func_resolve_sysroot_result" 8759*22dc650dSSadaf Ebrahimi done 8760*22dc650dSSadaf Ebrahimi 8761*22dc650dSSadaf Ebrahimi if test no != "$link_all_deplibs"; then 8762*22dc650dSSadaf Ebrahimi # Add the search paths of all dependency libraries 8763*22dc650dSSadaf Ebrahimi for deplib in $dependency_libs; do 8764*22dc650dSSadaf Ebrahimi path= 8765*22dc650dSSadaf Ebrahimi case $deplib in 8766*22dc650dSSadaf Ebrahimi -L*) path=$deplib ;; 8767*22dc650dSSadaf Ebrahimi *.la) 8768*22dc650dSSadaf Ebrahimi func_resolve_sysroot "$deplib" 8769*22dc650dSSadaf Ebrahimi deplib=$func_resolve_sysroot_result 8770*22dc650dSSadaf Ebrahimi func_dirname "$deplib" "" "." 8771*22dc650dSSadaf Ebrahimi dir=$func_dirname_result 8772*22dc650dSSadaf Ebrahimi # We need an absolute path. 8773*22dc650dSSadaf Ebrahimi case $dir in 8774*22dc650dSSadaf Ebrahimi [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; 8775*22dc650dSSadaf Ebrahimi *) 8776*22dc650dSSadaf Ebrahimi absdir=`cd "$dir" && pwd` 8777*22dc650dSSadaf Ebrahimi if test -z "$absdir"; then 8778*22dc650dSSadaf Ebrahimi func_warning "cannot determine absolute directory name of '$dir'" 8779*22dc650dSSadaf Ebrahimi absdir=$dir 8780*22dc650dSSadaf Ebrahimi fi 8781*22dc650dSSadaf Ebrahimi ;; 8782*22dc650dSSadaf Ebrahimi esac 8783*22dc650dSSadaf Ebrahimi if $GREP "^installed=no" $deplib > /dev/null; then 8784*22dc650dSSadaf Ebrahimi case $host in 8785*22dc650dSSadaf Ebrahimi *-*-darwin*) 8786*22dc650dSSadaf Ebrahimi depdepl= 8787*22dc650dSSadaf Ebrahimi eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 8788*22dc650dSSadaf Ebrahimi if test -n "$deplibrary_names"; then 8789*22dc650dSSadaf Ebrahimi for tmp in $deplibrary_names; do 8790*22dc650dSSadaf Ebrahimi depdepl=$tmp 8791*22dc650dSSadaf Ebrahimi done 8792*22dc650dSSadaf Ebrahimi if test -f "$absdir/$objdir/$depdepl"; then 8793*22dc650dSSadaf Ebrahimi depdepl=$absdir/$objdir/$depdepl 8794*22dc650dSSadaf Ebrahimi darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8795*22dc650dSSadaf Ebrahimi if test -z "$darwin_install_name"; then 8796*22dc650dSSadaf Ebrahimi darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8797*22dc650dSSadaf Ebrahimi fi 8798*22dc650dSSadaf Ebrahimi func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" 8799*22dc650dSSadaf Ebrahimi func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" 8800*22dc650dSSadaf Ebrahimi path= 8801*22dc650dSSadaf Ebrahimi fi 8802*22dc650dSSadaf Ebrahimi fi 8803*22dc650dSSadaf Ebrahimi ;; 8804*22dc650dSSadaf Ebrahimi *) 8805*22dc650dSSadaf Ebrahimi path=-L$absdir/$objdir 8806*22dc650dSSadaf Ebrahimi ;; 8807*22dc650dSSadaf Ebrahimi esac 8808*22dc650dSSadaf Ebrahimi else 8809*22dc650dSSadaf Ebrahimi eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 8810*22dc650dSSadaf Ebrahimi test -z "$libdir" && \ 8811*22dc650dSSadaf Ebrahimi func_fatal_error "'$deplib' is not a valid libtool archive" 8812*22dc650dSSadaf Ebrahimi test "$absdir" != "$libdir" && \ 8813*22dc650dSSadaf Ebrahimi func_warning "'$deplib' seems to be moved" 8814*22dc650dSSadaf Ebrahimi 8815*22dc650dSSadaf Ebrahimi path=-L$absdir 8816*22dc650dSSadaf Ebrahimi fi 8817*22dc650dSSadaf Ebrahimi ;; 8818*22dc650dSSadaf Ebrahimi esac 8819*22dc650dSSadaf Ebrahimi case " $deplibs " in 8820*22dc650dSSadaf Ebrahimi *" $path "*) ;; 8821*22dc650dSSadaf Ebrahimi *) deplibs="$path $deplibs" ;; 8822*22dc650dSSadaf Ebrahimi esac 8823*22dc650dSSadaf Ebrahimi done 8824*22dc650dSSadaf Ebrahimi fi # link_all_deplibs != no 8825*22dc650dSSadaf Ebrahimi fi # linkmode = lib 8826*22dc650dSSadaf Ebrahimi done # for deplib in $libs 8827*22dc650dSSadaf Ebrahimi if test link = "$pass"; then 8828*22dc650dSSadaf Ebrahimi if test prog = "$linkmode"; then 8829*22dc650dSSadaf Ebrahimi compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 8830*22dc650dSSadaf Ebrahimi finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 8831*22dc650dSSadaf Ebrahimi else 8832*22dc650dSSadaf Ebrahimi compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8833*22dc650dSSadaf Ebrahimi fi 8834*22dc650dSSadaf Ebrahimi fi 8835*22dc650dSSadaf Ebrahimi dependency_libs=$newdependency_libs 8836*22dc650dSSadaf Ebrahimi if test dlpreopen = "$pass"; then 8837*22dc650dSSadaf Ebrahimi # Link the dlpreopened libraries before other libraries 8838*22dc650dSSadaf Ebrahimi for deplib in $save_deplibs; do 8839*22dc650dSSadaf Ebrahimi deplibs="$deplib $deplibs" 8840*22dc650dSSadaf Ebrahimi done 8841*22dc650dSSadaf Ebrahimi fi 8842*22dc650dSSadaf Ebrahimi if test dlopen != "$pass"; then 8843*22dc650dSSadaf Ebrahimi test conv = "$pass" || { 8844*22dc650dSSadaf Ebrahimi # Make sure lib_search_path contains only unique directories. 8845*22dc650dSSadaf Ebrahimi lib_search_path= 8846*22dc650dSSadaf Ebrahimi for dir in $newlib_search_path; do 8847*22dc650dSSadaf Ebrahimi case "$lib_search_path " in 8848*22dc650dSSadaf Ebrahimi *" $dir "*) ;; 8849*22dc650dSSadaf Ebrahimi *) func_append lib_search_path " $dir" ;; 8850*22dc650dSSadaf Ebrahimi esac 8851*22dc650dSSadaf Ebrahimi done 8852*22dc650dSSadaf Ebrahimi newlib_search_path= 8853*22dc650dSSadaf Ebrahimi } 8854*22dc650dSSadaf Ebrahimi 8855*22dc650dSSadaf Ebrahimi if test prog,link = "$linkmode,$pass"; then 8856*22dc650dSSadaf Ebrahimi vars="compile_deplibs finalize_deplibs" 8857*22dc650dSSadaf Ebrahimi else 8858*22dc650dSSadaf Ebrahimi vars=deplibs 8859*22dc650dSSadaf Ebrahimi fi 8860*22dc650dSSadaf Ebrahimi for var in $vars dependency_libs; do 8861*22dc650dSSadaf Ebrahimi # Add libraries to $var in reverse order 8862*22dc650dSSadaf Ebrahimi eval tmp_libs=\"\$$var\" 8863*22dc650dSSadaf Ebrahimi new_libs= 8864*22dc650dSSadaf Ebrahimi for deplib in $tmp_libs; do 8865*22dc650dSSadaf Ebrahimi # FIXME: Pedantically, this is the right thing to do, so 8866*22dc650dSSadaf Ebrahimi # that some nasty dependency loop isn't accidentally 8867*22dc650dSSadaf Ebrahimi # broken: 8868*22dc650dSSadaf Ebrahimi #new_libs="$deplib $new_libs" 8869*22dc650dSSadaf Ebrahimi # Pragmatically, this seems to cause very few problems in 8870*22dc650dSSadaf Ebrahimi # practice: 8871*22dc650dSSadaf Ebrahimi case $deplib in 8872*22dc650dSSadaf Ebrahimi -L*) new_libs="$deplib $new_libs" ;; 8873*22dc650dSSadaf Ebrahimi -R*) ;; 8874*22dc650dSSadaf Ebrahimi *) 8875*22dc650dSSadaf Ebrahimi # And here is the reason: when a library appears more 8876*22dc650dSSadaf Ebrahimi # than once as an explicit dependence of a library, or 8877*22dc650dSSadaf Ebrahimi # is implicitly linked in more than once by the 8878*22dc650dSSadaf Ebrahimi # compiler, it is considered special, and multiple 8879*22dc650dSSadaf Ebrahimi # occurrences thereof are not removed. Compare this 8880*22dc650dSSadaf Ebrahimi # with having the same library being listed as a 8881*22dc650dSSadaf Ebrahimi # dependency of multiple other libraries: in this case, 8882*22dc650dSSadaf Ebrahimi # we know (pedantically, we assume) the library does not 8883*22dc650dSSadaf Ebrahimi # need to be listed more than once, so we keep only the 8884*22dc650dSSadaf Ebrahimi # last copy. This is not always right, but it is rare 8885*22dc650dSSadaf Ebrahimi # enough that we require users that really mean to play 8886*22dc650dSSadaf Ebrahimi # such unportable linking tricks to link the library 8887*22dc650dSSadaf Ebrahimi # using -Wl,-lname, so that libtool does not consider it 8888*22dc650dSSadaf Ebrahimi # for duplicate removal. 8889*22dc650dSSadaf Ebrahimi case " $specialdeplibs " in 8890*22dc650dSSadaf Ebrahimi *" $deplib "*) new_libs="$deplib $new_libs" ;; 8891*22dc650dSSadaf Ebrahimi *) 8892*22dc650dSSadaf Ebrahimi case " $new_libs " in 8893*22dc650dSSadaf Ebrahimi *" $deplib "*) ;; 8894*22dc650dSSadaf Ebrahimi *) new_libs="$deplib $new_libs" ;; 8895*22dc650dSSadaf Ebrahimi esac 8896*22dc650dSSadaf Ebrahimi ;; 8897*22dc650dSSadaf Ebrahimi esac 8898*22dc650dSSadaf Ebrahimi ;; 8899*22dc650dSSadaf Ebrahimi esac 8900*22dc650dSSadaf Ebrahimi done 8901*22dc650dSSadaf Ebrahimi tmp_libs= 8902*22dc650dSSadaf Ebrahimi for deplib in $new_libs; do 8903*22dc650dSSadaf Ebrahimi case $deplib in 8904*22dc650dSSadaf Ebrahimi -L*) 8905*22dc650dSSadaf Ebrahimi case " $tmp_libs " in 8906*22dc650dSSadaf Ebrahimi *" $deplib "*) ;; 8907*22dc650dSSadaf Ebrahimi *) func_append tmp_libs " $deplib" ;; 8908*22dc650dSSadaf Ebrahimi esac 8909*22dc650dSSadaf Ebrahimi ;; 8910*22dc650dSSadaf Ebrahimi *) func_append tmp_libs " $deplib" ;; 8911*22dc650dSSadaf Ebrahimi esac 8912*22dc650dSSadaf Ebrahimi done 8913*22dc650dSSadaf Ebrahimi eval $var=\"$tmp_libs\" 8914*22dc650dSSadaf Ebrahimi done # for var 8915*22dc650dSSadaf Ebrahimi fi 8916*22dc650dSSadaf Ebrahimi 8917*22dc650dSSadaf Ebrahimi # Add Sun CC postdeps if required: 8918*22dc650dSSadaf Ebrahimi test CXX = "$tagname" && { 8919*22dc650dSSadaf Ebrahimi case $host_os in 8920*22dc650dSSadaf Ebrahimi linux*) 8921*22dc650dSSadaf Ebrahimi case `$CC -V 2>&1 | $SED 5q` in 8922*22dc650dSSadaf Ebrahimi *Sun\ C*) # Sun C++ 5.9 8923*22dc650dSSadaf Ebrahimi func_suncc_cstd_abi 8924*22dc650dSSadaf Ebrahimi 8925*22dc650dSSadaf Ebrahimi if test no != "$suncc_use_cstd_abi"; then 8926*22dc650dSSadaf Ebrahimi func_append postdeps ' -library=Cstd -library=Crun' 8927*22dc650dSSadaf Ebrahimi fi 8928*22dc650dSSadaf Ebrahimi ;; 8929*22dc650dSSadaf Ebrahimi esac 8930*22dc650dSSadaf Ebrahimi ;; 8931*22dc650dSSadaf Ebrahimi 8932*22dc650dSSadaf Ebrahimi solaris*) 8933*22dc650dSSadaf Ebrahimi func_cc_basename "$CC" 8934*22dc650dSSadaf Ebrahimi case $func_cc_basename_result in 8935*22dc650dSSadaf Ebrahimi CC* | sunCC*) 8936*22dc650dSSadaf Ebrahimi func_suncc_cstd_abi 8937*22dc650dSSadaf Ebrahimi 8938*22dc650dSSadaf Ebrahimi if test no != "$suncc_use_cstd_abi"; then 8939*22dc650dSSadaf Ebrahimi func_append postdeps ' -library=Cstd -library=Crun' 8940*22dc650dSSadaf Ebrahimi fi 8941*22dc650dSSadaf Ebrahimi ;; 8942*22dc650dSSadaf Ebrahimi esac 8943*22dc650dSSadaf Ebrahimi ;; 8944*22dc650dSSadaf Ebrahimi esac 8945*22dc650dSSadaf Ebrahimi } 8946*22dc650dSSadaf Ebrahimi 8947*22dc650dSSadaf Ebrahimi # Last step: remove runtime libs from dependency_libs 8948*22dc650dSSadaf Ebrahimi # (they stay in deplibs) 8949*22dc650dSSadaf Ebrahimi tmp_libs= 8950*22dc650dSSadaf Ebrahimi for i in $dependency_libs; do 8951*22dc650dSSadaf Ebrahimi case " $predeps $postdeps $compiler_lib_search_path " in 8952*22dc650dSSadaf Ebrahimi *" $i "*) 8953*22dc650dSSadaf Ebrahimi i= 8954*22dc650dSSadaf Ebrahimi ;; 8955*22dc650dSSadaf Ebrahimi esac 8956*22dc650dSSadaf Ebrahimi if test -n "$i"; then 8957*22dc650dSSadaf Ebrahimi func_append tmp_libs " $i" 8958*22dc650dSSadaf Ebrahimi fi 8959*22dc650dSSadaf Ebrahimi done 8960*22dc650dSSadaf Ebrahimi dependency_libs=$tmp_libs 8961*22dc650dSSadaf Ebrahimi done # for pass 8962*22dc650dSSadaf Ebrahimi if test prog = "$linkmode"; then 8963*22dc650dSSadaf Ebrahimi dlfiles=$newdlfiles 8964*22dc650dSSadaf Ebrahimi fi 8965*22dc650dSSadaf Ebrahimi if test prog = "$linkmode" || test lib = "$linkmode"; then 8966*22dc650dSSadaf Ebrahimi dlprefiles=$newdlprefiles 8967*22dc650dSSadaf Ebrahimi fi 8968*22dc650dSSadaf Ebrahimi 8969*22dc650dSSadaf Ebrahimi case $linkmode in 8970*22dc650dSSadaf Ebrahimi oldlib) 8971*22dc650dSSadaf Ebrahimi if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 8972*22dc650dSSadaf Ebrahimi func_warning "'-dlopen' is ignored for archives" 8973*22dc650dSSadaf Ebrahimi fi 8974*22dc650dSSadaf Ebrahimi 8975*22dc650dSSadaf Ebrahimi case " $deplibs" in 8976*22dc650dSSadaf Ebrahimi *\ -l* | *\ -L*) 8977*22dc650dSSadaf Ebrahimi func_warning "'-l' and '-L' are ignored for archives" ;; 8978*22dc650dSSadaf Ebrahimi esac 8979*22dc650dSSadaf Ebrahimi 8980*22dc650dSSadaf Ebrahimi test -n "$rpath" && \ 8981*22dc650dSSadaf Ebrahimi func_warning "'-rpath' is ignored for archives" 8982*22dc650dSSadaf Ebrahimi 8983*22dc650dSSadaf Ebrahimi test -n "$xrpath" && \ 8984*22dc650dSSadaf Ebrahimi func_warning "'-R' is ignored for archives" 8985*22dc650dSSadaf Ebrahimi 8986*22dc650dSSadaf Ebrahimi test -n "$vinfo" && \ 8987*22dc650dSSadaf Ebrahimi func_warning "'-version-info/-version-number' is ignored for archives" 8988*22dc650dSSadaf Ebrahimi 8989*22dc650dSSadaf Ebrahimi test -n "$release" && \ 8990*22dc650dSSadaf Ebrahimi func_warning "'-release' is ignored for archives" 8991*22dc650dSSadaf Ebrahimi 8992*22dc650dSSadaf Ebrahimi test -n "$export_symbols$export_symbols_regex" && \ 8993*22dc650dSSadaf Ebrahimi func_warning "'-export-symbols' is ignored for archives" 8994*22dc650dSSadaf Ebrahimi 8995*22dc650dSSadaf Ebrahimi # Now set the variables for building old libraries. 8996*22dc650dSSadaf Ebrahimi build_libtool_libs=no 8997*22dc650dSSadaf Ebrahimi oldlibs=$output 8998*22dc650dSSadaf Ebrahimi func_append objs "$old_deplibs" 8999*22dc650dSSadaf Ebrahimi ;; 9000*22dc650dSSadaf Ebrahimi 9001*22dc650dSSadaf Ebrahimi lib) 9002*22dc650dSSadaf Ebrahimi # Make sure we only generate libraries of the form 'libNAME.la'. 9003*22dc650dSSadaf Ebrahimi case $outputname in 9004*22dc650dSSadaf Ebrahimi lib*) 9005*22dc650dSSadaf Ebrahimi func_stripname 'lib' '.la' "$outputname" 9006*22dc650dSSadaf Ebrahimi name=$func_stripname_result 9007*22dc650dSSadaf Ebrahimi eval shared_ext=\"$shrext_cmds\" 9008*22dc650dSSadaf Ebrahimi eval libname=\"$libname_spec\" 9009*22dc650dSSadaf Ebrahimi ;; 9010*22dc650dSSadaf Ebrahimi *) 9011*22dc650dSSadaf Ebrahimi test no = "$module" \ 9012*22dc650dSSadaf Ebrahimi && func_fatal_help "libtool library '$output' must begin with 'lib'" 9013*22dc650dSSadaf Ebrahimi 9014*22dc650dSSadaf Ebrahimi if test no != "$need_lib_prefix"; then 9015*22dc650dSSadaf Ebrahimi # Add the "lib" prefix for modules if required 9016*22dc650dSSadaf Ebrahimi func_stripname '' '.la' "$outputname" 9017*22dc650dSSadaf Ebrahimi name=$func_stripname_result 9018*22dc650dSSadaf Ebrahimi eval shared_ext=\"$shrext_cmds\" 9019*22dc650dSSadaf Ebrahimi eval libname=\"$libname_spec\" 9020*22dc650dSSadaf Ebrahimi else 9021*22dc650dSSadaf Ebrahimi func_stripname '' '.la' "$outputname" 9022*22dc650dSSadaf Ebrahimi libname=$func_stripname_result 9023*22dc650dSSadaf Ebrahimi fi 9024*22dc650dSSadaf Ebrahimi ;; 9025*22dc650dSSadaf Ebrahimi esac 9026*22dc650dSSadaf Ebrahimi 9027*22dc650dSSadaf Ebrahimi if test -n "$objs"; then 9028*22dc650dSSadaf Ebrahimi if test pass_all != "$deplibs_check_method"; then 9029*22dc650dSSadaf Ebrahimi func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" 9030*22dc650dSSadaf Ebrahimi else 9031*22dc650dSSadaf Ebrahimi echo 9032*22dc650dSSadaf Ebrahimi $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 9033*22dc650dSSadaf Ebrahimi $ECHO "*** objects $objs is not portable!" 9034*22dc650dSSadaf Ebrahimi func_append libobjs " $objs" 9035*22dc650dSSadaf Ebrahimi fi 9036*22dc650dSSadaf Ebrahimi fi 9037*22dc650dSSadaf Ebrahimi 9038*22dc650dSSadaf Ebrahimi test no = "$dlself" \ 9039*22dc650dSSadaf Ebrahimi || func_warning "'-dlopen self' is ignored for libtool libraries" 9040*22dc650dSSadaf Ebrahimi 9041*22dc650dSSadaf Ebrahimi set dummy $rpath 9042*22dc650dSSadaf Ebrahimi shift 9043*22dc650dSSadaf Ebrahimi test 1 -lt "$#" \ 9044*22dc650dSSadaf Ebrahimi && func_warning "ignoring multiple '-rpath's for a libtool library" 9045*22dc650dSSadaf Ebrahimi 9046*22dc650dSSadaf Ebrahimi install_libdir=$1 9047*22dc650dSSadaf Ebrahimi 9048*22dc650dSSadaf Ebrahimi oldlibs= 9049*22dc650dSSadaf Ebrahimi if test -z "$rpath"; then 9050*22dc650dSSadaf Ebrahimi if test yes = "$build_libtool_libs"; then 9051*22dc650dSSadaf Ebrahimi # Building a libtool convenience library. 9052*22dc650dSSadaf Ebrahimi # Some compilers have problems with a '.al' extension so 9053*22dc650dSSadaf Ebrahimi # convenience libraries should have the same extension an 9054*22dc650dSSadaf Ebrahimi # archive normally would. 9055*22dc650dSSadaf Ebrahimi oldlibs="$output_objdir/$libname.$libext $oldlibs" 9056*22dc650dSSadaf Ebrahimi build_libtool_libs=convenience 9057*22dc650dSSadaf Ebrahimi build_old_libs=yes 9058*22dc650dSSadaf Ebrahimi fi 9059*22dc650dSSadaf Ebrahimi 9060*22dc650dSSadaf Ebrahimi test -n "$vinfo" && \ 9061*22dc650dSSadaf Ebrahimi func_warning "'-version-info/-version-number' is ignored for convenience libraries" 9062*22dc650dSSadaf Ebrahimi 9063*22dc650dSSadaf Ebrahimi test -n "$release" && \ 9064*22dc650dSSadaf Ebrahimi func_warning "'-release' is ignored for convenience libraries" 9065*22dc650dSSadaf Ebrahimi else 9066*22dc650dSSadaf Ebrahimi 9067*22dc650dSSadaf Ebrahimi # Parse the version information argument. 9068*22dc650dSSadaf Ebrahimi save_ifs=$IFS; IFS=: 9069*22dc650dSSadaf Ebrahimi set dummy $vinfo 0 0 0 9070*22dc650dSSadaf Ebrahimi shift 9071*22dc650dSSadaf Ebrahimi IFS=$save_ifs 9072*22dc650dSSadaf Ebrahimi 9073*22dc650dSSadaf Ebrahimi test -n "$7" && \ 9074*22dc650dSSadaf Ebrahimi func_fatal_help "too many parameters to '-version-info'" 9075*22dc650dSSadaf Ebrahimi 9076*22dc650dSSadaf Ebrahimi # convert absolute version numbers to libtool ages 9077*22dc650dSSadaf Ebrahimi # this retains compatibility with .la files and attempts 9078*22dc650dSSadaf Ebrahimi # to make the code below a bit more comprehensible 9079*22dc650dSSadaf Ebrahimi 9080*22dc650dSSadaf Ebrahimi case $vinfo_number in 9081*22dc650dSSadaf Ebrahimi yes) 9082*22dc650dSSadaf Ebrahimi number_major=$1 9083*22dc650dSSadaf Ebrahimi number_minor=$2 9084*22dc650dSSadaf Ebrahimi number_revision=$3 9085*22dc650dSSadaf Ebrahimi # 9086*22dc650dSSadaf Ebrahimi # There are really only two kinds -- those that 9087*22dc650dSSadaf Ebrahimi # use the current revision as the major version 9088*22dc650dSSadaf Ebrahimi # and those that subtract age and use age as 9089*22dc650dSSadaf Ebrahimi # a minor version. But, then there is irix 9090*22dc650dSSadaf Ebrahimi # that has an extra 1 added just for fun 9091*22dc650dSSadaf Ebrahimi # 9092*22dc650dSSadaf Ebrahimi case $version_type in 9093*22dc650dSSadaf Ebrahimi # correct linux to gnu/linux during the next big refactor 9094*22dc650dSSadaf Ebrahimi darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none) 9095*22dc650dSSadaf Ebrahimi func_arith $number_major + $number_minor 9096*22dc650dSSadaf Ebrahimi current=$func_arith_result 9097*22dc650dSSadaf Ebrahimi age=$number_minor 9098*22dc650dSSadaf Ebrahimi revision=$number_revision 9099*22dc650dSSadaf Ebrahimi ;; 9100*22dc650dSSadaf Ebrahimi freebsd-aout|qnx|sunos) 9101*22dc650dSSadaf Ebrahimi current=$number_major 9102*22dc650dSSadaf Ebrahimi revision=$number_minor 9103*22dc650dSSadaf Ebrahimi age=0 9104*22dc650dSSadaf Ebrahimi ;; 9105*22dc650dSSadaf Ebrahimi irix|nonstopux) 9106*22dc650dSSadaf Ebrahimi func_arith $number_major + $number_minor 9107*22dc650dSSadaf Ebrahimi current=$func_arith_result 9108*22dc650dSSadaf Ebrahimi age=$number_minor 9109*22dc650dSSadaf Ebrahimi revision=$number_minor 9110*22dc650dSSadaf Ebrahimi lt_irix_increment=no 9111*22dc650dSSadaf Ebrahimi ;; 9112*22dc650dSSadaf Ebrahimi esac 9113*22dc650dSSadaf Ebrahimi ;; 9114*22dc650dSSadaf Ebrahimi no) 9115*22dc650dSSadaf Ebrahimi current=$1 9116*22dc650dSSadaf Ebrahimi revision=$2 9117*22dc650dSSadaf Ebrahimi age=$3 9118*22dc650dSSadaf Ebrahimi ;; 9119*22dc650dSSadaf Ebrahimi esac 9120*22dc650dSSadaf Ebrahimi 9121*22dc650dSSadaf Ebrahimi # Check that each of the things are valid numbers. 9122*22dc650dSSadaf Ebrahimi case $current in 9123*22dc650dSSadaf Ebrahimi 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; 9124*22dc650dSSadaf Ebrahimi *) 9125*22dc650dSSadaf Ebrahimi func_error "CURRENT '$current' must be a nonnegative integer" 9126*22dc650dSSadaf Ebrahimi func_fatal_error "'$vinfo' is not valid version information" 9127*22dc650dSSadaf Ebrahimi ;; 9128*22dc650dSSadaf Ebrahimi esac 9129*22dc650dSSadaf Ebrahimi 9130*22dc650dSSadaf Ebrahimi case $revision in 9131*22dc650dSSadaf Ebrahimi 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; 9132*22dc650dSSadaf Ebrahimi *) 9133*22dc650dSSadaf Ebrahimi func_error "REVISION '$revision' must be a nonnegative integer" 9134*22dc650dSSadaf Ebrahimi func_fatal_error "'$vinfo' is not valid version information" 9135*22dc650dSSadaf Ebrahimi ;; 9136*22dc650dSSadaf Ebrahimi esac 9137*22dc650dSSadaf Ebrahimi 9138*22dc650dSSadaf Ebrahimi case $age in 9139*22dc650dSSadaf Ebrahimi 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; 9140*22dc650dSSadaf Ebrahimi *) 9141*22dc650dSSadaf Ebrahimi func_error "AGE '$age' must be a nonnegative integer" 9142*22dc650dSSadaf Ebrahimi func_fatal_error "'$vinfo' is not valid version information" 9143*22dc650dSSadaf Ebrahimi ;; 9144*22dc650dSSadaf Ebrahimi esac 9145*22dc650dSSadaf Ebrahimi 9146*22dc650dSSadaf Ebrahimi if test "$age" -gt "$current"; then 9147*22dc650dSSadaf Ebrahimi func_error "AGE '$age' is greater than the current interface number '$current'" 9148*22dc650dSSadaf Ebrahimi func_fatal_error "'$vinfo' is not valid version information" 9149*22dc650dSSadaf Ebrahimi fi 9150*22dc650dSSadaf Ebrahimi 9151*22dc650dSSadaf Ebrahimi # Calculate the version variables. 9152*22dc650dSSadaf Ebrahimi major= 9153*22dc650dSSadaf Ebrahimi versuffix= 9154*22dc650dSSadaf Ebrahimi verstring= 9155*22dc650dSSadaf Ebrahimi case $version_type in 9156*22dc650dSSadaf Ebrahimi none) ;; 9157*22dc650dSSadaf Ebrahimi 9158*22dc650dSSadaf Ebrahimi darwin) 9159*22dc650dSSadaf Ebrahimi # Like Linux, but with the current version available in 9160*22dc650dSSadaf Ebrahimi # verstring for coding it into the library header 9161*22dc650dSSadaf Ebrahimi func_arith $current - $age 9162*22dc650dSSadaf Ebrahimi major=.$func_arith_result 9163*22dc650dSSadaf Ebrahimi versuffix=$major.$age.$revision 9164*22dc650dSSadaf Ebrahimi # Darwin ld doesn't like 0 for these options... 9165*22dc650dSSadaf Ebrahimi func_arith $current + 1 9166*22dc650dSSadaf Ebrahimi minor_current=$func_arith_result 9167*22dc650dSSadaf Ebrahimi xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 9168*22dc650dSSadaf Ebrahimi verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 9169*22dc650dSSadaf Ebrahimi # On Darwin other compilers 9170*22dc650dSSadaf Ebrahimi case $CC in 9171*22dc650dSSadaf Ebrahimi nagfor*) 9172*22dc650dSSadaf Ebrahimi verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 9173*22dc650dSSadaf Ebrahimi ;; 9174*22dc650dSSadaf Ebrahimi *) 9175*22dc650dSSadaf Ebrahimi verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 9176*22dc650dSSadaf Ebrahimi ;; 9177*22dc650dSSadaf Ebrahimi esac 9178*22dc650dSSadaf Ebrahimi ;; 9179*22dc650dSSadaf Ebrahimi 9180*22dc650dSSadaf Ebrahimi freebsd-aout) 9181*22dc650dSSadaf Ebrahimi major=.$current 9182*22dc650dSSadaf Ebrahimi versuffix=.$current.$revision 9183*22dc650dSSadaf Ebrahimi ;; 9184*22dc650dSSadaf Ebrahimi 9185*22dc650dSSadaf Ebrahimi freebsd-elf | midnightbsd-elf) 9186*22dc650dSSadaf Ebrahimi func_arith $current - $age 9187*22dc650dSSadaf Ebrahimi major=.$func_arith_result 9188*22dc650dSSadaf Ebrahimi versuffix=$major.$age.$revision 9189*22dc650dSSadaf Ebrahimi ;; 9190*22dc650dSSadaf Ebrahimi 9191*22dc650dSSadaf Ebrahimi irix | nonstopux) 9192*22dc650dSSadaf Ebrahimi if test no = "$lt_irix_increment"; then 9193*22dc650dSSadaf Ebrahimi func_arith $current - $age 9194*22dc650dSSadaf Ebrahimi else 9195*22dc650dSSadaf Ebrahimi func_arith $current - $age + 1 9196*22dc650dSSadaf Ebrahimi fi 9197*22dc650dSSadaf Ebrahimi major=$func_arith_result 9198*22dc650dSSadaf Ebrahimi 9199*22dc650dSSadaf Ebrahimi case $version_type in 9200*22dc650dSSadaf Ebrahimi nonstopux) verstring_prefix=nonstopux ;; 9201*22dc650dSSadaf Ebrahimi *) verstring_prefix=sgi ;; 9202*22dc650dSSadaf Ebrahimi esac 9203*22dc650dSSadaf Ebrahimi verstring=$verstring_prefix$major.$revision 9204*22dc650dSSadaf Ebrahimi 9205*22dc650dSSadaf Ebrahimi # Add in all the interfaces that we are compatible with. 9206*22dc650dSSadaf Ebrahimi loop=$revision 9207*22dc650dSSadaf Ebrahimi while test 0 -ne "$loop"; do 9208*22dc650dSSadaf Ebrahimi func_arith $revision - $loop 9209*22dc650dSSadaf Ebrahimi iface=$func_arith_result 9210*22dc650dSSadaf Ebrahimi func_arith $loop - 1 9211*22dc650dSSadaf Ebrahimi loop=$func_arith_result 9212*22dc650dSSadaf Ebrahimi verstring=$verstring_prefix$major.$iface:$verstring 9213*22dc650dSSadaf Ebrahimi done 9214*22dc650dSSadaf Ebrahimi 9215*22dc650dSSadaf Ebrahimi # Before this point, $major must not contain '.'. 9216*22dc650dSSadaf Ebrahimi major=.$major 9217*22dc650dSSadaf Ebrahimi versuffix=$major.$revision 9218*22dc650dSSadaf Ebrahimi ;; 9219*22dc650dSSadaf Ebrahimi 9220*22dc650dSSadaf Ebrahimi linux) # correct to gnu/linux during the next big refactor 9221*22dc650dSSadaf Ebrahimi func_arith $current - $age 9222*22dc650dSSadaf Ebrahimi major=.$func_arith_result 9223*22dc650dSSadaf Ebrahimi versuffix=$major.$age.$revision 9224*22dc650dSSadaf Ebrahimi ;; 9225*22dc650dSSadaf Ebrahimi 9226*22dc650dSSadaf Ebrahimi osf) 9227*22dc650dSSadaf Ebrahimi func_arith $current - $age 9228*22dc650dSSadaf Ebrahimi major=.$func_arith_result 9229*22dc650dSSadaf Ebrahimi versuffix=.$current.$age.$revision 9230*22dc650dSSadaf Ebrahimi verstring=$current.$age.$revision 9231*22dc650dSSadaf Ebrahimi 9232*22dc650dSSadaf Ebrahimi # Add in all the interfaces that we are compatible with. 9233*22dc650dSSadaf Ebrahimi loop=$age 9234*22dc650dSSadaf Ebrahimi while test 0 -ne "$loop"; do 9235*22dc650dSSadaf Ebrahimi func_arith $current - $loop 9236*22dc650dSSadaf Ebrahimi iface=$func_arith_result 9237*22dc650dSSadaf Ebrahimi func_arith $loop - 1 9238*22dc650dSSadaf Ebrahimi loop=$func_arith_result 9239*22dc650dSSadaf Ebrahimi verstring=$verstring:$iface.0 9240*22dc650dSSadaf Ebrahimi done 9241*22dc650dSSadaf Ebrahimi 9242*22dc650dSSadaf Ebrahimi # Make executables depend on our current version. 9243*22dc650dSSadaf Ebrahimi func_append verstring ":$current.0" 9244*22dc650dSSadaf Ebrahimi ;; 9245*22dc650dSSadaf Ebrahimi 9246*22dc650dSSadaf Ebrahimi qnx) 9247*22dc650dSSadaf Ebrahimi major=.$current 9248*22dc650dSSadaf Ebrahimi versuffix=.$current 9249*22dc650dSSadaf Ebrahimi ;; 9250*22dc650dSSadaf Ebrahimi 9251*22dc650dSSadaf Ebrahimi sco) 9252*22dc650dSSadaf Ebrahimi major=.$current 9253*22dc650dSSadaf Ebrahimi versuffix=.$current 9254*22dc650dSSadaf Ebrahimi ;; 9255*22dc650dSSadaf Ebrahimi 9256*22dc650dSSadaf Ebrahimi sunos) 9257*22dc650dSSadaf Ebrahimi major=.$current 9258*22dc650dSSadaf Ebrahimi versuffix=.$current.$revision 9259*22dc650dSSadaf Ebrahimi ;; 9260*22dc650dSSadaf Ebrahimi 9261*22dc650dSSadaf Ebrahimi windows) 9262*22dc650dSSadaf Ebrahimi # Use '-' rather than '.', since we only want one 9263*22dc650dSSadaf Ebrahimi # extension on DOS 8.3 file systems. 9264*22dc650dSSadaf Ebrahimi func_arith $current - $age 9265*22dc650dSSadaf Ebrahimi major=$func_arith_result 9266*22dc650dSSadaf Ebrahimi versuffix=-$major 9267*22dc650dSSadaf Ebrahimi ;; 9268*22dc650dSSadaf Ebrahimi 9269*22dc650dSSadaf Ebrahimi *) 9270*22dc650dSSadaf Ebrahimi func_fatal_configuration "unknown library version type '$version_type'" 9271*22dc650dSSadaf Ebrahimi ;; 9272*22dc650dSSadaf Ebrahimi esac 9273*22dc650dSSadaf Ebrahimi 9274*22dc650dSSadaf Ebrahimi # Clear the version info if we defaulted, and they specified a release. 9275*22dc650dSSadaf Ebrahimi if test -z "$vinfo" && test -n "$release"; then 9276*22dc650dSSadaf Ebrahimi major= 9277*22dc650dSSadaf Ebrahimi case $version_type in 9278*22dc650dSSadaf Ebrahimi darwin) 9279*22dc650dSSadaf Ebrahimi # we can't check for "0.0" in archive_cmds due to quoting 9280*22dc650dSSadaf Ebrahimi # problems, so we reset it completely 9281*22dc650dSSadaf Ebrahimi verstring= 9282*22dc650dSSadaf Ebrahimi ;; 9283*22dc650dSSadaf Ebrahimi *) 9284*22dc650dSSadaf Ebrahimi verstring=0.0 9285*22dc650dSSadaf Ebrahimi ;; 9286*22dc650dSSadaf Ebrahimi esac 9287*22dc650dSSadaf Ebrahimi if test no = "$need_version"; then 9288*22dc650dSSadaf Ebrahimi versuffix= 9289*22dc650dSSadaf Ebrahimi else 9290*22dc650dSSadaf Ebrahimi versuffix=.0.0 9291*22dc650dSSadaf Ebrahimi fi 9292*22dc650dSSadaf Ebrahimi fi 9293*22dc650dSSadaf Ebrahimi 9294*22dc650dSSadaf Ebrahimi # Remove version info from name if versioning should be avoided 9295*22dc650dSSadaf Ebrahimi if test yes,no = "$avoid_version,$need_version"; then 9296*22dc650dSSadaf Ebrahimi major= 9297*22dc650dSSadaf Ebrahimi versuffix= 9298*22dc650dSSadaf Ebrahimi verstring= 9299*22dc650dSSadaf Ebrahimi fi 9300*22dc650dSSadaf Ebrahimi 9301*22dc650dSSadaf Ebrahimi # Check to see if the archive will have undefined symbols. 9302*22dc650dSSadaf Ebrahimi if test yes = "$allow_undefined"; then 9303*22dc650dSSadaf Ebrahimi if test unsupported = "$allow_undefined_flag"; then 9304*22dc650dSSadaf Ebrahimi if test yes = "$build_old_libs"; then 9305*22dc650dSSadaf Ebrahimi func_warning "undefined symbols not allowed in $host shared libraries; building static only" 9306*22dc650dSSadaf Ebrahimi build_libtool_libs=no 9307*22dc650dSSadaf Ebrahimi else 9308*22dc650dSSadaf Ebrahimi func_fatal_error "can't build $host shared library unless -no-undefined is specified" 9309*22dc650dSSadaf Ebrahimi fi 9310*22dc650dSSadaf Ebrahimi fi 9311*22dc650dSSadaf Ebrahimi else 9312*22dc650dSSadaf Ebrahimi # Don't allow undefined symbols. 9313*22dc650dSSadaf Ebrahimi allow_undefined_flag=$no_undefined_flag 9314*22dc650dSSadaf Ebrahimi fi 9315*22dc650dSSadaf Ebrahimi 9316*22dc650dSSadaf Ebrahimi fi 9317*22dc650dSSadaf Ebrahimi 9318*22dc650dSSadaf Ebrahimi func_generate_dlsyms "$libname" "$libname" : 9319*22dc650dSSadaf Ebrahimi func_append libobjs " $symfileobj" 9320*22dc650dSSadaf Ebrahimi test " " = "$libobjs" && libobjs= 9321*22dc650dSSadaf Ebrahimi 9322*22dc650dSSadaf Ebrahimi if test relink != "$opt_mode"; then 9323*22dc650dSSadaf Ebrahimi # Remove our outputs, but don't remove object files since they 9324*22dc650dSSadaf Ebrahimi # may have been created when compiling PIC objects. 9325*22dc650dSSadaf Ebrahimi removelist= 9326*22dc650dSSadaf Ebrahimi tempremovelist=`$ECHO "$output_objdir/*"` 9327*22dc650dSSadaf Ebrahimi for p in $tempremovelist; do 9328*22dc650dSSadaf Ebrahimi case $p in 9329*22dc650dSSadaf Ebrahimi *.$objext | *.gcno) 9330*22dc650dSSadaf Ebrahimi ;; 9331*22dc650dSSadaf Ebrahimi $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) 9332*22dc650dSSadaf Ebrahimi if test -n "$precious_files_regex"; then 9333*22dc650dSSadaf Ebrahimi if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 9334*22dc650dSSadaf Ebrahimi then 9335*22dc650dSSadaf Ebrahimi continue 9336*22dc650dSSadaf Ebrahimi fi 9337*22dc650dSSadaf Ebrahimi fi 9338*22dc650dSSadaf Ebrahimi func_append removelist " $p" 9339*22dc650dSSadaf Ebrahimi ;; 9340*22dc650dSSadaf Ebrahimi *) ;; 9341*22dc650dSSadaf Ebrahimi esac 9342*22dc650dSSadaf Ebrahimi done 9343*22dc650dSSadaf Ebrahimi test -n "$removelist" && \ 9344*22dc650dSSadaf Ebrahimi func_show_eval "${RM}r \$removelist" 9345*22dc650dSSadaf Ebrahimi fi 9346*22dc650dSSadaf Ebrahimi 9347*22dc650dSSadaf Ebrahimi # Now set the variables for building old libraries. 9348*22dc650dSSadaf Ebrahimi if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then 9349*22dc650dSSadaf Ebrahimi func_append oldlibs " $output_objdir/$libname.$libext" 9350*22dc650dSSadaf Ebrahimi 9351*22dc650dSSadaf Ebrahimi # Transform .lo files to .o files. 9352*22dc650dSSadaf Ebrahimi oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` 9353*22dc650dSSadaf Ebrahimi fi 9354*22dc650dSSadaf Ebrahimi 9355*22dc650dSSadaf Ebrahimi # Eliminate all temporary directories. 9356*22dc650dSSadaf Ebrahimi #for path in $notinst_path; do 9357*22dc650dSSadaf Ebrahimi # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 9358*22dc650dSSadaf Ebrahimi # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 9359*22dc650dSSadaf Ebrahimi # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 9360*22dc650dSSadaf Ebrahimi #done 9361*22dc650dSSadaf Ebrahimi 9362*22dc650dSSadaf Ebrahimi if test -n "$xrpath"; then 9363*22dc650dSSadaf Ebrahimi # If the user specified any rpath flags, then add them. 9364*22dc650dSSadaf Ebrahimi temp_xrpath= 9365*22dc650dSSadaf Ebrahimi for libdir in $xrpath; do 9366*22dc650dSSadaf Ebrahimi func_replace_sysroot "$libdir" 9367*22dc650dSSadaf Ebrahimi func_append temp_xrpath " -R$func_replace_sysroot_result" 9368*22dc650dSSadaf Ebrahimi case "$finalize_rpath " in 9369*22dc650dSSadaf Ebrahimi *" $libdir "*) ;; 9370*22dc650dSSadaf Ebrahimi *) func_append finalize_rpath " $libdir" ;; 9371*22dc650dSSadaf Ebrahimi esac 9372*22dc650dSSadaf Ebrahimi done 9373*22dc650dSSadaf Ebrahimi if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then 9374*22dc650dSSadaf Ebrahimi dependency_libs="$temp_xrpath $dependency_libs" 9375*22dc650dSSadaf Ebrahimi fi 9376*22dc650dSSadaf Ebrahimi fi 9377*22dc650dSSadaf Ebrahimi 9378*22dc650dSSadaf Ebrahimi # Make sure dlfiles contains only unique files that won't be dlpreopened 9379*22dc650dSSadaf Ebrahimi old_dlfiles=$dlfiles 9380*22dc650dSSadaf Ebrahimi dlfiles= 9381*22dc650dSSadaf Ebrahimi for lib in $old_dlfiles; do 9382*22dc650dSSadaf Ebrahimi case " $dlprefiles $dlfiles " in 9383*22dc650dSSadaf Ebrahimi *" $lib "*) ;; 9384*22dc650dSSadaf Ebrahimi *) func_append dlfiles " $lib" ;; 9385*22dc650dSSadaf Ebrahimi esac 9386*22dc650dSSadaf Ebrahimi done 9387*22dc650dSSadaf Ebrahimi 9388*22dc650dSSadaf Ebrahimi # Make sure dlprefiles contains only unique files 9389*22dc650dSSadaf Ebrahimi old_dlprefiles=$dlprefiles 9390*22dc650dSSadaf Ebrahimi dlprefiles= 9391*22dc650dSSadaf Ebrahimi for lib in $old_dlprefiles; do 9392*22dc650dSSadaf Ebrahimi case "$dlprefiles " in 9393*22dc650dSSadaf Ebrahimi *" $lib "*) ;; 9394*22dc650dSSadaf Ebrahimi *) func_append dlprefiles " $lib" ;; 9395*22dc650dSSadaf Ebrahimi esac 9396*22dc650dSSadaf Ebrahimi done 9397*22dc650dSSadaf Ebrahimi 9398*22dc650dSSadaf Ebrahimi if test yes = "$build_libtool_libs"; then 9399*22dc650dSSadaf Ebrahimi if test -n "$rpath"; then 9400*22dc650dSSadaf Ebrahimi case $host in 9401*22dc650dSSadaf Ebrahimi *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 9402*22dc650dSSadaf Ebrahimi # these systems don't actually have a c library (as such)! 9403*22dc650dSSadaf Ebrahimi ;; 9404*22dc650dSSadaf Ebrahimi *-*-rhapsody* | *-*-darwin1.[012]) 9405*22dc650dSSadaf Ebrahimi # Rhapsody C library is in the System framework 9406*22dc650dSSadaf Ebrahimi func_append deplibs " System.ltframework" 9407*22dc650dSSadaf Ebrahimi ;; 9408*22dc650dSSadaf Ebrahimi *-*-netbsd*) 9409*22dc650dSSadaf Ebrahimi # Don't link with libc until the a.out ld.so is fixed. 9410*22dc650dSSadaf Ebrahimi ;; 9411*22dc650dSSadaf Ebrahimi *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) 9412*22dc650dSSadaf Ebrahimi # Do not include libc due to us having libc/libc_r. 9413*22dc650dSSadaf Ebrahimi ;; 9414*22dc650dSSadaf Ebrahimi *-*-sco3.2v5* | *-*-sco5v6*) 9415*22dc650dSSadaf Ebrahimi # Causes problems with __ctype 9416*22dc650dSSadaf Ebrahimi ;; 9417*22dc650dSSadaf Ebrahimi *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 9418*22dc650dSSadaf Ebrahimi # Compiler inserts libc in the correct place for threads to work 9419*22dc650dSSadaf Ebrahimi ;; 9420*22dc650dSSadaf Ebrahimi *) 9421*22dc650dSSadaf Ebrahimi # Add libc to deplibs on all other systems if necessary. 9422*22dc650dSSadaf Ebrahimi if test yes = "$build_libtool_need_lc"; then 9423*22dc650dSSadaf Ebrahimi func_append deplibs " -lc" 9424*22dc650dSSadaf Ebrahimi fi 9425*22dc650dSSadaf Ebrahimi ;; 9426*22dc650dSSadaf Ebrahimi esac 9427*22dc650dSSadaf Ebrahimi fi 9428*22dc650dSSadaf Ebrahimi 9429*22dc650dSSadaf Ebrahimi # Transform deplibs into only deplibs that can be linked in shared. 9430*22dc650dSSadaf Ebrahimi name_save=$name 9431*22dc650dSSadaf Ebrahimi libname_save=$libname 9432*22dc650dSSadaf Ebrahimi release_save=$release 9433*22dc650dSSadaf Ebrahimi versuffix_save=$versuffix 9434*22dc650dSSadaf Ebrahimi major_save=$major 9435*22dc650dSSadaf Ebrahimi # I'm not sure if I'm treating the release correctly. I think 9436*22dc650dSSadaf Ebrahimi # release should show up in the -l (ie -lgmp5) so we don't want to 9437*22dc650dSSadaf Ebrahimi # add it in twice. Is that correct? 9438*22dc650dSSadaf Ebrahimi release= 9439*22dc650dSSadaf Ebrahimi versuffix= 9440*22dc650dSSadaf Ebrahimi major= 9441*22dc650dSSadaf Ebrahimi newdeplibs= 9442*22dc650dSSadaf Ebrahimi droppeddeps=no 9443*22dc650dSSadaf Ebrahimi case $deplibs_check_method in 9444*22dc650dSSadaf Ebrahimi pass_all) 9445*22dc650dSSadaf Ebrahimi # Don't check for shared/static. Everything works. 9446*22dc650dSSadaf Ebrahimi # This might be a little naive. We might want to check 9447*22dc650dSSadaf Ebrahimi # whether the library exists or not. But this is on 9448*22dc650dSSadaf Ebrahimi # osf3 & osf4 and I'm not really sure... Just 9449*22dc650dSSadaf Ebrahimi # implementing what was already the behavior. 9450*22dc650dSSadaf Ebrahimi newdeplibs=$deplibs 9451*22dc650dSSadaf Ebrahimi ;; 9452*22dc650dSSadaf Ebrahimi test_compile) 9453*22dc650dSSadaf Ebrahimi # This code stresses the "libraries are programs" paradigm to its 9454*22dc650dSSadaf Ebrahimi # limits. Maybe even breaks it. We compile a program, linking it 9455*22dc650dSSadaf Ebrahimi # against the deplibs as a proxy for the library. Then we can check 9456*22dc650dSSadaf Ebrahimi # whether they linked in statically or dynamically with ldd. 9457*22dc650dSSadaf Ebrahimi $opt_dry_run || $RM conftest.c 9458*22dc650dSSadaf Ebrahimi cat > conftest.c <<EOF 9459*22dc650dSSadaf Ebrahimi int main() { return 0; } 9460*22dc650dSSadaf EbrahimiEOF 9461*22dc650dSSadaf Ebrahimi $opt_dry_run || $RM conftest 9462*22dc650dSSadaf Ebrahimi if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 9463*22dc650dSSadaf Ebrahimi ldd_output=`ldd conftest` 9464*22dc650dSSadaf Ebrahimi for i in $deplibs; do 9465*22dc650dSSadaf Ebrahimi case $i in 9466*22dc650dSSadaf Ebrahimi -l*) 9467*22dc650dSSadaf Ebrahimi func_stripname -l '' "$i" 9468*22dc650dSSadaf Ebrahimi name=$func_stripname_result 9469*22dc650dSSadaf Ebrahimi if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9470*22dc650dSSadaf Ebrahimi case " $predeps $postdeps " in 9471*22dc650dSSadaf Ebrahimi *" $i "*) 9472*22dc650dSSadaf Ebrahimi func_append newdeplibs " $i" 9473*22dc650dSSadaf Ebrahimi i= 9474*22dc650dSSadaf Ebrahimi ;; 9475*22dc650dSSadaf Ebrahimi esac 9476*22dc650dSSadaf Ebrahimi fi 9477*22dc650dSSadaf Ebrahimi if test -n "$i"; then 9478*22dc650dSSadaf Ebrahimi libname=`eval "\\$ECHO \"$libname_spec\""` 9479*22dc650dSSadaf Ebrahimi deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9480*22dc650dSSadaf Ebrahimi set dummy $deplib_matches; shift 9481*22dc650dSSadaf Ebrahimi deplib_match=$1 9482*22dc650dSSadaf Ebrahimi if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9483*22dc650dSSadaf Ebrahimi func_append newdeplibs " $i" 9484*22dc650dSSadaf Ebrahimi else 9485*22dc650dSSadaf Ebrahimi droppeddeps=yes 9486*22dc650dSSadaf Ebrahimi echo 9487*22dc650dSSadaf Ebrahimi $ECHO "*** Warning: dynamic linker does not accept needed library $i." 9488*22dc650dSSadaf Ebrahimi echo "*** I have the capability to make that library automatically link in when" 9489*22dc650dSSadaf Ebrahimi echo "*** you link to this library. But I can only do this if you have a" 9490*22dc650dSSadaf Ebrahimi echo "*** shared version of the library, which I believe you do not have" 9491*22dc650dSSadaf Ebrahimi echo "*** because a test_compile did reveal that the linker did not use it for" 9492*22dc650dSSadaf Ebrahimi echo "*** its dynamic dependency list that programs get resolved with at runtime." 9493*22dc650dSSadaf Ebrahimi fi 9494*22dc650dSSadaf Ebrahimi fi 9495*22dc650dSSadaf Ebrahimi ;; 9496*22dc650dSSadaf Ebrahimi *) 9497*22dc650dSSadaf Ebrahimi func_append newdeplibs " $i" 9498*22dc650dSSadaf Ebrahimi ;; 9499*22dc650dSSadaf Ebrahimi esac 9500*22dc650dSSadaf Ebrahimi done 9501*22dc650dSSadaf Ebrahimi else 9502*22dc650dSSadaf Ebrahimi # Error occurred in the first compile. Let's try to salvage 9503*22dc650dSSadaf Ebrahimi # the situation: Compile a separate program for each library. 9504*22dc650dSSadaf Ebrahimi for i in $deplibs; do 9505*22dc650dSSadaf Ebrahimi case $i in 9506*22dc650dSSadaf Ebrahimi -l*) 9507*22dc650dSSadaf Ebrahimi func_stripname -l '' "$i" 9508*22dc650dSSadaf Ebrahimi name=$func_stripname_result 9509*22dc650dSSadaf Ebrahimi $opt_dry_run || $RM conftest 9510*22dc650dSSadaf Ebrahimi if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 9511*22dc650dSSadaf Ebrahimi ldd_output=`ldd conftest` 9512*22dc650dSSadaf Ebrahimi if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9513*22dc650dSSadaf Ebrahimi case " $predeps $postdeps " in 9514*22dc650dSSadaf Ebrahimi *" $i "*) 9515*22dc650dSSadaf Ebrahimi func_append newdeplibs " $i" 9516*22dc650dSSadaf Ebrahimi i= 9517*22dc650dSSadaf Ebrahimi ;; 9518*22dc650dSSadaf Ebrahimi esac 9519*22dc650dSSadaf Ebrahimi fi 9520*22dc650dSSadaf Ebrahimi if test -n "$i"; then 9521*22dc650dSSadaf Ebrahimi libname=`eval "\\$ECHO \"$libname_spec\""` 9522*22dc650dSSadaf Ebrahimi deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9523*22dc650dSSadaf Ebrahimi set dummy $deplib_matches; shift 9524*22dc650dSSadaf Ebrahimi deplib_match=$1 9525*22dc650dSSadaf Ebrahimi if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9526*22dc650dSSadaf Ebrahimi func_append newdeplibs " $i" 9527*22dc650dSSadaf Ebrahimi else 9528*22dc650dSSadaf Ebrahimi droppeddeps=yes 9529*22dc650dSSadaf Ebrahimi echo 9530*22dc650dSSadaf Ebrahimi $ECHO "*** Warning: dynamic linker does not accept needed library $i." 9531*22dc650dSSadaf Ebrahimi echo "*** I have the capability to make that library automatically link in when" 9532*22dc650dSSadaf Ebrahimi echo "*** you link to this library. But I can only do this if you have a" 9533*22dc650dSSadaf Ebrahimi echo "*** shared version of the library, which you do not appear to have" 9534*22dc650dSSadaf Ebrahimi echo "*** because a test_compile did reveal that the linker did not use this one" 9535*22dc650dSSadaf Ebrahimi echo "*** as a dynamic dependency that programs can get resolved with at runtime." 9536*22dc650dSSadaf Ebrahimi fi 9537*22dc650dSSadaf Ebrahimi fi 9538*22dc650dSSadaf Ebrahimi else 9539*22dc650dSSadaf Ebrahimi droppeddeps=yes 9540*22dc650dSSadaf Ebrahimi echo 9541*22dc650dSSadaf Ebrahimi $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 9542*22dc650dSSadaf Ebrahimi echo "*** make it link in! You will probably need to install it or some" 9543*22dc650dSSadaf Ebrahimi echo "*** library that it depends on before this library will be fully" 9544*22dc650dSSadaf Ebrahimi echo "*** functional. Installing it before continuing would be even better." 9545*22dc650dSSadaf Ebrahimi fi 9546*22dc650dSSadaf Ebrahimi ;; 9547*22dc650dSSadaf Ebrahimi *) 9548*22dc650dSSadaf Ebrahimi func_append newdeplibs " $i" 9549*22dc650dSSadaf Ebrahimi ;; 9550*22dc650dSSadaf Ebrahimi esac 9551*22dc650dSSadaf Ebrahimi done 9552*22dc650dSSadaf Ebrahimi fi 9553*22dc650dSSadaf Ebrahimi ;; 9554*22dc650dSSadaf Ebrahimi file_magic*) 9555*22dc650dSSadaf Ebrahimi set dummy $deplibs_check_method; shift 9556*22dc650dSSadaf Ebrahimi file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9557*22dc650dSSadaf Ebrahimi for a_deplib in $deplibs; do 9558*22dc650dSSadaf Ebrahimi case $a_deplib in 9559*22dc650dSSadaf Ebrahimi -l*) 9560*22dc650dSSadaf Ebrahimi func_stripname -l '' "$a_deplib" 9561*22dc650dSSadaf Ebrahimi name=$func_stripname_result 9562*22dc650dSSadaf Ebrahimi if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9563*22dc650dSSadaf Ebrahimi case " $predeps $postdeps " in 9564*22dc650dSSadaf Ebrahimi *" $a_deplib "*) 9565*22dc650dSSadaf Ebrahimi func_append newdeplibs " $a_deplib" 9566*22dc650dSSadaf Ebrahimi a_deplib= 9567*22dc650dSSadaf Ebrahimi ;; 9568*22dc650dSSadaf Ebrahimi esac 9569*22dc650dSSadaf Ebrahimi fi 9570*22dc650dSSadaf Ebrahimi if test -n "$a_deplib"; then 9571*22dc650dSSadaf Ebrahimi libname=`eval "\\$ECHO \"$libname_spec\""` 9572*22dc650dSSadaf Ebrahimi if test -n "$file_magic_glob"; then 9573*22dc650dSSadaf Ebrahimi libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 9574*22dc650dSSadaf Ebrahimi else 9575*22dc650dSSadaf Ebrahimi libnameglob=$libname 9576*22dc650dSSadaf Ebrahimi fi 9577*22dc650dSSadaf Ebrahimi test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` 9578*22dc650dSSadaf Ebrahimi for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9579*22dc650dSSadaf Ebrahimi if test yes = "$want_nocaseglob"; then 9580*22dc650dSSadaf Ebrahimi shopt -s nocaseglob 9581*22dc650dSSadaf Ebrahimi potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9582*22dc650dSSadaf Ebrahimi $nocaseglob 9583*22dc650dSSadaf Ebrahimi else 9584*22dc650dSSadaf Ebrahimi potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9585*22dc650dSSadaf Ebrahimi fi 9586*22dc650dSSadaf Ebrahimi for potent_lib in $potential_libs; do 9587*22dc650dSSadaf Ebrahimi # Follow soft links. 9588*22dc650dSSadaf Ebrahimi if ls -lLd "$potent_lib" 2>/dev/null | 9589*22dc650dSSadaf Ebrahimi $GREP " -> " >/dev/null; then 9590*22dc650dSSadaf Ebrahimi continue 9591*22dc650dSSadaf Ebrahimi fi 9592*22dc650dSSadaf Ebrahimi # The statement above tries to avoid entering an 9593*22dc650dSSadaf Ebrahimi # endless loop below, in case of cyclic links. 9594*22dc650dSSadaf Ebrahimi # We might still enter an endless loop, since a link 9595*22dc650dSSadaf Ebrahimi # loop can be closed while we follow links, 9596*22dc650dSSadaf Ebrahimi # but so what? 9597*22dc650dSSadaf Ebrahimi potlib=$potent_lib 9598*22dc650dSSadaf Ebrahimi while test -h "$potlib" 2>/dev/null; do 9599*22dc650dSSadaf Ebrahimi potliblink=`ls -ld $potlib | $SED 's/.* -> //'` 9600*22dc650dSSadaf Ebrahimi case $potliblink in 9601*22dc650dSSadaf Ebrahimi [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; 9602*22dc650dSSadaf Ebrahimi *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; 9603*22dc650dSSadaf Ebrahimi esac 9604*22dc650dSSadaf Ebrahimi done 9605*22dc650dSSadaf Ebrahimi if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 9606*22dc650dSSadaf Ebrahimi $SED -e 10q | 9607*22dc650dSSadaf Ebrahimi $EGREP "$file_magic_regex" > /dev/null; then 9608*22dc650dSSadaf Ebrahimi func_append newdeplibs " $a_deplib" 9609*22dc650dSSadaf Ebrahimi a_deplib= 9610*22dc650dSSadaf Ebrahimi break 2 9611*22dc650dSSadaf Ebrahimi fi 9612*22dc650dSSadaf Ebrahimi done 9613*22dc650dSSadaf Ebrahimi done 9614*22dc650dSSadaf Ebrahimi fi 9615*22dc650dSSadaf Ebrahimi if test -n "$a_deplib"; then 9616*22dc650dSSadaf Ebrahimi droppeddeps=yes 9617*22dc650dSSadaf Ebrahimi echo 9618*22dc650dSSadaf Ebrahimi $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 9619*22dc650dSSadaf Ebrahimi echo "*** I have the capability to make that library automatically link in when" 9620*22dc650dSSadaf Ebrahimi echo "*** you link to this library. But I can only do this if you have a" 9621*22dc650dSSadaf Ebrahimi echo "*** shared version of the library, which you do not appear to have" 9622*22dc650dSSadaf Ebrahimi echo "*** because I did check the linker path looking for a file starting" 9623*22dc650dSSadaf Ebrahimi if test -z "$potlib"; then 9624*22dc650dSSadaf Ebrahimi $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 9625*22dc650dSSadaf Ebrahimi else 9626*22dc650dSSadaf Ebrahimi $ECHO "*** with $libname and none of the candidates passed a file format test" 9627*22dc650dSSadaf Ebrahimi $ECHO "*** using a file magic. Last file checked: $potlib" 9628*22dc650dSSadaf Ebrahimi fi 9629*22dc650dSSadaf Ebrahimi fi 9630*22dc650dSSadaf Ebrahimi ;; 9631*22dc650dSSadaf Ebrahimi *) 9632*22dc650dSSadaf Ebrahimi # Add a -L argument. 9633*22dc650dSSadaf Ebrahimi func_append newdeplibs " $a_deplib" 9634*22dc650dSSadaf Ebrahimi ;; 9635*22dc650dSSadaf Ebrahimi esac 9636*22dc650dSSadaf Ebrahimi done # Gone through all deplibs. 9637*22dc650dSSadaf Ebrahimi ;; 9638*22dc650dSSadaf Ebrahimi match_pattern*) 9639*22dc650dSSadaf Ebrahimi set dummy $deplibs_check_method; shift 9640*22dc650dSSadaf Ebrahimi match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9641*22dc650dSSadaf Ebrahimi for a_deplib in $deplibs; do 9642*22dc650dSSadaf Ebrahimi case $a_deplib in 9643*22dc650dSSadaf Ebrahimi -l*) 9644*22dc650dSSadaf Ebrahimi func_stripname -l '' "$a_deplib" 9645*22dc650dSSadaf Ebrahimi name=$func_stripname_result 9646*22dc650dSSadaf Ebrahimi if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9647*22dc650dSSadaf Ebrahimi case " $predeps $postdeps " in 9648*22dc650dSSadaf Ebrahimi *" $a_deplib "*) 9649*22dc650dSSadaf Ebrahimi func_append newdeplibs " $a_deplib" 9650*22dc650dSSadaf Ebrahimi a_deplib= 9651*22dc650dSSadaf Ebrahimi ;; 9652*22dc650dSSadaf Ebrahimi esac 9653*22dc650dSSadaf Ebrahimi fi 9654*22dc650dSSadaf Ebrahimi if test -n "$a_deplib"; then 9655*22dc650dSSadaf Ebrahimi libname=`eval "\\$ECHO \"$libname_spec\""` 9656*22dc650dSSadaf Ebrahimi for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9657*22dc650dSSadaf Ebrahimi potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 9658*22dc650dSSadaf Ebrahimi for potent_lib in $potential_libs; do 9659*22dc650dSSadaf Ebrahimi potlib=$potent_lib # see symlink-check above in file_magic test 9660*22dc650dSSadaf Ebrahimi if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 9661*22dc650dSSadaf Ebrahimi $EGREP "$match_pattern_regex" > /dev/null; then 9662*22dc650dSSadaf Ebrahimi func_append newdeplibs " $a_deplib" 9663*22dc650dSSadaf Ebrahimi a_deplib= 9664*22dc650dSSadaf Ebrahimi break 2 9665*22dc650dSSadaf Ebrahimi fi 9666*22dc650dSSadaf Ebrahimi done 9667*22dc650dSSadaf Ebrahimi done 9668*22dc650dSSadaf Ebrahimi fi 9669*22dc650dSSadaf Ebrahimi if test -n "$a_deplib"; then 9670*22dc650dSSadaf Ebrahimi droppeddeps=yes 9671*22dc650dSSadaf Ebrahimi echo 9672*22dc650dSSadaf Ebrahimi $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 9673*22dc650dSSadaf Ebrahimi echo "*** I have the capability to make that library automatically link in when" 9674*22dc650dSSadaf Ebrahimi echo "*** you link to this library. But I can only do this if you have a" 9675*22dc650dSSadaf Ebrahimi echo "*** shared version of the library, which you do not appear to have" 9676*22dc650dSSadaf Ebrahimi echo "*** because I did check the linker path looking for a file starting" 9677*22dc650dSSadaf Ebrahimi if test -z "$potlib"; then 9678*22dc650dSSadaf Ebrahimi $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 9679*22dc650dSSadaf Ebrahimi else 9680*22dc650dSSadaf Ebrahimi $ECHO "*** with $libname and none of the candidates passed a file format test" 9681*22dc650dSSadaf Ebrahimi $ECHO "*** using a regex pattern. Last file checked: $potlib" 9682*22dc650dSSadaf Ebrahimi fi 9683*22dc650dSSadaf Ebrahimi fi 9684*22dc650dSSadaf Ebrahimi ;; 9685*22dc650dSSadaf Ebrahimi *) 9686*22dc650dSSadaf Ebrahimi # Add a -L argument. 9687*22dc650dSSadaf Ebrahimi func_append newdeplibs " $a_deplib" 9688*22dc650dSSadaf Ebrahimi ;; 9689*22dc650dSSadaf Ebrahimi esac 9690*22dc650dSSadaf Ebrahimi done # Gone through all deplibs. 9691*22dc650dSSadaf Ebrahimi ;; 9692*22dc650dSSadaf Ebrahimi none | unknown | *) 9693*22dc650dSSadaf Ebrahimi newdeplibs= 9694*22dc650dSSadaf Ebrahimi tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 9695*22dc650dSSadaf Ebrahimi if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9696*22dc650dSSadaf Ebrahimi for i in $predeps $postdeps; do 9697*22dc650dSSadaf Ebrahimi # can't use Xsed below, because $i might contain '/' 9698*22dc650dSSadaf Ebrahimi tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` 9699*22dc650dSSadaf Ebrahimi done 9700*22dc650dSSadaf Ebrahimi fi 9701*22dc650dSSadaf Ebrahimi case $tmp_deplibs in 9702*22dc650dSSadaf Ebrahimi *[!\ \ ]*) 9703*22dc650dSSadaf Ebrahimi echo 9704*22dc650dSSadaf Ebrahimi if test none = "$deplibs_check_method"; then 9705*22dc650dSSadaf Ebrahimi echo "*** Warning: inter-library dependencies are not supported in this platform." 9706*22dc650dSSadaf Ebrahimi else 9707*22dc650dSSadaf Ebrahimi echo "*** Warning: inter-library dependencies are not known to be supported." 9708*22dc650dSSadaf Ebrahimi fi 9709*22dc650dSSadaf Ebrahimi echo "*** All declared inter-library dependencies are being dropped." 9710*22dc650dSSadaf Ebrahimi droppeddeps=yes 9711*22dc650dSSadaf Ebrahimi ;; 9712*22dc650dSSadaf Ebrahimi esac 9713*22dc650dSSadaf Ebrahimi ;; 9714*22dc650dSSadaf Ebrahimi esac 9715*22dc650dSSadaf Ebrahimi versuffix=$versuffix_save 9716*22dc650dSSadaf Ebrahimi major=$major_save 9717*22dc650dSSadaf Ebrahimi release=$release_save 9718*22dc650dSSadaf Ebrahimi libname=$libname_save 9719*22dc650dSSadaf Ebrahimi name=$name_save 9720*22dc650dSSadaf Ebrahimi 9721*22dc650dSSadaf Ebrahimi case $host in 9722*22dc650dSSadaf Ebrahimi *-*-rhapsody* | *-*-darwin1.[012]) 9723*22dc650dSSadaf Ebrahimi # On Rhapsody replace the C library with the System framework 9724*22dc650dSSadaf Ebrahimi newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 9725*22dc650dSSadaf Ebrahimi ;; 9726*22dc650dSSadaf Ebrahimi esac 9727*22dc650dSSadaf Ebrahimi 9728*22dc650dSSadaf Ebrahimi if test yes = "$droppeddeps"; then 9729*22dc650dSSadaf Ebrahimi if test yes = "$module"; then 9730*22dc650dSSadaf Ebrahimi echo 9731*22dc650dSSadaf Ebrahimi echo "*** Warning: libtool could not satisfy all declared inter-library" 9732*22dc650dSSadaf Ebrahimi $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 9733*22dc650dSSadaf Ebrahimi echo "*** a static module, that should work as long as the dlopening" 9734*22dc650dSSadaf Ebrahimi echo "*** application is linked with the -dlopen flag." 9735*22dc650dSSadaf Ebrahimi if test -z "$global_symbol_pipe"; then 9736*22dc650dSSadaf Ebrahimi echo 9737*22dc650dSSadaf Ebrahimi echo "*** However, this would only work if libtool was able to extract symbol" 9738*22dc650dSSadaf Ebrahimi echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 9739*22dc650dSSadaf Ebrahimi echo "*** not find such a program. So, this module is probably useless." 9740*22dc650dSSadaf Ebrahimi echo "*** 'nm' from GNU binutils and a full rebuild may help." 9741*22dc650dSSadaf Ebrahimi fi 9742*22dc650dSSadaf Ebrahimi if test no = "$build_old_libs"; then 9743*22dc650dSSadaf Ebrahimi oldlibs=$output_objdir/$libname.$libext 9744*22dc650dSSadaf Ebrahimi build_libtool_libs=module 9745*22dc650dSSadaf Ebrahimi build_old_libs=yes 9746*22dc650dSSadaf Ebrahimi else 9747*22dc650dSSadaf Ebrahimi build_libtool_libs=no 9748*22dc650dSSadaf Ebrahimi fi 9749*22dc650dSSadaf Ebrahimi else 9750*22dc650dSSadaf Ebrahimi echo "*** The inter-library dependencies that have been dropped here will be" 9751*22dc650dSSadaf Ebrahimi echo "*** automatically added whenever a program is linked with this library" 9752*22dc650dSSadaf Ebrahimi echo "*** or is declared to -dlopen it." 9753*22dc650dSSadaf Ebrahimi 9754*22dc650dSSadaf Ebrahimi if test no = "$allow_undefined"; then 9755*22dc650dSSadaf Ebrahimi echo 9756*22dc650dSSadaf Ebrahimi echo "*** Since this library must not contain undefined symbols," 9757*22dc650dSSadaf Ebrahimi echo "*** because either the platform does not support them or" 9758*22dc650dSSadaf Ebrahimi echo "*** it was explicitly requested with -no-undefined," 9759*22dc650dSSadaf Ebrahimi echo "*** libtool will only create a static version of it." 9760*22dc650dSSadaf Ebrahimi if test no = "$build_old_libs"; then 9761*22dc650dSSadaf Ebrahimi oldlibs=$output_objdir/$libname.$libext 9762*22dc650dSSadaf Ebrahimi build_libtool_libs=module 9763*22dc650dSSadaf Ebrahimi build_old_libs=yes 9764*22dc650dSSadaf Ebrahimi else 9765*22dc650dSSadaf Ebrahimi build_libtool_libs=no 9766*22dc650dSSadaf Ebrahimi fi 9767*22dc650dSSadaf Ebrahimi fi 9768*22dc650dSSadaf Ebrahimi fi 9769*22dc650dSSadaf Ebrahimi fi 9770*22dc650dSSadaf Ebrahimi # Done checking deplibs! 9771*22dc650dSSadaf Ebrahimi deplibs=$newdeplibs 9772*22dc650dSSadaf Ebrahimi fi 9773*22dc650dSSadaf Ebrahimi # Time to change all our "foo.ltframework" stuff back to "-framework foo" 9774*22dc650dSSadaf Ebrahimi case $host in 9775*22dc650dSSadaf Ebrahimi *-*-darwin*) 9776*22dc650dSSadaf Ebrahimi newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9777*22dc650dSSadaf Ebrahimi new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9778*22dc650dSSadaf Ebrahimi deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9779*22dc650dSSadaf Ebrahimi ;; 9780*22dc650dSSadaf Ebrahimi esac 9781*22dc650dSSadaf Ebrahimi 9782*22dc650dSSadaf Ebrahimi # move library search paths that coincide with paths to not yet 9783*22dc650dSSadaf Ebrahimi # installed libraries to the beginning of the library search list 9784*22dc650dSSadaf Ebrahimi new_libs= 9785*22dc650dSSadaf Ebrahimi for path in $notinst_path; do 9786*22dc650dSSadaf Ebrahimi case " $new_libs " in 9787*22dc650dSSadaf Ebrahimi *" -L$path/$objdir "*) ;; 9788*22dc650dSSadaf Ebrahimi *) 9789*22dc650dSSadaf Ebrahimi case " $deplibs " in 9790*22dc650dSSadaf Ebrahimi *" -L$path/$objdir "*) 9791*22dc650dSSadaf Ebrahimi func_append new_libs " -L$path/$objdir" ;; 9792*22dc650dSSadaf Ebrahimi esac 9793*22dc650dSSadaf Ebrahimi ;; 9794*22dc650dSSadaf Ebrahimi esac 9795*22dc650dSSadaf Ebrahimi done 9796*22dc650dSSadaf Ebrahimi for deplib in $deplibs; do 9797*22dc650dSSadaf Ebrahimi case $deplib in 9798*22dc650dSSadaf Ebrahimi -L*) 9799*22dc650dSSadaf Ebrahimi case " $new_libs " in 9800*22dc650dSSadaf Ebrahimi *" $deplib "*) ;; 9801*22dc650dSSadaf Ebrahimi *) func_append new_libs " $deplib" ;; 9802*22dc650dSSadaf Ebrahimi esac 9803*22dc650dSSadaf Ebrahimi ;; 9804*22dc650dSSadaf Ebrahimi *) func_append new_libs " $deplib" ;; 9805*22dc650dSSadaf Ebrahimi esac 9806*22dc650dSSadaf Ebrahimi done 9807*22dc650dSSadaf Ebrahimi deplibs=$new_libs 9808*22dc650dSSadaf Ebrahimi 9809*22dc650dSSadaf Ebrahimi # All the library-specific variables (install_libdir is set above). 9810*22dc650dSSadaf Ebrahimi library_names= 9811*22dc650dSSadaf Ebrahimi old_library= 9812*22dc650dSSadaf Ebrahimi dlname= 9813*22dc650dSSadaf Ebrahimi 9814*22dc650dSSadaf Ebrahimi # Test again, we may have decided not to build it any more 9815*22dc650dSSadaf Ebrahimi if test yes = "$build_libtool_libs"; then 9816*22dc650dSSadaf Ebrahimi # Remove $wl instances when linking with ld. 9817*22dc650dSSadaf Ebrahimi # FIXME: should test the right _cmds variable. 9818*22dc650dSSadaf Ebrahimi case $archive_cmds in 9819*22dc650dSSadaf Ebrahimi *\$LD\ *) wl= ;; 9820*22dc650dSSadaf Ebrahimi esac 9821*22dc650dSSadaf Ebrahimi if test yes = "$hardcode_into_libs"; then 9822*22dc650dSSadaf Ebrahimi # Hardcode the library paths 9823*22dc650dSSadaf Ebrahimi hardcode_libdirs= 9824*22dc650dSSadaf Ebrahimi dep_rpath= 9825*22dc650dSSadaf Ebrahimi rpath=$finalize_rpath 9826*22dc650dSSadaf Ebrahimi test relink = "$opt_mode" || rpath=$compile_rpath$rpath 9827*22dc650dSSadaf Ebrahimi for libdir in $rpath; do 9828*22dc650dSSadaf Ebrahimi if test -n "$hardcode_libdir_flag_spec"; then 9829*22dc650dSSadaf Ebrahimi if test -n "$hardcode_libdir_separator"; then 9830*22dc650dSSadaf Ebrahimi func_replace_sysroot "$libdir" 9831*22dc650dSSadaf Ebrahimi libdir=$func_replace_sysroot_result 9832*22dc650dSSadaf Ebrahimi if test -z "$hardcode_libdirs"; then 9833*22dc650dSSadaf Ebrahimi hardcode_libdirs=$libdir 9834*22dc650dSSadaf Ebrahimi else 9835*22dc650dSSadaf Ebrahimi # Just accumulate the unique libdirs. 9836*22dc650dSSadaf Ebrahimi case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 9837*22dc650dSSadaf Ebrahimi *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 9838*22dc650dSSadaf Ebrahimi ;; 9839*22dc650dSSadaf Ebrahimi *) 9840*22dc650dSSadaf Ebrahimi func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 9841*22dc650dSSadaf Ebrahimi ;; 9842*22dc650dSSadaf Ebrahimi esac 9843*22dc650dSSadaf Ebrahimi fi 9844*22dc650dSSadaf Ebrahimi else 9845*22dc650dSSadaf Ebrahimi eval flag=\"$hardcode_libdir_flag_spec\" 9846*22dc650dSSadaf Ebrahimi func_append dep_rpath " $flag" 9847*22dc650dSSadaf Ebrahimi fi 9848*22dc650dSSadaf Ebrahimi elif test -n "$runpath_var"; then 9849*22dc650dSSadaf Ebrahimi case "$perm_rpath " in 9850*22dc650dSSadaf Ebrahimi *" $libdir "*) ;; 9851*22dc650dSSadaf Ebrahimi *) func_append perm_rpath " $libdir" ;; 9852*22dc650dSSadaf Ebrahimi esac 9853*22dc650dSSadaf Ebrahimi fi 9854*22dc650dSSadaf Ebrahimi done 9855*22dc650dSSadaf Ebrahimi # Substitute the hardcoded libdirs into the rpath. 9856*22dc650dSSadaf Ebrahimi if test -n "$hardcode_libdir_separator" && 9857*22dc650dSSadaf Ebrahimi test -n "$hardcode_libdirs"; then 9858*22dc650dSSadaf Ebrahimi libdir=$hardcode_libdirs 9859*22dc650dSSadaf Ebrahimi eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 9860*22dc650dSSadaf Ebrahimi fi 9861*22dc650dSSadaf Ebrahimi if test -n "$runpath_var" && test -n "$perm_rpath"; then 9862*22dc650dSSadaf Ebrahimi # We should set the runpath_var. 9863*22dc650dSSadaf Ebrahimi rpath= 9864*22dc650dSSadaf Ebrahimi for dir in $perm_rpath; do 9865*22dc650dSSadaf Ebrahimi func_append rpath "$dir:" 9866*22dc650dSSadaf Ebrahimi done 9867*22dc650dSSadaf Ebrahimi eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 9868*22dc650dSSadaf Ebrahimi fi 9869*22dc650dSSadaf Ebrahimi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 9870*22dc650dSSadaf Ebrahimi fi 9871*22dc650dSSadaf Ebrahimi 9872*22dc650dSSadaf Ebrahimi shlibpath=$finalize_shlibpath 9873*22dc650dSSadaf Ebrahimi test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath 9874*22dc650dSSadaf Ebrahimi if test -n "$shlibpath"; then 9875*22dc650dSSadaf Ebrahimi eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 9876*22dc650dSSadaf Ebrahimi fi 9877*22dc650dSSadaf Ebrahimi 9878*22dc650dSSadaf Ebrahimi # Get the real and link names of the library. 9879*22dc650dSSadaf Ebrahimi eval shared_ext=\"$shrext_cmds\" 9880*22dc650dSSadaf Ebrahimi eval library_names=\"$library_names_spec\" 9881*22dc650dSSadaf Ebrahimi set dummy $library_names 9882*22dc650dSSadaf Ebrahimi shift 9883*22dc650dSSadaf Ebrahimi realname=$1 9884*22dc650dSSadaf Ebrahimi shift 9885*22dc650dSSadaf Ebrahimi 9886*22dc650dSSadaf Ebrahimi if test -n "$soname_spec"; then 9887*22dc650dSSadaf Ebrahimi eval soname=\"$soname_spec\" 9888*22dc650dSSadaf Ebrahimi else 9889*22dc650dSSadaf Ebrahimi soname=$realname 9890*22dc650dSSadaf Ebrahimi fi 9891*22dc650dSSadaf Ebrahimi if test -z "$dlname"; then 9892*22dc650dSSadaf Ebrahimi dlname=$soname 9893*22dc650dSSadaf Ebrahimi fi 9894*22dc650dSSadaf Ebrahimi 9895*22dc650dSSadaf Ebrahimi lib=$output_objdir/$realname 9896*22dc650dSSadaf Ebrahimi linknames= 9897*22dc650dSSadaf Ebrahimi for link 9898*22dc650dSSadaf Ebrahimi do 9899*22dc650dSSadaf Ebrahimi func_append linknames " $link" 9900*22dc650dSSadaf Ebrahimi done 9901*22dc650dSSadaf Ebrahimi 9902*22dc650dSSadaf Ebrahimi # Use standard objects if they are pic 9903*22dc650dSSadaf Ebrahimi test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 9904*22dc650dSSadaf Ebrahimi test "X$libobjs" = "X " && libobjs= 9905*22dc650dSSadaf Ebrahimi 9906*22dc650dSSadaf Ebrahimi delfiles= 9907*22dc650dSSadaf Ebrahimi if test -n "$export_symbols" && test -n "$include_expsyms"; then 9908*22dc650dSSadaf Ebrahimi $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 9909*22dc650dSSadaf Ebrahimi export_symbols=$output_objdir/$libname.uexp 9910*22dc650dSSadaf Ebrahimi func_append delfiles " $export_symbols" 9911*22dc650dSSadaf Ebrahimi fi 9912*22dc650dSSadaf Ebrahimi 9913*22dc650dSSadaf Ebrahimi orig_export_symbols= 9914*22dc650dSSadaf Ebrahimi case $host_os in 9915*22dc650dSSadaf Ebrahimi cygwin* | mingw* | cegcc*) 9916*22dc650dSSadaf Ebrahimi if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 9917*22dc650dSSadaf Ebrahimi # exporting using user supplied symfile 9918*22dc650dSSadaf Ebrahimi func_dll_def_p "$export_symbols" || { 9919*22dc650dSSadaf Ebrahimi # and it's NOT already a .def file. Must figure out 9920*22dc650dSSadaf Ebrahimi # which of the given symbols are data symbols and tag 9921*22dc650dSSadaf Ebrahimi # them as such. So, trigger use of export_symbols_cmds. 9922*22dc650dSSadaf Ebrahimi # export_symbols gets reassigned inside the "prepare 9923*22dc650dSSadaf Ebrahimi # the list of exported symbols" if statement, so the 9924*22dc650dSSadaf Ebrahimi # include_expsyms logic still works. 9925*22dc650dSSadaf Ebrahimi orig_export_symbols=$export_symbols 9926*22dc650dSSadaf Ebrahimi export_symbols= 9927*22dc650dSSadaf Ebrahimi always_export_symbols=yes 9928*22dc650dSSadaf Ebrahimi } 9929*22dc650dSSadaf Ebrahimi fi 9930*22dc650dSSadaf Ebrahimi ;; 9931*22dc650dSSadaf Ebrahimi esac 9932*22dc650dSSadaf Ebrahimi 9933*22dc650dSSadaf Ebrahimi # Prepare the list of exported symbols 9934*22dc650dSSadaf Ebrahimi if test -z "$export_symbols"; then 9935*22dc650dSSadaf Ebrahimi if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then 9936*22dc650dSSadaf Ebrahimi func_verbose "generating symbol list for '$libname.la'" 9937*22dc650dSSadaf Ebrahimi export_symbols=$output_objdir/$libname.exp 9938*22dc650dSSadaf Ebrahimi $opt_dry_run || $RM $export_symbols 9939*22dc650dSSadaf Ebrahimi cmds=$export_symbols_cmds 9940*22dc650dSSadaf Ebrahimi save_ifs=$IFS; IFS='~' 9941*22dc650dSSadaf Ebrahimi for cmd1 in $cmds; do 9942*22dc650dSSadaf Ebrahimi IFS=$save_ifs 9943*22dc650dSSadaf Ebrahimi # Take the normal branch if the nm_file_list_spec branch 9944*22dc650dSSadaf Ebrahimi # doesn't work or if tool conversion is not needed. 9945*22dc650dSSadaf Ebrahimi case $nm_file_list_spec~$to_tool_file_cmd in 9946*22dc650dSSadaf Ebrahimi *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 9947*22dc650dSSadaf Ebrahimi try_normal_branch=yes 9948*22dc650dSSadaf Ebrahimi eval cmd=\"$cmd1\" 9949*22dc650dSSadaf Ebrahimi func_len " $cmd" 9950*22dc650dSSadaf Ebrahimi len=$func_len_result 9951*22dc650dSSadaf Ebrahimi ;; 9952*22dc650dSSadaf Ebrahimi *) 9953*22dc650dSSadaf Ebrahimi try_normal_branch=no 9954*22dc650dSSadaf Ebrahimi ;; 9955*22dc650dSSadaf Ebrahimi esac 9956*22dc650dSSadaf Ebrahimi if test yes = "$try_normal_branch" \ 9957*22dc650dSSadaf Ebrahimi && { test "$len" -lt "$max_cmd_len" \ 9958*22dc650dSSadaf Ebrahimi || test "$max_cmd_len" -le -1; } 9959*22dc650dSSadaf Ebrahimi then 9960*22dc650dSSadaf Ebrahimi func_show_eval "$cmd" 'exit $?' 9961*22dc650dSSadaf Ebrahimi skipped_export=false 9962*22dc650dSSadaf Ebrahimi elif test -n "$nm_file_list_spec"; then 9963*22dc650dSSadaf Ebrahimi func_basename "$output" 9964*22dc650dSSadaf Ebrahimi output_la=$func_basename_result 9965*22dc650dSSadaf Ebrahimi save_libobjs=$libobjs 9966*22dc650dSSadaf Ebrahimi save_output=$output 9967*22dc650dSSadaf Ebrahimi output=$output_objdir/$output_la.nm 9968*22dc650dSSadaf Ebrahimi func_to_tool_file "$output" 9969*22dc650dSSadaf Ebrahimi libobjs=$nm_file_list_spec$func_to_tool_file_result 9970*22dc650dSSadaf Ebrahimi func_append delfiles " $output" 9971*22dc650dSSadaf Ebrahimi func_verbose "creating $NM input file list: $output" 9972*22dc650dSSadaf Ebrahimi for obj in $save_libobjs; do 9973*22dc650dSSadaf Ebrahimi func_to_tool_file "$obj" 9974*22dc650dSSadaf Ebrahimi $ECHO "$func_to_tool_file_result" 9975*22dc650dSSadaf Ebrahimi done > "$output" 9976*22dc650dSSadaf Ebrahimi eval cmd=\"$cmd1\" 9977*22dc650dSSadaf Ebrahimi func_show_eval "$cmd" 'exit $?' 9978*22dc650dSSadaf Ebrahimi output=$save_output 9979*22dc650dSSadaf Ebrahimi libobjs=$save_libobjs 9980*22dc650dSSadaf Ebrahimi skipped_export=false 9981*22dc650dSSadaf Ebrahimi else 9982*22dc650dSSadaf Ebrahimi # The command line is too long to execute in one step. 9983*22dc650dSSadaf Ebrahimi func_verbose "using reloadable object file for export list..." 9984*22dc650dSSadaf Ebrahimi skipped_export=: 9985*22dc650dSSadaf Ebrahimi # Break out early, otherwise skipped_export may be 9986*22dc650dSSadaf Ebrahimi # set to false by a later but shorter cmd. 9987*22dc650dSSadaf Ebrahimi break 9988*22dc650dSSadaf Ebrahimi fi 9989*22dc650dSSadaf Ebrahimi done 9990*22dc650dSSadaf Ebrahimi IFS=$save_ifs 9991*22dc650dSSadaf Ebrahimi if test -n "$export_symbols_regex" && test : != "$skipped_export"; then 9992*22dc650dSSadaf Ebrahimi func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 9993*22dc650dSSadaf Ebrahimi func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 9994*22dc650dSSadaf Ebrahimi fi 9995*22dc650dSSadaf Ebrahimi fi 9996*22dc650dSSadaf Ebrahimi fi 9997*22dc650dSSadaf Ebrahimi 9998*22dc650dSSadaf Ebrahimi if test -n "$export_symbols" && test -n "$include_expsyms"; then 9999*22dc650dSSadaf Ebrahimi tmp_export_symbols=$export_symbols 10000*22dc650dSSadaf Ebrahimi test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 10001*22dc650dSSadaf Ebrahimi $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 10002*22dc650dSSadaf Ebrahimi fi 10003*22dc650dSSadaf Ebrahimi 10004*22dc650dSSadaf Ebrahimi if test : != "$skipped_export" && test -n "$orig_export_symbols"; then 10005*22dc650dSSadaf Ebrahimi # The given exports_symbols file has to be filtered, so filter it. 10006*22dc650dSSadaf Ebrahimi func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 10007*22dc650dSSadaf Ebrahimi # FIXME: $output_objdir/$libname.filter potentially contains lots of 10008*22dc650dSSadaf Ebrahimi # 's' commands, which not all seds can handle. GNU sed should be fine 10009*22dc650dSSadaf Ebrahimi # though. Also, the filter scales superlinearly with the number of 10010*22dc650dSSadaf Ebrahimi # global variables. join(1) would be nice here, but unfortunately 10011*22dc650dSSadaf Ebrahimi # isn't a blessed tool. 10012*22dc650dSSadaf Ebrahimi $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 10013*22dc650dSSadaf Ebrahimi func_append delfiles " $export_symbols $output_objdir/$libname.filter" 10014*22dc650dSSadaf Ebrahimi export_symbols=$output_objdir/$libname.def 10015*22dc650dSSadaf Ebrahimi $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 10016*22dc650dSSadaf Ebrahimi fi 10017*22dc650dSSadaf Ebrahimi 10018*22dc650dSSadaf Ebrahimi tmp_deplibs= 10019*22dc650dSSadaf Ebrahimi for test_deplib in $deplibs; do 10020*22dc650dSSadaf Ebrahimi case " $convenience " in 10021*22dc650dSSadaf Ebrahimi *" $test_deplib "*) ;; 10022*22dc650dSSadaf Ebrahimi *) 10023*22dc650dSSadaf Ebrahimi func_append tmp_deplibs " $test_deplib" 10024*22dc650dSSadaf Ebrahimi ;; 10025*22dc650dSSadaf Ebrahimi esac 10026*22dc650dSSadaf Ebrahimi done 10027*22dc650dSSadaf Ebrahimi deplibs=$tmp_deplibs 10028*22dc650dSSadaf Ebrahimi 10029*22dc650dSSadaf Ebrahimi if test -n "$convenience"; then 10030*22dc650dSSadaf Ebrahimi if test -n "$whole_archive_flag_spec" && 10031*22dc650dSSadaf Ebrahimi test yes = "$compiler_needs_object" && 10032*22dc650dSSadaf Ebrahimi test -z "$libobjs"; then 10033*22dc650dSSadaf Ebrahimi # extract the archives, so we have objects to list. 10034*22dc650dSSadaf Ebrahimi # TODO: could optimize this to just extract one archive. 10035*22dc650dSSadaf Ebrahimi whole_archive_flag_spec= 10036*22dc650dSSadaf Ebrahimi fi 10037*22dc650dSSadaf Ebrahimi if test -n "$whole_archive_flag_spec"; then 10038*22dc650dSSadaf Ebrahimi save_libobjs=$libobjs 10039*22dc650dSSadaf Ebrahimi eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 10040*22dc650dSSadaf Ebrahimi test "X$libobjs" = "X " && libobjs= 10041*22dc650dSSadaf Ebrahimi else 10042*22dc650dSSadaf Ebrahimi gentop=$output_objdir/${outputname}x 10043*22dc650dSSadaf Ebrahimi func_append generated " $gentop" 10044*22dc650dSSadaf Ebrahimi 10045*22dc650dSSadaf Ebrahimi func_extract_archives $gentop $convenience 10046*22dc650dSSadaf Ebrahimi func_append libobjs " $func_extract_archives_result" 10047*22dc650dSSadaf Ebrahimi test "X$libobjs" = "X " && libobjs= 10048*22dc650dSSadaf Ebrahimi fi 10049*22dc650dSSadaf Ebrahimi fi 10050*22dc650dSSadaf Ebrahimi 10051*22dc650dSSadaf Ebrahimi if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then 10052*22dc650dSSadaf Ebrahimi eval flag=\"$thread_safe_flag_spec\" 10053*22dc650dSSadaf Ebrahimi func_append linker_flags " $flag" 10054*22dc650dSSadaf Ebrahimi fi 10055*22dc650dSSadaf Ebrahimi 10056*22dc650dSSadaf Ebrahimi # Make a backup of the uninstalled library when relinking 10057*22dc650dSSadaf Ebrahimi if test relink = "$opt_mode"; then 10058*22dc650dSSadaf Ebrahimi $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 10059*22dc650dSSadaf Ebrahimi fi 10060*22dc650dSSadaf Ebrahimi 10061*22dc650dSSadaf Ebrahimi # Do each of the archive commands. 10062*22dc650dSSadaf Ebrahimi if test yes = "$module" && test -n "$module_cmds"; then 10063*22dc650dSSadaf Ebrahimi if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 10064*22dc650dSSadaf Ebrahimi eval test_cmds=\"$module_expsym_cmds\" 10065*22dc650dSSadaf Ebrahimi cmds=$module_expsym_cmds 10066*22dc650dSSadaf Ebrahimi else 10067*22dc650dSSadaf Ebrahimi eval test_cmds=\"$module_cmds\" 10068*22dc650dSSadaf Ebrahimi cmds=$module_cmds 10069*22dc650dSSadaf Ebrahimi fi 10070*22dc650dSSadaf Ebrahimi else 10071*22dc650dSSadaf Ebrahimi if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 10072*22dc650dSSadaf Ebrahimi eval test_cmds=\"$archive_expsym_cmds\" 10073*22dc650dSSadaf Ebrahimi cmds=$archive_expsym_cmds 10074*22dc650dSSadaf Ebrahimi else 10075*22dc650dSSadaf Ebrahimi eval test_cmds=\"$archive_cmds\" 10076*22dc650dSSadaf Ebrahimi cmds=$archive_cmds 10077*22dc650dSSadaf Ebrahimi fi 10078*22dc650dSSadaf Ebrahimi fi 10079*22dc650dSSadaf Ebrahimi 10080*22dc650dSSadaf Ebrahimi if test : != "$skipped_export" && 10081*22dc650dSSadaf Ebrahimi func_len " $test_cmds" && 10082*22dc650dSSadaf Ebrahimi len=$func_len_result && 10083*22dc650dSSadaf Ebrahimi test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 10084*22dc650dSSadaf Ebrahimi : 10085*22dc650dSSadaf Ebrahimi else 10086*22dc650dSSadaf Ebrahimi # The command line is too long to link in one step, link piecewise 10087*22dc650dSSadaf Ebrahimi # or, if using GNU ld and skipped_export is not :, use a linker 10088*22dc650dSSadaf Ebrahimi # script. 10089*22dc650dSSadaf Ebrahimi 10090*22dc650dSSadaf Ebrahimi # Save the value of $output and $libobjs because we want to 10091*22dc650dSSadaf Ebrahimi # use them later. If we have whole_archive_flag_spec, we 10092*22dc650dSSadaf Ebrahimi # want to use save_libobjs as it was before 10093*22dc650dSSadaf Ebrahimi # whole_archive_flag_spec was expanded, because we can't 10094*22dc650dSSadaf Ebrahimi # assume the linker understands whole_archive_flag_spec. 10095*22dc650dSSadaf Ebrahimi # This may have to be revisited, in case too many 10096*22dc650dSSadaf Ebrahimi # convenience libraries get linked in and end up exceeding 10097*22dc650dSSadaf Ebrahimi # the spec. 10098*22dc650dSSadaf Ebrahimi if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 10099*22dc650dSSadaf Ebrahimi save_libobjs=$libobjs 10100*22dc650dSSadaf Ebrahimi fi 10101*22dc650dSSadaf Ebrahimi save_output=$output 10102*22dc650dSSadaf Ebrahimi func_basename "$output" 10103*22dc650dSSadaf Ebrahimi output_la=$func_basename_result 10104*22dc650dSSadaf Ebrahimi 10105*22dc650dSSadaf Ebrahimi # Clear the reloadable object creation command queue and 10106*22dc650dSSadaf Ebrahimi # initialize k to one. 10107*22dc650dSSadaf Ebrahimi test_cmds= 10108*22dc650dSSadaf Ebrahimi concat_cmds= 10109*22dc650dSSadaf Ebrahimi objlist= 10110*22dc650dSSadaf Ebrahimi last_robj= 10111*22dc650dSSadaf Ebrahimi k=1 10112*22dc650dSSadaf Ebrahimi 10113*22dc650dSSadaf Ebrahimi if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then 10114*22dc650dSSadaf Ebrahimi output=$output_objdir/$output_la.lnkscript 10115*22dc650dSSadaf Ebrahimi func_verbose "creating GNU ld script: $output" 10116*22dc650dSSadaf Ebrahimi echo 'INPUT (' > $output 10117*22dc650dSSadaf Ebrahimi for obj in $save_libobjs 10118*22dc650dSSadaf Ebrahimi do 10119*22dc650dSSadaf Ebrahimi func_to_tool_file "$obj" 10120*22dc650dSSadaf Ebrahimi $ECHO "$func_to_tool_file_result" >> $output 10121*22dc650dSSadaf Ebrahimi done 10122*22dc650dSSadaf Ebrahimi echo ')' >> $output 10123*22dc650dSSadaf Ebrahimi func_append delfiles " $output" 10124*22dc650dSSadaf Ebrahimi func_to_tool_file "$output" 10125*22dc650dSSadaf Ebrahimi output=$func_to_tool_file_result 10126*22dc650dSSadaf Ebrahimi elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then 10127*22dc650dSSadaf Ebrahimi output=$output_objdir/$output_la.lnk 10128*22dc650dSSadaf Ebrahimi func_verbose "creating linker input file list: $output" 10129*22dc650dSSadaf Ebrahimi : > $output 10130*22dc650dSSadaf Ebrahimi set x $save_libobjs 10131*22dc650dSSadaf Ebrahimi shift 10132*22dc650dSSadaf Ebrahimi firstobj= 10133*22dc650dSSadaf Ebrahimi if test yes = "$compiler_needs_object"; then 10134*22dc650dSSadaf Ebrahimi firstobj="$1 " 10135*22dc650dSSadaf Ebrahimi shift 10136*22dc650dSSadaf Ebrahimi fi 10137*22dc650dSSadaf Ebrahimi for obj 10138*22dc650dSSadaf Ebrahimi do 10139*22dc650dSSadaf Ebrahimi func_to_tool_file "$obj" 10140*22dc650dSSadaf Ebrahimi $ECHO "$func_to_tool_file_result" >> $output 10141*22dc650dSSadaf Ebrahimi done 10142*22dc650dSSadaf Ebrahimi func_append delfiles " $output" 10143*22dc650dSSadaf Ebrahimi func_to_tool_file "$output" 10144*22dc650dSSadaf Ebrahimi output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 10145*22dc650dSSadaf Ebrahimi else 10146*22dc650dSSadaf Ebrahimi if test -n "$save_libobjs"; then 10147*22dc650dSSadaf Ebrahimi func_verbose "creating reloadable object files..." 10148*22dc650dSSadaf Ebrahimi output=$output_objdir/$output_la-$k.$objext 10149*22dc650dSSadaf Ebrahimi eval test_cmds=\"$reload_cmds\" 10150*22dc650dSSadaf Ebrahimi func_len " $test_cmds" 10151*22dc650dSSadaf Ebrahimi len0=$func_len_result 10152*22dc650dSSadaf Ebrahimi len=$len0 10153*22dc650dSSadaf Ebrahimi 10154*22dc650dSSadaf Ebrahimi # Loop over the list of objects to be linked. 10155*22dc650dSSadaf Ebrahimi for obj in $save_libobjs 10156*22dc650dSSadaf Ebrahimi do 10157*22dc650dSSadaf Ebrahimi func_len " $obj" 10158*22dc650dSSadaf Ebrahimi func_arith $len + $func_len_result 10159*22dc650dSSadaf Ebrahimi len=$func_arith_result 10160*22dc650dSSadaf Ebrahimi if test -z "$objlist" || 10161*22dc650dSSadaf Ebrahimi test "$len" -lt "$max_cmd_len"; then 10162*22dc650dSSadaf Ebrahimi func_append objlist " $obj" 10163*22dc650dSSadaf Ebrahimi else 10164*22dc650dSSadaf Ebrahimi # The command $test_cmds is almost too long, add a 10165*22dc650dSSadaf Ebrahimi # command to the queue. 10166*22dc650dSSadaf Ebrahimi if test 1 -eq "$k"; then 10167*22dc650dSSadaf Ebrahimi # The first file doesn't have a previous command to add. 10168*22dc650dSSadaf Ebrahimi reload_objs=$objlist 10169*22dc650dSSadaf Ebrahimi eval concat_cmds=\"$reload_cmds\" 10170*22dc650dSSadaf Ebrahimi else 10171*22dc650dSSadaf Ebrahimi # All subsequent reloadable object files will link in 10172*22dc650dSSadaf Ebrahimi # the last one created. 10173*22dc650dSSadaf Ebrahimi reload_objs="$objlist $last_robj" 10174*22dc650dSSadaf Ebrahimi eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 10175*22dc650dSSadaf Ebrahimi fi 10176*22dc650dSSadaf Ebrahimi last_robj=$output_objdir/$output_la-$k.$objext 10177*22dc650dSSadaf Ebrahimi func_arith $k + 1 10178*22dc650dSSadaf Ebrahimi k=$func_arith_result 10179*22dc650dSSadaf Ebrahimi output=$output_objdir/$output_la-$k.$objext 10180*22dc650dSSadaf Ebrahimi objlist=" $obj" 10181*22dc650dSSadaf Ebrahimi func_len " $last_robj" 10182*22dc650dSSadaf Ebrahimi func_arith $len0 + $func_len_result 10183*22dc650dSSadaf Ebrahimi len=$func_arith_result 10184*22dc650dSSadaf Ebrahimi fi 10185*22dc650dSSadaf Ebrahimi done 10186*22dc650dSSadaf Ebrahimi # Handle the remaining objects by creating one last 10187*22dc650dSSadaf Ebrahimi # reloadable object file. All subsequent reloadable object 10188*22dc650dSSadaf Ebrahimi # files will link in the last one created. 10189*22dc650dSSadaf Ebrahimi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 10190*22dc650dSSadaf Ebrahimi reload_objs="$objlist $last_robj" 10191*22dc650dSSadaf Ebrahimi eval concat_cmds=\"\$concat_cmds$reload_cmds\" 10192*22dc650dSSadaf Ebrahimi if test -n "$last_robj"; then 10193*22dc650dSSadaf Ebrahimi eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 10194*22dc650dSSadaf Ebrahimi fi 10195*22dc650dSSadaf Ebrahimi func_append delfiles " $output" 10196*22dc650dSSadaf Ebrahimi 10197*22dc650dSSadaf Ebrahimi else 10198*22dc650dSSadaf Ebrahimi output= 10199*22dc650dSSadaf Ebrahimi fi 10200*22dc650dSSadaf Ebrahimi 10201*22dc650dSSadaf Ebrahimi ${skipped_export-false} && { 10202*22dc650dSSadaf Ebrahimi func_verbose "generating symbol list for '$libname.la'" 10203*22dc650dSSadaf Ebrahimi export_symbols=$output_objdir/$libname.exp 10204*22dc650dSSadaf Ebrahimi $opt_dry_run || $RM $export_symbols 10205*22dc650dSSadaf Ebrahimi libobjs=$output 10206*22dc650dSSadaf Ebrahimi # Append the command to create the export file. 10207*22dc650dSSadaf Ebrahimi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 10208*22dc650dSSadaf Ebrahimi eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 10209*22dc650dSSadaf Ebrahimi if test -n "$last_robj"; then 10210*22dc650dSSadaf Ebrahimi eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 10211*22dc650dSSadaf Ebrahimi fi 10212*22dc650dSSadaf Ebrahimi } 10213*22dc650dSSadaf Ebrahimi 10214*22dc650dSSadaf Ebrahimi test -n "$save_libobjs" && 10215*22dc650dSSadaf Ebrahimi func_verbose "creating a temporary reloadable object file: $output" 10216*22dc650dSSadaf Ebrahimi 10217*22dc650dSSadaf Ebrahimi # Loop through the commands generated above and execute them. 10218*22dc650dSSadaf Ebrahimi save_ifs=$IFS; IFS='~' 10219*22dc650dSSadaf Ebrahimi for cmd in $concat_cmds; do 10220*22dc650dSSadaf Ebrahimi IFS=$save_ifs 10221*22dc650dSSadaf Ebrahimi $opt_quiet || { 10222*22dc650dSSadaf Ebrahimi func_quote_arg expand,pretty "$cmd" 10223*22dc650dSSadaf Ebrahimi eval "func_echo $func_quote_arg_result" 10224*22dc650dSSadaf Ebrahimi } 10225*22dc650dSSadaf Ebrahimi $opt_dry_run || eval "$cmd" || { 10226*22dc650dSSadaf Ebrahimi lt_exit=$? 10227*22dc650dSSadaf Ebrahimi 10228*22dc650dSSadaf Ebrahimi # Restore the uninstalled library and exit 10229*22dc650dSSadaf Ebrahimi if test relink = "$opt_mode"; then 10230*22dc650dSSadaf Ebrahimi ( cd "$output_objdir" && \ 10231*22dc650dSSadaf Ebrahimi $RM "${realname}T" && \ 10232*22dc650dSSadaf Ebrahimi $MV "${realname}U" "$realname" ) 10233*22dc650dSSadaf Ebrahimi fi 10234*22dc650dSSadaf Ebrahimi 10235*22dc650dSSadaf Ebrahimi exit $lt_exit 10236*22dc650dSSadaf Ebrahimi } 10237*22dc650dSSadaf Ebrahimi done 10238*22dc650dSSadaf Ebrahimi IFS=$save_ifs 10239*22dc650dSSadaf Ebrahimi 10240*22dc650dSSadaf Ebrahimi if test -n "$export_symbols_regex" && ${skipped_export-false}; then 10241*22dc650dSSadaf Ebrahimi func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 10242*22dc650dSSadaf Ebrahimi func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 10243*22dc650dSSadaf Ebrahimi fi 10244*22dc650dSSadaf Ebrahimi fi 10245*22dc650dSSadaf Ebrahimi 10246*22dc650dSSadaf Ebrahimi ${skipped_export-false} && { 10247*22dc650dSSadaf Ebrahimi if test -n "$export_symbols" && test -n "$include_expsyms"; then 10248*22dc650dSSadaf Ebrahimi tmp_export_symbols=$export_symbols 10249*22dc650dSSadaf Ebrahimi test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 10250*22dc650dSSadaf Ebrahimi $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 10251*22dc650dSSadaf Ebrahimi fi 10252*22dc650dSSadaf Ebrahimi 10253*22dc650dSSadaf Ebrahimi if test -n "$orig_export_symbols"; then 10254*22dc650dSSadaf Ebrahimi # The given exports_symbols file has to be filtered, so filter it. 10255*22dc650dSSadaf Ebrahimi func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 10256*22dc650dSSadaf Ebrahimi # FIXME: $output_objdir/$libname.filter potentially contains lots of 10257*22dc650dSSadaf Ebrahimi # 's' commands, which not all seds can handle. GNU sed should be fine 10258*22dc650dSSadaf Ebrahimi # though. Also, the filter scales superlinearly with the number of 10259*22dc650dSSadaf Ebrahimi # global variables. join(1) would be nice here, but unfortunately 10260*22dc650dSSadaf Ebrahimi # isn't a blessed tool. 10261*22dc650dSSadaf Ebrahimi $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 10262*22dc650dSSadaf Ebrahimi func_append delfiles " $export_symbols $output_objdir/$libname.filter" 10263*22dc650dSSadaf Ebrahimi export_symbols=$output_objdir/$libname.def 10264*22dc650dSSadaf Ebrahimi $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 10265*22dc650dSSadaf Ebrahimi fi 10266*22dc650dSSadaf Ebrahimi } 10267*22dc650dSSadaf Ebrahimi 10268*22dc650dSSadaf Ebrahimi libobjs=$output 10269*22dc650dSSadaf Ebrahimi # Restore the value of output. 10270*22dc650dSSadaf Ebrahimi output=$save_output 10271*22dc650dSSadaf Ebrahimi 10272*22dc650dSSadaf Ebrahimi if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 10273*22dc650dSSadaf Ebrahimi eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 10274*22dc650dSSadaf Ebrahimi test "X$libobjs" = "X " && libobjs= 10275*22dc650dSSadaf Ebrahimi fi 10276*22dc650dSSadaf Ebrahimi # Expand the library linking commands again to reset the 10277*22dc650dSSadaf Ebrahimi # value of $libobjs for piecewise linking. 10278*22dc650dSSadaf Ebrahimi 10279*22dc650dSSadaf Ebrahimi # Do each of the archive commands. 10280*22dc650dSSadaf Ebrahimi if test yes = "$module" && test -n "$module_cmds"; then 10281*22dc650dSSadaf Ebrahimi if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 10282*22dc650dSSadaf Ebrahimi cmds=$module_expsym_cmds 10283*22dc650dSSadaf Ebrahimi else 10284*22dc650dSSadaf Ebrahimi cmds=$module_cmds 10285*22dc650dSSadaf Ebrahimi fi 10286*22dc650dSSadaf Ebrahimi else 10287*22dc650dSSadaf Ebrahimi if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 10288*22dc650dSSadaf Ebrahimi cmds=$archive_expsym_cmds 10289*22dc650dSSadaf Ebrahimi else 10290*22dc650dSSadaf Ebrahimi cmds=$archive_cmds 10291*22dc650dSSadaf Ebrahimi fi 10292*22dc650dSSadaf Ebrahimi fi 10293*22dc650dSSadaf Ebrahimi fi 10294*22dc650dSSadaf Ebrahimi 10295*22dc650dSSadaf Ebrahimi if test -n "$delfiles"; then 10296*22dc650dSSadaf Ebrahimi # Append the command to remove temporary files to $cmds. 10297*22dc650dSSadaf Ebrahimi eval cmds=\"\$cmds~\$RM $delfiles\" 10298*22dc650dSSadaf Ebrahimi fi 10299*22dc650dSSadaf Ebrahimi 10300*22dc650dSSadaf Ebrahimi # Add any objects from preloaded convenience libraries 10301*22dc650dSSadaf Ebrahimi if test -n "$dlprefiles"; then 10302*22dc650dSSadaf Ebrahimi gentop=$output_objdir/${outputname}x 10303*22dc650dSSadaf Ebrahimi func_append generated " $gentop" 10304*22dc650dSSadaf Ebrahimi 10305*22dc650dSSadaf Ebrahimi func_extract_archives $gentop $dlprefiles 10306*22dc650dSSadaf Ebrahimi func_append libobjs " $func_extract_archives_result" 10307*22dc650dSSadaf Ebrahimi test "X$libobjs" = "X " && libobjs= 10308*22dc650dSSadaf Ebrahimi fi 10309*22dc650dSSadaf Ebrahimi 10310*22dc650dSSadaf Ebrahimi save_ifs=$IFS; IFS='~' 10311*22dc650dSSadaf Ebrahimi for cmd in $cmds; do 10312*22dc650dSSadaf Ebrahimi IFS=$sp$nl 10313*22dc650dSSadaf Ebrahimi eval cmd=\"$cmd\" 10314*22dc650dSSadaf Ebrahimi IFS=$save_ifs 10315*22dc650dSSadaf Ebrahimi $opt_quiet || { 10316*22dc650dSSadaf Ebrahimi func_quote_arg expand,pretty "$cmd" 10317*22dc650dSSadaf Ebrahimi eval "func_echo $func_quote_arg_result" 10318*22dc650dSSadaf Ebrahimi } 10319*22dc650dSSadaf Ebrahimi $opt_dry_run || eval "$cmd" || { 10320*22dc650dSSadaf Ebrahimi lt_exit=$? 10321*22dc650dSSadaf Ebrahimi 10322*22dc650dSSadaf Ebrahimi # Restore the uninstalled library and exit 10323*22dc650dSSadaf Ebrahimi if test relink = "$opt_mode"; then 10324*22dc650dSSadaf Ebrahimi ( cd "$output_objdir" && \ 10325*22dc650dSSadaf Ebrahimi $RM "${realname}T" && \ 10326*22dc650dSSadaf Ebrahimi $MV "${realname}U" "$realname" ) 10327*22dc650dSSadaf Ebrahimi fi 10328*22dc650dSSadaf Ebrahimi 10329*22dc650dSSadaf Ebrahimi exit $lt_exit 10330*22dc650dSSadaf Ebrahimi } 10331*22dc650dSSadaf Ebrahimi done 10332*22dc650dSSadaf Ebrahimi IFS=$save_ifs 10333*22dc650dSSadaf Ebrahimi 10334*22dc650dSSadaf Ebrahimi # Restore the uninstalled library and exit 10335*22dc650dSSadaf Ebrahimi if test relink = "$opt_mode"; then 10336*22dc650dSSadaf Ebrahimi $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 10337*22dc650dSSadaf Ebrahimi 10338*22dc650dSSadaf Ebrahimi if test -n "$convenience"; then 10339*22dc650dSSadaf Ebrahimi if test -z "$whole_archive_flag_spec"; then 10340*22dc650dSSadaf Ebrahimi func_show_eval '${RM}r "$gentop"' 10341*22dc650dSSadaf Ebrahimi fi 10342*22dc650dSSadaf Ebrahimi fi 10343*22dc650dSSadaf Ebrahimi 10344*22dc650dSSadaf Ebrahimi exit $EXIT_SUCCESS 10345*22dc650dSSadaf Ebrahimi fi 10346*22dc650dSSadaf Ebrahimi 10347*22dc650dSSadaf Ebrahimi # Create links to the real library. 10348*22dc650dSSadaf Ebrahimi for linkname in $linknames; do 10349*22dc650dSSadaf Ebrahimi if test "$realname" != "$linkname"; then 10350*22dc650dSSadaf Ebrahimi func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 10351*22dc650dSSadaf Ebrahimi fi 10352*22dc650dSSadaf Ebrahimi done 10353*22dc650dSSadaf Ebrahimi 10354*22dc650dSSadaf Ebrahimi # If -module or -export-dynamic was specified, set the dlname. 10355*22dc650dSSadaf Ebrahimi if test yes = "$module" || test yes = "$export_dynamic"; then 10356*22dc650dSSadaf Ebrahimi # On all known operating systems, these are identical. 10357*22dc650dSSadaf Ebrahimi dlname=$soname 10358*22dc650dSSadaf Ebrahimi fi 10359*22dc650dSSadaf Ebrahimi fi 10360*22dc650dSSadaf Ebrahimi ;; 10361*22dc650dSSadaf Ebrahimi 10362*22dc650dSSadaf Ebrahimi obj) 10363*22dc650dSSadaf Ebrahimi if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 10364*22dc650dSSadaf Ebrahimi func_warning "'-dlopen' is ignored for objects" 10365*22dc650dSSadaf Ebrahimi fi 10366*22dc650dSSadaf Ebrahimi 10367*22dc650dSSadaf Ebrahimi case " $deplibs" in 10368*22dc650dSSadaf Ebrahimi *\ -l* | *\ -L*) 10369*22dc650dSSadaf Ebrahimi func_warning "'-l' and '-L' are ignored for objects" ;; 10370*22dc650dSSadaf Ebrahimi esac 10371*22dc650dSSadaf Ebrahimi 10372*22dc650dSSadaf Ebrahimi test -n "$rpath" && \ 10373*22dc650dSSadaf Ebrahimi func_warning "'-rpath' is ignored for objects" 10374*22dc650dSSadaf Ebrahimi 10375*22dc650dSSadaf Ebrahimi test -n "$xrpath" && \ 10376*22dc650dSSadaf Ebrahimi func_warning "'-R' is ignored for objects" 10377*22dc650dSSadaf Ebrahimi 10378*22dc650dSSadaf Ebrahimi test -n "$vinfo" && \ 10379*22dc650dSSadaf Ebrahimi func_warning "'-version-info' is ignored for objects" 10380*22dc650dSSadaf Ebrahimi 10381*22dc650dSSadaf Ebrahimi test -n "$release" && \ 10382*22dc650dSSadaf Ebrahimi func_warning "'-release' is ignored for objects" 10383*22dc650dSSadaf Ebrahimi 10384*22dc650dSSadaf Ebrahimi case $output in 10385*22dc650dSSadaf Ebrahimi *.lo) 10386*22dc650dSSadaf Ebrahimi test -n "$objs$old_deplibs" && \ 10387*22dc650dSSadaf Ebrahimi func_fatal_error "cannot build library object '$output' from non-libtool objects" 10388*22dc650dSSadaf Ebrahimi 10389*22dc650dSSadaf Ebrahimi libobj=$output 10390*22dc650dSSadaf Ebrahimi func_lo2o "$libobj" 10391*22dc650dSSadaf Ebrahimi obj=$func_lo2o_result 10392*22dc650dSSadaf Ebrahimi ;; 10393*22dc650dSSadaf Ebrahimi *) 10394*22dc650dSSadaf Ebrahimi libobj= 10395*22dc650dSSadaf Ebrahimi obj=$output 10396*22dc650dSSadaf Ebrahimi ;; 10397*22dc650dSSadaf Ebrahimi esac 10398*22dc650dSSadaf Ebrahimi 10399*22dc650dSSadaf Ebrahimi # Delete the old objects. 10400*22dc650dSSadaf Ebrahimi $opt_dry_run || $RM $obj $libobj 10401*22dc650dSSadaf Ebrahimi 10402*22dc650dSSadaf Ebrahimi # Objects from convenience libraries. This assumes 10403*22dc650dSSadaf Ebrahimi # single-version convenience libraries. Whenever we create 10404*22dc650dSSadaf Ebrahimi # different ones for PIC/non-PIC, this we'll have to duplicate 10405*22dc650dSSadaf Ebrahimi # the extraction. 10406*22dc650dSSadaf Ebrahimi reload_conv_objs= 10407*22dc650dSSadaf Ebrahimi gentop= 10408*22dc650dSSadaf Ebrahimi # if reload_cmds runs $LD directly, get rid of -Wl from 10409*22dc650dSSadaf Ebrahimi # whole_archive_flag_spec and hope we can get by with turning comma 10410*22dc650dSSadaf Ebrahimi # into space. 10411*22dc650dSSadaf Ebrahimi case $reload_cmds in 10412*22dc650dSSadaf Ebrahimi *\$LD[\ \$]*) wl= ;; 10413*22dc650dSSadaf Ebrahimi esac 10414*22dc650dSSadaf Ebrahimi if test -n "$convenience"; then 10415*22dc650dSSadaf Ebrahimi if test -n "$whole_archive_flag_spec"; then 10416*22dc650dSSadaf Ebrahimi eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 10417*22dc650dSSadaf Ebrahimi test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 10418*22dc650dSSadaf Ebrahimi reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags 10419*22dc650dSSadaf Ebrahimi else 10420*22dc650dSSadaf Ebrahimi gentop=$output_objdir/${obj}x 10421*22dc650dSSadaf Ebrahimi func_append generated " $gentop" 10422*22dc650dSSadaf Ebrahimi 10423*22dc650dSSadaf Ebrahimi func_extract_archives $gentop $convenience 10424*22dc650dSSadaf Ebrahimi reload_conv_objs="$reload_objs $func_extract_archives_result" 10425*22dc650dSSadaf Ebrahimi fi 10426*22dc650dSSadaf Ebrahimi fi 10427*22dc650dSSadaf Ebrahimi 10428*22dc650dSSadaf Ebrahimi # If we're not building shared, we need to use non_pic_objs 10429*22dc650dSSadaf Ebrahimi test yes = "$build_libtool_libs" || libobjs=$non_pic_objects 10430*22dc650dSSadaf Ebrahimi 10431*22dc650dSSadaf Ebrahimi # Create the old-style object. 10432*22dc650dSSadaf Ebrahimi reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs 10433*22dc650dSSadaf Ebrahimi 10434*22dc650dSSadaf Ebrahimi output=$obj 10435*22dc650dSSadaf Ebrahimi func_execute_cmds "$reload_cmds" 'exit $?' 10436*22dc650dSSadaf Ebrahimi 10437*22dc650dSSadaf Ebrahimi # Exit if we aren't doing a library object file. 10438*22dc650dSSadaf Ebrahimi if test -z "$libobj"; then 10439*22dc650dSSadaf Ebrahimi if test -n "$gentop"; then 10440*22dc650dSSadaf Ebrahimi func_show_eval '${RM}r "$gentop"' 10441*22dc650dSSadaf Ebrahimi fi 10442*22dc650dSSadaf Ebrahimi 10443*22dc650dSSadaf Ebrahimi exit $EXIT_SUCCESS 10444*22dc650dSSadaf Ebrahimi fi 10445*22dc650dSSadaf Ebrahimi 10446*22dc650dSSadaf Ebrahimi test yes = "$build_libtool_libs" || { 10447*22dc650dSSadaf Ebrahimi if test -n "$gentop"; then 10448*22dc650dSSadaf Ebrahimi func_show_eval '${RM}r "$gentop"' 10449*22dc650dSSadaf Ebrahimi fi 10450*22dc650dSSadaf Ebrahimi 10451*22dc650dSSadaf Ebrahimi # Create an invalid libtool object if no PIC, so that we don't 10452*22dc650dSSadaf Ebrahimi # accidentally link it into a program. 10453*22dc650dSSadaf Ebrahimi # $show "echo timestamp > $libobj" 10454*22dc650dSSadaf Ebrahimi # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 10455*22dc650dSSadaf Ebrahimi exit $EXIT_SUCCESS 10456*22dc650dSSadaf Ebrahimi } 10457*22dc650dSSadaf Ebrahimi 10458*22dc650dSSadaf Ebrahimi if test -n "$pic_flag" || test default != "$pic_mode"; then 10459*22dc650dSSadaf Ebrahimi # Only do commands if we really have different PIC objects. 10460*22dc650dSSadaf Ebrahimi reload_objs="$libobjs $reload_conv_objs" 10461*22dc650dSSadaf Ebrahimi output=$libobj 10462*22dc650dSSadaf Ebrahimi func_execute_cmds "$reload_cmds" 'exit $?' 10463*22dc650dSSadaf Ebrahimi fi 10464*22dc650dSSadaf Ebrahimi 10465*22dc650dSSadaf Ebrahimi if test -n "$gentop"; then 10466*22dc650dSSadaf Ebrahimi func_show_eval '${RM}r "$gentop"' 10467*22dc650dSSadaf Ebrahimi fi 10468*22dc650dSSadaf Ebrahimi 10469*22dc650dSSadaf Ebrahimi exit $EXIT_SUCCESS 10470*22dc650dSSadaf Ebrahimi ;; 10471*22dc650dSSadaf Ebrahimi 10472*22dc650dSSadaf Ebrahimi prog) 10473*22dc650dSSadaf Ebrahimi case $host in 10474*22dc650dSSadaf Ebrahimi *cygwin*) func_stripname '' '.exe' "$output" 10475*22dc650dSSadaf Ebrahimi output=$func_stripname_result.exe;; 10476*22dc650dSSadaf Ebrahimi esac 10477*22dc650dSSadaf Ebrahimi test -n "$vinfo" && \ 10478*22dc650dSSadaf Ebrahimi func_warning "'-version-info' is ignored for programs" 10479*22dc650dSSadaf Ebrahimi 10480*22dc650dSSadaf Ebrahimi test -n "$release" && \ 10481*22dc650dSSadaf Ebrahimi func_warning "'-release' is ignored for programs" 10482*22dc650dSSadaf Ebrahimi 10483*22dc650dSSadaf Ebrahimi $preload \ 10484*22dc650dSSadaf Ebrahimi && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ 10485*22dc650dSSadaf Ebrahimi && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." 10486*22dc650dSSadaf Ebrahimi 10487*22dc650dSSadaf Ebrahimi case $host in 10488*22dc650dSSadaf Ebrahimi *-*-rhapsody* | *-*-darwin1.[012]) 10489*22dc650dSSadaf Ebrahimi # On Rhapsody replace the C library is the System framework 10490*22dc650dSSadaf Ebrahimi compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 10491*22dc650dSSadaf Ebrahimi finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 10492*22dc650dSSadaf Ebrahimi ;; 10493*22dc650dSSadaf Ebrahimi esac 10494*22dc650dSSadaf Ebrahimi 10495*22dc650dSSadaf Ebrahimi case $host in 10496*22dc650dSSadaf Ebrahimi *-*-darwin*) 10497*22dc650dSSadaf Ebrahimi # Don't allow lazy linking, it breaks C++ global constructors 10498*22dc650dSSadaf Ebrahimi # But is supposedly fixed on 10.4 or later (yay!). 10499*22dc650dSSadaf Ebrahimi if test CXX = "$tagname"; then 10500*22dc650dSSadaf Ebrahimi case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10501*22dc650dSSadaf Ebrahimi 10.[0123]) 10502*22dc650dSSadaf Ebrahimi func_append compile_command " $wl-bind_at_load" 10503*22dc650dSSadaf Ebrahimi func_append finalize_command " $wl-bind_at_load" 10504*22dc650dSSadaf Ebrahimi ;; 10505*22dc650dSSadaf Ebrahimi esac 10506*22dc650dSSadaf Ebrahimi fi 10507*22dc650dSSadaf Ebrahimi # Time to change all our "foo.ltframework" stuff back to "-framework foo" 10508*22dc650dSSadaf Ebrahimi compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10509*22dc650dSSadaf Ebrahimi finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10510*22dc650dSSadaf Ebrahimi ;; 10511*22dc650dSSadaf Ebrahimi esac 10512*22dc650dSSadaf Ebrahimi 10513*22dc650dSSadaf Ebrahimi 10514*22dc650dSSadaf Ebrahimi # move library search paths that coincide with paths to not yet 10515*22dc650dSSadaf Ebrahimi # installed libraries to the beginning of the library search list 10516*22dc650dSSadaf Ebrahimi new_libs= 10517*22dc650dSSadaf Ebrahimi for path in $notinst_path; do 10518*22dc650dSSadaf Ebrahimi case " $new_libs " in 10519*22dc650dSSadaf Ebrahimi *" -L$path/$objdir "*) ;; 10520*22dc650dSSadaf Ebrahimi *) 10521*22dc650dSSadaf Ebrahimi case " $compile_deplibs " in 10522*22dc650dSSadaf Ebrahimi *" -L$path/$objdir "*) 10523*22dc650dSSadaf Ebrahimi func_append new_libs " -L$path/$objdir" ;; 10524*22dc650dSSadaf Ebrahimi esac 10525*22dc650dSSadaf Ebrahimi ;; 10526*22dc650dSSadaf Ebrahimi esac 10527*22dc650dSSadaf Ebrahimi done 10528*22dc650dSSadaf Ebrahimi for deplib in $compile_deplibs; do 10529*22dc650dSSadaf Ebrahimi case $deplib in 10530*22dc650dSSadaf Ebrahimi -L*) 10531*22dc650dSSadaf Ebrahimi case " $new_libs " in 10532*22dc650dSSadaf Ebrahimi *" $deplib "*) ;; 10533*22dc650dSSadaf Ebrahimi *) func_append new_libs " $deplib" ;; 10534*22dc650dSSadaf Ebrahimi esac 10535*22dc650dSSadaf Ebrahimi ;; 10536*22dc650dSSadaf Ebrahimi *) func_append new_libs " $deplib" ;; 10537*22dc650dSSadaf Ebrahimi esac 10538*22dc650dSSadaf Ebrahimi done 10539*22dc650dSSadaf Ebrahimi compile_deplibs=$new_libs 10540*22dc650dSSadaf Ebrahimi 10541*22dc650dSSadaf Ebrahimi 10542*22dc650dSSadaf Ebrahimi func_append compile_command " $compile_deplibs" 10543*22dc650dSSadaf Ebrahimi func_append finalize_command " $finalize_deplibs" 10544*22dc650dSSadaf Ebrahimi 10545*22dc650dSSadaf Ebrahimi if test -n "$rpath$xrpath"; then 10546*22dc650dSSadaf Ebrahimi # If the user specified any rpath flags, then add them. 10547*22dc650dSSadaf Ebrahimi for libdir in $rpath $xrpath; do 10548*22dc650dSSadaf Ebrahimi # This is the magic to use -rpath. 10549*22dc650dSSadaf Ebrahimi case "$finalize_rpath " in 10550*22dc650dSSadaf Ebrahimi *" $libdir "*) ;; 10551*22dc650dSSadaf Ebrahimi *) func_append finalize_rpath " $libdir" ;; 10552*22dc650dSSadaf Ebrahimi esac 10553*22dc650dSSadaf Ebrahimi done 10554*22dc650dSSadaf Ebrahimi fi 10555*22dc650dSSadaf Ebrahimi 10556*22dc650dSSadaf Ebrahimi # Now hardcode the library paths 10557*22dc650dSSadaf Ebrahimi rpath= 10558*22dc650dSSadaf Ebrahimi hardcode_libdirs= 10559*22dc650dSSadaf Ebrahimi for libdir in $compile_rpath $finalize_rpath; do 10560*22dc650dSSadaf Ebrahimi if test -n "$hardcode_libdir_flag_spec"; then 10561*22dc650dSSadaf Ebrahimi if test -n "$hardcode_libdir_separator"; then 10562*22dc650dSSadaf Ebrahimi if test -z "$hardcode_libdirs"; then 10563*22dc650dSSadaf Ebrahimi hardcode_libdirs=$libdir 10564*22dc650dSSadaf Ebrahimi else 10565*22dc650dSSadaf Ebrahimi # Just accumulate the unique libdirs. 10566*22dc650dSSadaf Ebrahimi case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10567*22dc650dSSadaf Ebrahimi *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10568*22dc650dSSadaf Ebrahimi ;; 10569*22dc650dSSadaf Ebrahimi *) 10570*22dc650dSSadaf Ebrahimi func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10571*22dc650dSSadaf Ebrahimi ;; 10572*22dc650dSSadaf Ebrahimi esac 10573*22dc650dSSadaf Ebrahimi fi 10574*22dc650dSSadaf Ebrahimi else 10575*22dc650dSSadaf Ebrahimi eval flag=\"$hardcode_libdir_flag_spec\" 10576*22dc650dSSadaf Ebrahimi func_append rpath " $flag" 10577*22dc650dSSadaf Ebrahimi fi 10578*22dc650dSSadaf Ebrahimi elif test -n "$runpath_var"; then 10579*22dc650dSSadaf Ebrahimi case "$perm_rpath " in 10580*22dc650dSSadaf Ebrahimi *" $libdir "*) ;; 10581*22dc650dSSadaf Ebrahimi *) func_append perm_rpath " $libdir" ;; 10582*22dc650dSSadaf Ebrahimi esac 10583*22dc650dSSadaf Ebrahimi fi 10584*22dc650dSSadaf Ebrahimi case $host in 10585*22dc650dSSadaf Ebrahimi *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 10586*22dc650dSSadaf Ebrahimi testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` 10587*22dc650dSSadaf Ebrahimi case :$dllsearchpath: in 10588*22dc650dSSadaf Ebrahimi *":$libdir:"*) ;; 10589*22dc650dSSadaf Ebrahimi ::) dllsearchpath=$libdir;; 10590*22dc650dSSadaf Ebrahimi *) func_append dllsearchpath ":$libdir";; 10591*22dc650dSSadaf Ebrahimi esac 10592*22dc650dSSadaf Ebrahimi case :$dllsearchpath: in 10593*22dc650dSSadaf Ebrahimi *":$testbindir:"*) ;; 10594*22dc650dSSadaf Ebrahimi ::) dllsearchpath=$testbindir;; 10595*22dc650dSSadaf Ebrahimi *) func_append dllsearchpath ":$testbindir";; 10596*22dc650dSSadaf Ebrahimi esac 10597*22dc650dSSadaf Ebrahimi ;; 10598*22dc650dSSadaf Ebrahimi esac 10599*22dc650dSSadaf Ebrahimi done 10600*22dc650dSSadaf Ebrahimi # Substitute the hardcoded libdirs into the rpath. 10601*22dc650dSSadaf Ebrahimi if test -n "$hardcode_libdir_separator" && 10602*22dc650dSSadaf Ebrahimi test -n "$hardcode_libdirs"; then 10603*22dc650dSSadaf Ebrahimi libdir=$hardcode_libdirs 10604*22dc650dSSadaf Ebrahimi eval rpath=\" $hardcode_libdir_flag_spec\" 10605*22dc650dSSadaf Ebrahimi fi 10606*22dc650dSSadaf Ebrahimi compile_rpath=$rpath 10607*22dc650dSSadaf Ebrahimi 10608*22dc650dSSadaf Ebrahimi rpath= 10609*22dc650dSSadaf Ebrahimi hardcode_libdirs= 10610*22dc650dSSadaf Ebrahimi for libdir in $finalize_rpath; do 10611*22dc650dSSadaf Ebrahimi if test -n "$hardcode_libdir_flag_spec"; then 10612*22dc650dSSadaf Ebrahimi if test -n "$hardcode_libdir_separator"; then 10613*22dc650dSSadaf Ebrahimi if test -z "$hardcode_libdirs"; then 10614*22dc650dSSadaf Ebrahimi hardcode_libdirs=$libdir 10615*22dc650dSSadaf Ebrahimi else 10616*22dc650dSSadaf Ebrahimi # Just accumulate the unique libdirs. 10617*22dc650dSSadaf Ebrahimi case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10618*22dc650dSSadaf Ebrahimi *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10619*22dc650dSSadaf Ebrahimi ;; 10620*22dc650dSSadaf Ebrahimi *) 10621*22dc650dSSadaf Ebrahimi func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10622*22dc650dSSadaf Ebrahimi ;; 10623*22dc650dSSadaf Ebrahimi esac 10624*22dc650dSSadaf Ebrahimi fi 10625*22dc650dSSadaf Ebrahimi else 10626*22dc650dSSadaf Ebrahimi eval flag=\"$hardcode_libdir_flag_spec\" 10627*22dc650dSSadaf Ebrahimi func_append rpath " $flag" 10628*22dc650dSSadaf Ebrahimi fi 10629*22dc650dSSadaf Ebrahimi elif test -n "$runpath_var"; then 10630*22dc650dSSadaf Ebrahimi case "$finalize_perm_rpath " in 10631*22dc650dSSadaf Ebrahimi *" $libdir "*) ;; 10632*22dc650dSSadaf Ebrahimi *) func_append finalize_perm_rpath " $libdir" ;; 10633*22dc650dSSadaf Ebrahimi esac 10634*22dc650dSSadaf Ebrahimi fi 10635*22dc650dSSadaf Ebrahimi done 10636*22dc650dSSadaf Ebrahimi # Substitute the hardcoded libdirs into the rpath. 10637*22dc650dSSadaf Ebrahimi if test -n "$hardcode_libdir_separator" && 10638*22dc650dSSadaf Ebrahimi test -n "$hardcode_libdirs"; then 10639*22dc650dSSadaf Ebrahimi libdir=$hardcode_libdirs 10640*22dc650dSSadaf Ebrahimi eval rpath=\" $hardcode_libdir_flag_spec\" 10641*22dc650dSSadaf Ebrahimi fi 10642*22dc650dSSadaf Ebrahimi finalize_rpath=$rpath 10643*22dc650dSSadaf Ebrahimi 10644*22dc650dSSadaf Ebrahimi if test -n "$libobjs" && test yes = "$build_old_libs"; then 10645*22dc650dSSadaf Ebrahimi # Transform all the library objects into standard objects. 10646*22dc650dSSadaf Ebrahimi compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10647*22dc650dSSadaf Ebrahimi finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10648*22dc650dSSadaf Ebrahimi fi 10649*22dc650dSSadaf Ebrahimi 10650*22dc650dSSadaf Ebrahimi func_generate_dlsyms "$outputname" "@PROGRAM@" false 10651*22dc650dSSadaf Ebrahimi 10652*22dc650dSSadaf Ebrahimi # template prelinking step 10653*22dc650dSSadaf Ebrahimi if test -n "$prelink_cmds"; then 10654*22dc650dSSadaf Ebrahimi func_execute_cmds "$prelink_cmds" 'exit $?' 10655*22dc650dSSadaf Ebrahimi fi 10656*22dc650dSSadaf Ebrahimi 10657*22dc650dSSadaf Ebrahimi wrappers_required=: 10658*22dc650dSSadaf Ebrahimi case $host in 10659*22dc650dSSadaf Ebrahimi *cegcc* | *mingw32ce*) 10660*22dc650dSSadaf Ebrahimi # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 10661*22dc650dSSadaf Ebrahimi wrappers_required=false 10662*22dc650dSSadaf Ebrahimi ;; 10663*22dc650dSSadaf Ebrahimi *cygwin* | *mingw* ) 10664*22dc650dSSadaf Ebrahimi test yes = "$build_libtool_libs" || wrappers_required=false 10665*22dc650dSSadaf Ebrahimi ;; 10666*22dc650dSSadaf Ebrahimi *) 10667*22dc650dSSadaf Ebrahimi if test no = "$need_relink" || test yes != "$build_libtool_libs"; then 10668*22dc650dSSadaf Ebrahimi wrappers_required=false 10669*22dc650dSSadaf Ebrahimi fi 10670*22dc650dSSadaf Ebrahimi ;; 10671*22dc650dSSadaf Ebrahimi esac 10672*22dc650dSSadaf Ebrahimi $wrappers_required || { 10673*22dc650dSSadaf Ebrahimi # Replace the output file specification. 10674*22dc650dSSadaf Ebrahimi compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10675*22dc650dSSadaf Ebrahimi link_command=$compile_command$compile_rpath 10676*22dc650dSSadaf Ebrahimi 10677*22dc650dSSadaf Ebrahimi # We have no uninstalled library dependencies, so finalize right now. 10678*22dc650dSSadaf Ebrahimi exit_status=0 10679*22dc650dSSadaf Ebrahimi func_show_eval "$link_command" 'exit_status=$?' 10680*22dc650dSSadaf Ebrahimi 10681*22dc650dSSadaf Ebrahimi if test -n "$postlink_cmds"; then 10682*22dc650dSSadaf Ebrahimi func_to_tool_file "$output" 10683*22dc650dSSadaf Ebrahimi postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10684*22dc650dSSadaf Ebrahimi func_execute_cmds "$postlink_cmds" 'exit $?' 10685*22dc650dSSadaf Ebrahimi fi 10686*22dc650dSSadaf Ebrahimi 10687*22dc650dSSadaf Ebrahimi # Delete the generated files. 10688*22dc650dSSadaf Ebrahimi if test -f "$output_objdir/${outputname}S.$objext"; then 10689*22dc650dSSadaf Ebrahimi func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' 10690*22dc650dSSadaf Ebrahimi fi 10691*22dc650dSSadaf Ebrahimi 10692*22dc650dSSadaf Ebrahimi exit $exit_status 10693*22dc650dSSadaf Ebrahimi } 10694*22dc650dSSadaf Ebrahimi 10695*22dc650dSSadaf Ebrahimi if test -n "$compile_shlibpath$finalize_shlibpath"; then 10696*22dc650dSSadaf Ebrahimi compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 10697*22dc650dSSadaf Ebrahimi fi 10698*22dc650dSSadaf Ebrahimi if test -n "$finalize_shlibpath"; then 10699*22dc650dSSadaf Ebrahimi finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 10700*22dc650dSSadaf Ebrahimi fi 10701*22dc650dSSadaf Ebrahimi 10702*22dc650dSSadaf Ebrahimi compile_var= 10703*22dc650dSSadaf Ebrahimi finalize_var= 10704*22dc650dSSadaf Ebrahimi if test -n "$runpath_var"; then 10705*22dc650dSSadaf Ebrahimi if test -n "$perm_rpath"; then 10706*22dc650dSSadaf Ebrahimi # We should set the runpath_var. 10707*22dc650dSSadaf Ebrahimi rpath= 10708*22dc650dSSadaf Ebrahimi for dir in $perm_rpath; do 10709*22dc650dSSadaf Ebrahimi func_append rpath "$dir:" 10710*22dc650dSSadaf Ebrahimi done 10711*22dc650dSSadaf Ebrahimi compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 10712*22dc650dSSadaf Ebrahimi fi 10713*22dc650dSSadaf Ebrahimi if test -n "$finalize_perm_rpath"; then 10714*22dc650dSSadaf Ebrahimi # We should set the runpath_var. 10715*22dc650dSSadaf Ebrahimi rpath= 10716*22dc650dSSadaf Ebrahimi for dir in $finalize_perm_rpath; do 10717*22dc650dSSadaf Ebrahimi func_append rpath "$dir:" 10718*22dc650dSSadaf Ebrahimi done 10719*22dc650dSSadaf Ebrahimi finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 10720*22dc650dSSadaf Ebrahimi fi 10721*22dc650dSSadaf Ebrahimi fi 10722*22dc650dSSadaf Ebrahimi 10723*22dc650dSSadaf Ebrahimi if test yes = "$no_install"; then 10724*22dc650dSSadaf Ebrahimi # We don't need to create a wrapper script. 10725*22dc650dSSadaf Ebrahimi link_command=$compile_var$compile_command$compile_rpath 10726*22dc650dSSadaf Ebrahimi # Replace the output file specification. 10727*22dc650dSSadaf Ebrahimi link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10728*22dc650dSSadaf Ebrahimi # Delete the old output file. 10729*22dc650dSSadaf Ebrahimi $opt_dry_run || $RM $output 10730*22dc650dSSadaf Ebrahimi # Link the executable and exit 10731*22dc650dSSadaf Ebrahimi func_show_eval "$link_command" 'exit $?' 10732*22dc650dSSadaf Ebrahimi 10733*22dc650dSSadaf Ebrahimi if test -n "$postlink_cmds"; then 10734*22dc650dSSadaf Ebrahimi func_to_tool_file "$output" 10735*22dc650dSSadaf Ebrahimi postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10736*22dc650dSSadaf Ebrahimi func_execute_cmds "$postlink_cmds" 'exit $?' 10737*22dc650dSSadaf Ebrahimi fi 10738*22dc650dSSadaf Ebrahimi 10739*22dc650dSSadaf Ebrahimi exit $EXIT_SUCCESS 10740*22dc650dSSadaf Ebrahimi fi 10741*22dc650dSSadaf Ebrahimi 10742*22dc650dSSadaf Ebrahimi case $hardcode_action,$fast_install in 10743*22dc650dSSadaf Ebrahimi relink,*) 10744*22dc650dSSadaf Ebrahimi # Fast installation is not supported 10745*22dc650dSSadaf Ebrahimi link_command=$compile_var$compile_command$compile_rpath 10746*22dc650dSSadaf Ebrahimi relink_command=$finalize_var$finalize_command$finalize_rpath 10747*22dc650dSSadaf Ebrahimi 10748*22dc650dSSadaf Ebrahimi func_warning "this platform does not like uninstalled shared libraries" 10749*22dc650dSSadaf Ebrahimi func_warning "'$output' will be relinked during installation" 10750*22dc650dSSadaf Ebrahimi ;; 10751*22dc650dSSadaf Ebrahimi *,yes) 10752*22dc650dSSadaf Ebrahimi link_command=$finalize_var$compile_command$finalize_rpath 10753*22dc650dSSadaf Ebrahimi relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 10754*22dc650dSSadaf Ebrahimi ;; 10755*22dc650dSSadaf Ebrahimi *,no) 10756*22dc650dSSadaf Ebrahimi link_command=$compile_var$compile_command$compile_rpath 10757*22dc650dSSadaf Ebrahimi relink_command=$finalize_var$finalize_command$finalize_rpath 10758*22dc650dSSadaf Ebrahimi ;; 10759*22dc650dSSadaf Ebrahimi *,needless) 10760*22dc650dSSadaf Ebrahimi link_command=$finalize_var$compile_command$finalize_rpath 10761*22dc650dSSadaf Ebrahimi relink_command= 10762*22dc650dSSadaf Ebrahimi ;; 10763*22dc650dSSadaf Ebrahimi esac 10764*22dc650dSSadaf Ebrahimi 10765*22dc650dSSadaf Ebrahimi # Replace the output file specification. 10766*22dc650dSSadaf Ebrahimi link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 10767*22dc650dSSadaf Ebrahimi 10768*22dc650dSSadaf Ebrahimi # Delete the old output files. 10769*22dc650dSSadaf Ebrahimi $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 10770*22dc650dSSadaf Ebrahimi 10771*22dc650dSSadaf Ebrahimi func_show_eval "$link_command" 'exit $?' 10772*22dc650dSSadaf Ebrahimi 10773*22dc650dSSadaf Ebrahimi if test -n "$postlink_cmds"; then 10774*22dc650dSSadaf Ebrahimi func_to_tool_file "$output_objdir/$outputname" 10775*22dc650dSSadaf Ebrahimi postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10776*22dc650dSSadaf Ebrahimi func_execute_cmds "$postlink_cmds" 'exit $?' 10777*22dc650dSSadaf Ebrahimi fi 10778*22dc650dSSadaf Ebrahimi 10779*22dc650dSSadaf Ebrahimi # Now create the wrapper script. 10780*22dc650dSSadaf Ebrahimi func_verbose "creating $output" 10781*22dc650dSSadaf Ebrahimi 10782*22dc650dSSadaf Ebrahimi # Quote the relink command for shipping. 10783*22dc650dSSadaf Ebrahimi if test -n "$relink_command"; then 10784*22dc650dSSadaf Ebrahimi # Preserve any variables that may affect compiler behavior 10785*22dc650dSSadaf Ebrahimi for var in $variables_saved_for_relink; do 10786*22dc650dSSadaf Ebrahimi if eval test -z \"\${$var+set}\"; then 10787*22dc650dSSadaf Ebrahimi relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 10788*22dc650dSSadaf Ebrahimi elif eval var_value=\$$var; test -z "$var_value"; then 10789*22dc650dSSadaf Ebrahimi relink_command="$var=; export $var; $relink_command" 10790*22dc650dSSadaf Ebrahimi else 10791*22dc650dSSadaf Ebrahimi func_quote_arg pretty "$var_value" 10792*22dc650dSSadaf Ebrahimi relink_command="$var=$func_quote_arg_result; export $var; $relink_command" 10793*22dc650dSSadaf Ebrahimi fi 10794*22dc650dSSadaf Ebrahimi done 10795*22dc650dSSadaf Ebrahimi func_quote eval cd "`pwd`" 10796*22dc650dSSadaf Ebrahimi func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)" 10797*22dc650dSSadaf Ebrahimi relink_command=$func_quote_arg_unquoted_result 10798*22dc650dSSadaf Ebrahimi fi 10799*22dc650dSSadaf Ebrahimi 10800*22dc650dSSadaf Ebrahimi # Only actually do things if not in dry run mode. 10801*22dc650dSSadaf Ebrahimi $opt_dry_run || { 10802*22dc650dSSadaf Ebrahimi # win32 will think the script is a binary if it has 10803*22dc650dSSadaf Ebrahimi # a .exe suffix, so we strip it off here. 10804*22dc650dSSadaf Ebrahimi case $output in 10805*22dc650dSSadaf Ebrahimi *.exe) func_stripname '' '.exe' "$output" 10806*22dc650dSSadaf Ebrahimi output=$func_stripname_result ;; 10807*22dc650dSSadaf Ebrahimi esac 10808*22dc650dSSadaf Ebrahimi # test for cygwin because mv fails w/o .exe extensions 10809*22dc650dSSadaf Ebrahimi case $host in 10810*22dc650dSSadaf Ebrahimi *cygwin*) 10811*22dc650dSSadaf Ebrahimi exeext=.exe 10812*22dc650dSSadaf Ebrahimi func_stripname '' '.exe' "$outputname" 10813*22dc650dSSadaf Ebrahimi outputname=$func_stripname_result ;; 10814*22dc650dSSadaf Ebrahimi *) exeext= ;; 10815*22dc650dSSadaf Ebrahimi esac 10816*22dc650dSSadaf Ebrahimi case $host in 10817*22dc650dSSadaf Ebrahimi *cygwin* | *mingw* ) 10818*22dc650dSSadaf Ebrahimi func_dirname_and_basename "$output" "" "." 10819*22dc650dSSadaf Ebrahimi output_name=$func_basename_result 10820*22dc650dSSadaf Ebrahimi output_path=$func_dirname_result 10821*22dc650dSSadaf Ebrahimi cwrappersource=$output_path/$objdir/lt-$output_name.c 10822*22dc650dSSadaf Ebrahimi cwrapper=$output_path/$output_name.exe 10823*22dc650dSSadaf Ebrahimi $RM $cwrappersource $cwrapper 10824*22dc650dSSadaf Ebrahimi trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 10825*22dc650dSSadaf Ebrahimi 10826*22dc650dSSadaf Ebrahimi func_emit_cwrapperexe_src > $cwrappersource 10827*22dc650dSSadaf Ebrahimi 10828*22dc650dSSadaf Ebrahimi # The wrapper executable is built using the $host compiler, 10829*22dc650dSSadaf Ebrahimi # because it contains $host paths and files. If cross- 10830*22dc650dSSadaf Ebrahimi # compiling, it, like the target executable, must be 10831*22dc650dSSadaf Ebrahimi # executed on the $host or under an emulation environment. 10832*22dc650dSSadaf Ebrahimi $opt_dry_run || { 10833*22dc650dSSadaf Ebrahimi $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 10834*22dc650dSSadaf Ebrahimi $STRIP $cwrapper 10835*22dc650dSSadaf Ebrahimi } 10836*22dc650dSSadaf Ebrahimi 10837*22dc650dSSadaf Ebrahimi # Now, create the wrapper script for func_source use: 10838*22dc650dSSadaf Ebrahimi func_ltwrapper_scriptname $cwrapper 10839*22dc650dSSadaf Ebrahimi $RM $func_ltwrapper_scriptname_result 10840*22dc650dSSadaf Ebrahimi trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 10841*22dc650dSSadaf Ebrahimi $opt_dry_run || { 10842*22dc650dSSadaf Ebrahimi # note: this script will not be executed, so do not chmod. 10843*22dc650dSSadaf Ebrahimi if test "x$build" = "x$host"; then 10844*22dc650dSSadaf Ebrahimi $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 10845*22dc650dSSadaf Ebrahimi else 10846*22dc650dSSadaf Ebrahimi func_emit_wrapper no > $func_ltwrapper_scriptname_result 10847*22dc650dSSadaf Ebrahimi fi 10848*22dc650dSSadaf Ebrahimi } 10849*22dc650dSSadaf Ebrahimi ;; 10850*22dc650dSSadaf Ebrahimi * ) 10851*22dc650dSSadaf Ebrahimi $RM $output 10852*22dc650dSSadaf Ebrahimi trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 10853*22dc650dSSadaf Ebrahimi 10854*22dc650dSSadaf Ebrahimi func_emit_wrapper no > $output 10855*22dc650dSSadaf Ebrahimi chmod +x $output 10856*22dc650dSSadaf Ebrahimi ;; 10857*22dc650dSSadaf Ebrahimi esac 10858*22dc650dSSadaf Ebrahimi } 10859*22dc650dSSadaf Ebrahimi exit $EXIT_SUCCESS 10860*22dc650dSSadaf Ebrahimi ;; 10861*22dc650dSSadaf Ebrahimi esac 10862*22dc650dSSadaf Ebrahimi 10863*22dc650dSSadaf Ebrahimi # See if we need to build an old-fashioned archive. 10864*22dc650dSSadaf Ebrahimi for oldlib in $oldlibs; do 10865*22dc650dSSadaf Ebrahimi 10866*22dc650dSSadaf Ebrahimi case $build_libtool_libs in 10867*22dc650dSSadaf Ebrahimi convenience) 10868*22dc650dSSadaf Ebrahimi oldobjs="$libobjs_save $symfileobj" 10869*22dc650dSSadaf Ebrahimi addlibs=$convenience 10870*22dc650dSSadaf Ebrahimi build_libtool_libs=no 10871*22dc650dSSadaf Ebrahimi ;; 10872*22dc650dSSadaf Ebrahimi module) 10873*22dc650dSSadaf Ebrahimi oldobjs=$libobjs_save 10874*22dc650dSSadaf Ebrahimi addlibs=$old_convenience 10875*22dc650dSSadaf Ebrahimi build_libtool_libs=no 10876*22dc650dSSadaf Ebrahimi ;; 10877*22dc650dSSadaf Ebrahimi *) 10878*22dc650dSSadaf Ebrahimi oldobjs="$old_deplibs $non_pic_objects" 10879*22dc650dSSadaf Ebrahimi $preload && test -f "$symfileobj" \ 10880*22dc650dSSadaf Ebrahimi && func_append oldobjs " $symfileobj" 10881*22dc650dSSadaf Ebrahimi addlibs=$old_convenience 10882*22dc650dSSadaf Ebrahimi ;; 10883*22dc650dSSadaf Ebrahimi esac 10884*22dc650dSSadaf Ebrahimi 10885*22dc650dSSadaf Ebrahimi if test -n "$addlibs"; then 10886*22dc650dSSadaf Ebrahimi gentop=$output_objdir/${outputname}x 10887*22dc650dSSadaf Ebrahimi func_append generated " $gentop" 10888*22dc650dSSadaf Ebrahimi 10889*22dc650dSSadaf Ebrahimi func_extract_archives $gentop $addlibs 10890*22dc650dSSadaf Ebrahimi func_append oldobjs " $func_extract_archives_result" 10891*22dc650dSSadaf Ebrahimi fi 10892*22dc650dSSadaf Ebrahimi 10893*22dc650dSSadaf Ebrahimi # Do each command in the archive commands. 10894*22dc650dSSadaf Ebrahimi if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then 10895*22dc650dSSadaf Ebrahimi cmds=$old_archive_from_new_cmds 10896*22dc650dSSadaf Ebrahimi else 10897*22dc650dSSadaf Ebrahimi 10898*22dc650dSSadaf Ebrahimi # Add any objects from preloaded convenience libraries 10899*22dc650dSSadaf Ebrahimi if test -n "$dlprefiles"; then 10900*22dc650dSSadaf Ebrahimi gentop=$output_objdir/${outputname}x 10901*22dc650dSSadaf Ebrahimi func_append generated " $gentop" 10902*22dc650dSSadaf Ebrahimi 10903*22dc650dSSadaf Ebrahimi func_extract_archives $gentop $dlprefiles 10904*22dc650dSSadaf Ebrahimi func_append oldobjs " $func_extract_archives_result" 10905*22dc650dSSadaf Ebrahimi fi 10906*22dc650dSSadaf Ebrahimi 10907*22dc650dSSadaf Ebrahimi # POSIX demands no paths to be encoded in archives. We have 10908*22dc650dSSadaf Ebrahimi # to avoid creating archives with duplicate basenames if we 10909*22dc650dSSadaf Ebrahimi # might have to extract them afterwards, e.g., when creating a 10910*22dc650dSSadaf Ebrahimi # static archive out of a convenience library, or when linking 10911*22dc650dSSadaf Ebrahimi # the entirety of a libtool archive into another (currently 10912*22dc650dSSadaf Ebrahimi # not supported by libtool). 10913*22dc650dSSadaf Ebrahimi if (for obj in $oldobjs 10914*22dc650dSSadaf Ebrahimi do 10915*22dc650dSSadaf Ebrahimi func_basename "$obj" 10916*22dc650dSSadaf Ebrahimi $ECHO "$func_basename_result" 10917*22dc650dSSadaf Ebrahimi done | sort | sort -uc >/dev/null 2>&1); then 10918*22dc650dSSadaf Ebrahimi : 10919*22dc650dSSadaf Ebrahimi else 10920*22dc650dSSadaf Ebrahimi echo "copying selected object files to avoid basename conflicts..." 10921*22dc650dSSadaf Ebrahimi gentop=$output_objdir/${outputname}x 10922*22dc650dSSadaf Ebrahimi func_append generated " $gentop" 10923*22dc650dSSadaf Ebrahimi func_mkdir_p "$gentop" 10924*22dc650dSSadaf Ebrahimi save_oldobjs=$oldobjs 10925*22dc650dSSadaf Ebrahimi oldobjs= 10926*22dc650dSSadaf Ebrahimi counter=1 10927*22dc650dSSadaf Ebrahimi for obj in $save_oldobjs 10928*22dc650dSSadaf Ebrahimi do 10929*22dc650dSSadaf Ebrahimi func_basename "$obj" 10930*22dc650dSSadaf Ebrahimi objbase=$func_basename_result 10931*22dc650dSSadaf Ebrahimi case " $oldobjs " in 10932*22dc650dSSadaf Ebrahimi " ") oldobjs=$obj ;; 10933*22dc650dSSadaf Ebrahimi *[\ /]"$objbase "*) 10934*22dc650dSSadaf Ebrahimi while :; do 10935*22dc650dSSadaf Ebrahimi # Make sure we don't pick an alternate name that also 10936*22dc650dSSadaf Ebrahimi # overlaps. 10937*22dc650dSSadaf Ebrahimi newobj=lt$counter-$objbase 10938*22dc650dSSadaf Ebrahimi func_arith $counter + 1 10939*22dc650dSSadaf Ebrahimi counter=$func_arith_result 10940*22dc650dSSadaf Ebrahimi case " $oldobjs " in 10941*22dc650dSSadaf Ebrahimi *[\ /]"$newobj "*) ;; 10942*22dc650dSSadaf Ebrahimi *) if test ! -f "$gentop/$newobj"; then break; fi ;; 10943*22dc650dSSadaf Ebrahimi esac 10944*22dc650dSSadaf Ebrahimi done 10945*22dc650dSSadaf Ebrahimi func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 10946*22dc650dSSadaf Ebrahimi func_append oldobjs " $gentop/$newobj" 10947*22dc650dSSadaf Ebrahimi ;; 10948*22dc650dSSadaf Ebrahimi *) func_append oldobjs " $obj" ;; 10949*22dc650dSSadaf Ebrahimi esac 10950*22dc650dSSadaf Ebrahimi done 10951*22dc650dSSadaf Ebrahimi fi 10952*22dc650dSSadaf Ebrahimi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 10953*22dc650dSSadaf Ebrahimi tool_oldlib=$func_to_tool_file_result 10954*22dc650dSSadaf Ebrahimi eval cmds=\"$old_archive_cmds\" 10955*22dc650dSSadaf Ebrahimi 10956*22dc650dSSadaf Ebrahimi func_len " $cmds" 10957*22dc650dSSadaf Ebrahimi len=$func_len_result 10958*22dc650dSSadaf Ebrahimi if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 10959*22dc650dSSadaf Ebrahimi cmds=$old_archive_cmds 10960*22dc650dSSadaf Ebrahimi elif test -n "$archiver_list_spec"; then 10961*22dc650dSSadaf Ebrahimi func_verbose "using command file archive linking..." 10962*22dc650dSSadaf Ebrahimi for obj in $oldobjs 10963*22dc650dSSadaf Ebrahimi do 10964*22dc650dSSadaf Ebrahimi func_to_tool_file "$obj" 10965*22dc650dSSadaf Ebrahimi $ECHO "$func_to_tool_file_result" 10966*22dc650dSSadaf Ebrahimi done > $output_objdir/$libname.libcmd 10967*22dc650dSSadaf Ebrahimi func_to_tool_file "$output_objdir/$libname.libcmd" 10968*22dc650dSSadaf Ebrahimi oldobjs=" $archiver_list_spec$func_to_tool_file_result" 10969*22dc650dSSadaf Ebrahimi cmds=$old_archive_cmds 10970*22dc650dSSadaf Ebrahimi else 10971*22dc650dSSadaf Ebrahimi # the command line is too long to link in one step, link in parts 10972*22dc650dSSadaf Ebrahimi func_verbose "using piecewise archive linking..." 10973*22dc650dSSadaf Ebrahimi save_RANLIB=$RANLIB 10974*22dc650dSSadaf Ebrahimi RANLIB=: 10975*22dc650dSSadaf Ebrahimi objlist= 10976*22dc650dSSadaf Ebrahimi concat_cmds= 10977*22dc650dSSadaf Ebrahimi save_oldobjs=$oldobjs 10978*22dc650dSSadaf Ebrahimi oldobjs= 10979*22dc650dSSadaf Ebrahimi # Is there a better way of finding the last object in the list? 10980*22dc650dSSadaf Ebrahimi for obj in $save_oldobjs 10981*22dc650dSSadaf Ebrahimi do 10982*22dc650dSSadaf Ebrahimi last_oldobj=$obj 10983*22dc650dSSadaf Ebrahimi done 10984*22dc650dSSadaf Ebrahimi eval test_cmds=\"$old_archive_cmds\" 10985*22dc650dSSadaf Ebrahimi func_len " $test_cmds" 10986*22dc650dSSadaf Ebrahimi len0=$func_len_result 10987*22dc650dSSadaf Ebrahimi len=$len0 10988*22dc650dSSadaf Ebrahimi for obj in $save_oldobjs 10989*22dc650dSSadaf Ebrahimi do 10990*22dc650dSSadaf Ebrahimi func_len " $obj" 10991*22dc650dSSadaf Ebrahimi func_arith $len + $func_len_result 10992*22dc650dSSadaf Ebrahimi len=$func_arith_result 10993*22dc650dSSadaf Ebrahimi func_append objlist " $obj" 10994*22dc650dSSadaf Ebrahimi if test "$len" -lt "$max_cmd_len"; then 10995*22dc650dSSadaf Ebrahimi : 10996*22dc650dSSadaf Ebrahimi else 10997*22dc650dSSadaf Ebrahimi # the above command should be used before it gets too long 10998*22dc650dSSadaf Ebrahimi oldobjs=$objlist 10999*22dc650dSSadaf Ebrahimi if test "$obj" = "$last_oldobj"; then 11000*22dc650dSSadaf Ebrahimi RANLIB=$save_RANLIB 11001*22dc650dSSadaf Ebrahimi fi 11002*22dc650dSSadaf Ebrahimi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 11003*22dc650dSSadaf Ebrahimi eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" 11004*22dc650dSSadaf Ebrahimi objlist= 11005*22dc650dSSadaf Ebrahimi len=$len0 11006*22dc650dSSadaf Ebrahimi fi 11007*22dc650dSSadaf Ebrahimi done 11008*22dc650dSSadaf Ebrahimi RANLIB=$save_RANLIB 11009*22dc650dSSadaf Ebrahimi oldobjs=$objlist 11010*22dc650dSSadaf Ebrahimi if test -z "$oldobjs"; then 11011*22dc650dSSadaf Ebrahimi eval cmds=\"\$concat_cmds\" 11012*22dc650dSSadaf Ebrahimi else 11013*22dc650dSSadaf Ebrahimi eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 11014*22dc650dSSadaf Ebrahimi fi 11015*22dc650dSSadaf Ebrahimi fi 11016*22dc650dSSadaf Ebrahimi fi 11017*22dc650dSSadaf Ebrahimi func_execute_cmds "$cmds" 'exit $?' 11018*22dc650dSSadaf Ebrahimi done 11019*22dc650dSSadaf Ebrahimi 11020*22dc650dSSadaf Ebrahimi test -n "$generated" && \ 11021*22dc650dSSadaf Ebrahimi func_show_eval "${RM}r$generated" 11022*22dc650dSSadaf Ebrahimi 11023*22dc650dSSadaf Ebrahimi # Now create the libtool archive. 11024*22dc650dSSadaf Ebrahimi case $output in 11025*22dc650dSSadaf Ebrahimi *.la) 11026*22dc650dSSadaf Ebrahimi old_library= 11027*22dc650dSSadaf Ebrahimi test yes = "$build_old_libs" && old_library=$libname.$libext 11028*22dc650dSSadaf Ebrahimi func_verbose "creating $output" 11029*22dc650dSSadaf Ebrahimi 11030*22dc650dSSadaf Ebrahimi # Preserve any variables that may affect compiler behavior 11031*22dc650dSSadaf Ebrahimi for var in $variables_saved_for_relink; do 11032*22dc650dSSadaf Ebrahimi if eval test -z \"\${$var+set}\"; then 11033*22dc650dSSadaf Ebrahimi relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 11034*22dc650dSSadaf Ebrahimi elif eval var_value=\$$var; test -z "$var_value"; then 11035*22dc650dSSadaf Ebrahimi relink_command="$var=; export $var; $relink_command" 11036*22dc650dSSadaf Ebrahimi else 11037*22dc650dSSadaf Ebrahimi func_quote_arg pretty,unquoted "$var_value" 11038*22dc650dSSadaf Ebrahimi relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command" 11039*22dc650dSSadaf Ebrahimi fi 11040*22dc650dSSadaf Ebrahimi done 11041*22dc650dSSadaf Ebrahimi # Quote the link command for shipping. 11042*22dc650dSSadaf Ebrahimi func_quote eval cd "`pwd`" 11043*22dc650dSSadaf Ebrahimi relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 11044*22dc650dSSadaf Ebrahimi func_quote_arg pretty,unquoted "$relink_command" 11045*22dc650dSSadaf Ebrahimi relink_command=$func_quote_arg_unquoted_result 11046*22dc650dSSadaf Ebrahimi if test yes = "$hardcode_automatic"; then 11047*22dc650dSSadaf Ebrahimi relink_command= 11048*22dc650dSSadaf Ebrahimi fi 11049*22dc650dSSadaf Ebrahimi 11050*22dc650dSSadaf Ebrahimi # Only create the output if not a dry run. 11051*22dc650dSSadaf Ebrahimi $opt_dry_run || { 11052*22dc650dSSadaf Ebrahimi for installed in no yes; do 11053*22dc650dSSadaf Ebrahimi if test yes = "$installed"; then 11054*22dc650dSSadaf Ebrahimi if test -z "$install_libdir"; then 11055*22dc650dSSadaf Ebrahimi break 11056*22dc650dSSadaf Ebrahimi fi 11057*22dc650dSSadaf Ebrahimi output=$output_objdir/${outputname}i 11058*22dc650dSSadaf Ebrahimi # Replace all uninstalled libtool libraries with the installed ones 11059*22dc650dSSadaf Ebrahimi newdependency_libs= 11060*22dc650dSSadaf Ebrahimi for deplib in $dependency_libs; do 11061*22dc650dSSadaf Ebrahimi case $deplib in 11062*22dc650dSSadaf Ebrahimi *.la) 11063*22dc650dSSadaf Ebrahimi func_basename "$deplib" 11064*22dc650dSSadaf Ebrahimi name=$func_basename_result 11065*22dc650dSSadaf Ebrahimi func_resolve_sysroot "$deplib" 11066*22dc650dSSadaf Ebrahimi eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 11067*22dc650dSSadaf Ebrahimi test -z "$libdir" && \ 11068*22dc650dSSadaf Ebrahimi func_fatal_error "'$deplib' is not a valid libtool archive" 11069*22dc650dSSadaf Ebrahimi func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 11070*22dc650dSSadaf Ebrahimi ;; 11071*22dc650dSSadaf Ebrahimi -L*) 11072*22dc650dSSadaf Ebrahimi func_stripname -L '' "$deplib" 11073*22dc650dSSadaf Ebrahimi func_replace_sysroot "$func_stripname_result" 11074*22dc650dSSadaf Ebrahimi func_append newdependency_libs " -L$func_replace_sysroot_result" 11075*22dc650dSSadaf Ebrahimi ;; 11076*22dc650dSSadaf Ebrahimi -R*) 11077*22dc650dSSadaf Ebrahimi func_stripname -R '' "$deplib" 11078*22dc650dSSadaf Ebrahimi func_replace_sysroot "$func_stripname_result" 11079*22dc650dSSadaf Ebrahimi func_append newdependency_libs " -R$func_replace_sysroot_result" 11080*22dc650dSSadaf Ebrahimi ;; 11081*22dc650dSSadaf Ebrahimi *) func_append newdependency_libs " $deplib" ;; 11082*22dc650dSSadaf Ebrahimi esac 11083*22dc650dSSadaf Ebrahimi done 11084*22dc650dSSadaf Ebrahimi dependency_libs=$newdependency_libs 11085*22dc650dSSadaf Ebrahimi newdlfiles= 11086*22dc650dSSadaf Ebrahimi 11087*22dc650dSSadaf Ebrahimi for lib in $dlfiles; do 11088*22dc650dSSadaf Ebrahimi case $lib in 11089*22dc650dSSadaf Ebrahimi *.la) 11090*22dc650dSSadaf Ebrahimi func_basename "$lib" 11091*22dc650dSSadaf Ebrahimi name=$func_basename_result 11092*22dc650dSSadaf Ebrahimi eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 11093*22dc650dSSadaf Ebrahimi test -z "$libdir" && \ 11094*22dc650dSSadaf Ebrahimi func_fatal_error "'$lib' is not a valid libtool archive" 11095*22dc650dSSadaf Ebrahimi func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 11096*22dc650dSSadaf Ebrahimi ;; 11097*22dc650dSSadaf Ebrahimi *) func_append newdlfiles " $lib" ;; 11098*22dc650dSSadaf Ebrahimi esac 11099*22dc650dSSadaf Ebrahimi done 11100*22dc650dSSadaf Ebrahimi dlfiles=$newdlfiles 11101*22dc650dSSadaf Ebrahimi newdlprefiles= 11102*22dc650dSSadaf Ebrahimi for lib in $dlprefiles; do 11103*22dc650dSSadaf Ebrahimi case $lib in 11104*22dc650dSSadaf Ebrahimi *.la) 11105*22dc650dSSadaf Ebrahimi # Only pass preopened files to the pseudo-archive (for 11106*22dc650dSSadaf Ebrahimi # eventual linking with the app. that links it) if we 11107*22dc650dSSadaf Ebrahimi # didn't already link the preopened objects directly into 11108*22dc650dSSadaf Ebrahimi # the library: 11109*22dc650dSSadaf Ebrahimi func_basename "$lib" 11110*22dc650dSSadaf Ebrahimi name=$func_basename_result 11111*22dc650dSSadaf Ebrahimi eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 11112*22dc650dSSadaf Ebrahimi test -z "$libdir" && \ 11113*22dc650dSSadaf Ebrahimi func_fatal_error "'$lib' is not a valid libtool archive" 11114*22dc650dSSadaf Ebrahimi func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 11115*22dc650dSSadaf Ebrahimi ;; 11116*22dc650dSSadaf Ebrahimi esac 11117*22dc650dSSadaf Ebrahimi done 11118*22dc650dSSadaf Ebrahimi dlprefiles=$newdlprefiles 11119*22dc650dSSadaf Ebrahimi else 11120*22dc650dSSadaf Ebrahimi newdlfiles= 11121*22dc650dSSadaf Ebrahimi for lib in $dlfiles; do 11122*22dc650dSSadaf Ebrahimi case $lib in 11123*22dc650dSSadaf Ebrahimi [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 11124*22dc650dSSadaf Ebrahimi *) abs=`pwd`"/$lib" ;; 11125*22dc650dSSadaf Ebrahimi esac 11126*22dc650dSSadaf Ebrahimi func_append newdlfiles " $abs" 11127*22dc650dSSadaf Ebrahimi done 11128*22dc650dSSadaf Ebrahimi dlfiles=$newdlfiles 11129*22dc650dSSadaf Ebrahimi newdlprefiles= 11130*22dc650dSSadaf Ebrahimi for lib in $dlprefiles; do 11131*22dc650dSSadaf Ebrahimi case $lib in 11132*22dc650dSSadaf Ebrahimi [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 11133*22dc650dSSadaf Ebrahimi *) abs=`pwd`"/$lib" ;; 11134*22dc650dSSadaf Ebrahimi esac 11135*22dc650dSSadaf Ebrahimi func_append newdlprefiles " $abs" 11136*22dc650dSSadaf Ebrahimi done 11137*22dc650dSSadaf Ebrahimi dlprefiles=$newdlprefiles 11138*22dc650dSSadaf Ebrahimi fi 11139*22dc650dSSadaf Ebrahimi $RM $output 11140*22dc650dSSadaf Ebrahimi # place dlname in correct position for cygwin 11141*22dc650dSSadaf Ebrahimi # In fact, it would be nice if we could use this code for all target 11142*22dc650dSSadaf Ebrahimi # systems that can't hard-code library paths into their executables 11143*22dc650dSSadaf Ebrahimi # and that have no shared library path variable independent of PATH, 11144*22dc650dSSadaf Ebrahimi # but it turns out we can't easily determine that from inspecting 11145*22dc650dSSadaf Ebrahimi # libtool variables, so we have to hard-code the OSs to which it 11146*22dc650dSSadaf Ebrahimi # applies here; at the moment, that means platforms that use the PE 11147*22dc650dSSadaf Ebrahimi # object format with DLL files. See the long comment at the top of 11148*22dc650dSSadaf Ebrahimi # tests/bindir.at for full details. 11149*22dc650dSSadaf Ebrahimi tdlname=$dlname 11150*22dc650dSSadaf Ebrahimi case $host,$output,$installed,$module,$dlname in 11151*22dc650dSSadaf Ebrahimi *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 11152*22dc650dSSadaf Ebrahimi # If a -bindir argument was supplied, place the dll there. 11153*22dc650dSSadaf Ebrahimi if test -n "$bindir"; then 11154*22dc650dSSadaf Ebrahimi func_relative_path "$install_libdir" "$bindir" 11155*22dc650dSSadaf Ebrahimi tdlname=$func_relative_path_result/$dlname 11156*22dc650dSSadaf Ebrahimi else 11157*22dc650dSSadaf Ebrahimi # Otherwise fall back on heuristic. 11158*22dc650dSSadaf Ebrahimi tdlname=../bin/$dlname 11159*22dc650dSSadaf Ebrahimi fi 11160*22dc650dSSadaf Ebrahimi ;; 11161*22dc650dSSadaf Ebrahimi esac 11162*22dc650dSSadaf Ebrahimi $ECHO > $output "\ 11163*22dc650dSSadaf Ebrahimi# $outputname - a libtool library file 11164*22dc650dSSadaf Ebrahimi# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 11165*22dc650dSSadaf Ebrahimi# 11166*22dc650dSSadaf Ebrahimi# Please DO NOT delete this file! 11167*22dc650dSSadaf Ebrahimi# It is necessary for linking the library. 11168*22dc650dSSadaf Ebrahimi 11169*22dc650dSSadaf Ebrahimi# The name that we can dlopen(3). 11170*22dc650dSSadaf Ebrahimidlname='$tdlname' 11171*22dc650dSSadaf Ebrahimi 11172*22dc650dSSadaf Ebrahimi# Names of this library. 11173*22dc650dSSadaf Ebrahimilibrary_names='$library_names' 11174*22dc650dSSadaf Ebrahimi 11175*22dc650dSSadaf Ebrahimi# The name of the static archive. 11176*22dc650dSSadaf Ebrahimiold_library='$old_library' 11177*22dc650dSSadaf Ebrahimi 11178*22dc650dSSadaf Ebrahimi# Linker flags that cannot go in dependency_libs. 11179*22dc650dSSadaf Ebrahimiinherited_linker_flags='$new_inherited_linker_flags' 11180*22dc650dSSadaf Ebrahimi 11181*22dc650dSSadaf Ebrahimi# Libraries that this one depends upon. 11182*22dc650dSSadaf Ebrahimidependency_libs='$dependency_libs' 11183*22dc650dSSadaf Ebrahimi 11184*22dc650dSSadaf Ebrahimi# Names of additional weak libraries provided by this library 11185*22dc650dSSadaf Ebrahimiweak_library_names='$weak_libs' 11186*22dc650dSSadaf Ebrahimi 11187*22dc650dSSadaf Ebrahimi# Version information for $libname. 11188*22dc650dSSadaf Ebrahimicurrent=$current 11189*22dc650dSSadaf Ebrahimiage=$age 11190*22dc650dSSadaf Ebrahimirevision=$revision 11191*22dc650dSSadaf Ebrahimi 11192*22dc650dSSadaf Ebrahimi# Is this an already installed library? 11193*22dc650dSSadaf Ebrahimiinstalled=$installed 11194*22dc650dSSadaf Ebrahimi 11195*22dc650dSSadaf Ebrahimi# Should we warn about portability when linking against -modules? 11196*22dc650dSSadaf Ebrahimishouldnotlink=$module 11197*22dc650dSSadaf Ebrahimi 11198*22dc650dSSadaf Ebrahimi# Files to dlopen/dlpreopen 11199*22dc650dSSadaf Ebrahimidlopen='$dlfiles' 11200*22dc650dSSadaf Ebrahimidlpreopen='$dlprefiles' 11201*22dc650dSSadaf Ebrahimi 11202*22dc650dSSadaf Ebrahimi# Directory that this library needs to be installed in: 11203*22dc650dSSadaf Ebrahimilibdir='$install_libdir'" 11204*22dc650dSSadaf Ebrahimi if test no,yes = "$installed,$need_relink"; then 11205*22dc650dSSadaf Ebrahimi $ECHO >> $output "\ 11206*22dc650dSSadaf Ebrahimirelink_command=\"$relink_command\"" 11207*22dc650dSSadaf Ebrahimi fi 11208*22dc650dSSadaf Ebrahimi done 11209*22dc650dSSadaf Ebrahimi } 11210*22dc650dSSadaf Ebrahimi 11211*22dc650dSSadaf Ebrahimi # Do a symbolic link so that the libtool archive can be found in 11212*22dc650dSSadaf Ebrahimi # LD_LIBRARY_PATH before the program is installed. 11213*22dc650dSSadaf Ebrahimi func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 11214*22dc650dSSadaf Ebrahimi ;; 11215*22dc650dSSadaf Ebrahimi esac 11216*22dc650dSSadaf Ebrahimi exit $EXIT_SUCCESS 11217*22dc650dSSadaf Ebrahimi} 11218*22dc650dSSadaf Ebrahimi 11219*22dc650dSSadaf Ebrahimiif test link = "$opt_mode" || test relink = "$opt_mode"; then 11220*22dc650dSSadaf Ebrahimi func_mode_link ${1+"$@"} 11221*22dc650dSSadaf Ebrahimifi 11222*22dc650dSSadaf Ebrahimi 11223*22dc650dSSadaf Ebrahimi 11224*22dc650dSSadaf Ebrahimi# func_mode_uninstall arg... 11225*22dc650dSSadaf Ebrahimifunc_mode_uninstall () 11226*22dc650dSSadaf Ebrahimi{ 11227*22dc650dSSadaf Ebrahimi $debug_cmd 11228*22dc650dSSadaf Ebrahimi 11229*22dc650dSSadaf Ebrahimi RM=$nonopt 11230*22dc650dSSadaf Ebrahimi files= 11231*22dc650dSSadaf Ebrahimi rmforce=false 11232*22dc650dSSadaf Ebrahimi exit_status=0 11233*22dc650dSSadaf Ebrahimi 11234*22dc650dSSadaf Ebrahimi # This variable tells wrapper scripts just to set variables rather 11235*22dc650dSSadaf Ebrahimi # than running their programs. 11236*22dc650dSSadaf Ebrahimi libtool_install_magic=$magic 11237*22dc650dSSadaf Ebrahimi 11238*22dc650dSSadaf Ebrahimi for arg 11239*22dc650dSSadaf Ebrahimi do 11240*22dc650dSSadaf Ebrahimi case $arg in 11241*22dc650dSSadaf Ebrahimi -f) func_append RM " $arg"; rmforce=: ;; 11242*22dc650dSSadaf Ebrahimi -*) func_append RM " $arg" ;; 11243*22dc650dSSadaf Ebrahimi *) func_append files " $arg" ;; 11244*22dc650dSSadaf Ebrahimi esac 11245*22dc650dSSadaf Ebrahimi done 11246*22dc650dSSadaf Ebrahimi 11247*22dc650dSSadaf Ebrahimi test -z "$RM" && \ 11248*22dc650dSSadaf Ebrahimi func_fatal_help "you must specify an RM program" 11249*22dc650dSSadaf Ebrahimi 11250*22dc650dSSadaf Ebrahimi rmdirs= 11251*22dc650dSSadaf Ebrahimi 11252*22dc650dSSadaf Ebrahimi for file in $files; do 11253*22dc650dSSadaf Ebrahimi func_dirname "$file" "" "." 11254*22dc650dSSadaf Ebrahimi dir=$func_dirname_result 11255*22dc650dSSadaf Ebrahimi if test . = "$dir"; then 11256*22dc650dSSadaf Ebrahimi odir=$objdir 11257*22dc650dSSadaf Ebrahimi else 11258*22dc650dSSadaf Ebrahimi odir=$dir/$objdir 11259*22dc650dSSadaf Ebrahimi fi 11260*22dc650dSSadaf Ebrahimi func_basename "$file" 11261*22dc650dSSadaf Ebrahimi name=$func_basename_result 11262*22dc650dSSadaf Ebrahimi test uninstall = "$opt_mode" && odir=$dir 11263*22dc650dSSadaf Ebrahimi 11264*22dc650dSSadaf Ebrahimi # Remember odir for removal later, being careful to avoid duplicates 11265*22dc650dSSadaf Ebrahimi if test clean = "$opt_mode"; then 11266*22dc650dSSadaf Ebrahimi case " $rmdirs " in 11267*22dc650dSSadaf Ebrahimi *" $odir "*) ;; 11268*22dc650dSSadaf Ebrahimi *) func_append rmdirs " $odir" ;; 11269*22dc650dSSadaf Ebrahimi esac 11270*22dc650dSSadaf Ebrahimi fi 11271*22dc650dSSadaf Ebrahimi 11272*22dc650dSSadaf Ebrahimi # Don't error if the file doesn't exist and rm -f was used. 11273*22dc650dSSadaf Ebrahimi if { test -L "$file"; } >/dev/null 2>&1 || 11274*22dc650dSSadaf Ebrahimi { test -h "$file"; } >/dev/null 2>&1 || 11275*22dc650dSSadaf Ebrahimi test -f "$file"; then 11276*22dc650dSSadaf Ebrahimi : 11277*22dc650dSSadaf Ebrahimi elif test -d "$file"; then 11278*22dc650dSSadaf Ebrahimi exit_status=1 11279*22dc650dSSadaf Ebrahimi continue 11280*22dc650dSSadaf Ebrahimi elif $rmforce; then 11281*22dc650dSSadaf Ebrahimi continue 11282*22dc650dSSadaf Ebrahimi fi 11283*22dc650dSSadaf Ebrahimi 11284*22dc650dSSadaf Ebrahimi rmfiles=$file 11285*22dc650dSSadaf Ebrahimi 11286*22dc650dSSadaf Ebrahimi case $name in 11287*22dc650dSSadaf Ebrahimi *.la) 11288*22dc650dSSadaf Ebrahimi # Possibly a libtool archive, so verify it. 11289*22dc650dSSadaf Ebrahimi if func_lalib_p "$file"; then 11290*22dc650dSSadaf Ebrahimi func_source $dir/$name 11291*22dc650dSSadaf Ebrahimi 11292*22dc650dSSadaf Ebrahimi # Delete the libtool libraries and symlinks. 11293*22dc650dSSadaf Ebrahimi for n in $library_names; do 11294*22dc650dSSadaf Ebrahimi func_append rmfiles " $odir/$n" 11295*22dc650dSSadaf Ebrahimi done 11296*22dc650dSSadaf Ebrahimi test -n "$old_library" && func_append rmfiles " $odir/$old_library" 11297*22dc650dSSadaf Ebrahimi 11298*22dc650dSSadaf Ebrahimi case $opt_mode in 11299*22dc650dSSadaf Ebrahimi clean) 11300*22dc650dSSadaf Ebrahimi case " $library_names " in 11301*22dc650dSSadaf Ebrahimi *" $dlname "*) ;; 11302*22dc650dSSadaf Ebrahimi *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 11303*22dc650dSSadaf Ebrahimi esac 11304*22dc650dSSadaf Ebrahimi test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 11305*22dc650dSSadaf Ebrahimi ;; 11306*22dc650dSSadaf Ebrahimi uninstall) 11307*22dc650dSSadaf Ebrahimi if test -n "$library_names"; then 11308*22dc650dSSadaf Ebrahimi # Do each command in the postuninstall commands. 11309*22dc650dSSadaf Ebrahimi func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' 11310*22dc650dSSadaf Ebrahimi fi 11311*22dc650dSSadaf Ebrahimi 11312*22dc650dSSadaf Ebrahimi if test -n "$old_library"; then 11313*22dc650dSSadaf Ebrahimi # Do each command in the old_postuninstall commands. 11314*22dc650dSSadaf Ebrahimi func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' 11315*22dc650dSSadaf Ebrahimi fi 11316*22dc650dSSadaf Ebrahimi # FIXME: should reinstall the best remaining shared library. 11317*22dc650dSSadaf Ebrahimi ;; 11318*22dc650dSSadaf Ebrahimi esac 11319*22dc650dSSadaf Ebrahimi fi 11320*22dc650dSSadaf Ebrahimi ;; 11321*22dc650dSSadaf Ebrahimi 11322*22dc650dSSadaf Ebrahimi *.lo) 11323*22dc650dSSadaf Ebrahimi # Possibly a libtool object, so verify it. 11324*22dc650dSSadaf Ebrahimi if func_lalib_p "$file"; then 11325*22dc650dSSadaf Ebrahimi 11326*22dc650dSSadaf Ebrahimi # Read the .lo file 11327*22dc650dSSadaf Ebrahimi func_source $dir/$name 11328*22dc650dSSadaf Ebrahimi 11329*22dc650dSSadaf Ebrahimi # Add PIC object to the list of files to remove. 11330*22dc650dSSadaf Ebrahimi if test -n "$pic_object" && test none != "$pic_object"; then 11331*22dc650dSSadaf Ebrahimi func_append rmfiles " $dir/$pic_object" 11332*22dc650dSSadaf Ebrahimi fi 11333*22dc650dSSadaf Ebrahimi 11334*22dc650dSSadaf Ebrahimi # Add non-PIC object to the list of files to remove. 11335*22dc650dSSadaf Ebrahimi if test -n "$non_pic_object" && test none != "$non_pic_object"; then 11336*22dc650dSSadaf Ebrahimi func_append rmfiles " $dir/$non_pic_object" 11337*22dc650dSSadaf Ebrahimi fi 11338*22dc650dSSadaf Ebrahimi fi 11339*22dc650dSSadaf Ebrahimi ;; 11340*22dc650dSSadaf Ebrahimi 11341*22dc650dSSadaf Ebrahimi *) 11342*22dc650dSSadaf Ebrahimi if test clean = "$opt_mode"; then 11343*22dc650dSSadaf Ebrahimi noexename=$name 11344*22dc650dSSadaf Ebrahimi case $file in 11345*22dc650dSSadaf Ebrahimi *.exe) 11346*22dc650dSSadaf Ebrahimi func_stripname '' '.exe' "$file" 11347*22dc650dSSadaf Ebrahimi file=$func_stripname_result 11348*22dc650dSSadaf Ebrahimi func_stripname '' '.exe' "$name" 11349*22dc650dSSadaf Ebrahimi noexename=$func_stripname_result 11350*22dc650dSSadaf Ebrahimi # $file with .exe has already been added to rmfiles, 11351*22dc650dSSadaf Ebrahimi # add $file without .exe 11352*22dc650dSSadaf Ebrahimi func_append rmfiles " $file" 11353*22dc650dSSadaf Ebrahimi ;; 11354*22dc650dSSadaf Ebrahimi esac 11355*22dc650dSSadaf Ebrahimi # Do a test to see if this is a libtool program. 11356*22dc650dSSadaf Ebrahimi if func_ltwrapper_p "$file"; then 11357*22dc650dSSadaf Ebrahimi if func_ltwrapper_executable_p "$file"; then 11358*22dc650dSSadaf Ebrahimi func_ltwrapper_scriptname "$file" 11359*22dc650dSSadaf Ebrahimi relink_command= 11360*22dc650dSSadaf Ebrahimi func_source $func_ltwrapper_scriptname_result 11361*22dc650dSSadaf Ebrahimi func_append rmfiles " $func_ltwrapper_scriptname_result" 11362*22dc650dSSadaf Ebrahimi else 11363*22dc650dSSadaf Ebrahimi relink_command= 11364*22dc650dSSadaf Ebrahimi func_source $dir/$noexename 11365*22dc650dSSadaf Ebrahimi fi 11366*22dc650dSSadaf Ebrahimi 11367*22dc650dSSadaf Ebrahimi # note $name still contains .exe if it was in $file originally 11368*22dc650dSSadaf Ebrahimi # as does the version of $file that was added into $rmfiles 11369*22dc650dSSadaf Ebrahimi func_append rmfiles " $odir/$name $odir/${name}S.$objext" 11370*22dc650dSSadaf Ebrahimi if test yes = "$fast_install" && test -n "$relink_command"; then 11371*22dc650dSSadaf Ebrahimi func_append rmfiles " $odir/lt-$name" 11372*22dc650dSSadaf Ebrahimi fi 11373*22dc650dSSadaf Ebrahimi if test "X$noexename" != "X$name"; then 11374*22dc650dSSadaf Ebrahimi func_append rmfiles " $odir/lt-$noexename.c" 11375*22dc650dSSadaf Ebrahimi fi 11376*22dc650dSSadaf Ebrahimi fi 11377*22dc650dSSadaf Ebrahimi fi 11378*22dc650dSSadaf Ebrahimi ;; 11379*22dc650dSSadaf Ebrahimi esac 11380*22dc650dSSadaf Ebrahimi func_show_eval "$RM $rmfiles" 'exit_status=1' 11381*22dc650dSSadaf Ebrahimi done 11382*22dc650dSSadaf Ebrahimi 11383*22dc650dSSadaf Ebrahimi # Try to remove the $objdir's in the directories where we deleted files 11384*22dc650dSSadaf Ebrahimi for dir in $rmdirs; do 11385*22dc650dSSadaf Ebrahimi if test -d "$dir"; then 11386*22dc650dSSadaf Ebrahimi func_show_eval "rmdir $dir >/dev/null 2>&1" 11387*22dc650dSSadaf Ebrahimi fi 11388*22dc650dSSadaf Ebrahimi done 11389*22dc650dSSadaf Ebrahimi 11390*22dc650dSSadaf Ebrahimi exit $exit_status 11391*22dc650dSSadaf Ebrahimi} 11392*22dc650dSSadaf Ebrahimi 11393*22dc650dSSadaf Ebrahimiif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then 11394*22dc650dSSadaf Ebrahimi func_mode_uninstall ${1+"$@"} 11395*22dc650dSSadaf Ebrahimifi 11396*22dc650dSSadaf Ebrahimi 11397*22dc650dSSadaf Ebrahimitest -z "$opt_mode" && { 11398*22dc650dSSadaf Ebrahimi help=$generic_help 11399*22dc650dSSadaf Ebrahimi func_fatal_help "you must specify a MODE" 11400*22dc650dSSadaf Ebrahimi} 11401*22dc650dSSadaf Ebrahimi 11402*22dc650dSSadaf Ebrahimitest -z "$exec_cmd" && \ 11403*22dc650dSSadaf Ebrahimi func_fatal_help "invalid operation mode '$opt_mode'" 11404*22dc650dSSadaf Ebrahimi 11405*22dc650dSSadaf Ebrahimiif test -n "$exec_cmd"; then 11406*22dc650dSSadaf Ebrahimi eval exec "$exec_cmd" 11407*22dc650dSSadaf Ebrahimi exit $EXIT_FAILURE 11408*22dc650dSSadaf Ebrahimifi 11409*22dc650dSSadaf Ebrahimi 11410*22dc650dSSadaf Ebrahimiexit $exit_status 11411*22dc650dSSadaf Ebrahimi 11412*22dc650dSSadaf Ebrahimi 11413*22dc650dSSadaf Ebrahimi# The TAGs below are defined such that we never get into a situation 11414*22dc650dSSadaf Ebrahimi# where we disable both kinds of libraries. Given conflicting 11415*22dc650dSSadaf Ebrahimi# choices, we go for a static library, that is the most portable, 11416*22dc650dSSadaf Ebrahimi# since we can't tell whether shared libraries were disabled because 11417*22dc650dSSadaf Ebrahimi# the user asked for that or because the platform doesn't support 11418*22dc650dSSadaf Ebrahimi# them. This is particularly important on AIX, because we don't 11419*22dc650dSSadaf Ebrahimi# support having both static and shared libraries enabled at the same 11420*22dc650dSSadaf Ebrahimi# time on that platform, so we default to a shared-only configuration. 11421*22dc650dSSadaf Ebrahimi# If a disable-shared tag is given, we'll fallback to a static-only 11422*22dc650dSSadaf Ebrahimi# configuration. But we'll never go from static-only to shared-only. 11423*22dc650dSSadaf Ebrahimi 11424*22dc650dSSadaf Ebrahimi# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 11425*22dc650dSSadaf Ebrahimibuild_libtool_libs=no 11426*22dc650dSSadaf Ebrahimibuild_old_libs=yes 11427*22dc650dSSadaf Ebrahimi# ### END LIBTOOL TAG CONFIG: disable-shared 11428*22dc650dSSadaf Ebrahimi 11429*22dc650dSSadaf Ebrahimi# ### BEGIN LIBTOOL TAG CONFIG: disable-static 11430*22dc650dSSadaf Ebrahimibuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 11431*22dc650dSSadaf Ebrahimi# ### END LIBTOOL TAG CONFIG: disable-static 11432*22dc650dSSadaf Ebrahimi 11433*22dc650dSSadaf Ebrahimi# Local Variables: 11434*22dc650dSSadaf Ebrahimi# mode:shell-script 11435*22dc650dSSadaf Ebrahimi# sh-indentation:2 11436*22dc650dSSadaf Ebrahimi# End: 11437