xref: /aosp_15_r20/external/pcre/ltmain.sh (revision 22dc650d8ae982c6770746019a6f94af92b0f024)
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=''
539*22dc650dSSadaf Ebrahimi        tc_bold='';   tc_standout=''
540*22dc650dSSadaf Ebrahimi        tc_red='';   tc_green=''
541*22dc650dSSadaf Ebrahimi        tc_blue='';  tc_cyan=''
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 *) &lt_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