ltmain.sh revision 1.1.1.2 1 1.1 christos #! /bin/sh
2 1.1 christos ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
3 1.1 christos ## by inline-source v2014-01-03.01
4 1.1 christos
5 1.1 christos # libtool (GNU libtool) 2.4.6
6 1.1 christos # Provide generalized library-building support services.
7 1.1 christos # Written by Gordon Matzigkeit <gord (at] gnu.ai.mit.edu>, 1996
8 1.1 christos
9 1.1 christos # Copyright (C) 1996-2015 Free Software Foundation, Inc.
10 1.1 christos # This is free software; see the source for copying conditions. There is NO
11 1.1 christos # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 1.1 christos
13 1.1 christos # GNU Libtool is free software; you can redistribute it and/or modify
14 1.1 christos # it under the terms of the GNU General Public License as published by
15 1.1 christos # the Free Software Foundation; either version 2 of the License, or
16 1.1 christos # (at your option) any later version.
17 1.1 christos #
18 1.1 christos # As a special exception to the GNU General Public License,
19 1.1 christos # if you distribute this file as part of a program or library that
20 1.1 christos # is built using GNU Libtool, you may include this file under the
21 1.1 christos # same distribution terms that you use for the rest of that program.
22 1.1 christos #
23 1.1 christos # GNU Libtool is distributed in the hope that it will be useful, but
24 1.1 christos # WITHOUT ANY WARRANTY; without even the implied warranty of
25 1.1 christos # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
26 1.1 christos # General Public License for more details.
27 1.1 christos #
28 1.1 christos # You should have received a copy of the GNU General Public License
29 1.1 christos # along with this program. If not, see <http://www.gnu.org/licenses/>.
30 1.1 christos
31 1.1 christos
32 1.1 christos PROGRAM=libtool
33 1.1 christos PACKAGE=libtool
34 1.1.1.2 christos VERSION="2.4.6 Debian-2.4.6-0.1"
35 1.1 christos package_revision=2.4.6
36 1.1 christos
37 1.1 christos
38 1.1 christos ## ------ ##
39 1.1 christos ## Usage. ##
40 1.1 christos ## ------ ##
41 1.1 christos
42 1.1 christos # Run './libtool --help' for help with using this script from the
43 1.1 christos # command line.
44 1.1 christos
45 1.1 christos
46 1.1 christos ## ------------------------------- ##
47 1.1 christos ## User overridable command paths. ##
48 1.1 christos ## ------------------------------- ##
49 1.1 christos
50 1.1 christos # After configure completes, it has a better idea of some of the
51 1.1 christos # shell tools we need than the defaults used by the functions shared
52 1.1 christos # with bootstrap, so set those here where they can still be over-
53 1.1 christos # ridden by the user, but otherwise take precedence.
54 1.1 christos
55 1.1 christos : ${AUTOCONF="autoconf"}
56 1.1 christos : ${AUTOMAKE="automake"}
57 1.1 christos
58 1.1 christos
59 1.1 christos ## -------------------------- ##
60 1.1 christos ## Source external libraries. ##
61 1.1 christos ## -------------------------- ##
62 1.1 christos
63 1.1 christos # Much of our low-level functionality needs to be sourced from external
64 1.1 christos # libraries, which are installed to $pkgauxdir.
65 1.1 christos
66 1.1 christos # Set a version string for this script.
67 1.1 christos scriptversion=2015-01-20.17; # UTC
68 1.1 christos
69 1.1 christos # General shell script boiler plate, and helper functions.
70 1.1 christos # Written by Gary V. Vaughan, 2004
71 1.1 christos
72 1.1 christos # Copyright (C) 2004-2015 Free Software Foundation, Inc.
73 1.1 christos # This is free software; see the source for copying conditions. There is NO
74 1.1 christos # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
75 1.1 christos
76 1.1 christos # This program is free software; you can redistribute it and/or modify
77 1.1 christos # it under the terms of the GNU General Public License as published by
78 1.1 christos # the Free Software Foundation; either version 3 of the License, or
79 1.1 christos # (at your option) any later version.
80 1.1 christos
81 1.1 christos # As a special exception to the GNU General Public License, if you distribute
82 1.1 christos # this file as part of a program or library that is built using GNU Libtool,
83 1.1 christos # you may include this file under the same distribution terms that you use
84 1.1 christos # for the rest of that program.
85 1.1 christos
86 1.1 christos # This program is distributed in the hope that it will be useful,
87 1.1 christos # but WITHOUT ANY WARRANTY; without even the implied warranty of
88 1.1 christos # MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU
89 1.1 christos # General Public License for more details.
90 1.1 christos
91 1.1 christos # You should have received a copy of the GNU General Public License
92 1.1 christos # along with this program. If not, see <http://www.gnu.org/licenses/>.
93 1.1 christos
94 1.1 christos # Please report bugs or propose patches to gary (at] gnu.org.
95 1.1 christos
96 1.1 christos
97 1.1 christos ## ------ ##
98 1.1 christos ## Usage. ##
99 1.1 christos ## ------ ##
100 1.1 christos
101 1.1 christos # Evaluate this file near the top of your script to gain access to
102 1.1 christos # the functions and variables defined here:
103 1.1 christos #
104 1.1 christos # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
105 1.1 christos #
106 1.1 christos # If you need to override any of the default environment variable
107 1.1 christos # settings, do that before evaluating this file.
108 1.1 christos
109 1.1 christos
110 1.1 christos ## -------------------- ##
111 1.1 christos ## Shell normalisation. ##
112 1.1 christos ## -------------------- ##
113 1.1 christos
114 1.1 christos # Some shells need a little help to be as Bourne compatible as possible.
115 1.1 christos # Before doing anything else, make sure all that help has been provided!
116 1.1 christos
117 1.1 christos DUALCASE=1; export DUALCASE # for MKS sh
118 1.1 christos if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
119 1.1 christos emulate sh
120 1.1 christos NULLCMD=:
121 1.1 christos # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
122 1.1 christos # is contrary to our usage. Disable this feature.
123 1.1 christos alias -g '${1+"$@"}'='"$@"'
124 1.1 christos setopt NO_GLOB_SUBST
125 1.1 christos else
126 1.1 christos case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
127 1.1 christos fi
128 1.1 christos
129 1.1 christos # NLS nuisances: We save the old values in case they are required later.
130 1.1 christos _G_user_locale=
131 1.1 christos _G_safe_locale=
132 1.1 christos for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
133 1.1 christos do
134 1.1 christos eval "if test set = \"\${$_G_var+set}\"; then
135 1.1 christos save_$_G_var=\$$_G_var
136 1.1 christos $_G_var=C
137 1.1 christos export $_G_var
138 1.1 christos _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
139 1.1 christos _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
140 1.1 christos fi"
141 1.1 christos done
142 1.1 christos
143 1.1 christos # CDPATH.
144 1.1 christos (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
145 1.1 christos
146 1.1 christos # Make sure IFS has a sensible default
147 1.1 christos sp=' '
148 1.1 christos nl='
149 1.1 christos '
150 1.1 christos IFS="$sp $nl"
151 1.1 christos
152 1.1 christos # There are apparently some retarded systems that use ';' as a PATH separator!
153 1.1 christos if test "${PATH_SEPARATOR+set}" != set; then
154 1.1 christos PATH_SEPARATOR=:
155 1.1 christos (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
156 1.1 christos (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
157 1.1 christos PATH_SEPARATOR=';'
158 1.1 christos }
159 1.1 christos fi
160 1.1 christos
161 1.1 christos
162 1.1 christos
163 1.1 christos ## ------------------------- ##
164 1.1 christos ## Locate command utilities. ##
165 1.1 christos ## ------------------------- ##
166 1.1 christos
167 1.1 christos
168 1.1 christos # func_executable_p FILE
169 1.1 christos # ----------------------
170 1.1 christos # Check that FILE is an executable regular file.
171 1.1 christos func_executable_p ()
172 1.1 christos {
173 1.1 christos test -f "$1" && test -x "$1"
174 1.1 christos }
175 1.1 christos
176 1.1 christos
177 1.1 christos # func_path_progs PROGS_LIST CHECK_FUNC [PATH]
178 1.1 christos # --------------------------------------------
179 1.1 christos # Search for either a program that responds to --version with output
180 1.1 christos # containing "GNU", or else returned by CHECK_FUNC otherwise, by
181 1.1 christos # trying all the directories in PATH with each of the elements of
182 1.1 christos # PROGS_LIST.
183 1.1 christos #
184 1.1 christos # CHECK_FUNC should accept the path to a candidate program, and
185 1.1 christos # set $func_check_prog_result if it truncates its output less than
186 1.1 christos # $_G_path_prog_max characters.
187 1.1 christos func_path_progs ()
188 1.1 christos {
189 1.1 christos _G_progs_list=$1
190 1.1 christos _G_check_func=$2
191 1.1 christos _G_PATH=${3-"$PATH"}
192 1.1 christos
193 1.1 christos _G_path_prog_max=0
194 1.1 christos _G_path_prog_found=false
195 1.1 christos _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
196 1.1 christos for _G_dir in $_G_PATH; do
197 1.1 christos IFS=$_G_save_IFS
198 1.1 christos test -z "$_G_dir" && _G_dir=.
199 1.1 christos for _G_prog_name in $_G_progs_list; do
200 1.1 christos for _exeext in '' .EXE; do
201 1.1 christos _G_path_prog=$_G_dir/$_G_prog_name$_exeext
202 1.1 christos func_executable_p "$_G_path_prog" || continue
203 1.1 christos case `"$_G_path_prog" --version 2>&1` in
204 1.1 christos *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
205 1.1 christos *) $_G_check_func $_G_path_prog
206 1.1 christos func_path_progs_result=$func_check_prog_result
207 1.1 christos ;;
208 1.1 christos esac
209 1.1 christos $_G_path_prog_found && break 3
210 1.1 christos done
211 1.1 christos done
212 1.1 christos done
213 1.1 christos IFS=$_G_save_IFS
214 1.1 christos test -z "$func_path_progs_result" && {
215 1.1 christos echo "no acceptable sed could be found in \$PATH" >&2
216 1.1 christos exit 1
217 1.1 christos }
218 1.1 christos }
219 1.1 christos
220 1.1 christos
221 1.1 christos # We want to be able to use the functions in this file before configure
222 1.1 christos # has figured out where the best binaries are kept, which means we have
223 1.1 christos # to search for them ourselves - except when the results are already set
224 1.1 christos # where we skip the searches.
225 1.1 christos
226 1.1 christos # Unless the user overrides by setting SED, search the path for either GNU
227 1.1 christos # sed, or the sed that truncates its output the least.
228 1.1 christos test -z "$SED" && {
229 1.1 christos _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
230 1.1 christos for _G_i in 1 2 3 4 5 6 7; do
231 1.1 christos _G_sed_script=$_G_sed_script$nl$_G_sed_script
232 1.1 christos done
233 1.1 christos echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
234 1.1 christos _G_sed_script=
235 1.1 christos
236 1.1 christos func_check_prog_sed ()
237 1.1 christos {
238 1.1 christos _G_path_prog=$1
239 1.1 christos
240 1.1 christos _G_count=0
241 1.1 christos printf 0123456789 >conftest.in
242 1.1 christos while :
243 1.1 christos do
244 1.1 christos cat conftest.in conftest.in >conftest.tmp
245 1.1 christos mv conftest.tmp conftest.in
246 1.1 christos cp conftest.in conftest.nl
247 1.1 christos echo '' >> conftest.nl
248 1.1 christos "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
249 1.1 christos diff conftest.out conftest.nl >/dev/null 2>&1 || break
250 1.1 christos _G_count=`expr $_G_count + 1`
251 1.1 christos if test "$_G_count" -gt "$_G_path_prog_max"; then
252 1.1 christos # Best one so far, save it but keep looking for a better one
253 1.1 christos func_check_prog_result=$_G_path_prog
254 1.1 christos _G_path_prog_max=$_G_count
255 1.1 christos fi
256 1.1 christos # 10*(2^10) chars as input seems more than enough
257 1.1 christos test 10 -lt "$_G_count" && break
258 1.1 christos done
259 1.1 christos rm -f conftest.in conftest.tmp conftest.nl conftest.out
260 1.1 christos }
261 1.1 christos
262 1.1 christos func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin
263 1.1 christos rm -f conftest.sed
264 1.1 christos SED=$func_path_progs_result
265 1.1 christos }
266 1.1 christos
267 1.1 christos
268 1.1 christos # Unless the user overrides by setting GREP, search the path for either GNU
269 1.1 christos # grep, or the grep that truncates its output the least.
270 1.1 christos test -z "$GREP" && {
271 1.1 christos func_check_prog_grep ()
272 1.1 christos {
273 1.1 christos _G_path_prog=$1
274 1.1 christos
275 1.1 christos _G_count=0
276 1.1 christos _G_path_prog_max=0
277 1.1 christos printf 0123456789 >conftest.in
278 1.1 christos while :
279 1.1 christos do
280 1.1 christos cat conftest.in conftest.in >conftest.tmp
281 1.1 christos mv conftest.tmp conftest.in
282 1.1 christos cp conftest.in conftest.nl
283 1.1 christos echo 'GREP' >> conftest.nl
284 1.1 christos "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
285 1.1 christos diff conftest.out conftest.nl >/dev/null 2>&1 || break
286 1.1 christos _G_count=`expr $_G_count + 1`
287 1.1 christos if test "$_G_count" -gt "$_G_path_prog_max"; then
288 1.1 christos # Best one so far, save it but keep looking for a better one
289 1.1 christos func_check_prog_result=$_G_path_prog
290 1.1 christos _G_path_prog_max=$_G_count
291 1.1 christos fi
292 1.1 christos # 10*(2^10) chars as input seems more than enough
293 1.1 christos test 10 -lt "$_G_count" && break
294 1.1 christos done
295 1.1 christos rm -f conftest.in conftest.tmp conftest.nl conftest.out
296 1.1 christos }
297 1.1 christos
298 1.1 christos func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin
299 1.1 christos GREP=$func_path_progs_result
300 1.1 christos }
301 1.1 christos
302 1.1 christos
303 1.1 christos ## ------------------------------- ##
304 1.1 christos ## User overridable command paths. ##
305 1.1 christos ## ------------------------------- ##
306 1.1 christos
307 1.1 christos # All uppercase variable names are used for environment variables. These
308 1.1 christos # variables can be overridden by the user before calling a script that
309 1.1 christos # uses them if a suitable command of that name is not already available
310 1.1 christos # in the command search PATH.
311 1.1 christos
312 1.1 christos : ${CP="cp -f"}
313 1.1 christos : ${ECHO="printf %s\n"}
314 1.1 christos : ${EGREP="$GREP -E"}
315 1.1 christos : ${FGREP="$GREP -F"}
316 1.1 christos : ${LN_S="ln -s"}
317 1.1 christos : ${MAKE="make"}
318 1.1 christos : ${MKDIR="mkdir"}
319 1.1 christos : ${MV="mv -f"}
320 1.1 christos : ${RM="rm -f"}
321 1.1 christos : ${SHELL="${CONFIG_SHELL-/bin/sh}"}
322 1.1 christos
323 1.1 christos
324 1.1 christos ## -------------------- ##
325 1.1 christos ## Useful sed snippets. ##
326 1.1 christos ## -------------------- ##
327 1.1 christos
328 1.1 christos sed_dirname='s|/[^/]*$||'
329 1.1 christos sed_basename='s|^.*/||'
330 1.1 christos
331 1.1 christos # Sed substitution that helps us do robust quoting. It backslashifies
332 1.1 christos # metacharacters that are still active within double-quoted strings.
333 1.1 christos sed_quote_subst='s|\([`"$\\]\)|\\\1|g'
334 1.1 christos
335 1.1 christos # Same as above, but do not quote variable references.
336 1.1 christos sed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
337 1.1 christos
338 1.1 christos # Sed substitution that turns a string into a regex matching for the
339 1.1 christos # string literally.
340 1.1 christos sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
341 1.1 christos
342 1.1 christos # Sed substitution that converts a w32 file name or path
343 1.1 christos # that contains forward slashes, into one that contains
344 1.1 christos # (escaped) backslashes. A very naive implementation.
345 1.1 christos sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
346 1.1 christos
347 1.1 christos # Re-'\' parameter expansions in output of sed_double_quote_subst that
348 1.1 christos # were '\'-ed in input to the same. If an odd number of '\' preceded a
349 1.1 christos # '$' in input to sed_double_quote_subst, that '$' was protected from
350 1.1 christos # expansion. Since each input '\' is now two '\'s, look for any number
351 1.1 christos # of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'.
352 1.1 christos _G_bs='\\'
353 1.1 christos _G_bs2='\\\\'
354 1.1 christos _G_bs4='\\\\\\\\'
355 1.1 christos _G_dollar='\$'
356 1.1 christos sed_double_backslash="\
357 1.1 christos s/$_G_bs4/&\\
358 1.1 christos /g
359 1.1 christos s/^$_G_bs2$_G_dollar/$_G_bs&/
360 1.1 christos s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
361 1.1 christos s/\n//g"
362 1.1 christos
363 1.1 christos
364 1.1 christos ## ----------------- ##
365 1.1 christos ## Global variables. ##
366 1.1 christos ## ----------------- ##
367 1.1 christos
368 1.1 christos # Except for the global variables explicitly listed below, the following
369 1.1 christos # functions in the '^func_' namespace, and the '^require_' namespace
370 1.1 christos # variables initialised in the 'Resource management' section, sourcing
371 1.1 christos # this file will not pollute your global namespace with anything
372 1.1 christos # else. There's no portable way to scope variables in Bourne shell
373 1.1 christos # though, so actually running these functions will sometimes place
374 1.1 christos # results into a variable named after the function, and often use
375 1.1 christos # temporary variables in the '^_G_' namespace. If you are careful to
376 1.1 christos # avoid using those namespaces casually in your sourcing script, things
377 1.1 christos # should continue to work as you expect. And, of course, you can freely
378 1.1 christos # overwrite any of the functions or variables defined here before
379 1.1 christos # calling anything to customize them.
380 1.1 christos
381 1.1 christos EXIT_SUCCESS=0
382 1.1 christos EXIT_FAILURE=1
383 1.1 christos EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing.
384 1.1 christos EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake.
385 1.1 christos
386 1.1 christos # Allow overriding, eg assuming that you follow the convention of
387 1.1 christos # putting '$debug_cmd' at the start of all your functions, you can get
388 1.1 christos # bash to show function call trace with:
389 1.1 christos #
390 1.1 christos # debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
391 1.1 christos debug_cmd=${debug_cmd-":"}
392 1.1 christos exit_cmd=:
393 1.1 christos
394 1.1 christos # By convention, finish your script with:
395 1.1 christos #
396 1.1 christos # exit $exit_status
397 1.1 christos #
398 1.1 christos # so that you can set exit_status to non-zero if you want to indicate
399 1.1 christos # something went wrong during execution without actually bailing out at
400 1.1 christos # the point of failure.
401 1.1 christos exit_status=$EXIT_SUCCESS
402 1.1 christos
403 1.1 christos # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
404 1.1 christos # is ksh but when the shell is invoked as "sh" and the current value of
405 1.1 christos # the _XPG environment variable is not equal to 1 (one), the special
406 1.1 christos # positional parameter $0, within a function call, is the name of the
407 1.1 christos # function.
408 1.1 christos progpath=$0
409 1.1 christos
410 1.1 christos # The name of this program.
411 1.1 christos progname=`$ECHO "$progpath" |$SED "$sed_basename"`
412 1.1 christos
413 1.1 christos # Make sure we have an absolute progpath for reexecution:
414 1.1 christos case $progpath in
415 1.1 christos [\\/]*|[A-Za-z]:\\*) ;;
416 1.1 christos *[\\/]*)
417 1.1 christos progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
418 1.1 christos progdir=`cd "$progdir" && pwd`
419 1.1 christos progpath=$progdir/$progname
420 1.1 christos ;;
421 1.1 christos *)
422 1.1 christos _G_IFS=$IFS
423 1.1 christos IFS=${PATH_SEPARATOR-:}
424 1.1 christos for progdir in $PATH; do
425 1.1 christos IFS=$_G_IFS
426 1.1 christos test -x "$progdir/$progname" && break
427 1.1 christos done
428 1.1 christos IFS=$_G_IFS
429 1.1 christos test -n "$progdir" || progdir=`pwd`
430 1.1 christos progpath=$progdir/$progname
431 1.1 christos ;;
432 1.1 christos esac
433 1.1 christos
434 1.1 christos
435 1.1 christos ## ----------------- ##
436 1.1 christos ## Standard options. ##
437 1.1 christos ## ----------------- ##
438 1.1 christos
439 1.1 christos # The following options affect the operation of the functions defined
440 1.1 christos # below, and should be set appropriately depending on run-time para-
441 1.1 christos # meters passed on the command line.
442 1.1 christos
443 1.1 christos opt_dry_run=false
444 1.1 christos opt_quiet=false
445 1.1 christos opt_verbose=false
446 1.1 christos
447 1.1 christos # Categories 'all' and 'none' are always available. Append any others
448 1.1 christos # you will pass as the first argument to func_warning from your own
449 1.1 christos # code.
450 1.1 christos warning_categories=
451 1.1 christos
452 1.1 christos # By default, display warnings according to 'opt_warning_types'. Set
453 1.1 christos # 'warning_func' to ':' to elide all warnings, or func_fatal_error to
454 1.1 christos # treat the next displayed warning as a fatal error.
455 1.1 christos warning_func=func_warn_and_continue
456 1.1 christos
457 1.1 christos # Set to 'all' to display all warnings, 'none' to suppress all
458 1.1 christos # warnings, or a space delimited list of some subset of
459 1.1 christos # 'warning_categories' to display only the listed warnings.
460 1.1 christos opt_warning_types=all
461 1.1 christos
462 1.1 christos
463 1.1 christos ## -------------------- ##
464 1.1 christos ## Resource management. ##
465 1.1 christos ## -------------------- ##
466 1.1 christos
467 1.1 christos # This section contains definitions for functions that each ensure a
468 1.1 christos # particular resource (a file, or a non-empty configuration variable for
469 1.1 christos # example) is available, and if appropriate to extract default values
470 1.1 christos # from pertinent package files. Call them using their associated
471 1.1 christos # 'require_*' variable to ensure that they are executed, at most, once.
472 1.1 christos #
473 1.1 christos # It's entirely deliberate that calling these functions can set
474 1.1 christos # variables that don't obey the namespace limitations obeyed by the rest
475 1.1 christos # of this file, in order that that they be as useful as possible to
476 1.1 christos # callers.
477 1.1 christos
478 1.1 christos
479 1.1 christos # require_term_colors
480 1.1 christos # -------------------
481 1.1 christos # Allow display of bold text on terminals that support it.
482 1.1 christos require_term_colors=func_require_term_colors
483 1.1 christos func_require_term_colors ()
484 1.1 christos {
485 1.1 christos $debug_cmd
486 1.1 christos
487 1.1 christos test -t 1 && {
488 1.1 christos # COLORTERM and USE_ANSI_COLORS environment variables take
489 1.1 christos # precedence, because most terminfo databases neglect to describe
490 1.1 christos # whether color sequences are supported.
491 1.1 christos test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
492 1.1 christos
493 1.1 christos if test 1 = "$USE_ANSI_COLORS"; then
494 1.1 christos # Standard ANSI escape sequences
495 1.1 christos tc_reset='[0m'
496 1.1 christos tc_bold='[1m'; tc_standout='[7m'
497 1.1 christos tc_red='[31m'; tc_green='[32m'
498 1.1 christos tc_blue='[34m'; tc_cyan='[36m'
499 1.1 christos else
500 1.1 christos # Otherwise trust the terminfo database after all.
501 1.1 christos test -n "`tput sgr0 2>/dev/null`" && {
502 1.1 christos tc_reset=`tput sgr0`
503 1.1 christos test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
504 1.1 christos tc_standout=$tc_bold
505 1.1 christos test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
506 1.1 christos test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
507 1.1 christos test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
508 1.1 christos test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
509 1.1 christos test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
510 1.1 christos }
511 1.1 christos fi
512 1.1 christos }
513 1.1 christos
514 1.1 christos require_term_colors=:
515 1.1 christos }
516 1.1 christos
517 1.1 christos
518 1.1 christos ## ----------------- ##
519 1.1 christos ## Function library. ##
520 1.1 christos ## ----------------- ##
521 1.1 christos
522 1.1 christos # This section contains a variety of useful functions to call in your
523 1.1 christos # scripts. Take note of the portable wrappers for features provided by
524 1.1 christos # some modern shells, which will fall back to slower equivalents on
525 1.1 christos # less featureful shells.
526 1.1 christos
527 1.1 christos
528 1.1 christos # func_append VAR VALUE
529 1.1 christos # ---------------------
530 1.1 christos # Append VALUE onto the existing contents of VAR.
531 1.1 christos
532 1.1 christos # We should try to minimise forks, especially on Windows where they are
533 1.1 christos # unreasonably slow, so skip the feature probes when bash or zsh are
534 1.1 christos # being used:
535 1.1 christos if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
536 1.1 christos : ${_G_HAVE_ARITH_OP="yes"}
537 1.1 christos : ${_G_HAVE_XSI_OPS="yes"}
538 1.1 christos # The += operator was introduced in bash 3.1
539 1.1 christos case $BASH_VERSION in
540 1.1 christos [12].* | 3.0 | 3.0*) ;;
541 1.1 christos *)
542 1.1 christos : ${_G_HAVE_PLUSEQ_OP="yes"}
543 1.1 christos ;;
544 1.1 christos esac
545 1.1 christos fi
546 1.1 christos
547 1.1 christos # _G_HAVE_PLUSEQ_OP
548 1.1 christos # Can be empty, in which case the shell is probed, "yes" if += is
549 1.1 christos # useable or anything else if it does not work.
550 1.1 christos test -z "$_G_HAVE_PLUSEQ_OP" \
551 1.1 christos && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
552 1.1 christos && _G_HAVE_PLUSEQ_OP=yes
553 1.1 christos
554 1.1 christos if test yes = "$_G_HAVE_PLUSEQ_OP"
555 1.1 christos then
556 1.1 christos # This is an XSI compatible shell, allowing a faster implementation...
557 1.1 christos eval 'func_append ()
558 1.1 christos {
559 1.1 christos $debug_cmd
560 1.1 christos
561 1.1 christos eval "$1+=\$2"
562 1.1 christos }'
563 1.1 christos else
564 1.1 christos # ...otherwise fall back to using expr, which is often a shell builtin.
565 1.1 christos func_append ()
566 1.1 christos {
567 1.1 christos $debug_cmd
568 1.1 christos
569 1.1 christos eval "$1=\$$1\$2"
570 1.1 christos }
571 1.1 christos fi
572 1.1 christos
573 1.1 christos
574 1.1 christos # func_append_quoted VAR VALUE
575 1.1 christos # ----------------------------
576 1.1 christos # Quote VALUE and append to the end of shell variable VAR, separated
577 1.1 christos # by a space.
578 1.1 christos if test yes = "$_G_HAVE_PLUSEQ_OP"; then
579 1.1 christos eval 'func_append_quoted ()
580 1.1 christos {
581 1.1 christos $debug_cmd
582 1.1 christos
583 1.1 christos func_quote_for_eval "$2"
584 1.1 christos eval "$1+=\\ \$func_quote_for_eval_result"
585 1.1 christos }'
586 1.1 christos else
587 1.1 christos func_append_quoted ()
588 1.1 christos {
589 1.1 christos $debug_cmd
590 1.1 christos
591 1.1 christos func_quote_for_eval "$2"
592 1.1 christos eval "$1=\$$1\\ \$func_quote_for_eval_result"
593 1.1 christos }
594 1.1 christos fi
595 1.1 christos
596 1.1 christos
597 1.1 christos # func_append_uniq VAR VALUE
598 1.1 christos # --------------------------
599 1.1 christos # Append unique VALUE onto the existing contents of VAR, assuming
600 1.1 christos # entries are delimited by the first character of VALUE. For example:
601 1.1 christos #
602 1.1 christos # func_append_uniq options " --another-option option-argument"
603 1.1 christos #
604 1.1 christos # will only append to $options if " --another-option option-argument "
605 1.1 christos # is not already present somewhere in $options already (note spaces at
606 1.1 christos # each end implied by leading space in second argument).
607 1.1 christos func_append_uniq ()
608 1.1 christos {
609 1.1 christos $debug_cmd
610 1.1 christos
611 1.1 christos eval _G_current_value='`$ECHO $'$1'`'
612 1.1 christos _G_delim=`expr "$2" : '\(.\)'`
613 1.1 christos
614 1.1 christos case $_G_delim$_G_current_value$_G_delim in
615 1.1 christos *"$2$_G_delim"*) ;;
616 1.1 christos *) func_append "$@" ;;
617 1.1 christos esac
618 1.1 christos }
619 1.1 christos
620 1.1 christos
621 1.1 christos # func_arith TERM...
622 1.1 christos # ------------------
623 1.1 christos # Set func_arith_result to the result of evaluating TERMs.
624 1.1 christos test -z "$_G_HAVE_ARITH_OP" \
625 1.1 christos && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
626 1.1 christos && _G_HAVE_ARITH_OP=yes
627 1.1 christos
628 1.1 christos if test yes = "$_G_HAVE_ARITH_OP"; then
629 1.1 christos eval 'func_arith ()
630 1.1 christos {
631 1.1 christos $debug_cmd
632 1.1 christos
633 1.1 christos func_arith_result=$(( $* ))
634 1.1 christos }'
635 1.1 christos else
636 1.1 christos func_arith ()
637 1.1 christos {
638 1.1 christos $debug_cmd
639 1.1 christos
640 1.1 christos func_arith_result=`expr "$@"`
641 1.1 christos }
642 1.1 christos fi
643 1.1 christos
644 1.1 christos
645 1.1 christos # func_basename FILE
646 1.1 christos # ------------------
647 1.1 christos # Set func_basename_result to FILE with everything up to and including
648 1.1 christos # the last / stripped.
649 1.1 christos if test yes = "$_G_HAVE_XSI_OPS"; then
650 1.1 christos # If this shell supports suffix pattern removal, then use it to avoid
651 1.1 christos # forking. Hide the definitions single quotes in case the shell chokes
652 1.1 christos # on unsupported syntax...
653 1.1 christos _b='func_basename_result=${1##*/}'
654 1.1 christos _d='case $1 in
655 1.1 christos */*) func_dirname_result=${1%/*}$2 ;;
656 1.1 christos * ) func_dirname_result=$3 ;;
657 1.1 christos esac'
658 1.1 christos
659 1.1 christos else
660 1.1 christos # ...otherwise fall back to using sed.
661 1.1 christos _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
662 1.1 christos _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"`
663 1.1 christos if test "X$func_dirname_result" = "X$1"; then
664 1.1 christos func_dirname_result=$3
665 1.1 christos else
666 1.1 christos func_append func_dirname_result "$2"
667 1.1 christos fi'
668 1.1 christos fi
669 1.1 christos
670 1.1 christos eval 'func_basename ()
671 1.1 christos {
672 1.1 christos $debug_cmd
673 1.1 christos
674 1.1 christos '"$_b"'
675 1.1 christos }'
676 1.1 christos
677 1.1 christos
678 1.1 christos # func_dirname FILE APPEND NONDIR_REPLACEMENT
679 1.1 christos # -------------------------------------------
680 1.1 christos # Compute the dirname of FILE. If nonempty, add APPEND to the result,
681 1.1 christos # otherwise set result to NONDIR_REPLACEMENT.
682 1.1 christos eval 'func_dirname ()
683 1.1 christos {
684 1.1 christos $debug_cmd
685 1.1 christos
686 1.1 christos '"$_d"'
687 1.1 christos }'
688 1.1 christos
689 1.1 christos
690 1.1 christos # func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
691 1.1 christos # --------------------------------------------------------
692 1.1 christos # Perform func_basename and func_dirname in a single function
693 1.1 christos # call:
694 1.1 christos # dirname: Compute the dirname of FILE. If nonempty,
695 1.1 christos # add APPEND to the result, otherwise set result
696 1.1 christos # to NONDIR_REPLACEMENT.
697 1.1 christos # value returned in "$func_dirname_result"
698 1.1 christos # basename: Compute filename of FILE.
699 1.1 christos # value retuned in "$func_basename_result"
700 1.1 christos # For efficiency, we do not delegate to the functions above but instead
701 1.1 christos # duplicate the functionality here.
702 1.1 christos eval 'func_dirname_and_basename ()
703 1.1 christos {
704 1.1 christos $debug_cmd
705 1.1 christos
706 1.1 christos '"$_b"'
707 1.1 christos '"$_d"'
708 1.1 christos }'
709 1.1 christos
710 1.1 christos
711 1.1 christos # func_echo ARG...
712 1.1 christos # ----------------
713 1.1 christos # Echo program name prefixed message.
714 1.1 christos func_echo ()
715 1.1 christos {
716 1.1 christos $debug_cmd
717 1.1 christos
718 1.1 christos _G_message=$*
719 1.1 christos
720 1.1 christos func_echo_IFS=$IFS
721 1.1 christos IFS=$nl
722 1.1 christos for _G_line in $_G_message; do
723 1.1 christos IFS=$func_echo_IFS
724 1.1 christos $ECHO "$progname: $_G_line"
725 1.1 christos done
726 1.1 christos IFS=$func_echo_IFS
727 1.1 christos }
728 1.1 christos
729 1.1 christos
730 1.1 christos # func_echo_all ARG...
731 1.1 christos # --------------------
732 1.1 christos # Invoke $ECHO with all args, space-separated.
733 1.1 christos func_echo_all ()
734 1.1 christos {
735 1.1 christos $ECHO "$*"
736 1.1 christos }
737 1.1 christos
738 1.1 christos
739 1.1 christos # func_echo_infix_1 INFIX ARG...
740 1.1 christos # ------------------------------
741 1.1 christos # Echo program name, followed by INFIX on the first line, with any
742 1.1 christos # additional lines not showing INFIX.
743 1.1 christos func_echo_infix_1 ()
744 1.1 christos {
745 1.1 christos $debug_cmd
746 1.1 christos
747 1.1 christos $require_term_colors
748 1.1 christos
749 1.1 christos _G_infix=$1; shift
750 1.1 christos _G_indent=$_G_infix
751 1.1 christos _G_prefix="$progname: $_G_infix: "
752 1.1 christos _G_message=$*
753 1.1 christos
754 1.1 christos # Strip color escape sequences before counting printable length
755 1.1 christos for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
756 1.1 christos do
757 1.1 christos test -n "$_G_tc" && {
758 1.1 christos _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
759 1.1 christos _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
760 1.1 christos }
761 1.1 christos done
762 1.1 christos _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes
763 1.1 christos
764 1.1 christos func_echo_infix_1_IFS=$IFS
765 1.1 christos IFS=$nl
766 1.1 christos for _G_line in $_G_message; do
767 1.1 christos IFS=$func_echo_infix_1_IFS
768 1.1 christos $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
769 1.1 christos _G_prefix=$_G_indent
770 1.1 christos done
771 1.1 christos IFS=$func_echo_infix_1_IFS
772 1.1 christos }
773 1.1 christos
774 1.1 christos
775 1.1 christos # func_error ARG...
776 1.1 christos # -----------------
777 1.1 christos # Echo program name prefixed message to standard error.
778 1.1 christos func_error ()
779 1.1 christos {
780 1.1 christos $debug_cmd
781 1.1 christos
782 1.1 christos $require_term_colors
783 1.1 christos
784 1.1 christos func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2
785 1.1 christos }
786 1.1 christos
787 1.1 christos
788 1.1 christos # func_fatal_error ARG...
789 1.1 christos # -----------------------
790 1.1 christos # Echo program name prefixed message to standard error, and exit.
791 1.1 christos func_fatal_error ()
792 1.1 christos {
793 1.1 christos $debug_cmd
794 1.1 christos
795 1.1 christos func_error "$*"
796 1.1 christos exit $EXIT_FAILURE
797 1.1 christos }
798 1.1 christos
799 1.1 christos
800 1.1 christos # func_grep EXPRESSION FILENAME
801 1.1 christos # -----------------------------
802 1.1 christos # Check whether EXPRESSION matches any line of FILENAME, without output.
803 1.1 christos func_grep ()
804 1.1 christos {
805 1.1 christos $debug_cmd
806 1.1 christos
807 1.1 christos $GREP "$1" "$2" >/dev/null 2>&1
808 1.1 christos }
809 1.1 christos
810 1.1 christos
811 1.1 christos # func_len STRING
812 1.1 christos # ---------------
813 1.1 christos # Set func_len_result to the length of STRING. STRING may not
814 1.1 christos # start with a hyphen.
815 1.1 christos test -z "$_G_HAVE_XSI_OPS" \
816 1.1 christos && (eval 'x=a/b/c;
817 1.1 christos test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
818 1.1 christos && _G_HAVE_XSI_OPS=yes
819 1.1 christos
820 1.1 christos if test yes = "$_G_HAVE_XSI_OPS"; then
821 1.1 christos eval 'func_len ()
822 1.1 christos {
823 1.1 christos $debug_cmd
824 1.1 christos
825 1.1 christos func_len_result=${#1}
826 1.1 christos }'
827 1.1 christos else
828 1.1 christos func_len ()
829 1.1 christos {
830 1.1 christos $debug_cmd
831 1.1 christos
832 1.1 christos func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
833 1.1 christos }
834 1.1 christos fi
835 1.1 christos
836 1.1 christos
837 1.1 christos # func_mkdir_p DIRECTORY-PATH
838 1.1 christos # ---------------------------
839 1.1 christos # Make sure the entire path to DIRECTORY-PATH is available.
840 1.1 christos func_mkdir_p ()
841 1.1 christos {
842 1.1 christos $debug_cmd
843 1.1 christos
844 1.1 christos _G_directory_path=$1
845 1.1 christos _G_dir_list=
846 1.1 christos
847 1.1 christos if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
848 1.1 christos
849 1.1 christos # Protect directory names starting with '-'
850 1.1 christos case $_G_directory_path in
851 1.1 christos -*) _G_directory_path=./$_G_directory_path ;;
852 1.1 christos esac
853 1.1 christos
854 1.1 christos # While some portion of DIR does not yet exist...
855 1.1 christos while test ! -d "$_G_directory_path"; do
856 1.1 christos # ...make a list in topmost first order. Use a colon delimited
857 1.1 christos # list incase some portion of path contains whitespace.
858 1.1 christos _G_dir_list=$_G_directory_path:$_G_dir_list
859 1.1 christos
860 1.1 christos # If the last portion added has no slash in it, the list is done
861 1.1 christos case $_G_directory_path in */*) ;; *) break ;; esac
862 1.1 christos
863 1.1 christos # ...otherwise throw away the child directory and loop
864 1.1 christos _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
865 1.1 christos done
866 1.1 christos _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
867 1.1 christos
868 1.1 christos func_mkdir_p_IFS=$IFS; IFS=:
869 1.1 christos for _G_dir in $_G_dir_list; do
870 1.1 christos IFS=$func_mkdir_p_IFS
871 1.1 christos # mkdir can fail with a 'File exist' error if two processes
872 1.1 christos # try to create one of the directories concurrently. Don't
873 1.1 christos # stop in that case!
874 1.1 christos $MKDIR "$_G_dir" 2>/dev/null || :
875 1.1 christos done
876 1.1 christos IFS=$func_mkdir_p_IFS
877 1.1 christos
878 1.1 christos # Bail out if we (or some other process) failed to create a directory.
879 1.1 christos test -d "$_G_directory_path" || \
880 1.1 christos func_fatal_error "Failed to create '$1'"
881 1.1 christos fi
882 1.1 christos }
883 1.1 christos
884 1.1 christos
885 1.1 christos # func_mktempdir [BASENAME]
886 1.1 christos # -------------------------
887 1.1 christos # Make a temporary directory that won't clash with other running
888 1.1 christos # libtool processes, and avoids race conditions if possible. If
889 1.1 christos # given, BASENAME is the basename for that directory.
890 1.1 christos func_mktempdir ()
891 1.1 christos {
892 1.1 christos $debug_cmd
893 1.1 christos
894 1.1 christos _G_template=${TMPDIR-/tmp}/${1-$progname}
895 1.1 christos
896 1.1 christos if test : = "$opt_dry_run"; then
897 1.1 christos # Return a directory name, but don't create it in dry-run mode
898 1.1 christos _G_tmpdir=$_G_template-$$
899 1.1 christos else
900 1.1 christos
901 1.1 christos # If mktemp works, use that first and foremost
902 1.1 christos _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
903 1.1 christos
904 1.1 christos if test ! -d "$_G_tmpdir"; then
905 1.1 christos # Failing that, at least try and use $RANDOM to avoid a race
906 1.1 christos _G_tmpdir=$_G_template-${RANDOM-0}$$
907 1.1 christos
908 1.1 christos func_mktempdir_umask=`umask`
909 1.1 christos umask 0077
910 1.1 christos $MKDIR "$_G_tmpdir"
911 1.1 christos umask $func_mktempdir_umask
912 1.1 christos fi
913 1.1 christos
914 1.1 christos # If we're not in dry-run mode, bomb out on failure
915 1.1 christos test -d "$_G_tmpdir" || \
916 1.1 christos func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
917 1.1 christos fi
918 1.1 christos
919 1.1 christos $ECHO "$_G_tmpdir"
920 1.1 christos }
921 1.1 christos
922 1.1 christos
923 1.1 christos # func_normal_abspath PATH
924 1.1 christos # ------------------------
925 1.1 christos # Remove doubled-up and trailing slashes, "." path components,
926 1.1 christos # and cancel out any ".." path components in PATH after making
927 1.1 christos # it an absolute path.
928 1.1 christos func_normal_abspath ()
929 1.1 christos {
930 1.1 christos $debug_cmd
931 1.1 christos
932 1.1 christos # These SED scripts presuppose an absolute path with a trailing slash.
933 1.1 christos _G_pathcar='s|^/\([^/]*\).*$|\1|'
934 1.1 christos _G_pathcdr='s|^/[^/]*||'
935 1.1 christos _G_removedotparts=':dotsl
936 1.1 christos s|/\./|/|g
937 1.1 christos t dotsl
938 1.1 christos s|/\.$|/|'
939 1.1 christos _G_collapseslashes='s|/\{1,\}|/|g'
940 1.1 christos _G_finalslash='s|/*$|/|'
941 1.1 christos
942 1.1 christos # Start from root dir and reassemble the path.
943 1.1 christos func_normal_abspath_result=
944 1.1 christos func_normal_abspath_tpath=$1
945 1.1 christos func_normal_abspath_altnamespace=
946 1.1 christos case $func_normal_abspath_tpath in
947 1.1 christos "")
948 1.1 christos # Empty path, that just means $cwd.
949 1.1 christos func_stripname '' '/' "`pwd`"
950 1.1 christos func_normal_abspath_result=$func_stripname_result
951 1.1 christos return
952 1.1 christos ;;
953 1.1 christos # The next three entries are used to spot a run of precisely
954 1.1 christos # two leading slashes without using negated character classes;
955 1.1 christos # we take advantage of case's first-match behaviour.
956 1.1 christos ///*)
957 1.1 christos # Unusual form of absolute path, do nothing.
958 1.1 christos ;;
959 1.1 christos //*)
960 1.1 christos # Not necessarily an ordinary path; POSIX reserves leading '//'
961 1.1 christos # and for example Cygwin uses it to access remote file shares
962 1.1 christos # over CIFS/SMB, so we conserve a leading double slash if found.
963 1.1 christos func_normal_abspath_altnamespace=/
964 1.1 christos ;;
965 1.1 christos /*)
966 1.1 christos # Absolute path, do nothing.
967 1.1 christos ;;
968 1.1 christos *)
969 1.1 christos # Relative path, prepend $cwd.
970 1.1 christos func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
971 1.1 christos ;;
972 1.1 christos esac
973 1.1 christos
974 1.1 christos # Cancel out all the simple stuff to save iterations. We also want
975 1.1 christos # the path to end with a slash for ease of parsing, so make sure
976 1.1 christos # there is one (and only one) here.
977 1.1 christos func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
978 1.1 christos -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
979 1.1 christos while :; do
980 1.1 christos # Processed it all yet?
981 1.1 christos if test / = "$func_normal_abspath_tpath"; then
982 1.1 christos # If we ascended to the root using ".." the result may be empty now.
983 1.1 christos if test -z "$func_normal_abspath_result"; then
984 1.1 christos func_normal_abspath_result=/
985 1.1 christos fi
986 1.1 christos break
987 1.1 christos fi
988 1.1 christos func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
989 1.1 christos -e "$_G_pathcar"`
990 1.1 christos func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
991 1.1 christos -e "$_G_pathcdr"`
992 1.1 christos # Figure out what to do with it
993 1.1 christos case $func_normal_abspath_tcomponent in
994 1.1 christos "")
995 1.1 christos # Trailing empty path component, ignore it.
996 1.1 christos ;;
997 1.1 christos ..)
998 1.1 christos # Parent dir; strip last assembled component from result.
999 1.1 christos func_dirname "$func_normal_abspath_result"
1000 1.1 christos func_normal_abspath_result=$func_dirname_result
1001 1.1 christos ;;
1002 1.1 christos *)
1003 1.1 christos # Actual path component, append it.
1004 1.1 christos func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
1005 1.1 christos ;;
1006 1.1 christos esac
1007 1.1 christos done
1008 1.1 christos # Restore leading double-slash if one was found on entry.
1009 1.1 christos func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
1010 1.1 christos }
1011 1.1 christos
1012 1.1 christos
1013 1.1 christos # func_notquiet ARG...
1014 1.1 christos # --------------------
1015 1.1 christos # Echo program name prefixed message only when not in quiet mode.
1016 1.1 christos func_notquiet ()
1017 1.1 christos {
1018 1.1 christos $debug_cmd
1019 1.1 christos
1020 1.1 christos $opt_quiet || func_echo ${1+"$@"}
1021 1.1 christos
1022 1.1 christos # A bug in bash halts the script if the last line of a function
1023 1.1 christos # fails when set -e is in force, so we need another command to
1024 1.1 christos # work around that:
1025 1.1 christos :
1026 1.1 christos }
1027 1.1 christos
1028 1.1 christos
1029 1.1 christos # func_relative_path SRCDIR DSTDIR
1030 1.1 christos # --------------------------------
1031 1.1 christos # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
1032 1.1 christos func_relative_path ()
1033 1.1 christos {
1034 1.1 christos $debug_cmd
1035 1.1 christos
1036 1.1 christos func_relative_path_result=
1037 1.1 christos func_normal_abspath "$1"
1038 1.1 christos func_relative_path_tlibdir=$func_normal_abspath_result
1039 1.1 christos func_normal_abspath "$2"
1040 1.1 christos func_relative_path_tbindir=$func_normal_abspath_result
1041 1.1 christos
1042 1.1 christos # Ascend the tree starting from libdir
1043 1.1 christos while :; do
1044 1.1 christos # check if we have found a prefix of bindir
1045 1.1 christos case $func_relative_path_tbindir in
1046 1.1 christos $func_relative_path_tlibdir)
1047 1.1 christos # found an exact match
1048 1.1 christos func_relative_path_tcancelled=
1049 1.1 christos break
1050 1.1 christos ;;
1051 1.1 christos $func_relative_path_tlibdir*)
1052 1.1 christos # found a matching prefix
1053 1.1 christos func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
1054 1.1 christos func_relative_path_tcancelled=$func_stripname_result
1055 1.1 christos if test -z "$func_relative_path_result"; then
1056 1.1 christos func_relative_path_result=.
1057 1.1 christos fi
1058 1.1 christos break
1059 1.1 christos ;;
1060 1.1 christos *)
1061 1.1 christos func_dirname $func_relative_path_tlibdir
1062 1.1 christos func_relative_path_tlibdir=$func_dirname_result
1063 1.1 christos if test -z "$func_relative_path_tlibdir"; then
1064 1.1 christos # Have to descend all the way to the root!
1065 1.1 christos func_relative_path_result=../$func_relative_path_result
1066 1.1 christos func_relative_path_tcancelled=$func_relative_path_tbindir
1067 1.1 christos break
1068 1.1 christos fi
1069 1.1 christos func_relative_path_result=../$func_relative_path_result
1070 1.1 christos ;;
1071 1.1 christos esac
1072 1.1 christos done
1073 1.1 christos
1074 1.1 christos # Now calculate path; take care to avoid doubling-up slashes.
1075 1.1 christos func_stripname '' '/' "$func_relative_path_result"
1076 1.1 christos func_relative_path_result=$func_stripname_result
1077 1.1 christos func_stripname '/' '/' "$func_relative_path_tcancelled"
1078 1.1 christos if test -n "$func_stripname_result"; then
1079 1.1 christos func_append func_relative_path_result "/$func_stripname_result"
1080 1.1 christos fi
1081 1.1 christos
1082 1.1 christos # Normalisation. If bindir is libdir, return '.' else relative path.
1083 1.1 christos if test -n "$func_relative_path_result"; then
1084 1.1 christos func_stripname './' '' "$func_relative_path_result"
1085 1.1 christos func_relative_path_result=$func_stripname_result
1086 1.1 christos fi
1087 1.1 christos
1088 1.1 christos test -n "$func_relative_path_result" || func_relative_path_result=.
1089 1.1 christos
1090 1.1 christos :
1091 1.1 christos }
1092 1.1 christos
1093 1.1 christos
1094 1.1 christos # func_quote_for_eval ARG...
1095 1.1 christos # --------------------------
1096 1.1 christos # Aesthetically quote ARGs to be evaled later.
1097 1.1 christos # This function returns two values:
1098 1.1 christos # i) func_quote_for_eval_result
1099 1.1 christos # double-quoted, suitable for a subsequent eval
1100 1.1 christos # ii) func_quote_for_eval_unquoted_result
1101 1.1 christos # has all characters that are still active within double
1102 1.1 christos # quotes backslashified.
1103 1.1 christos func_quote_for_eval ()
1104 1.1 christos {
1105 1.1 christos $debug_cmd
1106 1.1 christos
1107 1.1 christos func_quote_for_eval_unquoted_result=
1108 1.1 christos func_quote_for_eval_result=
1109 1.1 christos while test 0 -lt $#; do
1110 1.1 christos case $1 in
1111 1.1 christos *[\\\`\"\$]*)
1112 1.1 christos _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;;
1113 1.1 christos *)
1114 1.1 christos _G_unquoted_arg=$1 ;;
1115 1.1 christos esac
1116 1.1 christos if test -n "$func_quote_for_eval_unquoted_result"; then
1117 1.1 christos func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
1118 1.1 christos else
1119 1.1 christos func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg"
1120 1.1 christos fi
1121 1.1 christos
1122 1.1 christos case $_G_unquoted_arg in
1123 1.1 christos # Double-quote args containing shell metacharacters to delay
1124 1.1 christos # word splitting, command substitution and variable expansion
1125 1.1 christos # for a subsequent eval.
1126 1.1 christos # Many Bourne shells cannot handle close brackets correctly
1127 1.1 christos # in scan sets, so we specify it separately.
1128 1.1 christos *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
1129 1.1 christos _G_quoted_arg=\"$_G_unquoted_arg\"
1130 1.1 christos ;;
1131 1.1 christos *)
1132 1.1 christos _G_quoted_arg=$_G_unquoted_arg
1133 1.1 christos ;;
1134 1.1 christos esac
1135 1.1 christos
1136 1.1 christos if test -n "$func_quote_for_eval_result"; then
1137 1.1 christos func_append func_quote_for_eval_result " $_G_quoted_arg"
1138 1.1 christos else
1139 1.1 christos func_append func_quote_for_eval_result "$_G_quoted_arg"
1140 1.1 christos fi
1141 1.1 christos shift
1142 1.1 christos done
1143 1.1 christos }
1144 1.1 christos
1145 1.1 christos
1146 1.1 christos # func_quote_for_expand ARG
1147 1.1 christos # -------------------------
1148 1.1 christos # Aesthetically quote ARG to be evaled later; same as above,
1149 1.1 christos # but do not quote variable references.
1150 1.1 christos func_quote_for_expand ()
1151 1.1 christos {
1152 1.1 christos $debug_cmd
1153 1.1 christos
1154 1.1 christos case $1 in
1155 1.1 christos *[\\\`\"]*)
1156 1.1 christos _G_arg=`$ECHO "$1" | $SED \
1157 1.1 christos -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
1158 1.1 christos *)
1159 1.1 christos _G_arg=$1 ;;
1160 1.1 christos esac
1161 1.1 christos
1162 1.1 christos case $_G_arg in
1163 1.1 christos # Double-quote args containing shell metacharacters to delay
1164 1.1 christos # word splitting and command substitution for a subsequent eval.
1165 1.1 christos # Many Bourne shells cannot handle close brackets correctly
1166 1.1 christos # in scan sets, so we specify it separately.
1167 1.1 christos *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
1168 1.1 christos _G_arg=\"$_G_arg\"
1169 1.1 christos ;;
1170 1.1 christos esac
1171 1.1 christos
1172 1.1 christos func_quote_for_expand_result=$_G_arg
1173 1.1 christos }
1174 1.1 christos
1175 1.1 christos
1176 1.1 christos # func_stripname PREFIX SUFFIX NAME
1177 1.1 christos # ---------------------------------
1178 1.1 christos # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
1179 1.1 christos # PREFIX and SUFFIX must not contain globbing or regex special
1180 1.1 christos # characters, hashes, percent signs, but SUFFIX may contain a leading
1181 1.1 christos # dot (in which case that matches only a dot).
1182 1.1 christos if test yes = "$_G_HAVE_XSI_OPS"; then
1183 1.1 christos eval 'func_stripname ()
1184 1.1 christos {
1185 1.1 christos $debug_cmd
1186 1.1 christos
1187 1.1 christos # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
1188 1.1 christos # positional parameters, so assign one to ordinary variable first.
1189 1.1 christos func_stripname_result=$3
1190 1.1 christos func_stripname_result=${func_stripname_result#"$1"}
1191 1.1 christos func_stripname_result=${func_stripname_result%"$2"}
1192 1.1 christos }'
1193 1.1 christos else
1194 1.1 christos func_stripname ()
1195 1.1 christos {
1196 1.1 christos $debug_cmd
1197 1.1 christos
1198 1.1 christos case $2 in
1199 1.1 christos .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
1200 1.1 christos *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
1201 1.1 christos esac
1202 1.1 christos }
1203 1.1 christos fi
1204 1.1 christos
1205 1.1 christos
1206 1.1 christos # func_show_eval CMD [FAIL_EXP]
1207 1.1 christos # -----------------------------
1208 1.1 christos # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is
1209 1.1 christos # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
1210 1.1 christos # is given, then evaluate it.
1211 1.1 christos func_show_eval ()
1212 1.1 christos {
1213 1.1 christos $debug_cmd
1214 1.1 christos
1215 1.1 christos _G_cmd=$1
1216 1.1 christos _G_fail_exp=${2-':'}
1217 1.1 christos
1218 1.1 christos func_quote_for_expand "$_G_cmd"
1219 1.1 christos eval "func_notquiet $func_quote_for_expand_result"
1220 1.1 christos
1221 1.1 christos $opt_dry_run || {
1222 1.1 christos eval "$_G_cmd"
1223 1.1 christos _G_status=$?
1224 1.1 christos if test 0 -ne "$_G_status"; then
1225 1.1 christos eval "(exit $_G_status); $_G_fail_exp"
1226 1.1 christos fi
1227 1.1 christos }
1228 1.1 christos }
1229 1.1 christos
1230 1.1 christos
1231 1.1 christos # func_show_eval_locale CMD [FAIL_EXP]
1232 1.1 christos # ------------------------------------
1233 1.1 christos # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is
1234 1.1 christos # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
1235 1.1 christos # is given, then evaluate it. Use the saved locale for evaluation.
1236 1.1 christos func_show_eval_locale ()
1237 1.1 christos {
1238 1.1 christos $debug_cmd
1239 1.1 christos
1240 1.1 christos _G_cmd=$1
1241 1.1 christos _G_fail_exp=${2-':'}
1242 1.1 christos
1243 1.1 christos $opt_quiet || {
1244 1.1 christos func_quote_for_expand "$_G_cmd"
1245 1.1 christos eval "func_echo $func_quote_for_expand_result"
1246 1.1 christos }
1247 1.1 christos
1248 1.1 christos $opt_dry_run || {
1249 1.1 christos eval "$_G_user_locale
1250 1.1 christos $_G_cmd"
1251 1.1 christos _G_status=$?
1252 1.1 christos eval "$_G_safe_locale"
1253 1.1 christos if test 0 -ne "$_G_status"; then
1254 1.1 christos eval "(exit $_G_status); $_G_fail_exp"
1255 1.1 christos fi
1256 1.1 christos }
1257 1.1 christos }
1258 1.1 christos
1259 1.1 christos
1260 1.1 christos # func_tr_sh
1261 1.1 christos # ----------
1262 1.1 christos # Turn $1 into a string suitable for a shell variable name.
1263 1.1 christos # Result is stored in $func_tr_sh_result. All characters
1264 1.1 christos # not in the set a-zA-Z0-9_ are replaced with '_'. Further,
1265 1.1 christos # if $1 begins with a digit, a '_' is prepended as well.
1266 1.1 christos func_tr_sh ()
1267 1.1 christos {
1268 1.1 christos $debug_cmd
1269 1.1 christos
1270 1.1 christos case $1 in
1271 1.1 christos [0-9]* | *[!a-zA-Z0-9_]*)
1272 1.1 christos func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
1273 1.1 christos ;;
1274 1.1 christos * )
1275 1.1 christos func_tr_sh_result=$1
1276 1.1 christos ;;
1277 1.1 christos esac
1278 1.1 christos }
1279 1.1 christos
1280 1.1 christos
1281 1.1 christos # func_verbose ARG...
1282 1.1 christos # -------------------
1283 1.1 christos # Echo program name prefixed message in verbose mode only.
1284 1.1 christos func_verbose ()
1285 1.1 christos {
1286 1.1 christos $debug_cmd
1287 1.1 christos
1288 1.1 christos $opt_verbose && func_echo "$*"
1289 1.1 christos
1290 1.1 christos :
1291 1.1 christos }
1292 1.1 christos
1293 1.1 christos
1294 1.1 christos # func_warn_and_continue ARG...
1295 1.1 christos # -----------------------------
1296 1.1 christos # Echo program name prefixed warning message to standard error.
1297 1.1 christos func_warn_and_continue ()
1298 1.1 christos {
1299 1.1 christos $debug_cmd
1300 1.1 christos
1301 1.1 christos $require_term_colors
1302 1.1 christos
1303 1.1 christos func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
1304 1.1 christos }
1305 1.1 christos
1306 1.1 christos
1307 1.1 christos # func_warning CATEGORY ARG...
1308 1.1 christos # ----------------------------
1309 1.1 christos # Echo program name prefixed warning message to standard error. Warning
1310 1.1 christos # messages can be filtered according to CATEGORY, where this function
1311 1.1 christos # elides messages where CATEGORY is not listed in the global variable
1312 1.1 christos # 'opt_warning_types'.
1313 1.1 christos func_warning ()
1314 1.1 christos {
1315 1.1 christos $debug_cmd
1316 1.1 christos
1317 1.1 christos # CATEGORY must be in the warning_categories list!
1318 1.1 christos case " $warning_categories " in
1319 1.1 christos *" $1 "*) ;;
1320 1.1 christos *) func_internal_error "invalid warning category '$1'" ;;
1321 1.1 christos esac
1322 1.1 christos
1323 1.1 christos _G_category=$1
1324 1.1 christos shift
1325 1.1 christos
1326 1.1 christos case " $opt_warning_types " in
1327 1.1 christos *" $_G_category "*) $warning_func ${1+"$@"} ;;
1328 1.1 christos esac
1329 1.1 christos }
1330 1.1 christos
1331 1.1 christos
1332 1.1 christos # func_sort_ver VER1 VER2
1333 1.1 christos # -----------------------
1334 1.1 christos # 'sort -V' is not generally available.
1335 1.1 christos # Note this deviates from the version comparison in automake
1336 1.1 christos # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
1337 1.1 christos # but this should suffice as we won't be specifying old
1338 1.1 christos # version formats or redundant trailing .0 in bootstrap.conf.
1339 1.1 christos # If we did want full compatibility then we should probably
1340 1.1 christos # use m4_version_compare from autoconf.
1341 1.1 christos func_sort_ver ()
1342 1.1 christos {
1343 1.1 christos $debug_cmd
1344 1.1 christos
1345 1.1 christos printf '%s\n%s\n' "$1" "$2" \
1346 1.1 christos | 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
1347 1.1 christos }
1348 1.1 christos
1349 1.1 christos # func_lt_ver PREV CURR
1350 1.1 christos # ---------------------
1351 1.1 christos # Return true if PREV and CURR are in the correct order according to
1352 1.1 christos # func_sort_ver, otherwise false. Use it like this:
1353 1.1 christos #
1354 1.1 christos # func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
1355 1.1 christos func_lt_ver ()
1356 1.1 christos {
1357 1.1 christos $debug_cmd
1358 1.1 christos
1359 1.1 christos test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
1360 1.1 christos }
1361 1.1 christos
1362 1.1 christos
1363 1.1 christos # Local variables:
1364 1.1 christos # mode: shell-script
1365 1.1 christos # sh-indentation: 2
1366 1.1 christos # eval: (add-hook 'before-save-hook 'time-stamp)
1367 1.1 christos # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
1368 1.1 christos # time-stamp-time-zone: "UTC"
1369 1.1 christos # End:
1370 1.1 christos #! /bin/sh
1371 1.1 christos
1372 1.1 christos # Set a version string for this script.
1373 1.1 christos scriptversion=2014-01-07.03; # UTC
1374 1.1 christos
1375 1.1 christos # A portable, pluggable option parser for Bourne shell.
1376 1.1 christos # Written by Gary V. Vaughan, 2010
1377 1.1 christos
1378 1.1 christos # Copyright (C) 2010-2015 Free Software Foundation, Inc.
1379 1.1 christos # This is free software; see the source for copying conditions. There is NO
1380 1.1 christos # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1381 1.1 christos
1382 1.1 christos # This program is free software: you can redistribute it and/or modify
1383 1.1 christos # it under the terms of the GNU General Public License as published by
1384 1.1 christos # the Free Software Foundation, either version 3 of the License, or
1385 1.1 christos # (at your option) any later version.
1386 1.1 christos
1387 1.1 christos # This program is distributed in the hope that it will be useful,
1388 1.1 christos # but WITHOUT ANY WARRANTY; without even the implied warranty of
1389 1.1 christos # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1390 1.1 christos # GNU General Public License for more details.
1391 1.1 christos
1392 1.1 christos # You should have received a copy of the GNU General Public License
1393 1.1 christos # along with this program. If not, see <http://www.gnu.org/licenses/>.
1394 1.1 christos
1395 1.1 christos # Please report bugs or propose patches to gary (at] gnu.org.
1396 1.1 christos
1397 1.1 christos
1398 1.1 christos ## ------ ##
1399 1.1 christos ## Usage. ##
1400 1.1 christos ## ------ ##
1401 1.1 christos
1402 1.1 christos # This file is a library for parsing options in your shell scripts along
1403 1.1 christos # with assorted other useful supporting features that you can make use
1404 1.1 christos # of too.
1405 1.1 christos #
1406 1.1 christos # For the simplest scripts you might need only:
1407 1.1 christos #
1408 1.1 christos # #!/bin/sh
1409 1.1 christos # . relative/path/to/funclib.sh
1410 1.1 christos # . relative/path/to/options-parser
1411 1.1 christos # scriptversion=1.0
1412 1.1 christos # func_options ${1+"$@"}
1413 1.1 christos # eval set dummy "$func_options_result"; shift
1414 1.1 christos # ...rest of your script...
1415 1.1 christos #
1416 1.1 christos # In order for the '--version' option to work, you will need to have a
1417 1.1 christos # suitably formatted comment like the one at the top of this file
1418 1.1 christos # starting with '# Written by ' and ending with '# warranty; '.
1419 1.1 christos #
1420 1.1 christos # For '-h' and '--help' to work, you will also need a one line
1421 1.1 christos # description of your script's purpose in a comment directly above the
1422 1.1 christos # '# Written by ' line, like the one at the top of this file.
1423 1.1 christos #
1424 1.1 christos # The default options also support '--debug', which will turn on shell
1425 1.1 christos # execution tracing (see the comment above debug_cmd below for another
1426 1.1 christos # use), and '--verbose' and the func_verbose function to allow your script
1427 1.1 christos # to display verbose messages only when your user has specified
1428 1.1 christos # '--verbose'.
1429 1.1 christos #
1430 1.1 christos # After sourcing this file, you can plug processing for additional
1431 1.1 christos # options by amending the variables from the 'Configuration' section
1432 1.1 christos # below, and following the instructions in the 'Option parsing'
1433 1.1 christos # section further down.
1434 1.1 christos
1435 1.1 christos ## -------------- ##
1436 1.1 christos ## Configuration. ##
1437 1.1 christos ## -------------- ##
1438 1.1 christos
1439 1.1 christos # You should override these variables in your script after sourcing this
1440 1.1 christos # file so that they reflect the customisations you have added to the
1441 1.1 christos # option parser.
1442 1.1 christos
1443 1.1 christos # The usage line for option parsing errors and the start of '-h' and
1444 1.1 christos # '--help' output messages. You can embed shell variables for delayed
1445 1.1 christos # expansion at the time the message is displayed, but you will need to
1446 1.1 christos # quote other shell meta-characters carefully to prevent them being
1447 1.1 christos # expanded when the contents are evaled.
1448 1.1 christos usage='$progpath [OPTION]...'
1449 1.1 christos
1450 1.1 christos # Short help message in response to '-h' and '--help'. Add to this or
1451 1.1 christos # override it after sourcing this library to reflect the full set of
1452 1.1 christos # options your script accepts.
1453 1.1 christos usage_message="\
1454 1.1 christos --debug enable verbose shell tracing
1455 1.1 christos -W, --warnings=CATEGORY
1456 1.1 christos report the warnings falling in CATEGORY [all]
1457 1.1 christos -v, --verbose verbosely report processing
1458 1.1 christos --version print version information and exit
1459 1.1 christos -h, --help print short or long help message and exit
1460 1.1 christos "
1461 1.1 christos
1462 1.1 christos # Additional text appended to 'usage_message' in response to '--help'.
1463 1.1 christos long_help_message="
1464 1.1 christos Warning categories include:
1465 1.1 christos 'all' show all warnings
1466 1.1 christos 'none' turn off all the warnings
1467 1.1 christos 'error' warnings are treated as fatal errors"
1468 1.1 christos
1469 1.1 christos # Help message printed before fatal option parsing errors.
1470 1.1 christos fatal_help="Try '\$progname --help' for more information."
1471 1.1 christos
1472 1.1 christos
1473 1.1 christos
1474 1.1 christos ## ------------------------- ##
1475 1.1 christos ## Hook function management. ##
1476 1.1 christos ## ------------------------- ##
1477 1.1 christos
1478 1.1 christos # This section contains functions for adding, removing, and running hooks
1479 1.1 christos # to the main code. A hook is just a named list of of function, that can
1480 1.1 christos # be run in order later on.
1481 1.1 christos
1482 1.1 christos # func_hookable FUNC_NAME
1483 1.1 christos # -----------------------
1484 1.1 christos # Declare that FUNC_NAME will run hooks added with
1485 1.1 christos # 'func_add_hook FUNC_NAME ...'.
1486 1.1 christos func_hookable ()
1487 1.1 christos {
1488 1.1 christos $debug_cmd
1489 1.1 christos
1490 1.1 christos func_append hookable_fns " $1"
1491 1.1 christos }
1492 1.1 christos
1493 1.1 christos
1494 1.1 christos # func_add_hook FUNC_NAME HOOK_FUNC
1495 1.1 christos # ---------------------------------
1496 1.1 christos # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must
1497 1.1 christos # first have been declared "hookable" by a call to 'func_hookable'.
1498 1.1 christos func_add_hook ()
1499 1.1 christos {
1500 1.1 christos $debug_cmd
1501 1.1 christos
1502 1.1 christos case " $hookable_fns " in
1503 1.1 christos *" $1 "*) ;;
1504 1.1 christos *) func_fatal_error "'$1' does not accept hook functions." ;;
1505 1.1 christos esac
1506 1.1 christos
1507 1.1 christos eval func_append ${1}_hooks '" $2"'
1508 1.1 christos }
1509 1.1 christos
1510 1.1 christos
1511 1.1 christos # func_remove_hook FUNC_NAME HOOK_FUNC
1512 1.1 christos # ------------------------------------
1513 1.1 christos # Remove HOOK_FUNC from the list of functions called by FUNC_NAME.
1514 1.1 christos func_remove_hook ()
1515 1.1 christos {
1516 1.1 christos $debug_cmd
1517 1.1 christos
1518 1.1 christos eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
1519 1.1 christos }
1520 1.1 christos
1521 1.1 christos
1522 1.1 christos # func_run_hooks FUNC_NAME [ARG]...
1523 1.1 christos # ---------------------------------
1524 1.1 christos # Run all hook functions registered to FUNC_NAME.
1525 1.1 christos # It is assumed that the list of hook functions contains nothing more
1526 1.1 christos # than a whitespace-delimited list of legal shell function names, and
1527 1.1 christos # no effort is wasted trying to catch shell meta-characters or preserve
1528 1.1 christos # whitespace.
1529 1.1 christos func_run_hooks ()
1530 1.1 christos {
1531 1.1 christos $debug_cmd
1532 1.1 christos
1533 1.1 christos case " $hookable_fns " in
1534 1.1 christos *" $1 "*) ;;
1535 1.1 christos *) func_fatal_error "'$1' does not support hook funcions.n" ;;
1536 1.1 christos esac
1537 1.1 christos
1538 1.1 christos eval _G_hook_fns=\$$1_hooks; shift
1539 1.1 christos
1540 1.1 christos for _G_hook in $_G_hook_fns; do
1541 1.1 christos eval $_G_hook '"$@"'
1542 1.1 christos
1543 1.1 christos # store returned options list back into positional
1544 1.1 christos # parameters for next 'cmd' execution.
1545 1.1 christos eval _G_hook_result=\$${_G_hook}_result
1546 1.1 christos eval set dummy "$_G_hook_result"; shift
1547 1.1 christos done
1548 1.1 christos
1549 1.1 christos func_quote_for_eval ${1+"$@"}
1550 1.1 christos func_run_hooks_result=$func_quote_for_eval_result
1551 1.1 christos }
1552 1.1 christos
1553 1.1 christos
1554 1.1 christos
1555 1.1 christos ## --------------- ##
1556 1.1 christos ## Option parsing. ##
1557 1.1 christos ## --------------- ##
1558 1.1 christos
1559 1.1 christos # In order to add your own option parsing hooks, you must accept the
1560 1.1 christos # full positional parameter list in your hook function, remove any
1561 1.1 christos # options that you action, and then pass back the remaining unprocessed
1562 1.1 christos # options in '<hooked_function_name>_result', escaped suitably for
1563 1.1 christos # 'eval'. Like this:
1564 1.1 christos #
1565 1.1 christos # my_options_prep ()
1566 1.1 christos # {
1567 1.1 christos # $debug_cmd
1568 1.1 christos #
1569 1.1 christos # # Extend the existing usage message.
1570 1.1 christos # usage_message=$usage_message'
1571 1.1 christos # -s, --silent don'\''t print informational messages
1572 1.1 christos # '
1573 1.1 christos #
1574 1.1 christos # func_quote_for_eval ${1+"$@"}
1575 1.1 christos # my_options_prep_result=$func_quote_for_eval_result
1576 1.1 christos # }
1577 1.1 christos # func_add_hook func_options_prep my_options_prep
1578 1.1 christos #
1579 1.1 christos #
1580 1.1 christos # my_silent_option ()
1581 1.1 christos # {
1582 1.1 christos # $debug_cmd
1583 1.1 christos #
1584 1.1 christos # # Note that for efficiency, we parse as many options as we can
1585 1.1 christos # # recognise in a loop before passing the remainder back to the
1586 1.1 christos # # caller on the first unrecognised argument we encounter.
1587 1.1 christos # while test $# -gt 0; do
1588 1.1 christos # opt=$1; shift
1589 1.1 christos # case $opt in
1590 1.1 christos # --silent|-s) opt_silent=: ;;
1591 1.1 christos # # Separate non-argument short options:
1592 1.1 christos # -s*) func_split_short_opt "$_G_opt"
1593 1.1 christos # set dummy "$func_split_short_opt_name" \
1594 1.1 christos # "-$func_split_short_opt_arg" ${1+"$@"}
1595 1.1 christos # shift
1596 1.1 christos # ;;
1597 1.1 christos # *) set dummy "$_G_opt" "$*"; shift; break ;;
1598 1.1 christos # esac
1599 1.1 christos # done
1600 1.1 christos #
1601 1.1 christos # func_quote_for_eval ${1+"$@"}
1602 1.1 christos # my_silent_option_result=$func_quote_for_eval_result
1603 1.1 christos # }
1604 1.1 christos # func_add_hook func_parse_options my_silent_option
1605 1.1 christos #
1606 1.1 christos #
1607 1.1 christos # my_option_validation ()
1608 1.1 christos # {
1609 1.1 christos # $debug_cmd
1610 1.1 christos #
1611 1.1 christos # $opt_silent && $opt_verbose && func_fatal_help "\
1612 1.1 christos # '--silent' and '--verbose' options are mutually exclusive."
1613 1.1 christos #
1614 1.1 christos # func_quote_for_eval ${1+"$@"}
1615 1.1 christos # my_option_validation_result=$func_quote_for_eval_result
1616 1.1 christos # }
1617 1.1 christos # func_add_hook func_validate_options my_option_validation
1618 1.1 christos #
1619 1.1 christos # You'll alse need to manually amend $usage_message to reflect the extra
1620 1.1 christos # options you parse. It's preferable to append if you can, so that
1621 1.1 christos # multiple option parsing hooks can be added safely.
1622 1.1 christos
1623 1.1 christos
1624 1.1 christos # func_options [ARG]...
1625 1.1 christos # ---------------------
1626 1.1 christos # All the functions called inside func_options are hookable. See the
1627 1.1 christos # individual implementations for details.
1628 1.1 christos func_hookable func_options
1629 1.1 christos func_options ()
1630 1.1 christos {
1631 1.1 christos $debug_cmd
1632 1.1 christos
1633 1.1 christos func_options_prep ${1+"$@"}
1634 1.1 christos eval func_parse_options \
1635 1.1 christos ${func_options_prep_result+"$func_options_prep_result"}
1636 1.1 christos eval func_validate_options \
1637 1.1 christos ${func_parse_options_result+"$func_parse_options_result"}
1638 1.1 christos
1639 1.1 christos eval func_run_hooks func_options \
1640 1.1 christos ${func_validate_options_result+"$func_validate_options_result"}
1641 1.1 christos
1642 1.1 christos # save modified positional parameters for caller
1643 1.1 christos func_options_result=$func_run_hooks_result
1644 1.1 christos }
1645 1.1 christos
1646 1.1 christos
1647 1.1 christos # func_options_prep [ARG]...
1648 1.1 christos # --------------------------
1649 1.1 christos # All initialisations required before starting the option parse loop.
1650 1.1 christos # Note that when calling hook functions, we pass through the list of
1651 1.1 christos # positional parameters. If a hook function modifies that list, and
1652 1.1 christos # needs to propogate that back to rest of this script, then the complete
1653 1.1 christos # modified list must be put in 'func_run_hooks_result' before
1654 1.1 christos # returning.
1655 1.1 christos func_hookable func_options_prep
1656 1.1 christos func_options_prep ()
1657 1.1 christos {
1658 1.1 christos $debug_cmd
1659 1.1 christos
1660 1.1 christos # Option defaults:
1661 1.1 christos opt_verbose=false
1662 1.1 christos opt_warning_types=
1663 1.1 christos
1664 1.1 christos func_run_hooks func_options_prep ${1+"$@"}
1665 1.1 christos
1666 1.1 christos # save modified positional parameters for caller
1667 1.1 christos func_options_prep_result=$func_run_hooks_result
1668 1.1 christos }
1669 1.1 christos
1670 1.1 christos
1671 1.1 christos # func_parse_options [ARG]...
1672 1.1 christos # ---------------------------
1673 1.1 christos # The main option parsing loop.
1674 1.1 christos func_hookable func_parse_options
1675 1.1 christos func_parse_options ()
1676 1.1 christos {
1677 1.1 christos $debug_cmd
1678 1.1 christos
1679 1.1 christos func_parse_options_result=
1680 1.1 christos
1681 1.1 christos # this just eases exit handling
1682 1.1 christos while test $# -gt 0; do
1683 1.1 christos # Defer to hook functions for initial option parsing, so they
1684 1.1 christos # get priority in the event of reusing an option name.
1685 1.1 christos func_run_hooks func_parse_options ${1+"$@"}
1686 1.1 christos
1687 1.1 christos # Adjust func_parse_options positional parameters to match
1688 1.1 christos eval set dummy "$func_run_hooks_result"; shift
1689 1.1 christos
1690 1.1 christos # Break out of the loop if we already parsed every option.
1691 1.1 christos test $# -gt 0 || break
1692 1.1 christos
1693 1.1 christos _G_opt=$1
1694 1.1 christos shift
1695 1.1 christos case $_G_opt in
1696 1.1 christos --debug|-x) debug_cmd='set -x'
1697 1.1 christos func_echo "enabling shell trace mode"
1698 1.1 christos $debug_cmd
1699 1.1 christos ;;
1700 1.1 christos
1701 1.1 christos --no-warnings|--no-warning|--no-warn)
1702 1.1 christos set dummy --warnings none ${1+"$@"}
1703 1.1 christos shift
1704 1.1 christos ;;
1705 1.1 christos
1706 1.1 christos --warnings|--warning|-W)
1707 1.1 christos test $# = 0 && func_missing_arg $_G_opt && break
1708 1.1 christos case " $warning_categories $1" in
1709 1.1 christos *" $1 "*)
1710 1.1 christos # trailing space prevents matching last $1 above
1711 1.1 christos func_append_uniq opt_warning_types " $1"
1712 1.1 christos ;;
1713 1.1 christos *all)
1714 1.1 christos opt_warning_types=$warning_categories
1715 1.1 christos ;;
1716 1.1 christos *none)
1717 1.1 christos opt_warning_types=none
1718 1.1 christos warning_func=:
1719 1.1 christos ;;
1720 1.1 christos *error)
1721 1.1 christos opt_warning_types=$warning_categories
1722 1.1 christos warning_func=func_fatal_error
1723 1.1 christos ;;
1724 1.1 christos *)
1725 1.1 christos func_fatal_error \
1726 1.1 christos "unsupported warning category: '$1'"
1727 1.1 christos ;;
1728 1.1 christos esac
1729 1.1 christos shift
1730 1.1 christos ;;
1731 1.1 christos
1732 1.1 christos --verbose|-v) opt_verbose=: ;;
1733 1.1 christos --version) func_version ;;
1734 1.1 christos -\?|-h) func_usage ;;
1735 1.1 christos --help) func_help ;;
1736 1.1 christos
1737 1.1 christos # Separate optargs to long options (plugins may need this):
1738 1.1 christos --*=*) func_split_equals "$_G_opt"
1739 1.1 christos set dummy "$func_split_equals_lhs" \
1740 1.1 christos "$func_split_equals_rhs" ${1+"$@"}
1741 1.1 christos shift
1742 1.1 christos ;;
1743 1.1 christos
1744 1.1 christos # Separate optargs to short options:
1745 1.1 christos -W*)
1746 1.1 christos func_split_short_opt "$_G_opt"
1747 1.1 christos set dummy "$func_split_short_opt_name" \
1748 1.1 christos "$func_split_short_opt_arg" ${1+"$@"}
1749 1.1 christos shift
1750 1.1 christos ;;
1751 1.1 christos
1752 1.1 christos # Separate non-argument short options:
1753 1.1 christos -\?*|-h*|-v*|-x*)
1754 1.1 christos func_split_short_opt "$_G_opt"
1755 1.1 christos set dummy "$func_split_short_opt_name" \
1756 1.1 christos "-$func_split_short_opt_arg" ${1+"$@"}
1757 1.1 christos shift
1758 1.1 christos ;;
1759 1.1 christos
1760 1.1 christos --) break ;;
1761 1.1 christos -*) func_fatal_help "unrecognised option: '$_G_opt'" ;;
1762 1.1 christos *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
1763 1.1 christos esac
1764 1.1 christos done
1765 1.1 christos
1766 1.1 christos # save modified positional parameters for caller
1767 1.1 christos func_quote_for_eval ${1+"$@"}
1768 1.1 christos func_parse_options_result=$func_quote_for_eval_result
1769 1.1 christos }
1770 1.1 christos
1771 1.1 christos
1772 1.1 christos # func_validate_options [ARG]...
1773 1.1 christos # ------------------------------
1774 1.1 christos # Perform any sanity checks on option settings and/or unconsumed
1775 1.1 christos # arguments.
1776 1.1 christos func_hookable func_validate_options
1777 1.1 christos func_validate_options ()
1778 1.1 christos {
1779 1.1 christos $debug_cmd
1780 1.1 christos
1781 1.1 christos # Display all warnings if -W was not given.
1782 1.1 christos test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
1783 1.1 christos
1784 1.1 christos func_run_hooks func_validate_options ${1+"$@"}
1785 1.1 christos
1786 1.1 christos # Bail if the options were screwed!
1787 1.1 christos $exit_cmd $EXIT_FAILURE
1788 1.1 christos
1789 1.1 christos # save modified positional parameters for caller
1790 1.1 christos func_validate_options_result=$func_run_hooks_result
1791 1.1 christos }
1792 1.1 christos
1793 1.1 christos
1794 1.1 christos
1795 1.1 christos ## ----------------- ##
1796 1.1 christos ## Helper functions. ##
1797 1.1 christos ## ----------------- ##
1798 1.1 christos
1799 1.1 christos # This section contains the helper functions used by the rest of the
1800 1.1 christos # hookable option parser framework in ascii-betical order.
1801 1.1 christos
1802 1.1 christos
1803 1.1 christos # func_fatal_help ARG...
1804 1.1 christos # ----------------------
1805 1.1 christos # Echo program name prefixed message to standard error, followed by
1806 1.1 christos # a help hint, and exit.
1807 1.1 christos func_fatal_help ()
1808 1.1 christos {
1809 1.1 christos $debug_cmd
1810 1.1 christos
1811 1.1 christos eval \$ECHO \""Usage: $usage"\"
1812 1.1 christos eval \$ECHO \""$fatal_help"\"
1813 1.1 christos func_error ${1+"$@"}
1814 1.1 christos exit $EXIT_FAILURE
1815 1.1 christos }
1816 1.1 christos
1817 1.1 christos
1818 1.1 christos # func_help
1819 1.1 christos # ---------
1820 1.1 christos # Echo long help message to standard output and exit.
1821 1.1 christos func_help ()
1822 1.1 christos {
1823 1.1 christos $debug_cmd
1824 1.1 christos
1825 1.1 christos func_usage_message
1826 1.1 christos $ECHO "$long_help_message"
1827 1.1 christos exit 0
1828 1.1 christos }
1829 1.1 christos
1830 1.1 christos
1831 1.1 christos # func_missing_arg ARGNAME
1832 1.1 christos # ------------------------
1833 1.1 christos # Echo program name prefixed message to standard error and set global
1834 1.1 christos # exit_cmd.
1835 1.1 christos func_missing_arg ()
1836 1.1 christos {
1837 1.1 christos $debug_cmd
1838 1.1 christos
1839 1.1 christos func_error "Missing argument for '$1'."
1840 1.1 christos exit_cmd=exit
1841 1.1 christos }
1842 1.1 christos
1843 1.1 christos
1844 1.1 christos # func_split_equals STRING
1845 1.1 christos # ------------------------
1846 1.1 christos # Set func_split_equals_lhs and func_split_equals_rhs shell variables after
1847 1.1 christos # splitting STRING at the '=' sign.
1848 1.1 christos test -z "$_G_HAVE_XSI_OPS" \
1849 1.1 christos && (eval 'x=a/b/c;
1850 1.1 christos test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
1851 1.1 christos && _G_HAVE_XSI_OPS=yes
1852 1.1 christos
1853 1.1 christos if test yes = "$_G_HAVE_XSI_OPS"
1854 1.1 christos then
1855 1.1 christos # This is an XSI compatible shell, allowing a faster implementation...
1856 1.1 christos eval 'func_split_equals ()
1857 1.1 christos {
1858 1.1 christos $debug_cmd
1859 1.1 christos
1860 1.1 christos func_split_equals_lhs=${1%%=*}
1861 1.1 christos func_split_equals_rhs=${1#*=}
1862 1.1 christos test "x$func_split_equals_lhs" = "x$1" \
1863 1.1 christos && func_split_equals_rhs=
1864 1.1 christos }'
1865 1.1 christos else
1866 1.1 christos # ...otherwise fall back to using expr, which is often a shell builtin.
1867 1.1 christos func_split_equals ()
1868 1.1 christos {
1869 1.1 christos $debug_cmd
1870 1.1 christos
1871 1.1 christos func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
1872 1.1 christos func_split_equals_rhs=
1873 1.1 christos test "x$func_split_equals_lhs" = "x$1" \
1874 1.1 christos || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
1875 1.1 christos }
1876 1.1 christos fi #func_split_equals
1877 1.1 christos
1878 1.1 christos
1879 1.1 christos # func_split_short_opt SHORTOPT
1880 1.1 christos # -----------------------------
1881 1.1 christos # Set func_split_short_opt_name and func_split_short_opt_arg shell
1882 1.1 christos # variables after splitting SHORTOPT after the 2nd character.
1883 1.1 christos if test yes = "$_G_HAVE_XSI_OPS"
1884 1.1 christos then
1885 1.1 christos # This is an XSI compatible shell, allowing a faster implementation...
1886 1.1 christos eval 'func_split_short_opt ()
1887 1.1 christos {
1888 1.1 christos $debug_cmd
1889 1.1 christos
1890 1.1 christos func_split_short_opt_arg=${1#??}
1891 1.1 christos func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
1892 1.1 christos }'
1893 1.1 christos else
1894 1.1 christos # ...otherwise fall back to using expr, which is often a shell builtin.
1895 1.1 christos func_split_short_opt ()
1896 1.1 christos {
1897 1.1 christos $debug_cmd
1898 1.1 christos
1899 1.1 christos func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'`
1900 1.1 christos func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
1901 1.1 christos }
1902 1.1 christos fi #func_split_short_opt
1903 1.1 christos
1904 1.1 christos
1905 1.1 christos # func_usage
1906 1.1 christos # ----------
1907 1.1 christos # Echo short help message to standard output and exit.
1908 1.1 christos func_usage ()
1909 1.1 christos {
1910 1.1 christos $debug_cmd
1911 1.1 christos
1912 1.1 christos func_usage_message
1913 1.1 christos $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
1914 1.1 christos exit 0
1915 1.1 christos }
1916 1.1 christos
1917 1.1 christos
1918 1.1 christos # func_usage_message
1919 1.1 christos # ------------------
1920 1.1 christos # Echo short help message to standard output.
1921 1.1 christos func_usage_message ()
1922 1.1 christos {
1923 1.1 christos $debug_cmd
1924 1.1 christos
1925 1.1 christos eval \$ECHO \""Usage: $usage"\"
1926 1.1 christos echo
1927 1.1 christos $SED -n 's|^# ||
1928 1.1 christos /^Written by/{
1929 1.1 christos x;p;x
1930 1.1 christos }
1931 1.1 christos h
1932 1.1 christos /^Written by/q' < "$progpath"
1933 1.1 christos echo
1934 1.1 christos eval \$ECHO \""$usage_message"\"
1935 1.1 christos }
1936 1.1 christos
1937 1.1 christos
1938 1.1 christos # func_version
1939 1.1 christos # ------------
1940 1.1 christos # Echo version message to standard output and exit.
1941 1.1 christos func_version ()
1942 1.1 christos {
1943 1.1 christos $debug_cmd
1944 1.1 christos
1945 1.1 christos printf '%s\n' "$progname $scriptversion"
1946 1.1 christos $SED -n '
1947 1.1 christos /(C)/!b go
1948 1.1 christos :more
1949 1.1 christos /\./!{
1950 1.1 christos N
1951 1.1 christos s|\n# | |
1952 1.1 christos b more
1953 1.1 christos }
1954 1.1 christos :go
1955 1.1 christos /^# Written by /,/# warranty; / {
1956 1.1 christos s|^# ||
1957 1.1 christos s|^# *$||
1958 1.1 christos s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
1959 1.1 christos p
1960 1.1 christos }
1961 1.1 christos /^# Written by / {
1962 1.1 christos s|^# ||
1963 1.1 christos p
1964 1.1 christos }
1965 1.1 christos /^warranty; /q' < "$progpath"
1966 1.1 christos
1967 1.1 christos exit $?
1968 1.1 christos }
1969 1.1 christos
1970 1.1 christos
1971 1.1 christos # Local variables:
1972 1.1 christos # mode: shell-script
1973 1.1 christos # sh-indentation: 2
1974 1.1 christos # eval: (add-hook 'before-save-hook 'time-stamp)
1975 1.1 christos # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
1976 1.1 christos # time-stamp-time-zone: "UTC"
1977 1.1 christos # End:
1978 1.1 christos
1979 1.1 christos # Set a version string.
1980 1.1 christos scriptversion='(GNU libtool) 2.4.6'
1981 1.1 christos
1982 1.1 christos
1983 1.1 christos # func_echo ARG...
1984 1.1 christos # ----------------
1985 1.1 christos # Libtool also displays the current mode in messages, so override
1986 1.1 christos # funclib.sh func_echo with this custom definition.
1987 1.1 christos func_echo ()
1988 1.1 christos {
1989 1.1 christos $debug_cmd
1990 1.1 christos
1991 1.1 christos _G_message=$*
1992 1.1 christos
1993 1.1 christos func_echo_IFS=$IFS
1994 1.1 christos IFS=$nl
1995 1.1 christos for _G_line in $_G_message; do
1996 1.1 christos IFS=$func_echo_IFS
1997 1.1 christos $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
1998 1.1 christos done
1999 1.1 christos IFS=$func_echo_IFS
2000 1.1 christos }
2001 1.1 christos
2002 1.1 christos
2003 1.1 christos # func_warning ARG...
2004 1.1 christos # -------------------
2005 1.1 christos # Libtool warnings are not categorized, so override funclib.sh
2006 1.1 christos # func_warning with this simpler definition.
2007 1.1 christos func_warning ()
2008 1.1 christos {
2009 1.1 christos $debug_cmd
2010 1.1 christos
2011 1.1 christos $warning_func ${1+"$@"}
2012 1.1 christos }
2013 1.1 christos
2014 1.1 christos
2015 1.1 christos ## ---------------- ##
2016 1.1 christos ## Options parsing. ##
2017 1.1 christos ## ---------------- ##
2018 1.1 christos
2019 1.1 christos # Hook in the functions to make sure our own options are parsed during
2020 1.1 christos # the option parsing loop.
2021 1.1 christos
2022 1.1 christos usage='$progpath [OPTION]... [MODE-ARG]...'
2023 1.1 christos
2024 1.1 christos # Short help message in response to '-h'.
2025 1.1 christos usage_message="Options:
2026 1.1 christos --config show all configuration variables
2027 1.1 christos --debug enable verbose shell tracing
2028 1.1 christos -n, --dry-run display commands without modifying any files
2029 1.1 christos --features display basic configuration information and exit
2030 1.1 christos --mode=MODE use operation mode MODE
2031 1.1 christos --no-warnings equivalent to '-Wnone'
2032 1.1 christos --preserve-dup-deps don't remove duplicate dependency libraries
2033 1.1 christos --quiet, --silent don't print informational messages
2034 1.1 christos --tag=TAG use configuration variables from tag TAG
2035 1.1 christos -v, --verbose print more informational messages than default
2036 1.1 christos --version print version information
2037 1.1 christos -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all]
2038 1.1 christos -h, --help, --help-all print short, long, or detailed help message
2039 1.1 christos "
2040 1.1 christos
2041 1.1 christos # Additional text appended to 'usage_message' in response to '--help'.
2042 1.1 christos func_help ()
2043 1.1 christos {
2044 1.1 christos $debug_cmd
2045 1.1 christos
2046 1.1 christos func_usage_message
2047 1.1 christos $ECHO "$long_help_message
2048 1.1 christos
2049 1.1 christos MODE must be one of the following:
2050 1.1 christos
2051 1.1 christos clean remove files from the build directory
2052 1.1 christos compile compile a source file into a libtool object
2053 1.1 christos execute automatically set library path, then run a program
2054 1.1 christos finish complete the installation of libtool libraries
2055 1.1 christos install install libraries or executables
2056 1.1 christos link create a library or an executable
2057 1.1 christos uninstall remove libraries from an installed directory
2058 1.1 christos
2059 1.1 christos MODE-ARGS vary depending on the MODE. When passed as first option,
2060 1.1 christos '--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
2061 1.1 christos Try '$progname --help --mode=MODE' for a more detailed description of MODE.
2062 1.1 christos
2063 1.1 christos When reporting a bug, please describe a test case to reproduce it and
2064 1.1 christos include the following information:
2065 1.1 christos
2066 1.1 christos host-triplet: $host
2067 1.1 christos shell: $SHELL
2068 1.1 christos compiler: $LTCC
2069 1.1 christos compiler flags: $LTCFLAGS
2070 1.1 christos linker: $LD (gnu? $with_gnu_ld)
2071 1.1 christos version: $progname (GNU libtool) 2.4.6
2072 1.1 christos automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
2073 1.1 christos autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
2074 1.1 christos
2075 1.1 christos Report bugs to <bug-libtool (at] gnu.org>.
2076 1.1.1.2 christos GNU libtool home page: <http://www.gnu.org/s/libtool/>.
2077 1.1 christos General help using GNU software: <http://www.gnu.org/gethelp/>."
2078 1.1 christos exit 0
2079 1.1 christos }
2080 1.1 christos
2081 1.1 christos
2082 1.1 christos # func_lo2o OBJECT-NAME
2083 1.1 christos # ---------------------
2084 1.1 christos # Transform OBJECT-NAME from a '.lo' suffix to the platform specific
2085 1.1 christos # object suffix.
2086 1.1 christos
2087 1.1 christos lo2o=s/\\.lo\$/.$objext/
2088 1.1 christos o2lo=s/\\.$objext\$/.lo/
2089 1.1 christos
2090 1.1 christos if test yes = "$_G_HAVE_XSI_OPS"; then
2091 1.1 christos eval 'func_lo2o ()
2092 1.1 christos {
2093 1.1 christos case $1 in
2094 1.1 christos *.lo) func_lo2o_result=${1%.lo}.$objext ;;
2095 1.1 christos * ) func_lo2o_result=$1 ;;
2096 1.1 christos esac
2097 1.1 christos }'
2098 1.1 christos
2099 1.1 christos # func_xform LIBOBJ-OR-SOURCE
2100 1.1 christos # ---------------------------
2101 1.1 christos # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
2102 1.1 christos # suffix to a '.lo' libtool-object suffix.
2103 1.1 christos eval 'func_xform ()
2104 1.1 christos {
2105 1.1 christos func_xform_result=${1%.*}.lo
2106 1.1 christos }'
2107 1.1 christos else
2108 1.1 christos # ...otherwise fall back to using sed.
2109 1.1 christos func_lo2o ()
2110 1.1 christos {
2111 1.1 christos func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
2112 1.1 christos }
2113 1.1 christos
2114 1.1 christos func_xform ()
2115 1.1 christos {
2116 1.1 christos func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
2117 1.1 christos }
2118 1.1 christos fi
2119 1.1 christos
2120 1.1 christos
2121 1.1 christos # func_fatal_configuration ARG...
2122 1.1 christos # -------------------------------
2123 1.1 christos # Echo program name prefixed message to standard error, followed by
2124 1.1 christos # a configuration failure hint, and exit.
2125 1.1 christos func_fatal_configuration ()
2126 1.1 christos {
2127 1.1 christos func__fatal_error ${1+"$@"} \
2128 1.1 christos "See the $PACKAGE documentation for more information." \
2129 1.1 christos "Fatal configuration error."
2130 1.1 christos }
2131 1.1 christos
2132 1.1 christos
2133 1.1 christos # func_config
2134 1.1 christos # -----------
2135 1.1 christos # Display the configuration for all the tags in this script.
2136 1.1 christos func_config ()
2137 1.1 christos {
2138 1.1 christos re_begincf='^# ### BEGIN LIBTOOL'
2139 1.1 christos re_endcf='^# ### END LIBTOOL'
2140 1.1 christos
2141 1.1 christos # Default configuration.
2142 1.1 christos $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
2143 1.1 christos
2144 1.1 christos # Now print the configurations for the tags.
2145 1.1 christos for tagname in $taglist; do
2146 1.1 christos $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
2147 1.1 christos done
2148 1.1 christos
2149 1.1 christos exit $?
2150 1.1 christos }
2151 1.1 christos
2152 1.1 christos
2153 1.1 christos # func_features
2154 1.1 christos # -------------
2155 1.1 christos # Display the features supported by this script.
2156 1.1 christos func_features ()
2157 1.1 christos {
2158 1.1 christos echo "host: $host"
2159 1.1 christos if test yes = "$build_libtool_libs"; then
2160 1.1 christos echo "enable shared libraries"
2161 1.1 christos else
2162 1.1 christos echo "disable shared libraries"
2163 1.1 christos fi
2164 1.1 christos if test yes = "$build_old_libs"; then
2165 1.1 christos echo "enable static libraries"
2166 1.1 christos else
2167 1.1 christos echo "disable static libraries"
2168 1.1 christos fi
2169 1.1 christos
2170 1.1 christos exit $?
2171 1.1 christos }
2172 1.1 christos
2173 1.1 christos
2174 1.1 christos # func_enable_tag TAGNAME
2175 1.1 christos # -----------------------
2176 1.1 christos # Verify that TAGNAME is valid, and either flag an error and exit, or
2177 1.1 christos # enable the TAGNAME tag. We also add TAGNAME to the global $taglist
2178 1.1 christos # variable here.
2179 1.1 christos func_enable_tag ()
2180 1.1 christos {
2181 1.1 christos # Global variable:
2182 1.1 christos tagname=$1
2183 1.1 christos
2184 1.1 christos re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
2185 1.1 christos re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
2186 1.1 christos sed_extractcf=/$re_begincf/,/$re_endcf/p
2187 1.1 christos
2188 1.1 christos # Validate tagname.
2189 1.1 christos case $tagname in
2190 1.1 christos *[!-_A-Za-z0-9,/]*)
2191 1.1 christos func_fatal_error "invalid tag name: $tagname"
2192 1.1 christos ;;
2193 1.1 christos esac
2194 1.1 christos
2195 1.1 christos # Don't test for the "default" C tag, as we know it's
2196 1.1 christos # there but not specially marked.
2197 1.1 christos case $tagname in
2198 1.1 christos CC) ;;
2199 1.1 christos *)
2200 1.1 christos if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
2201 1.1 christos taglist="$taglist $tagname"
2202 1.1 christos
2203 1.1 christos # Evaluate the configuration. Be careful to quote the path
2204 1.1 christos # and the sed script, to avoid splitting on whitespace, but
2205 1.1 christos # also don't use non-portable quotes within backquotes within
2206 1.1 christos # quotes we have to do it in 2 steps:
2207 1.1 christos extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
2208 1.1 christos eval "$extractedcf"
2209 1.1 christos else
2210 1.1 christos func_error "ignoring unknown tag $tagname"
2211 1.1 christos fi
2212 1.1 christos ;;
2213 1.1 christos esac
2214 1.1 christos }
2215 1.1 christos
2216 1.1 christos
2217 1.1 christos # func_check_version_match
2218 1.1 christos # ------------------------
2219 1.1 christos # Ensure that we are using m4 macros, and libtool script from the same
2220 1.1 christos # release of libtool.
2221 1.1 christos func_check_version_match ()
2222 1.1 christos {
2223 1.1 christos if test "$package_revision" != "$macro_revision"; then
2224 1.1 christos if test "$VERSION" != "$macro_version"; then
2225 1.1 christos if test -z "$macro_version"; then
2226 1.1 christos cat >&2 <<_LT_EOF
2227 1.1 christos $progname: Version mismatch error. This is $PACKAGE $VERSION, but the
2228 1.1 christos $progname: definition of this LT_INIT comes from an older release.
2229 1.1 christos $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
2230 1.1 christos $progname: and run autoconf again.
2231 1.1 christos _LT_EOF
2232 1.1 christos else
2233 1.1 christos cat >&2 <<_LT_EOF
2234 1.1 christos $progname: Version mismatch error. This is $PACKAGE $VERSION, but the
2235 1.1 christos $progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
2236 1.1 christos $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
2237 1.1 christos $progname: and run autoconf again.
2238 1.1 christos _LT_EOF
2239 1.1 christos fi
2240 1.1 christos else
2241 1.1 christos cat >&2 <<_LT_EOF
2242 1.1 christos $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
2243 1.1 christos $progname: but the definition of this LT_INIT comes from revision $macro_revision.
2244 1.1 christos $progname: You should recreate aclocal.m4 with macros from revision $package_revision
2245 1.1 christos $progname: of $PACKAGE $VERSION and run autoconf again.
2246 1.1 christos _LT_EOF
2247 1.1 christos fi
2248 1.1 christos
2249 1.1 christos exit $EXIT_MISMATCH
2250 1.1 christos fi
2251 1.1 christos }
2252 1.1 christos
2253 1.1 christos
2254 1.1 christos # libtool_options_prep [ARG]...
2255 1.1 christos # -----------------------------
2256 1.1 christos # Preparation for options parsed by libtool.
2257 1.1 christos libtool_options_prep ()
2258 1.1 christos {
2259 1.1 christos $debug_mode
2260 1.1 christos
2261 1.1 christos # Option defaults:
2262 1.1 christos opt_config=false
2263 1.1 christos opt_dlopen=
2264 1.1 christos opt_dry_run=false
2265 1.1 christos opt_help=false
2266 1.1 christos opt_mode=
2267 1.1 christos opt_preserve_dup_deps=false
2268 1.1 christos opt_quiet=false
2269 1.1 christos
2270 1.1 christos nonopt=
2271 1.1 christos preserve_args=
2272 1.1 christos
2273 1.1 christos # Shorthand for --mode=foo, only valid as the first argument
2274 1.1 christos case $1 in
2275 1.1 christos clean|clea|cle|cl)
2276 1.1 christos shift; set dummy --mode clean ${1+"$@"}; shift
2277 1.1 christos ;;
2278 1.1 christos compile|compil|compi|comp|com|co|c)
2279 1.1 christos shift; set dummy --mode compile ${1+"$@"}; shift
2280 1.1 christos ;;
2281 1.1 christos execute|execut|execu|exec|exe|ex|e)
2282 1.1 christos shift; set dummy --mode execute ${1+"$@"}; shift
2283 1.1 christos ;;
2284 1.1 christos finish|finis|fini|fin|fi|f)
2285 1.1 christos shift; set dummy --mode finish ${1+"$@"}; shift
2286 1.1 christos ;;
2287 1.1 christos install|instal|insta|inst|ins|in|i)
2288 1.1 christos shift; set dummy --mode install ${1+"$@"}; shift
2289 1.1 christos ;;
2290 1.1 christos link|lin|li|l)
2291 1.1 christos shift; set dummy --mode link ${1+"$@"}; shift
2292 1.1 christos ;;
2293 1.1 christos uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
2294 1.1 christos shift; set dummy --mode uninstall ${1+"$@"}; shift
2295 1.1 christos ;;
2296 1.1 christos esac
2297 1.1 christos
2298 1.1 christos # Pass back the list of options.
2299 1.1 christos func_quote_for_eval ${1+"$@"}
2300 1.1 christos libtool_options_prep_result=$func_quote_for_eval_result
2301 1.1 christos }
2302 1.1 christos func_add_hook func_options_prep libtool_options_prep
2303 1.1 christos
2304 1.1 christos
2305 1.1 christos # libtool_parse_options [ARG]...
2306 1.1 christos # ---------------------------------
2307 1.1 christos # Provide handling for libtool specific options.
2308 1.1 christos libtool_parse_options ()
2309 1.1 christos {
2310 1.1 christos $debug_cmd
2311 1.1 christos
2312 1.1 christos # Perform our own loop to consume as many options as possible in
2313 1.1 christos # each iteration.
2314 1.1 christos while test $# -gt 0; do
2315 1.1 christos _G_opt=$1
2316 1.1 christos shift
2317 1.1 christos case $_G_opt in
2318 1.1 christos --dry-run|--dryrun|-n)
2319 1.1 christos opt_dry_run=:
2320 1.1 christos ;;
2321 1.1 christos
2322 1.1 christos --config) func_config ;;
2323 1.1 christos
2324 1.1 christos --dlopen|-dlopen)
2325 1.1 christos opt_dlopen="${opt_dlopen+$opt_dlopen
2326 1.1 christos }$1"
2327 1.1 christos shift
2328 1.1 christos ;;
2329 1.1 christos
2330 1.1 christos --preserve-dup-deps)
2331 1.1 christos opt_preserve_dup_deps=: ;;
2332 1.1 christos
2333 1.1 christos --features) func_features ;;
2334 1.1 christos
2335 1.1 christos --finish) set dummy --mode finish ${1+"$@"}; shift ;;
2336 1.1 christos
2337 1.1 christos --help) opt_help=: ;;
2338 1.1 christos
2339 1.1 christos --help-all) opt_help=': help-all' ;;
2340 1.1 christos
2341 1.1 christos --mode) test $# = 0 && func_missing_arg $_G_opt && break
2342 1.1 christos opt_mode=$1
2343 1.1 christos case $1 in
2344 1.1 christos # Valid mode arguments:
2345 1.1 christos clean|compile|execute|finish|install|link|relink|uninstall) ;;
2346 1.1 christos
2347 1.1 christos # Catch anything else as an error
2348 1.1 christos *) func_error "invalid argument for $_G_opt"
2349 1.1 christos exit_cmd=exit
2350 1.1 christos break
2351 1.1 christos ;;
2352 1.1 christos esac
2353 1.1 christos shift
2354 1.1 christos ;;
2355 1.1 christos
2356 1.1 christos --no-silent|--no-quiet)
2357 1.1 christos opt_quiet=false
2358 1.1 christos func_append preserve_args " $_G_opt"
2359 1.1 christos ;;
2360 1.1 christos
2361 1.1 christos --no-warnings|--no-warning|--no-warn)
2362 1.1 christos opt_warning=false
2363 1.1 christos func_append preserve_args " $_G_opt"
2364 1.1 christos ;;
2365 1.1 christos
2366 1.1 christos --no-verbose)
2367 1.1 christos opt_verbose=false
2368 1.1 christos func_append preserve_args " $_G_opt"
2369 1.1 christos ;;
2370 1.1 christos
2371 1.1 christos --silent|--quiet)
2372 1.1 christos opt_quiet=:
2373 1.1 christos opt_verbose=false
2374 1.1 christos func_append preserve_args " $_G_opt"
2375 1.1 christos ;;
2376 1.1 christos
2377 1.1 christos --tag) test $# = 0 && func_missing_arg $_G_opt && break
2378 1.1 christos opt_tag=$1
2379 1.1 christos func_append preserve_args " $_G_opt $1"
2380 1.1 christos func_enable_tag "$1"
2381 1.1 christos shift
2382 1.1 christos ;;
2383 1.1 christos
2384 1.1 christos --verbose|-v) opt_quiet=false
2385 1.1 christos opt_verbose=:
2386 1.1 christos func_append preserve_args " $_G_opt"
2387 1.1 christos ;;
2388 1.1 christos
2389 1.1 christos # An option not handled by this hook function:
2390 1.1 christos *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
2391 1.1 christos esac
2392 1.1 christos done
2393 1.1 christos
2394 1.1 christos
2395 1.1 christos # save modified positional parameters for caller
2396 1.1 christos func_quote_for_eval ${1+"$@"}
2397 1.1 christos libtool_parse_options_result=$func_quote_for_eval_result
2398 1.1 christos }
2399 1.1 christos func_add_hook func_parse_options libtool_parse_options
2400 1.1 christos
2401 1.1 christos
2402 1.1 christos
2403 1.1 christos # libtool_validate_options [ARG]...
2404 1.1 christos # ---------------------------------
2405 1.1 christos # Perform any sanity checks on option settings and/or unconsumed
2406 1.1 christos # arguments.
2407 1.1 christos libtool_validate_options ()
2408 1.1 christos {
2409 1.1 christos # save first non-option argument
2410 1.1 christos if test 0 -lt $#; then
2411 1.1 christos nonopt=$1
2412 1.1 christos shift
2413 1.1 christos fi
2414 1.1 christos
2415 1.1 christos # preserve --debug
2416 1.1 christos test : = "$debug_cmd" || func_append preserve_args " --debug"
2417 1.1 christos
2418 1.1 christos case $host in
2419 1.1 christos # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
2420 1.1 christos # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
2421 1.1 christos *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
2422 1.1 christos # don't eliminate duplications in $postdeps and $predeps
2423 1.1 christos opt_duplicate_compiler_generated_deps=:
2424 1.1 christos ;;
2425 1.1 christos *)
2426 1.1 christos opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
2427 1.1 christos ;;
2428 1.1 christos esac
2429 1.1 christos
2430 1.1 christos $opt_help || {
2431 1.1 christos # Sanity checks first:
2432 1.1 christos func_check_version_match
2433 1.1 christos
2434 1.1 christos test yes != "$build_libtool_libs" \
2435 1.1 christos && test yes != "$build_old_libs" \
2436 1.1 christos && func_fatal_configuration "not configured to build any kind of library"
2437 1.1 christos
2438 1.1 christos # Darwin sucks
2439 1.1 christos eval std_shrext=\"$shrext_cmds\"
2440 1.1 christos
2441 1.1 christos # Only execute mode is allowed to have -dlopen flags.
2442 1.1 christos if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
2443 1.1 christos func_error "unrecognized option '-dlopen'"
2444 1.1 christos $ECHO "$help" 1>&2
2445 1.1 christos exit $EXIT_FAILURE
2446 1.1 christos fi
2447 1.1 christos
2448 1.1 christos # Change the help message to a mode-specific one.
2449 1.1 christos generic_help=$help
2450 1.1 christos help="Try '$progname --help --mode=$opt_mode' for more information."
2451 1.1 christos }
2452 1.1 christos
2453 1.1 christos # Pass back the unparsed argument list
2454 1.1 christos func_quote_for_eval ${1+"$@"}
2455 1.1 christos libtool_validate_options_result=$func_quote_for_eval_result
2456 1.1 christos }
2457 1.1 christos func_add_hook func_validate_options libtool_validate_options
2458 1.1 christos
2459 1.1 christos
2460 1.1 christos # Process options as early as possible so that --help and --version
2461 1.1 christos # can return quickly.
2462 1.1 christos func_options ${1+"$@"}
2463 1.1 christos eval set dummy "$func_options_result"; shift
2464 1.1 christos
2465 1.1 christos
2466 1.1 christos
2467 1.1 christos ## ----------- ##
2468 1.1 christos ## Main. ##
2469 1.1 christos ## ----------- ##
2470 1.1 christos
2471 1.1 christos magic='%%%MAGIC variable%%%'
2472 1.1 christos magic_exe='%%%MAGIC EXE variable%%%'
2473 1.1 christos
2474 1.1 christos # Global variables.
2475 1.1 christos extracted_archives=
2476 1.1 christos extracted_serial=0
2477 1.1 christos
2478 1.1 christos # If this variable is set in any of the actions, the command in it
2479 1.1 christos # will be execed at the end. This prevents here-documents from being
2480 1.1 christos # left over by shells.
2481 1.1 christos exec_cmd=
2482 1.1 christos
2483 1.1 christos
2484 1.1 christos # A function that is used when there is no print builtin or printf.
2485 1.1 christos func_fallback_echo ()
2486 1.1 christos {
2487 1.1 christos eval 'cat <<_LTECHO_EOF
2488 1.1 christos $1
2489 1.1 christos _LTECHO_EOF'
2490 1.1 christos }
2491 1.1 christos
2492 1.1 christos # func_generated_by_libtool
2493 1.1 christos # True iff stdin has been generated by Libtool. This function is only
2494 1.1 christos # a basic sanity check; it will hardly flush out determined imposters.
2495 1.1 christos func_generated_by_libtool_p ()
2496 1.1 christos {
2497 1.1 christos $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
2498 1.1 christos }
2499 1.1 christos
2500 1.1 christos # func_lalib_p file
2501 1.1 christos # True iff FILE is a libtool '.la' library or '.lo' object file.
2502 1.1 christos # This function is only a basic sanity check; it will hardly flush out
2503 1.1 christos # determined imposters.
2504 1.1 christos func_lalib_p ()
2505 1.1 christos {
2506 1.1 christos test -f "$1" &&
2507 1.1 christos $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
2508 1.1 christos }
2509 1.1 christos
2510 1.1 christos # func_lalib_unsafe_p file
2511 1.1 christos # True iff FILE is a libtool '.la' library or '.lo' object file.
2512 1.1 christos # This function implements the same check as func_lalib_p without
2513 1.1 christos # resorting to external programs. To this end, it redirects stdin and
2514 1.1 christos # closes it afterwards, without saving the original file descriptor.
2515 1.1 christos # As a safety measure, use it only where a negative result would be
2516 1.1 christos # fatal anyway. Works if 'file' does not exist.
2517 1.1 christos func_lalib_unsafe_p ()
2518 1.1 christos {
2519 1.1 christos lalib_p=no
2520 1.1 christos if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
2521 1.1 christos for lalib_p_l in 1 2 3 4
2522 1.1 christos do
2523 1.1 christos read lalib_p_line
2524 1.1 christos case $lalib_p_line in
2525 1.1 christos \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
2526 1.1 christos esac
2527 1.1 christos done
2528 1.1 christos exec 0<&5 5<&-
2529 1.1 christos fi
2530 1.1 christos test yes = "$lalib_p"
2531 1.1 christos }
2532 1.1 christos
2533 1.1 christos # func_ltwrapper_script_p file
2534 1.1 christos # True iff FILE is a libtool wrapper script
2535 1.1 christos # This function is only a basic sanity check; it will hardly flush out
2536 1.1 christos # determined imposters.
2537 1.1 christos func_ltwrapper_script_p ()
2538 1.1 christos {
2539 1.1 christos test -f "$1" &&
2540 1.1 christos $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
2541 1.1 christos }
2542 1.1 christos
2543 1.1 christos # func_ltwrapper_executable_p file
2544 1.1 christos # True iff FILE is a libtool wrapper executable
2545 1.1 christos # This function is only a basic sanity check; it will hardly flush out
2546 1.1 christos # determined imposters.
2547 1.1 christos func_ltwrapper_executable_p ()
2548 1.1 christos {
2549 1.1 christos func_ltwrapper_exec_suffix=
2550 1.1 christos case $1 in
2551 1.1 christos *.exe) ;;
2552 1.1 christos *) func_ltwrapper_exec_suffix=.exe ;;
2553 1.1 christos esac
2554 1.1 christos $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
2555 1.1 christos }
2556 1.1 christos
2557 1.1 christos # func_ltwrapper_scriptname file
2558 1.1 christos # Assumes file is an ltwrapper_executable
2559 1.1 christos # uses $file to determine the appropriate filename for a
2560 1.1 christos # temporary ltwrapper_script.
2561 1.1 christos func_ltwrapper_scriptname ()
2562 1.1 christos {
2563 1.1 christos func_dirname_and_basename "$1" "" "."
2564 1.1 christos func_stripname '' '.exe' "$func_basename_result"
2565 1.1 christos func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
2566 1.1 christos }
2567 1.1 christos
2568 1.1 christos # func_ltwrapper_p file
2569 1.1 christos # True iff FILE is a libtool wrapper script or wrapper executable
2570 1.1 christos # This function is only a basic sanity check; it will hardly flush out
2571 1.1 christos # determined imposters.
2572 1.1 christos func_ltwrapper_p ()
2573 1.1 christos {
2574 1.1 christos func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
2575 1.1 christos }
2576 1.1 christos
2577 1.1 christos
2578 1.1 christos # func_execute_cmds commands fail_cmd
2579 1.1 christos # Execute tilde-delimited COMMANDS.
2580 1.1 christos # If FAIL_CMD is given, eval that upon failure.
2581 1.1 christos # FAIL_CMD may read-access the current command in variable CMD!
2582 1.1 christos func_execute_cmds ()
2583 1.1 christos {
2584 1.1 christos $debug_cmd
2585 1.1 christos
2586 1.1 christos save_ifs=$IFS; IFS='~'
2587 1.1 christos for cmd in $1; do
2588 1.1 christos IFS=$sp$nl
2589 1.1 christos eval cmd=\"$cmd\"
2590 1.1 christos IFS=$save_ifs
2591 1.1 christos func_show_eval "$cmd" "${2-:}"
2592 1.1 christos done
2593 1.1 christos IFS=$save_ifs
2594 1.1 christos }
2595 1.1 christos
2596 1.1 christos
2597 1.1 christos # func_source file
2598 1.1 christos # Source FILE, adding directory component if necessary.
2599 1.1 christos # Note that it is not necessary on cygwin/mingw to append a dot to
2600 1.1 christos # FILE even if both FILE and FILE.exe exist: automatic-append-.exe
2601 1.1 christos # behavior happens only for exec(3), not for open(2)! Also, sourcing
2602 1.1 christos # 'FILE.' does not work on cygwin managed mounts.
2603 1.1 christos func_source ()
2604 1.1 christos {
2605 1.1 christos $debug_cmd
2606 1.1 christos
2607 1.1 christos case $1 in
2608 1.1 christos */* | *\\*) . "$1" ;;
2609 1.1 christos *) . "./$1" ;;
2610 1.1 christos esac
2611 1.1 christos }
2612 1.1 christos
2613 1.1 christos
2614 1.1 christos # func_resolve_sysroot PATH
2615 1.1 christos # Replace a leading = in PATH with a sysroot. Store the result into
2616 1.1 christos # func_resolve_sysroot_result
2617 1.1 christos func_resolve_sysroot ()
2618 1.1 christos {
2619 1.1 christos func_resolve_sysroot_result=$1
2620 1.1 christos case $func_resolve_sysroot_result in
2621 1.1 christos =*)
2622 1.1 christos func_stripname '=' '' "$func_resolve_sysroot_result"
2623 1.1 christos func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
2624 1.1 christos ;;
2625 1.1 christos esac
2626 1.1 christos }
2627 1.1 christos
2628 1.1 christos # func_replace_sysroot PATH
2629 1.1 christos # If PATH begins with the sysroot, replace it with = and
2630 1.1 christos # store the result into func_replace_sysroot_result.
2631 1.1 christos func_replace_sysroot ()
2632 1.1 christos {
2633 1.1 christos case $lt_sysroot:$1 in
2634 1.1 christos ?*:"$lt_sysroot"*)
2635 1.1 christos func_stripname "$lt_sysroot" '' "$1"
2636 1.1 christos func_replace_sysroot_result='='$func_stripname_result
2637 1.1 christos ;;
2638 1.1 christos *)
2639 1.1 christos # Including no sysroot.
2640 1.1 christos func_replace_sysroot_result=$1
2641 1.1 christos ;;
2642 1.1 christos esac
2643 1.1 christos }
2644 1.1 christos
2645 1.1 christos # func_infer_tag arg
2646 1.1 christos # Infer tagged configuration to use if any are available and
2647 1.1 christos # if one wasn't chosen via the "--tag" command line option.
2648 1.1 christos # Only attempt this if the compiler in the base compile
2649 1.1 christos # command doesn't match the default compiler.
2650 1.1 christos # arg is usually of the form 'gcc ...'
2651 1.1 christos func_infer_tag ()
2652 1.1 christos {
2653 1.1 christos $debug_cmd
2654 1.1 christos
2655 1.1 christos if test -n "$available_tags" && test -z "$tagname"; then
2656 1.1 christos CC_quoted=
2657 1.1 christos for arg in $CC; do
2658 1.1 christos func_append_quoted CC_quoted "$arg"
2659 1.1 christos done
2660 1.1 christos CC_expanded=`func_echo_all $CC`
2661 1.1 christos CC_quoted_expanded=`func_echo_all $CC_quoted`
2662 1.1 christos case $@ in
2663 1.1 christos # Blanks in the command may have been stripped by the calling shell,
2664 1.1 christos # but not from the CC environment variable when configure was run.
2665 1.1 christos " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
2666 1.1 christos " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
2667 1.1 christos # Blanks at the start of $base_compile will cause this to fail
2668 1.1 christos # if we don't check for them as well.
2669 1.1 christos *)
2670 1.1 christos for z in $available_tags; do
2671 1.1 christos if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
2672 1.1 christos # Evaluate the configuration.
2673 1.1 christos eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
2674 1.1 christos CC_quoted=
2675 1.1 christos for arg in $CC; do
2676 1.1 christos # Double-quote args containing other shell metacharacters.
2677 1.1 christos func_append_quoted CC_quoted "$arg"
2678 1.1 christos done
2679 1.1 christos CC_expanded=`func_echo_all $CC`
2680 1.1 christos CC_quoted_expanded=`func_echo_all $CC_quoted`
2681 1.1 christos case "$@ " in
2682 1.1 christos " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
2683 1.1 christos " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
2684 1.1 christos # The compiler in the base compile command matches
2685 1.1 christos # the one in the tagged configuration.
2686 1.1 christos # Assume this is the tagged configuration we want.
2687 1.1 christos tagname=$z
2688 1.1 christos break
2689 1.1 christos ;;
2690 1.1 christos esac
2691 1.1 christos fi
2692 1.1 christos done
2693 1.1 christos # If $tagname still isn't set, then no tagged configuration
2694 1.1 christos # was found and let the user know that the "--tag" command
2695 1.1 christos # line option must be used.
2696 1.1 christos if test -z "$tagname"; then
2697 1.1 christos func_echo "unable to infer tagged configuration"
2698 1.1 christos func_fatal_error "specify a tag with '--tag'"
2699 1.1 christos # else
2700 1.1 christos # func_verbose "using $tagname tagged configuration"
2701 1.1 christos fi
2702 1.1 christos ;;
2703 1.1 christos esac
2704 1.1 christos fi
2705 1.1 christos }
2706 1.1 christos
2707 1.1 christos
2708 1.1 christos
2709 1.1 christos # func_write_libtool_object output_name pic_name nonpic_name
2710 1.1 christos # Create a libtool object file (analogous to a ".la" file),
2711 1.1 christos # but don't create it if we're doing a dry run.
2712 1.1 christos func_write_libtool_object ()
2713 1.1 christos {
2714 1.1 christos write_libobj=$1
2715 1.1 christos if test yes = "$build_libtool_libs"; then
2716 1.1 christos write_lobj=\'$2\'
2717 1.1 christos else
2718 1.1 christos write_lobj=none
2719 1.1 christos fi
2720 1.1 christos
2721 1.1 christos if test yes = "$build_old_libs"; then
2722 1.1 christos write_oldobj=\'$3\'
2723 1.1 christos else
2724 1.1 christos write_oldobj=none
2725 1.1 christos fi
2726 1.1 christos
2727 1.1 christos $opt_dry_run || {
2728 1.1 christos cat >${write_libobj}T <<EOF
2729 1.1 christos # $write_libobj - a libtool object file
2730 1.1 christos # Generated by $PROGRAM (GNU $PACKAGE) $VERSION
2731 1.1 christos #
2732 1.1 christos # Please DO NOT delete this file!
2733 1.1 christos # It is necessary for linking the library.
2734 1.1 christos
2735 1.1 christos # Name of the PIC object.
2736 1.1 christos pic_object=$write_lobj
2737 1.1 christos
2738 1.1 christos # Name of the non-PIC object
2739 1.1 christos non_pic_object=$write_oldobj
2740 1.1 christos
2741 1.1 christos EOF
2742 1.1 christos $MV "${write_libobj}T" "$write_libobj"
2743 1.1 christos }
2744 1.1 christos }
2745 1.1 christos
2746 1.1 christos
2747 1.1 christos ##################################################
2748 1.1 christos # FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
2749 1.1 christos ##################################################
2750 1.1 christos
2751 1.1 christos # func_convert_core_file_wine_to_w32 ARG
2752 1.1 christos # Helper function used by file name conversion functions when $build is *nix,
2753 1.1 christos # and $host is mingw, cygwin, or some other w32 environment. Relies on a
2754 1.1 christos # correctly configured wine environment available, with the winepath program
2755 1.1 christos # in $build's $PATH.
2756 1.1 christos #
2757 1.1 christos # ARG is the $build file name to be converted to w32 format.
2758 1.1 christos # Result is available in $func_convert_core_file_wine_to_w32_result, and will
2759 1.1 christos # be empty on error (or when ARG is empty)
2760 1.1 christos func_convert_core_file_wine_to_w32 ()
2761 1.1 christos {
2762 1.1 christos $debug_cmd
2763 1.1 christos
2764 1.1 christos func_convert_core_file_wine_to_w32_result=$1
2765 1.1 christos if test -n "$1"; then
2766 1.1 christos # Unfortunately, winepath does not exit with a non-zero error code, so we
2767 1.1 christos # are forced to check the contents of stdout. On the other hand, if the
2768 1.1 christos # command is not found, the shell will set an exit code of 127 and print
2769 1.1 christos # *an error message* to stdout. So we must check for both error code of
2770 1.1 christos # zero AND non-empty stdout, which explains the odd construction:
2771 1.1 christos func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
2772 1.1 christos if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
2773 1.1 christos func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
2774 1.1 christos $SED -e "$sed_naive_backslashify"`
2775 1.1 christos else
2776 1.1 christos func_convert_core_file_wine_to_w32_result=
2777 1.1 christos fi
2778 1.1 christos fi
2779 1.1 christos }
2780 1.1 christos # end: func_convert_core_file_wine_to_w32
2781 1.1 christos
2782 1.1 christos
2783 1.1 christos # func_convert_core_path_wine_to_w32 ARG
2784 1.1 christos # Helper function used by path conversion functions when $build is *nix, and
2785 1.1 christos # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
2786 1.1 christos # configured wine environment available, with the winepath program in $build's
2787 1.1 christos # $PATH. Assumes ARG has no leading or trailing path separator characters.
2788 1.1 christos #
2789 1.1 christos # ARG is path to be converted from $build format to win32.
2790 1.1 christos # Result is available in $func_convert_core_path_wine_to_w32_result.
2791 1.1 christos # Unconvertible file (directory) names in ARG are skipped; if no directory names
2792 1.1 christos # are convertible, then the result may be empty.
2793 1.1 christos func_convert_core_path_wine_to_w32 ()
2794 1.1 christos {
2795 1.1 christos $debug_cmd
2796 1.1 christos
2797 1.1 christos # unfortunately, winepath doesn't convert paths, only file names
2798 1.1 christos func_convert_core_path_wine_to_w32_result=
2799 1.1 christos if test -n "$1"; then
2800 1.1 christos oldIFS=$IFS
2801 1.1 christos IFS=:
2802 1.1 christos for func_convert_core_path_wine_to_w32_f in $1; do
2803 1.1 christos IFS=$oldIFS
2804 1.1 christos func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
2805 1.1 christos if test -n "$func_convert_core_file_wine_to_w32_result"; then
2806 1.1 christos if test -z "$func_convert_core_path_wine_to_w32_result"; then
2807 1.1 christos func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
2808 1.1 christos else
2809 1.1 christos func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
2810 1.1 christos fi
2811 1.1 christos fi
2812 1.1 christos done
2813 1.1 christos IFS=$oldIFS
2814 1.1 christos fi
2815 1.1 christos }
2816 1.1 christos # end: func_convert_core_path_wine_to_w32
2817 1.1 christos
2818 1.1 christos
2819 1.1 christos # func_cygpath ARGS...
2820 1.1 christos # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
2821 1.1 christos # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
2822 1.1 christos # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
2823 1.1 christos # (2), returns the Cygwin file name or path in func_cygpath_result (input
2824 1.1 christos # file name or path is assumed to be in w32 format, as previously converted
2825 1.1 christos # from $build's *nix or MSYS format). In case (3), returns the w32 file name
2826 1.1 christos # or path in func_cygpath_result (input file name or path is assumed to be in
2827 1.1 christos # Cygwin format). Returns an empty string on error.
2828 1.1 christos #
2829 1.1 christos # ARGS are passed to cygpath, with the last one being the file name or path to
2830 1.1 christos # be converted.
2831 1.1 christos #
2832 1.1 christos # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
2833 1.1 christos # environment variable; do not put it in $PATH.
2834 1.1 christos func_cygpath ()
2835 1.1 christos {
2836 1.1 christos $debug_cmd
2837 1.1 christos
2838 1.1 christos if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
2839 1.1 christos func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
2840 1.1 christos if test "$?" -ne 0; then
2841 1.1 christos # on failure, ensure result is empty
2842 1.1 christos func_cygpath_result=
2843 1.1 christos fi
2844 1.1 christos else
2845 1.1 christos func_cygpath_result=
2846 1.1 christos func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
2847 1.1 christos fi
2848 1.1 christos }
2849 1.1 christos #end: func_cygpath
2850 1.1 christos
2851 1.1 christos
2852 1.1 christos # func_convert_core_msys_to_w32 ARG
2853 1.1 christos # Convert file name or path ARG from MSYS format to w32 format. Return
2854 1.1 christos # result in func_convert_core_msys_to_w32_result.
2855 1.1 christos func_convert_core_msys_to_w32 ()
2856 1.1 christos {
2857 1.1 christos $debug_cmd
2858 1.1 christos
2859 1.1 christos # awkward: cmd appends spaces to result
2860 1.1 christos func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
2861 1.1 christos $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
2862 1.1 christos }
2863 1.1 christos #end: func_convert_core_msys_to_w32
2864 1.1 christos
2865 1.1 christos
2866 1.1 christos # func_convert_file_check ARG1 ARG2
2867 1.1 christos # Verify that ARG1 (a file name in $build format) was converted to $host
2868 1.1 christos # format in ARG2. Otherwise, emit an error message, but continue (resetting
2869 1.1 christos # func_to_host_file_result to ARG1).
2870 1.1 christos func_convert_file_check ()
2871 1.1 christos {
2872 1.1 christos $debug_cmd
2873 1.1 christos
2874 1.1 christos if test -z "$2" && test -n "$1"; then
2875 1.1 christos func_error "Could not determine host file name corresponding to"
2876 1.1 christos func_error " '$1'"
2877 1.1 christos func_error "Continuing, but uninstalled executables may not work."
2878 1.1 christos # Fallback:
2879 1.1 christos func_to_host_file_result=$1
2880 1.1 christos fi
2881 1.1 christos }
2882 1.1 christos # end func_convert_file_check
2883 1.1 christos
2884 1.1 christos
2885 1.1 christos # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
2886 1.1 christos # Verify that FROM_PATH (a path in $build format) was converted to $host
2887 1.1 christos # format in TO_PATH. Otherwise, emit an error message, but continue, resetting
2888 1.1 christos # func_to_host_file_result to a simplistic fallback value (see below).
2889 1.1 christos func_convert_path_check ()
2890 1.1 christos {
2891 1.1 christos $debug_cmd
2892 1.1 christos
2893 1.1 christos if test -z "$4" && test -n "$3"; then
2894 1.1 christos func_error "Could not determine the host path corresponding to"
2895 1.1 christos func_error " '$3'"
2896 1.1 christos func_error "Continuing, but uninstalled executables may not work."
2897 1.1 christos # Fallback. This is a deliberately simplistic "conversion" and
2898 1.1 christos # should not be "improved". See libtool.info.
2899 1.1 christos if test "x$1" != "x$2"; then
2900 1.1 christos lt_replace_pathsep_chars="s|$1|$2|g"
2901 1.1 christos func_to_host_path_result=`echo "$3" |
2902 1.1 christos $SED -e "$lt_replace_pathsep_chars"`
2903 1.1 christos else
2904 1.1 christos func_to_host_path_result=$3
2905 1.1 christos fi
2906 1.1 christos fi
2907 1.1 christos }
2908 1.1 christos # end func_convert_path_check
2909 1.1 christos
2910 1.1 christos
2911 1.1 christos # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
2912 1.1 christos # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
2913 1.1 christos # and appending REPL if ORIG matches BACKPAT.
2914 1.1 christos func_convert_path_front_back_pathsep ()
2915 1.1 christos {
2916 1.1 christos $debug_cmd
2917 1.1 christos
2918 1.1 christos case $4 in
2919 1.1 christos $1 ) func_to_host_path_result=$3$func_to_host_path_result
2920 1.1 christos ;;
2921 1.1 christos esac
2922 1.1 christos case $4 in
2923 1.1 christos $2 ) func_append func_to_host_path_result "$3"
2924 1.1 christos ;;
2925 1.1 christos esac
2926 1.1 christos }
2927 1.1 christos # end func_convert_path_front_back_pathsep
2928 1.1 christos
2929 1.1 christos
2930 1.1 christos ##################################################
2931 1.1 christos # $build to $host FILE NAME CONVERSION FUNCTIONS #
2932 1.1 christos ##################################################
2933 1.1 christos # invoked via '$to_host_file_cmd ARG'
2934 1.1 christos #
2935 1.1 christos # In each case, ARG is the path to be converted from $build to $host format.
2936 1.1 christos # Result will be available in $func_to_host_file_result.
2937 1.1 christos
2938 1.1 christos
2939 1.1 christos # func_to_host_file ARG
2940 1.1 christos # Converts the file name ARG from $build format to $host format. Return result
2941 1.1 christos # in func_to_host_file_result.
2942 1.1 christos func_to_host_file ()
2943 1.1 christos {
2944 1.1 christos $debug_cmd
2945 1.1 christos
2946 1.1 christos $to_host_file_cmd "$1"
2947 1.1 christos }
2948 1.1 christos # end func_to_host_file
2949 1.1 christos
2950 1.1 christos
2951 1.1 christos # func_to_tool_file ARG LAZY
2952 1.1 christos # converts the file name ARG from $build format to toolchain format. Return
2953 1.1 christos # result in func_to_tool_file_result. If the conversion in use is listed
2954 1.1 christos # in (the comma separated) LAZY, no conversion takes place.
2955 1.1 christos func_to_tool_file ()
2956 1.1 christos {
2957 1.1 christos $debug_cmd
2958 1.1 christos
2959 1.1 christos case ,$2, in
2960 1.1 christos *,"$to_tool_file_cmd",*)
2961 1.1 christos func_to_tool_file_result=$1
2962 1.1 christos ;;
2963 1.1 christos *)
2964 1.1 christos $to_tool_file_cmd "$1"
2965 1.1 christos func_to_tool_file_result=$func_to_host_file_result
2966 1.1 christos ;;
2967 1.1 christos esac
2968 1.1 christos }
2969 1.1 christos # end func_to_tool_file
2970 1.1 christos
2971 1.1 christos
2972 1.1 christos # func_convert_file_noop ARG
2973 1.1 christos # Copy ARG to func_to_host_file_result.
2974 1.1 christos func_convert_file_noop ()
2975 1.1 christos {
2976 1.1 christos func_to_host_file_result=$1
2977 1.1 christos }
2978 1.1 christos # end func_convert_file_noop
2979 1.1 christos
2980 1.1 christos
2981 1.1 christos # func_convert_file_msys_to_w32 ARG
2982 1.1 christos # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
2983 1.1 christos # conversion to w32 is not available inside the cwrapper. Returns result in
2984 1.1 christos # func_to_host_file_result.
2985 1.1 christos func_convert_file_msys_to_w32 ()
2986 1.1 christos {
2987 1.1 christos $debug_cmd
2988 1.1 christos
2989 1.1 christos func_to_host_file_result=$1
2990 1.1 christos if test -n "$1"; then
2991 1.1 christos func_convert_core_msys_to_w32 "$1"
2992 1.1 christos func_to_host_file_result=$func_convert_core_msys_to_w32_result
2993 1.1 christos fi
2994 1.1 christos func_convert_file_check "$1" "$func_to_host_file_result"
2995 1.1 christos }
2996 1.1 christos # end func_convert_file_msys_to_w32
2997 1.1 christos
2998 1.1 christos
2999 1.1 christos # func_convert_file_cygwin_to_w32 ARG
3000 1.1 christos # Convert file name ARG from Cygwin to w32 format. Returns result in
3001 1.1 christos # func_to_host_file_result.
3002 1.1 christos func_convert_file_cygwin_to_w32 ()
3003 1.1 christos {
3004 1.1 christos $debug_cmd
3005 1.1 christos
3006 1.1 christos func_to_host_file_result=$1
3007 1.1 christos if test -n "$1"; then
3008 1.1 christos # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
3009 1.1 christos # LT_CYGPATH in this case.
3010 1.1 christos func_to_host_file_result=`cygpath -m "$1"`
3011 1.1 christos fi
3012 1.1 christos func_convert_file_check "$1" "$func_to_host_file_result"
3013 1.1 christos }
3014 1.1 christos # end func_convert_file_cygwin_to_w32
3015 1.1 christos
3016 1.1 christos
3017 1.1 christos # func_convert_file_nix_to_w32 ARG
3018 1.1 christos # Convert file name ARG from *nix to w32 format. Requires a wine environment
3019 1.1 christos # and a working winepath. Returns result in func_to_host_file_result.
3020 1.1 christos func_convert_file_nix_to_w32 ()
3021 1.1 christos {
3022 1.1 christos $debug_cmd
3023 1.1 christos
3024 1.1 christos func_to_host_file_result=$1
3025 1.1 christos if test -n "$1"; then
3026 1.1 christos func_convert_core_file_wine_to_w32 "$1"
3027 1.1 christos func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
3028 1.1 christos fi
3029 1.1 christos func_convert_file_check "$1" "$func_to_host_file_result"
3030 1.1 christos }
3031 1.1 christos # end func_convert_file_nix_to_w32
3032 1.1 christos
3033 1.1 christos
3034 1.1 christos # func_convert_file_msys_to_cygwin ARG
3035 1.1 christos # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
3036 1.1 christos # Returns result in func_to_host_file_result.
3037 1.1 christos func_convert_file_msys_to_cygwin ()
3038 1.1 christos {
3039 1.1 christos $debug_cmd
3040 1.1 christos
3041 1.1 christos func_to_host_file_result=$1
3042 1.1 christos if test -n "$1"; then
3043 1.1 christos func_convert_core_msys_to_w32 "$1"
3044 1.1 christos func_cygpath -u "$func_convert_core_msys_to_w32_result"
3045 1.1 christos func_to_host_file_result=$func_cygpath_result
3046 1.1 christos fi
3047 1.1 christos func_convert_file_check "$1" "$func_to_host_file_result"
3048 1.1 christos }
3049 1.1 christos # end func_convert_file_msys_to_cygwin
3050 1.1 christos
3051 1.1 christos
3052 1.1 christos # func_convert_file_nix_to_cygwin ARG
3053 1.1 christos # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed
3054 1.1 christos # in a wine environment, working winepath, and LT_CYGPATH set. Returns result
3055 1.1 christos # in func_to_host_file_result.
3056 1.1 christos func_convert_file_nix_to_cygwin ()
3057 1.1 christos {
3058 1.1 christos $debug_cmd
3059 1.1 christos
3060 1.1 christos func_to_host_file_result=$1
3061 1.1 christos if test -n "$1"; then
3062 1.1 christos # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
3063 1.1 christos func_convert_core_file_wine_to_w32 "$1"
3064 1.1 christos func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
3065 1.1 christos func_to_host_file_result=$func_cygpath_result
3066 1.1 christos fi
3067 1.1 christos func_convert_file_check "$1" "$func_to_host_file_result"
3068 1.1 christos }
3069 1.1 christos # end func_convert_file_nix_to_cygwin
3070 1.1 christos
3071 1.1 christos
3072 1.1 christos #############################################
3073 1.1 christos # $build to $host PATH CONVERSION FUNCTIONS #
3074 1.1 christos #############################################
3075 1.1 christos # invoked via '$to_host_path_cmd ARG'
3076 1.1 christos #
3077 1.1 christos # In each case, ARG is the path to be converted from $build to $host format.
3078 1.1 christos # The result will be available in $func_to_host_path_result.
3079 1.1 christos #
3080 1.1 christos # Path separators are also converted from $build format to $host format. If
3081 1.1 christos # ARG begins or ends with a path separator character, it is preserved (but
3082 1.1 christos # converted to $host format) on output.
3083 1.1 christos #
3084 1.1 christos # All path conversion functions are named using the following convention:
3085 1.1 christos # file name conversion function : func_convert_file_X_to_Y ()
3086 1.1 christos # path conversion function : func_convert_path_X_to_Y ()
3087 1.1 christos # where, for any given $build/$host combination the 'X_to_Y' value is the
3088 1.1 christos # same. If conversion functions are added for new $build/$host combinations,
3089 1.1 christos # the two new functions must follow this pattern, or func_init_to_host_path_cmd
3090 1.1 christos # will break.
3091 1.1 christos
3092 1.1 christos
3093 1.1 christos # func_init_to_host_path_cmd
3094 1.1 christos # Ensures that function "pointer" variable $to_host_path_cmd is set to the
3095 1.1 christos # appropriate value, based on the value of $to_host_file_cmd.
3096 1.1 christos to_host_path_cmd=
3097 1.1 christos func_init_to_host_path_cmd ()
3098 1.1 christos {
3099 1.1 christos $debug_cmd
3100 1.1 christos
3101 1.1 christos if test -z "$to_host_path_cmd"; then
3102 1.1 christos func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
3103 1.1 christos to_host_path_cmd=func_convert_path_$func_stripname_result
3104 1.1 christos fi
3105 1.1 christos }
3106 1.1 christos
3107 1.1 christos
3108 1.1 christos # func_to_host_path ARG
3109 1.1 christos # Converts the path ARG from $build format to $host format. Return result
3110 1.1 christos # in func_to_host_path_result.
3111 1.1 christos func_to_host_path ()
3112 1.1 christos {
3113 1.1 christos $debug_cmd
3114 1.1 christos
3115 1.1 christos func_init_to_host_path_cmd
3116 1.1 christos $to_host_path_cmd "$1"
3117 1.1 christos }
3118 1.1 christos # end func_to_host_path
3119 1.1 christos
3120 1.1 christos
3121 1.1 christos # func_convert_path_noop ARG
3122 1.1 christos # Copy ARG to func_to_host_path_result.
3123 1.1 christos func_convert_path_noop ()
3124 1.1 christos {
3125 1.1 christos func_to_host_path_result=$1
3126 1.1 christos }
3127 1.1 christos # end func_convert_path_noop
3128 1.1 christos
3129 1.1 christos
3130 1.1 christos # func_convert_path_msys_to_w32 ARG
3131 1.1 christos # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
3132 1.1 christos # conversion to w32 is not available inside the cwrapper. Returns result in
3133 1.1 christos # func_to_host_path_result.
3134 1.1 christos func_convert_path_msys_to_w32 ()
3135 1.1 christos {
3136 1.1 christos $debug_cmd
3137 1.1 christos
3138 1.1 christos func_to_host_path_result=$1
3139 1.1 christos if test -n "$1"; then
3140 1.1 christos # Remove leading and trailing path separator characters from ARG. MSYS
3141 1.1 christos # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
3142 1.1 christos # and winepath ignores them completely.
3143 1.1 christos func_stripname : : "$1"
3144 1.1 christos func_to_host_path_tmp1=$func_stripname_result
3145 1.1 christos func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
3146 1.1 christos func_to_host_path_result=$func_convert_core_msys_to_w32_result
3147 1.1 christos func_convert_path_check : ";" \
3148 1.1 christos "$func_to_host_path_tmp1" "$func_to_host_path_result"
3149 1.1 christos func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3150 1.1 christos fi
3151 1.1 christos }
3152 1.1 christos # end func_convert_path_msys_to_w32
3153 1.1 christos
3154 1.1 christos
3155 1.1 christos # func_convert_path_cygwin_to_w32 ARG
3156 1.1 christos # Convert path ARG from Cygwin to w32 format. Returns result in
3157 1.1 christos # func_to_host_file_result.
3158 1.1 christos func_convert_path_cygwin_to_w32 ()
3159 1.1 christos {
3160 1.1 christos $debug_cmd
3161 1.1 christos
3162 1.1 christos func_to_host_path_result=$1
3163 1.1 christos if test -n "$1"; then
3164 1.1 christos # See func_convert_path_msys_to_w32:
3165 1.1 christos func_stripname : : "$1"
3166 1.1 christos func_to_host_path_tmp1=$func_stripname_result
3167 1.1 christos func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
3168 1.1 christos func_convert_path_check : ";" \
3169 1.1 christos "$func_to_host_path_tmp1" "$func_to_host_path_result"
3170 1.1 christos func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3171 1.1 christos fi
3172 1.1 christos }
3173 1.1 christos # end func_convert_path_cygwin_to_w32
3174 1.1 christos
3175 1.1 christos
3176 1.1 christos # func_convert_path_nix_to_w32 ARG
3177 1.1 christos # Convert path ARG from *nix to w32 format. Requires a wine environment and
3178 1.1 christos # a working winepath. Returns result in func_to_host_file_result.
3179 1.1 christos func_convert_path_nix_to_w32 ()
3180 1.1 christos {
3181 1.1 christos $debug_cmd
3182 1.1 christos
3183 1.1 christos func_to_host_path_result=$1
3184 1.1 christos if test -n "$1"; then
3185 1.1 christos # See func_convert_path_msys_to_w32:
3186 1.1 christos func_stripname : : "$1"
3187 1.1 christos func_to_host_path_tmp1=$func_stripname_result
3188 1.1 christos func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
3189 1.1 christos func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
3190 1.1 christos func_convert_path_check : ";" \
3191 1.1 christos "$func_to_host_path_tmp1" "$func_to_host_path_result"
3192 1.1 christos func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3193 1.1 christos fi
3194 1.1 christos }
3195 1.1 christos # end func_convert_path_nix_to_w32
3196 1.1 christos
3197 1.1 christos
3198 1.1 christos # func_convert_path_msys_to_cygwin ARG
3199 1.1 christos # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
3200 1.1 christos # Returns result in func_to_host_file_result.
3201 1.1 christos func_convert_path_msys_to_cygwin ()
3202 1.1 christos {
3203 1.1 christos $debug_cmd
3204 1.1 christos
3205 1.1 christos func_to_host_path_result=$1
3206 1.1 christos if test -n "$1"; then
3207 1.1 christos # See func_convert_path_msys_to_w32:
3208 1.1 christos func_stripname : : "$1"
3209 1.1 christos func_to_host_path_tmp1=$func_stripname_result
3210 1.1 christos func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
3211 1.1 christos func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
3212 1.1 christos func_to_host_path_result=$func_cygpath_result
3213 1.1 christos func_convert_path_check : : \
3214 1.1 christos "$func_to_host_path_tmp1" "$func_to_host_path_result"
3215 1.1 christos func_convert_path_front_back_pathsep ":*" "*:" : "$1"
3216 1.1 christos fi
3217 1.1 christos }
3218 1.1 christos # end func_convert_path_msys_to_cygwin
3219 1.1 christos
3220 1.1 christos
3221 1.1 christos # func_convert_path_nix_to_cygwin ARG
3222 1.1 christos # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a
3223 1.1 christos # a wine environment, working winepath, and LT_CYGPATH set. Returns result in
3224 1.1 christos # func_to_host_file_result.
3225 1.1 christos func_convert_path_nix_to_cygwin ()
3226 1.1 christos {
3227 1.1 christos $debug_cmd
3228 1.1 christos
3229 1.1 christos func_to_host_path_result=$1
3230 1.1 christos if test -n "$1"; then
3231 1.1 christos # Remove leading and trailing path separator characters from
3232 1.1 christos # ARG. msys behavior is inconsistent here, cygpath turns them
3233 1.1 christos # into '.;' and ';.', and winepath ignores them completely.
3234 1.1 christos func_stripname : : "$1"
3235 1.1 christos func_to_host_path_tmp1=$func_stripname_result
3236 1.1 christos func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
3237 1.1 christos func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
3238 1.1 christos func_to_host_path_result=$func_cygpath_result
3239 1.1 christos func_convert_path_check : : \
3240 1.1 christos "$func_to_host_path_tmp1" "$func_to_host_path_result"
3241 1.1 christos func_convert_path_front_back_pathsep ":*" "*:" : "$1"
3242 1.1 christos fi
3243 1.1 christos }
3244 1.1 christos # end func_convert_path_nix_to_cygwin
3245 1.1 christos
3246 1.1 christos
3247 1.1 christos # func_dll_def_p FILE
3248 1.1 christos # True iff FILE is a Windows DLL '.def' file.
3249 1.1 christos # Keep in sync with _LT_DLL_DEF_P in libtool.m4
3250 1.1 christos func_dll_def_p ()
3251 1.1 christos {
3252 1.1 christos $debug_cmd
3253 1.1 christos
3254 1.1 christos func_dll_def_p_tmp=`$SED -n \
3255 1.1 christos -e 's/^[ ]*//' \
3256 1.1 christos -e '/^\(;.*\)*$/d' \
3257 1.1 christos -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \
3258 1.1 christos -e q \
3259 1.1 christos "$1"`
3260 1.1 christos test DEF = "$func_dll_def_p_tmp"
3261 1.1 christos }
3262 1.1 christos
3263 1.1 christos
3264 1.1 christos # func_mode_compile arg...
3265 1.1 christos func_mode_compile ()
3266 1.1 christos {
3267 1.1 christos $debug_cmd
3268 1.1 christos
3269 1.1 christos # Get the compilation command and the source file.
3270 1.1 christos base_compile=
3271 1.1 christos srcfile=$nonopt # always keep a non-empty value in "srcfile"
3272 1.1 christos suppress_opt=yes
3273 1.1 christos suppress_output=
3274 1.1 christos arg_mode=normal
3275 1.1 christos libobj=
3276 1.1 christos later=
3277 1.1 christos pie_flag=
3278 1.1 christos
3279 1.1 christos for arg
3280 1.1 christos do
3281 1.1 christos case $arg_mode in
3282 1.1 christos arg )
3283 1.1 christos # do not "continue". Instead, add this to base_compile
3284 1.1 christos lastarg=$arg
3285 1.1 christos arg_mode=normal
3286 1.1 christos ;;
3287 1.1 christos
3288 1.1 christos target )
3289 1.1 christos libobj=$arg
3290 1.1 christos arg_mode=normal
3291 1.1 christos continue
3292 1.1 christos ;;
3293 1.1 christos
3294 1.1 christos normal )
3295 1.1 christos # Accept any command-line options.
3296 1.1 christos case $arg in
3297 1.1 christos -o)
3298 1.1 christos test -n "$libobj" && \
3299 1.1 christos func_fatal_error "you cannot specify '-o' more than once"
3300 1.1 christos arg_mode=target
3301 1.1 christos continue
3302 1.1 christos ;;
3303 1.1 christos
3304 1.1 christos -pie | -fpie | -fPIE)
3305 1.1 christos func_append pie_flag " $arg"
3306 1.1 christos continue
3307 1.1 christos ;;
3308 1.1 christos
3309 1.1 christos -shared | -static | -prefer-pic | -prefer-non-pic)
3310 1.1 christos func_append later " $arg"
3311 1.1 christos continue
3312 1.1 christos ;;
3313 1.1 christos
3314 1.1 christos -no-suppress)
3315 1.1 christos suppress_opt=no
3316 1.1 christos continue
3317 1.1 christos ;;
3318 1.1 christos
3319 1.1 christos -Xcompiler)
3320 1.1 christos arg_mode=arg # the next one goes into the "base_compile" arg list
3321 1.1 christos continue # The current "srcfile" will either be retained or
3322 1.1 christos ;; # replaced later. I would guess that would be a bug.
3323 1.1 christos
3324 1.1 christos -Wc,*)
3325 1.1 christos func_stripname '-Wc,' '' "$arg"
3326 1.1 christos args=$func_stripname_result
3327 1.1 christos lastarg=
3328 1.1 christos save_ifs=$IFS; IFS=,
3329 1.1 christos for arg in $args; do
3330 1.1 christos IFS=$save_ifs
3331 1.1 christos func_append_quoted lastarg "$arg"
3332 1.1 christos done
3333 1.1 christos IFS=$save_ifs
3334 1.1 christos func_stripname ' ' '' "$lastarg"
3335 1.1 christos lastarg=$func_stripname_result
3336 1.1 christos
3337 1.1 christos # Add the arguments to base_compile.
3338 1.1 christos func_append base_compile " $lastarg"
3339 1.1 christos continue
3340 1.1 christos ;;
3341 1.1 christos
3342 1.1 christos *)
3343 1.1 christos # Accept the current argument as the source file.
3344 1.1 christos # The previous "srcfile" becomes the current argument.
3345 1.1 christos #
3346 1.1 christos lastarg=$srcfile
3347 1.1 christos srcfile=$arg
3348 1.1 christos ;;
3349 1.1 christos esac # case $arg
3350 1.1 christos ;;
3351 1.1 christos esac # case $arg_mode
3352 1.1 christos
3353 1.1 christos # Aesthetically quote the previous argument.
3354 1.1 christos func_append_quoted base_compile "$lastarg"
3355 1.1 christos done # for arg
3356 1.1 christos
3357 1.1 christos case $arg_mode in
3358 1.1 christos arg)
3359 1.1 christos func_fatal_error "you must specify an argument for -Xcompile"
3360 1.1 christos ;;
3361 1.1 christos target)
3362 1.1 christos func_fatal_error "you must specify a target with '-o'"
3363 1.1 christos ;;
3364 1.1 christos *)
3365 1.1 christos # Get the name of the library object.
3366 1.1 christos test -z "$libobj" && {
3367 1.1 christos func_basename "$srcfile"
3368 1.1 christos libobj=$func_basename_result
3369 1.1 christos }
3370 1.1 christos ;;
3371 1.1 christos esac
3372 1.1 christos
3373 1.1 christos # Recognize several different file suffixes.
3374 1.1 christos # If the user specifies -o file.o, it is replaced with file.lo
3375 1.1 christos case $libobj in
3376 1.1 christos *.[cCFSifmso] | \
3377 1.1 christos *.ada | *.adb | *.ads | *.asm | \
3378 1.1 christos *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
3379 1.1 christos *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
3380 1.1 christos func_xform "$libobj"
3381 1.1 christos libobj=$func_xform_result
3382 1.1 christos ;;
3383 1.1 christos esac
3384 1.1 christos
3385 1.1 christos case $libobj in
3386 1.1 christos *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
3387 1.1 christos *)
3388 1.1 christos func_fatal_error "cannot determine name of library object from '$libobj'"
3389 1.1 christos ;;
3390 1.1 christos esac
3391 1.1 christos
3392 1.1 christos func_infer_tag $base_compile
3393 1.1 christos
3394 1.1 christos for arg in $later; do
3395 1.1 christos case $arg in
3396 1.1 christos -shared)
3397 1.1 christos test yes = "$build_libtool_libs" \
3398 1.1 christos || func_fatal_configuration "cannot build a shared library"
3399 1.1 christos build_old_libs=no
3400 1.1 christos continue
3401 1.1 christos ;;
3402 1.1 christos
3403 1.1 christos -static)
3404 1.1 christos build_libtool_libs=no
3405 1.1 christos build_old_libs=yes
3406 1.1 christos continue
3407 1.1 christos ;;
3408 1.1 christos
3409 1.1 christos -prefer-pic)
3410 1.1 christos pic_mode=yes
3411 1.1 christos continue
3412 1.1 christos ;;
3413 1.1 christos
3414 1.1 christos -prefer-non-pic)
3415 1.1 christos pic_mode=no
3416 1.1 christos continue
3417 1.1 christos ;;
3418 1.1 christos esac
3419 1.1 christos done
3420 1.1 christos
3421 1.1 christos func_quote_for_eval "$libobj"
3422 1.1 christos test "X$libobj" != "X$func_quote_for_eval_result" \
3423 1.1 christos && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
3424 1.1 christos && func_warning "libobj name '$libobj' may not contain shell special characters."
3425 1.1 christos func_dirname_and_basename "$obj" "/" ""
3426 1.1 christos objname=$func_basename_result
3427 1.1 christos xdir=$func_dirname_result
3428 1.1 christos lobj=$xdir$objdir/$objname
3429 1.1 christos
3430 1.1 christos test -z "$base_compile" && \
3431 1.1 christos func_fatal_help "you must specify a compilation command"
3432 1.1 christos
3433 1.1 christos # Delete any leftover library objects.
3434 1.1 christos if test yes = "$build_old_libs"; then
3435 1.1 christos removelist="$obj $lobj $libobj ${libobj}T"
3436 1.1 christos else
3437 1.1 christos removelist="$lobj $libobj ${libobj}T"
3438 1.1 christos fi
3439 1.1 christos
3440 1.1 christos # On Cygwin there's no "real" PIC flag so we must build both object types
3441 1.1 christos case $host_os in
3442 1.1 christos cygwin* | mingw* | pw32* | os2* | cegcc*)
3443 1.1 christos pic_mode=default
3444 1.1 christos ;;
3445 1.1 christos esac
3446 1.1 christos if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
3447 1.1 christos # non-PIC code in shared libraries is not supported
3448 1.1 christos pic_mode=default
3449 1.1 christos fi
3450 1.1 christos
3451 1.1 christos # Calculate the filename of the output object if compiler does
3452 1.1 christos # not support -o with -c
3453 1.1 christos if test no = "$compiler_c_o"; then
3454 1.1 christos output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
3455 1.1 christos lockfile=$output_obj.lock
3456 1.1 christos else
3457 1.1 christos output_obj=
3458 1.1 christos need_locks=no
3459 1.1 christos lockfile=
3460 1.1 christos fi
3461 1.1 christos
3462 1.1 christos # Lock this critical section if it is needed
3463 1.1 christos # We use this script file to make the link, it avoids creating a new file
3464 1.1 christos if test yes = "$need_locks"; then
3465 1.1 christos until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
3466 1.1 christos func_echo "Waiting for $lockfile to be removed"
3467 1.1 christos sleep 2
3468 1.1 christos done
3469 1.1 christos elif test warn = "$need_locks"; then
3470 1.1 christos if test -f "$lockfile"; then
3471 1.1 christos $ECHO "\
3472 1.1 christos *** ERROR, $lockfile exists and contains:
3473 1.1 christos `cat $lockfile 2>/dev/null`
3474 1.1 christos
3475 1.1 christos This indicates that another process is trying to use the same
3476 1.1 christos temporary object file, and libtool could not work around it because
3477 1.1 christos your compiler does not support '-c' and '-o' together. If you
3478 1.1 christos repeat this compilation, it may succeed, by chance, but you had better
3479 1.1 christos avoid parallel builds (make -j) in this platform, or get a better
3480 1.1 christos compiler."
3481 1.1 christos
3482 1.1 christos $opt_dry_run || $RM $removelist
3483 1.1 christos exit $EXIT_FAILURE
3484 1.1 christos fi
3485 1.1 christos func_append removelist " $output_obj"
3486 1.1 christos $ECHO "$srcfile" > "$lockfile"
3487 1.1 christos fi
3488 1.1 christos
3489 1.1 christos $opt_dry_run || $RM $removelist
3490 1.1 christos func_append removelist " $lockfile"
3491 1.1 christos trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
3492 1.1 christos
3493 1.1 christos func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
3494 1.1 christos srcfile=$func_to_tool_file_result
3495 1.1 christos func_quote_for_eval "$srcfile"
3496 1.1 christos qsrcfile=$func_quote_for_eval_result
3497 1.1 christos
3498 1.1 christos # Only build a PIC object if we are building libtool libraries.
3499 1.1 christos if test yes = "$build_libtool_libs"; then
3500 1.1 christos # Without this assignment, base_compile gets emptied.
3501 1.1 christos fbsd_hideous_sh_bug=$base_compile
3502 1.1 christos
3503 1.1 christos if test no != "$pic_mode"; then
3504 1.1 christos command="$base_compile $qsrcfile $pic_flag"
3505 1.1 christos else
3506 1.1 christos # Don't build PIC code
3507 1.1 christos command="$base_compile $qsrcfile"
3508 1.1 christos fi
3509 1.1 christos
3510 1.1 christos func_mkdir_p "$xdir$objdir"
3511 1.1 christos
3512 1.1 christos if test -z "$output_obj"; then
3513 1.1 christos # Place PIC objects in $objdir
3514 1.1 christos func_append command " -o $lobj"
3515 1.1 christos fi
3516 1.1 christos
3517 1.1 christos func_show_eval_locale "$command" \
3518 1.1 christos 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
3519 1.1 christos
3520 1.1 christos if test warn = "$need_locks" &&
3521 1.1 christos test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
3522 1.1 christos $ECHO "\
3523 1.1 christos *** ERROR, $lockfile contains:
3524 1.1 christos `cat $lockfile 2>/dev/null`
3525 1.1 christos
3526 1.1 christos but it should contain:
3527 1.1 christos $srcfile
3528 1.1 christos
3529 1.1 christos This indicates that another process is trying to use the same
3530 1.1 christos temporary object file, and libtool could not work around it because
3531 1.1 christos your compiler does not support '-c' and '-o' together. If you
3532 1.1 christos repeat this compilation, it may succeed, by chance, but you had better
3533 1.1 christos avoid parallel builds (make -j) in this platform, or get a better
3534 1.1 christos compiler."
3535 1.1 christos
3536 1.1 christos $opt_dry_run || $RM $removelist
3537 1.1 christos exit $EXIT_FAILURE
3538 1.1 christos fi
3539 1.1 christos
3540 1.1 christos # Just move the object if needed, then go on to compile the next one
3541 1.1 christos if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
3542 1.1 christos func_show_eval '$MV "$output_obj" "$lobj"' \
3543 1.1 christos 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
3544 1.1 christos fi
3545 1.1 christos
3546 1.1 christos # Allow error messages only from the first compilation.
3547 1.1 christos if test yes = "$suppress_opt"; then
3548 1.1 christos suppress_output=' >/dev/null 2>&1'
3549 1.1 christos fi
3550 1.1 christos fi
3551 1.1 christos
3552 1.1 christos # Only build a position-dependent object if we build old libraries.
3553 1.1 christos if test yes = "$build_old_libs"; then
3554 1.1 christos if test yes != "$pic_mode"; then
3555 1.1 christos # Don't build PIC code
3556 1.1 christos command="$base_compile $qsrcfile$pie_flag"
3557 1.1 christos else
3558 1.1 christos command="$base_compile $qsrcfile $pic_flag"
3559 1.1 christos fi
3560 1.1 christos if test yes = "$compiler_c_o"; then
3561 1.1 christos func_append command " -o $obj"
3562 1.1 christos fi
3563 1.1 christos
3564 1.1 christos # Suppress compiler output if we already did a PIC compilation.
3565 1.1 christos func_append command "$suppress_output"
3566 1.1 christos func_show_eval_locale "$command" \
3567 1.1 christos '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
3568 1.1 christos
3569 1.1 christos if test warn = "$need_locks" &&
3570 1.1 christos test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
3571 1.1 christos $ECHO "\
3572 1.1 christos *** ERROR, $lockfile contains:
3573 1.1 christos `cat $lockfile 2>/dev/null`
3574 1.1 christos
3575 1.1 christos but it should contain:
3576 1.1 christos $srcfile
3577 1.1 christos
3578 1.1 christos This indicates that another process is trying to use the same
3579 1.1 christos temporary object file, and libtool could not work around it because
3580 1.1 christos your compiler does not support '-c' and '-o' together. If you
3581 1.1 christos repeat this compilation, it may succeed, by chance, but you had better
3582 1.1 christos avoid parallel builds (make -j) in this platform, or get a better
3583 1.1 christos compiler."
3584 1.1 christos
3585 1.1 christos $opt_dry_run || $RM $removelist
3586 1.1 christos exit $EXIT_FAILURE
3587 1.1 christos fi
3588 1.1 christos
3589 1.1 christos # Just move the object if needed
3590 1.1 christos if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
3591 1.1 christos func_show_eval '$MV "$output_obj" "$obj"' \
3592 1.1 christos 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
3593 1.1 christos fi
3594 1.1 christos fi
3595 1.1 christos
3596 1.1 christos $opt_dry_run || {
3597 1.1 christos func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
3598 1.1 christos
3599 1.1 christos # Unlock the critical section if it was locked
3600 1.1 christos if test no != "$need_locks"; then
3601 1.1 christos removelist=$lockfile
3602 1.1 christos $RM "$lockfile"
3603 1.1 christos fi
3604 1.1 christos }
3605 1.1 christos
3606 1.1 christos exit $EXIT_SUCCESS
3607 1.1 christos }
3608 1.1 christos
3609 1.1 christos $opt_help || {
3610 1.1 christos test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
3611 1.1 christos }
3612 1.1 christos
3613 1.1 christos func_mode_help ()
3614 1.1 christos {
3615 1.1 christos # We need to display help for each of the modes.
3616 1.1 christos case $opt_mode in
3617 1.1 christos "")
3618 1.1 christos # Generic help is extracted from the usage comments
3619 1.1 christos # at the start of this file.
3620 1.1 christos func_help
3621 1.1 christos ;;
3622 1.1 christos
3623 1.1 christos clean)
3624 1.1 christos $ECHO \
3625 1.1 christos "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
3626 1.1 christos
3627 1.1 christos Remove files from the build directory.
3628 1.1 christos
3629 1.1 christos RM is the name of the program to use to delete files associated with each FILE
3630 1.1 christos (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed
3631 1.1 christos to RM.
3632 1.1 christos
3633 1.1 christos If FILE is a libtool library, object or program, all the files associated
3634 1.1 christos with it are deleted. Otherwise, only FILE itself is deleted using RM."
3635 1.1 christos ;;
3636 1.1 christos
3637 1.1 christos compile)
3638 1.1 christos $ECHO \
3639 1.1 christos "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
3640 1.1 christos
3641 1.1 christos Compile a source file into a libtool library object.
3642 1.1 christos
3643 1.1 christos This mode accepts the following additional options:
3644 1.1 christos
3645 1.1 christos -o OUTPUT-FILE set the output file name to OUTPUT-FILE
3646 1.1 christos -no-suppress do not suppress compiler output for multiple passes
3647 1.1 christos -prefer-pic try to build PIC objects only
3648 1.1 christos -prefer-non-pic try to build non-PIC objects only
3649 1.1 christos -shared do not build a '.o' file suitable for static linking
3650 1.1 christos -static only build a '.o' file suitable for static linking
3651 1.1 christos -Wc,FLAG pass FLAG directly to the compiler
3652 1.1 christos
3653 1.1 christos COMPILE-COMMAND is a command to be used in creating a 'standard' object file
3654 1.1 christos from the given SOURCEFILE.
3655 1.1 christos
3656 1.1 christos The output file name is determined by removing the directory component from
3657 1.1 christos SOURCEFILE, then substituting the C source code suffix '.c' with the
3658 1.1 christos library object suffix, '.lo'."
3659 1.1 christos ;;
3660 1.1 christos
3661 1.1 christos execute)
3662 1.1 christos $ECHO \
3663 1.1 christos "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
3664 1.1 christos
3665 1.1 christos Automatically set library path, then run a program.
3666 1.1 christos
3667 1.1 christos This mode accepts the following additional options:
3668 1.1 christos
3669 1.1 christos -dlopen FILE add the directory containing FILE to the library path
3670 1.1 christos
3671 1.1 christos This mode sets the library path environment variable according to '-dlopen'
3672 1.1 christos flags.
3673 1.1 christos
3674 1.1 christos If any of the ARGS are libtool executable wrappers, then they are translated
3675 1.1 christos into their corresponding uninstalled binary, and any of their required library
3676 1.1 christos directories are added to the library path.
3677 1.1 christos
3678 1.1 christos Then, COMMAND is executed, with ARGS as arguments."
3679 1.1 christos ;;
3680 1.1 christos
3681 1.1 christos finish)
3682 1.1 christos $ECHO \
3683 1.1 christos "Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
3684 1.1 christos
3685 1.1 christos Complete the installation of libtool libraries.
3686 1.1 christos
3687 1.1 christos Each LIBDIR is a directory that contains libtool libraries.
3688 1.1 christos
3689 1.1 christos The commands that this mode executes may require superuser privileges. Use
3690 1.1 christos the '--dry-run' option if you just want to see what would be executed."
3691 1.1 christos ;;
3692 1.1 christos
3693 1.1 christos install)
3694 1.1 christos $ECHO \
3695 1.1 christos "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
3696 1.1 christos
3697 1.1 christos Install executables or libraries.
3698 1.1 christos
3699 1.1 christos INSTALL-COMMAND is the installation command. The first component should be
3700 1.1 christos either the 'install' or 'cp' program.
3701 1.1 christos
3702 1.1 christos The following components of INSTALL-COMMAND are treated specially:
3703 1.1 christos
3704 1.1 christos -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation
3705 1.1 christos
3706 1.1 christos The rest of the components are interpreted as arguments to that command (only
3707 1.1 christos BSD-compatible install options are recognized)."
3708 1.1 christos ;;
3709 1.1 christos
3710 1.1 christos link)
3711 1.1 christos $ECHO \
3712 1.1 christos "Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
3713 1.1 christos
3714 1.1 christos Link object files or libraries together to form another library, or to
3715 1.1 christos create an executable program.
3716 1.1 christos
3717 1.1 christos LINK-COMMAND is a command using the C compiler that you would use to create
3718 1.1 christos a program from several object files.
3719 1.1 christos
3720 1.1 christos The following components of LINK-COMMAND are treated specially:
3721 1.1 christos
3722 1.1 christos -all-static do not do any dynamic linking at all
3723 1.1 christos -avoid-version do not add a version suffix if possible
3724 1.1 christos -bindir BINDIR specify path to binaries directory (for systems where
3725 1.1 christos libraries must be found in the PATH setting at runtime)
3726 1.1 christos -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime
3727 1.1 christos -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
3728 1.1 christos -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
3729 1.1 christos -export-symbols SYMFILE
3730 1.1 christos try to export only the symbols listed in SYMFILE
3731 1.1 christos -export-symbols-regex REGEX
3732 1.1 christos try to export only the symbols matching REGEX
3733 1.1 christos -LLIBDIR search LIBDIR for required installed libraries
3734 1.1 christos -lNAME OUTPUT-FILE requires the installed library libNAME
3735 1.1 christos -module build a library that can dlopened
3736 1.1 christos -no-fast-install disable the fast-install mode
3737 1.1 christos -no-install link a not-installable executable
3738 1.1 christos -no-undefined declare that a library does not refer to external symbols
3739 1.1 christos -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
3740 1.1 christos -objectlist FILE use a list of object files found in FILE to specify objects
3741 1.1 christos -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes)
3742 1.1 christos -precious-files-regex REGEX
3743 1.1 christos don't remove output files matching REGEX
3744 1.1 christos -release RELEASE specify package release information
3745 1.1 christos -rpath LIBDIR the created library will eventually be installed in LIBDIR
3746 1.1 christos -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
3747 1.1 christos -shared only do dynamic linking of libtool libraries
3748 1.1 christos -shrext SUFFIX override the standard shared library file extension
3749 1.1 christos -static do not do any dynamic linking of uninstalled libtool libraries
3750 1.1 christos -static-libtool-libs
3751 1.1 christos do not do any dynamic linking of libtool libraries
3752 1.1 christos -version-info CURRENT[:REVISION[:AGE]]
3753 1.1 christos specify library version info [each variable defaults to 0]
3754 1.1 christos -weak LIBNAME declare that the target provides the LIBNAME interface
3755 1.1 christos -Wc,FLAG
3756 1.1 christos -Xcompiler FLAG pass linker-specific FLAG directly to the compiler
3757 1.1 christos -Wl,FLAG
3758 1.1 christos -Xlinker FLAG pass linker-specific FLAG directly to the linker
3759 1.1 christos -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC)
3760 1.1 christos
3761 1.1 christos All other options (arguments beginning with '-') are ignored.
3762 1.1 christos
3763 1.1 christos Every other argument is treated as a filename. Files ending in '.la' are
3764 1.1 christos treated as uninstalled libtool libraries, other files are standard or library
3765 1.1 christos object files.
3766 1.1 christos
3767 1.1 christos If the OUTPUT-FILE ends in '.la', then a libtool library is created,
3768 1.1 christos only library objects ('.lo' files) may be specified, and '-rpath' is
3769 1.1 christos required, except when creating a convenience library.
3770 1.1 christos
3771 1.1 christos If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
3772 1.1 christos using 'ar' and 'ranlib', or on Windows using 'lib'.
3773 1.1 christos
3774 1.1 christos If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
3775 1.1 christos is created, otherwise an executable program is created."
3776 1.1 christos ;;
3777 1.1 christos
3778 1.1 christos uninstall)
3779 1.1 christos $ECHO \
3780 1.1 christos "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
3781 1.1 christos
3782 1.1 christos Remove libraries from an installation directory.
3783 1.1 christos
3784 1.1 christos RM is the name of the program to use to delete files associated with each FILE
3785 1.1 christos (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed
3786 1.1 christos to RM.
3787 1.1 christos
3788 1.1 christos If FILE is a libtool library, all the files associated with it are deleted.
3789 1.1 christos Otherwise, only FILE itself is deleted using RM."
3790 1.1 christos ;;
3791 1.1 christos
3792 1.1 christos *)
3793 1.1 christos func_fatal_help "invalid operation mode '$opt_mode'"
3794 1.1 christos ;;
3795 1.1 christos esac
3796 1.1 christos
3797 1.1 christos echo
3798 1.1 christos $ECHO "Try '$progname --help' for more information about other modes."
3799 1.1 christos }
3800 1.1 christos
3801 1.1 christos # Now that we've collected a possible --mode arg, show help if necessary
3802 1.1 christos if $opt_help; then
3803 1.1 christos if test : = "$opt_help"; then
3804 1.1 christos func_mode_help
3805 1.1 christos else
3806 1.1 christos {
3807 1.1 christos func_help noexit
3808 1.1 christos for opt_mode in compile link execute install finish uninstall clean; do
3809 1.1 christos func_mode_help
3810 1.1 christos done
3811 1.1 christos } | $SED -n '1p; 2,$s/^Usage:/ or: /p'
3812 1.1 christos {
3813 1.1 christos func_help noexit
3814 1.1 christos for opt_mode in compile link execute install finish uninstall clean; do
3815 1.1 christos echo
3816 1.1 christos func_mode_help
3817 1.1 christos done
3818 1.1 christos } |
3819 1.1 christos $SED '1d
3820 1.1 christos /^When reporting/,/^Report/{
3821 1.1 christos H
3822 1.1 christos d
3823 1.1 christos }
3824 1.1 christos $x
3825 1.1 christos /information about other modes/d
3826 1.1 christos /more detailed .*MODE/d
3827 1.1 christos s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
3828 1.1 christos fi
3829 1.1 christos exit $?
3830 1.1 christos fi
3831 1.1 christos
3832 1.1 christos
3833 1.1 christos # func_mode_execute arg...
3834 1.1 christos func_mode_execute ()
3835 1.1 christos {
3836 1.1 christos $debug_cmd
3837 1.1 christos
3838 1.1 christos # The first argument is the command name.
3839 1.1 christos cmd=$nonopt
3840 1.1 christos test -z "$cmd" && \
3841 1.1 christos func_fatal_help "you must specify a COMMAND"
3842 1.1 christos
3843 1.1 christos # Handle -dlopen flags immediately.
3844 1.1 christos for file in $opt_dlopen; do
3845 1.1 christos test -f "$file" \
3846 1.1 christos || func_fatal_help "'$file' is not a file"
3847 1.1 christos
3848 1.1 christos dir=
3849 1.1 christos case $file in
3850 1.1 christos *.la)
3851 1.1 christos func_resolve_sysroot "$file"
3852 1.1 christos file=$func_resolve_sysroot_result
3853 1.1 christos
3854 1.1 christos # Check to see that this really is a libtool archive.
3855 1.1 christos func_lalib_unsafe_p "$file" \
3856 1.1 christos || func_fatal_help "'$lib' is not a valid libtool archive"
3857 1.1 christos
3858 1.1 christos # Read the libtool library.
3859 1.1 christos dlname=
3860 1.1 christos library_names=
3861 1.1 christos func_source "$file"
3862 1.1 christos
3863 1.1 christos # Skip this library if it cannot be dlopened.
3864 1.1 christos if test -z "$dlname"; then
3865 1.1 christos # Warn if it was a shared library.
3866 1.1 christos test -n "$library_names" && \
3867 1.1 christos func_warning "'$file' was not linked with '-export-dynamic'"
3868 1.1 christos continue
3869 1.1 christos fi
3870 1.1 christos
3871 1.1 christos func_dirname "$file" "" "."
3872 1.1 christos dir=$func_dirname_result
3873 1.1 christos
3874 1.1 christos if test -f "$dir/$objdir/$dlname"; then
3875 1.1 christos func_append dir "/$objdir"
3876 1.1 christos else
3877 1.1 christos if test ! -f "$dir/$dlname"; then
3878 1.1 christos func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
3879 1.1 christos fi
3880 1.1 christos fi
3881 1.1 christos ;;
3882 1.1 christos
3883 1.1 christos *.lo)
3884 1.1 christos # Just add the directory containing the .lo file.
3885 1.1 christos func_dirname "$file" "" "."
3886 1.1 christos dir=$func_dirname_result
3887 1.1 christos ;;
3888 1.1 christos
3889 1.1 christos *)
3890 1.1 christos func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
3891 1.1 christos continue
3892 1.1 christos ;;
3893 1.1 christos esac
3894 1.1 christos
3895 1.1 christos # Get the absolute pathname.
3896 1.1 christos absdir=`cd "$dir" && pwd`
3897 1.1 christos test -n "$absdir" && dir=$absdir
3898 1.1 christos
3899 1.1 christos # Now add the directory to shlibpath_var.
3900 1.1 christos if eval "test -z \"\$$shlibpath_var\""; then
3901 1.1 christos eval "$shlibpath_var=\"\$dir\""
3902 1.1 christos else
3903 1.1 christos eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
3904 1.1 christos fi
3905 1.1 christos done
3906 1.1 christos
3907 1.1 christos # This variable tells wrapper scripts just to set shlibpath_var
3908 1.1 christos # rather than running their programs.
3909 1.1 christos libtool_execute_magic=$magic
3910 1.1 christos
3911 1.1 christos # Check if any of the arguments is a wrapper script.
3912 1.1 christos args=
3913 1.1 christos for file
3914 1.1 christos do
3915 1.1 christos case $file in
3916 1.1 christos -* | *.la | *.lo ) ;;
3917 1.1 christos *)
3918 1.1 christos # Do a test to see if this is really a libtool program.
3919 1.1 christos if func_ltwrapper_script_p "$file"; then
3920 1.1 christos func_source "$file"
3921 1.1 christos # Transform arg to wrapped name.
3922 1.1 christos file=$progdir/$program
3923 1.1 christos elif func_ltwrapper_executable_p "$file"; then
3924 1.1 christos func_ltwrapper_scriptname "$file"
3925 1.1 christos func_source "$func_ltwrapper_scriptname_result"
3926 1.1 christos # Transform arg to wrapped name.
3927 1.1 christos file=$progdir/$program
3928 1.1 christos fi
3929 1.1 christos ;;
3930 1.1 christos esac
3931 1.1 christos # Quote arguments (to preserve shell metacharacters).
3932 1.1 christos func_append_quoted args "$file"
3933 1.1 christos done
3934 1.1 christos
3935 1.1 christos if $opt_dry_run; then
3936 1.1 christos # Display what would be done.
3937 1.1 christos if test -n "$shlibpath_var"; then
3938 1.1 christos eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
3939 1.1 christos echo "export $shlibpath_var"
3940 1.1 christos fi
3941 1.1 christos $ECHO "$cmd$args"
3942 1.1 christos exit $EXIT_SUCCESS
3943 1.1 christos else
3944 1.1 christos if test -n "$shlibpath_var"; then
3945 1.1 christos # Export the shlibpath_var.
3946 1.1 christos eval "export $shlibpath_var"
3947 1.1 christos fi
3948 1.1 christos
3949 1.1 christos # Restore saved environment variables
3950 1.1 christos for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
3951 1.1 christos do
3952 1.1 christos eval "if test \"\${save_$lt_var+set}\" = set; then
3953 1.1 christos $lt_var=\$save_$lt_var; export $lt_var
3954 1.1 christos else
3955 1.1 christos $lt_unset $lt_var
3956 1.1 christos fi"
3957 1.1 christos done
3958 1.1 christos
3959 1.1 christos # Now prepare to actually exec the command.
3960 1.1 christos exec_cmd=\$cmd$args
3961 1.1 christos fi
3962 1.1 christos }
3963 1.1 christos
3964 1.1 christos test execute = "$opt_mode" && func_mode_execute ${1+"$@"}
3965 1.1 christos
3966 1.1 christos
3967 1.1 christos # func_mode_finish arg...
3968 1.1 christos func_mode_finish ()
3969 1.1 christos {
3970 1.1 christos $debug_cmd
3971 1.1 christos
3972 1.1 christos libs=
3973 1.1 christos libdirs=
3974 1.1 christos admincmds=
3975 1.1 christos
3976 1.1 christos for opt in "$nonopt" ${1+"$@"}
3977 1.1 christos do
3978 1.1 christos if test -d "$opt"; then
3979 1.1 christos func_append libdirs " $opt"
3980 1.1 christos
3981 1.1 christos elif test -f "$opt"; then
3982 1.1 christos if func_lalib_unsafe_p "$opt"; then
3983 1.1 christos func_append libs " $opt"
3984 1.1 christos else
3985 1.1 christos func_warning "'$opt' is not a valid libtool archive"
3986 1.1 christos fi
3987 1.1 christos
3988 1.1 christos else
3989 1.1 christos func_fatal_error "invalid argument '$opt'"
3990 1.1 christos fi
3991 1.1 christos done
3992 1.1 christos
3993 1.1 christos if test -n "$libs"; then
3994 1.1 christos if test -n "$lt_sysroot"; then
3995 1.1 christos sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
3996 1.1 christos sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
3997 1.1 christos else
3998 1.1 christos sysroot_cmd=
3999 1.1 christos fi
4000 1.1 christos
4001 1.1 christos # Remove sysroot references
4002 1.1 christos if $opt_dry_run; then
4003 1.1 christos for lib in $libs; do
4004 1.1 christos echo "removing references to $lt_sysroot and '=' prefixes from $lib"
4005 1.1 christos done
4006 1.1 christos else
4007 1.1 christos tmpdir=`func_mktempdir`
4008 1.1 christos for lib in $libs; do
4009 1.1 christos $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
4010 1.1 christos > $tmpdir/tmp-la
4011 1.1 christos mv -f $tmpdir/tmp-la $lib
4012 1.1 christos done
4013 1.1 christos ${RM}r "$tmpdir"
4014 1.1 christos fi
4015 1.1 christos fi
4016 1.1 christos
4017 1.1 christos if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
4018 1.1 christos for libdir in $libdirs; do
4019 1.1 christos if test -n "$finish_cmds"; then
4020 1.1 christos # Do each command in the finish commands.
4021 1.1 christos func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
4022 1.1 christos '"$cmd"'"'
4023 1.1 christos fi
4024 1.1 christos if test -n "$finish_eval"; then
4025 1.1 christos # Do the single finish_eval.
4026 1.1 christos eval cmds=\"$finish_eval\"
4027 1.1 christos $opt_dry_run || eval "$cmds" || func_append admincmds "
4028 1.1 christos $cmds"
4029 1.1 christos fi
4030 1.1 christos done
4031 1.1 christos fi
4032 1.1 christos
4033 1.1 christos # Exit here if they wanted silent mode.
4034 1.1 christos $opt_quiet && exit $EXIT_SUCCESS
4035 1.1 christos
4036 1.1 christos if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
4037 1.1 christos echo "----------------------------------------------------------------------"
4038 1.1 christos echo "Libraries have been installed in:"
4039 1.1 christos for libdir in $libdirs; do
4040 1.1 christos $ECHO " $libdir"
4041 1.1 christos done
4042 1.1 christos echo
4043 1.1 christos echo "If you ever happen to want to link against installed libraries"
4044 1.1 christos echo "in a given directory, LIBDIR, you must either use libtool, and"
4045 1.1 christos echo "specify the full pathname of the library, or use the '-LLIBDIR'"
4046 1.1 christos echo "flag during linking and do at least one of the following:"
4047 1.1 christos if test -n "$shlibpath_var"; then
4048 1.1 christos echo " - add LIBDIR to the '$shlibpath_var' environment variable"
4049 1.1 christos echo " during execution"
4050 1.1 christos fi
4051 1.1 christos if test -n "$runpath_var"; then
4052 1.1 christos echo " - add LIBDIR to the '$runpath_var' environment variable"
4053 1.1 christos echo " during linking"
4054 1.1 christos fi
4055 1.1 christos if test -n "$hardcode_libdir_flag_spec"; then
4056 1.1 christos libdir=LIBDIR
4057 1.1 christos eval flag=\"$hardcode_libdir_flag_spec\"
4058 1.1 christos
4059 1.1 christos $ECHO " - use the '$flag' linker flag"
4060 1.1 christos fi
4061 1.1 christos if test -n "$admincmds"; then
4062 1.1 christos $ECHO " - have your system administrator run these commands:$admincmds"
4063 1.1 christos fi
4064 1.1 christos if test -f /etc/ld.so.conf; then
4065 1.1 christos echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
4066 1.1 christos fi
4067 1.1 christos echo
4068 1.1 christos
4069 1.1 christos echo "See any operating system documentation about shared libraries for"
4070 1.1 christos case $host in
4071 1.1 christos solaris2.[6789]|solaris2.1[0-9])
4072 1.1 christos echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
4073 1.1 christos echo "pages."
4074 1.1 christos ;;
4075 1.1 christos *)
4076 1.1 christos echo "more information, such as the ld(1) and ld.so(8) manual pages."
4077 1.1 christos ;;
4078 1.1 christos esac
4079 1.1 christos echo "----------------------------------------------------------------------"
4080 1.1 christos fi
4081 1.1 christos exit $EXIT_SUCCESS
4082 1.1 christos }
4083 1.1 christos
4084 1.1 christos test finish = "$opt_mode" && func_mode_finish ${1+"$@"}
4085 1.1 christos
4086 1.1 christos
4087 1.1 christos # func_mode_install arg...
4088 1.1 christos func_mode_install ()
4089 1.1 christos {
4090 1.1 christos $debug_cmd
4091 1.1 christos
4092 1.1 christos # There may be an optional sh(1) argument at the beginning of
4093 1.1 christos # install_prog (especially on Windows NT).
4094 1.1 christos if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
4095 1.1 christos # Allow the use of GNU shtool's install command.
4096 1.1 christos case $nonopt in *shtool*) :;; *) false;; esac
4097 1.1 christos then
4098 1.1 christos # Aesthetically quote it.
4099 1.1 christos func_quote_for_eval "$nonopt"
4100 1.1 christos install_prog="$func_quote_for_eval_result "
4101 1.1 christos arg=$1
4102 1.1 christos shift
4103 1.1 christos else
4104 1.1 christos install_prog=
4105 1.1 christos arg=$nonopt
4106 1.1 christos fi
4107 1.1 christos
4108 1.1 christos # The real first argument should be the name of the installation program.
4109 1.1 christos # Aesthetically quote it.
4110 1.1 christos func_quote_for_eval "$arg"
4111 1.1 christos func_append install_prog "$func_quote_for_eval_result"
4112 1.1 christos install_shared_prog=$install_prog
4113 1.1 christos case " $install_prog " in
4114 1.1 christos *[\\\ /]cp\ *) install_cp=: ;;
4115 1.1 christos *) install_cp=false ;;
4116 1.1 christos esac
4117 1.1 christos
4118 1.1 christos # We need to accept at least all the BSD install flags.
4119 1.1 christos dest=
4120 1.1 christos files=
4121 1.1 christos opts=
4122 1.1 christos prev=
4123 1.1 christos install_type=
4124 1.1 christos isdir=false
4125 1.1 christos stripme=
4126 1.1 christos no_mode=:
4127 1.1 christos for arg
4128 1.1 christos do
4129 1.1 christos arg2=
4130 1.1 christos if test -n "$dest"; then
4131 1.1 christos func_append files " $dest"
4132 1.1 christos dest=$arg
4133 1.1 christos continue
4134 1.1 christos fi
4135 1.1 christos
4136 1.1 christos case $arg in
4137 1.1 christos -d) isdir=: ;;
4138 1.1 christos -f)
4139 1.1 christos if $install_cp; then :; else
4140 1.1 christos prev=$arg
4141 1.1 christos fi
4142 1.1 christos ;;
4143 1.1 christos -g | -m | -o)
4144 1.1 christos prev=$arg
4145 1.1 christos ;;
4146 1.1 christos -s)
4147 1.1 christos stripme=" -s"
4148 1.1 christos continue
4149 1.1 christos ;;
4150 1.1 christos -*)
4151 1.1 christos ;;
4152 1.1 christos *)
4153 1.1 christos # If the previous option needed an argument, then skip it.
4154 1.1 christos if test -n "$prev"; then
4155 1.1 christos if test X-m = "X$prev" && test -n "$install_override_mode"; then
4156 1.1 christos arg2=$install_override_mode
4157 1.1 christos no_mode=false
4158 1.1 christos fi
4159 1.1 christos prev=
4160 1.1 christos else
4161 1.1 christos dest=$arg
4162 1.1 christos continue
4163 1.1 christos fi
4164 1.1 christos ;;
4165 1.1 christos esac
4166 1.1 christos
4167 1.1 christos # Aesthetically quote the argument.
4168 1.1 christos func_quote_for_eval "$arg"
4169 1.1 christos func_append install_prog " $func_quote_for_eval_result"
4170 1.1 christos if test -n "$arg2"; then
4171 1.1 christos func_quote_for_eval "$arg2"
4172 1.1 christos fi
4173 1.1 christos func_append install_shared_prog " $func_quote_for_eval_result"
4174 1.1 christos done
4175 1.1 christos
4176 1.1 christos test -z "$install_prog" && \
4177 1.1 christos func_fatal_help "you must specify an install program"
4178 1.1 christos
4179 1.1 christos test -n "$prev" && \
4180 1.1 christos func_fatal_help "the '$prev' option requires an argument"
4181 1.1 christos
4182 1.1 christos if test -n "$install_override_mode" && $no_mode; then
4183 1.1 christos if $install_cp; then :; else
4184 1.1 christos func_quote_for_eval "$install_override_mode"
4185 1.1 christos func_append install_shared_prog " -m $func_quote_for_eval_result"
4186 1.1 christos fi
4187 1.1 christos fi
4188 1.1 christos
4189 1.1 christos if test -z "$files"; then
4190 1.1 christos if test -z "$dest"; then
4191 1.1 christos func_fatal_help "no file or destination specified"
4192 1.1 christos else
4193 1.1 christos func_fatal_help "you must specify a destination"
4194 1.1 christos fi
4195 1.1 christos fi
4196 1.1 christos
4197 1.1 christos # Strip any trailing slash from the destination.
4198 1.1 christos func_stripname '' '/' "$dest"
4199 1.1 christos dest=$func_stripname_result
4200 1.1 christos
4201 1.1 christos # Check to see that the destination is a directory.
4202 1.1 christos test -d "$dest" && isdir=:
4203 1.1 christos if $isdir; then
4204 1.1 christos destdir=$dest
4205 1.1 christos destname=
4206 1.1 christos else
4207 1.1 christos func_dirname_and_basename "$dest" "" "."
4208 1.1 christos destdir=$func_dirname_result
4209 1.1 christos destname=$func_basename_result
4210 1.1 christos
4211 1.1 christos # Not a directory, so check to see that there is only one file specified.
4212 1.1 christos set dummy $files; shift
4213 1.1 christos test "$#" -gt 1 && \
4214 1.1 christos func_fatal_help "'$dest' is not a directory"
4215 1.1 christos fi
4216 1.1 christos case $destdir in
4217 1.1 christos [\\/]* | [A-Za-z]:[\\/]*) ;;
4218 1.1 christos *)
4219 1.1 christos for file in $files; do
4220 1.1 christos case $file in
4221 1.1 christos *.lo) ;;
4222 1.1 christos *)
4223 1.1 christos func_fatal_help "'$destdir' must be an absolute directory name"
4224 1.1 christos ;;
4225 1.1 christos esac
4226 1.1 christos done
4227 1.1 christos ;;
4228 1.1 christos esac
4229 1.1 christos
4230 1.1 christos # This variable tells wrapper scripts just to set variables rather
4231 1.1 christos # than running their programs.
4232 1.1 christos libtool_install_magic=$magic
4233 1.1 christos
4234 1.1 christos staticlibs=
4235 1.1 christos future_libdirs=
4236 1.1 christos current_libdirs=
4237 1.1 christos for file in $files; do
4238 1.1 christos
4239 1.1 christos # Do each installation.
4240 1.1 christos case $file in
4241 1.1 christos *.$libext)
4242 1.1 christos # Do the static libraries later.
4243 1.1 christos func_append staticlibs " $file"
4244 1.1 christos ;;
4245 1.1 christos
4246 1.1 christos *.la)
4247 1.1 christos func_resolve_sysroot "$file"
4248 1.1 christos file=$func_resolve_sysroot_result
4249 1.1 christos
4250 1.1 christos # Check to see that this really is a libtool archive.
4251 1.1 christos func_lalib_unsafe_p "$file" \
4252 1.1 christos || func_fatal_help "'$file' is not a valid libtool archive"
4253 1.1 christos
4254 1.1 christos library_names=
4255 1.1 christos old_library=
4256 1.1 christos relink_command=
4257 1.1 christos func_source "$file"
4258 1.1 christos
4259 1.1 christos # Add the libdir to current_libdirs if it is the destination.
4260 1.1 christos if test "X$destdir" = "X$libdir"; then
4261 1.1 christos case "$current_libdirs " in
4262 1.1 christos *" $libdir "*) ;;
4263 1.1 christos *) func_append current_libdirs " $libdir" ;;
4264 1.1 christos esac
4265 1.1 christos else
4266 1.1 christos # Note the libdir as a future libdir.
4267 1.1 christos case "$future_libdirs " in
4268 1.1 christos *" $libdir "*) ;;
4269 1.1 christos *) func_append future_libdirs " $libdir" ;;
4270 1.1 christos esac
4271 1.1 christos fi
4272 1.1 christos
4273 1.1 christos func_dirname "$file" "/" ""
4274 1.1 christos dir=$func_dirname_result
4275 1.1 christos func_append dir "$objdir"
4276 1.1 christos
4277 1.1 christos if test -n "$relink_command"; then
4278 1.1 christos # Determine the prefix the user has applied to our future dir.
4279 1.1 christos inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
4280 1.1 christos
4281 1.1 christos # Don't allow the user to place us outside of our expected
4282 1.1 christos # location b/c this prevents finding dependent libraries that
4283 1.1 christos # are installed to the same prefix.
4284 1.1 christos # At present, this check doesn't affect windows .dll's that
4285 1.1 christos # are installed into $libdir/../bin (currently, that works fine)
4286 1.1 christos # but it's something to keep an eye on.
4287 1.1 christos test "$inst_prefix_dir" = "$destdir" && \
4288 1.1 christos func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
4289 1.1 christos
4290 1.1 christos if test -n "$inst_prefix_dir"; then
4291 1.1 christos # Stick the inst_prefix_dir data into the link command.
4292 1.1 christos relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
4293 1.1 christos else
4294 1.1 christos relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
4295 1.1 christos fi
4296 1.1 christos
4297 1.1 christos func_warning "relinking '$file'"
4298 1.1 christos func_show_eval "$relink_command" \
4299 1.1 christos 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
4300 1.1 christos fi
4301 1.1 christos
4302 1.1 christos # See the names of the shared library.
4303 1.1 christos set dummy $library_names; shift
4304 1.1 christos if test -n "$1"; then
4305 1.1 christos realname=$1
4306 1.1 christos shift
4307 1.1 christos
4308 1.1 christos srcname=$realname
4309 1.1 christos test -n "$relink_command" && srcname=${realname}T
4310 1.1 christos
4311 1.1 christos # Install the shared library and build the symlinks.
4312 1.1 christos func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
4313 1.1 christos 'exit $?'
4314 1.1 christos tstripme=$stripme
4315 1.1 christos case $host_os in
4316 1.1 christos cygwin* | mingw* | pw32* | cegcc*)
4317 1.1 christos case $realname in
4318 1.1 christos *.dll.a)
4319 1.1 christos tstripme=
4320 1.1 christos ;;
4321 1.1 christos esac
4322 1.1 christos ;;
4323 1.1 christos os2*)
4324 1.1 christos case $realname in
4325 1.1 christos *_dll.a)
4326 1.1 christos tstripme=
4327 1.1 christos ;;
4328 1.1 christos esac
4329 1.1 christos ;;
4330 1.1 christos esac
4331 1.1 christos if test -n "$tstripme" && test -n "$striplib"; then
4332 1.1 christos func_show_eval "$striplib $destdir/$realname" 'exit $?'
4333 1.1 christos fi
4334 1.1 christos
4335 1.1 christos if test "$#" -gt 0; then
4336 1.1 christos # Delete the old symlinks, and create new ones.
4337 1.1 christos # Try 'ln -sf' first, because the 'ln' binary might depend on
4338 1.1 christos # the symlink we replace! Solaris /bin/ln does not understand -f,
4339 1.1 christos # so we also need to try rm && ln -s.
4340 1.1 christos for linkname
4341 1.1 christos do
4342 1.1 christos test "$linkname" != "$realname" \
4343 1.1 christos && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
4344 1.1 christos done
4345 1.1 christos fi
4346 1.1 christos
4347 1.1 christos # Do each command in the postinstall commands.
4348 1.1 christos lib=$destdir/$realname
4349 1.1 christos func_execute_cmds "$postinstall_cmds" 'exit $?'
4350 1.1 christos fi
4351 1.1 christos
4352 1.1 christos # Install the pseudo-library for information purposes.
4353 1.1 christos func_basename "$file"
4354 1.1 christos name=$func_basename_result
4355 1.1 christos instname=$dir/${name}i
4356 1.1 christos func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
4357 1.1 christos
4358 1.1 christos # Maybe install the static library, too.
4359 1.1 christos test -n "$old_library" && func_append staticlibs " $dir/$old_library"
4360 1.1 christos ;;
4361 1.1 christos
4362 1.1 christos *.lo)
4363 1.1 christos # Install (i.e. copy) a libtool object.
4364 1.1 christos
4365 1.1 christos # Figure out destination file name, if it wasn't already specified.
4366 1.1 christos if test -n "$destname"; then
4367 1.1 christos destfile=$destdir/$destname
4368 1.1 christos else
4369 1.1 christos func_basename "$file"
4370 1.1 christos destfile=$func_basename_result
4371 1.1 christos destfile=$destdir/$destfile
4372 1.1 christos fi
4373 1.1 christos
4374 1.1 christos # Deduce the name of the destination old-style object file.
4375 1.1 christos case $destfile in
4376 1.1 christos *.lo)
4377 1.1 christos func_lo2o "$destfile"
4378 1.1 christos staticdest=$func_lo2o_result
4379 1.1 christos ;;
4380 1.1 christos *.$objext)
4381 1.1 christos staticdest=$destfile
4382 1.1 christos destfile=
4383 1.1 christos ;;
4384 1.1 christos *)
4385 1.1 christos func_fatal_help "cannot copy a libtool object to '$destfile'"
4386 1.1 christos ;;
4387 1.1 christos esac
4388 1.1 christos
4389 1.1 christos # Install the libtool object if requested.
4390 1.1 christos test -n "$destfile" && \
4391 1.1 christos func_show_eval "$install_prog $file $destfile" 'exit $?'
4392 1.1 christos
4393 1.1 christos # Install the old object if enabled.
4394 1.1 christos if test yes = "$build_old_libs"; then
4395 1.1 christos # Deduce the name of the old-style object file.
4396 1.1 christos func_lo2o "$file"
4397 1.1 christos staticobj=$func_lo2o_result
4398 1.1 christos func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
4399 1.1 christos fi
4400 1.1 christos exit $EXIT_SUCCESS
4401 1.1 christos ;;
4402 1.1 christos
4403 1.1 christos *)
4404 1.1 christos # Figure out destination file name, if it wasn't already specified.
4405 1.1 christos if test -n "$destname"; then
4406 1.1 christos destfile=$destdir/$destname
4407 1.1 christos else
4408 1.1 christos func_basename "$file"
4409 1.1 christos destfile=$func_basename_result
4410 1.1 christos destfile=$destdir/$destfile
4411 1.1 christos fi
4412 1.1 christos
4413 1.1 christos # If the file is missing, and there is a .exe on the end, strip it
4414 1.1 christos # because it is most likely a libtool script we actually want to
4415 1.1 christos # install
4416 1.1 christos stripped_ext=
4417 1.1 christos case $file in
4418 1.1 christos *.exe)
4419 1.1 christos if test ! -f "$file"; then
4420 1.1 christos func_stripname '' '.exe' "$file"
4421 1.1 christos file=$func_stripname_result
4422 1.1 christos stripped_ext=.exe
4423 1.1 christos fi
4424 1.1 christos ;;
4425 1.1 christos esac
4426 1.1 christos
4427 1.1 christos # Do a test to see if this is really a libtool program.
4428 1.1 christos case $host in
4429 1.1 christos *cygwin* | *mingw*)
4430 1.1 christos if func_ltwrapper_executable_p "$file"; then
4431 1.1 christos func_ltwrapper_scriptname "$file"
4432 1.1 christos wrapper=$func_ltwrapper_scriptname_result
4433 1.1 christos else
4434 1.1 christos func_stripname '' '.exe' "$file"
4435 1.1 christos wrapper=$func_stripname_result
4436 1.1 christos fi
4437 1.1 christos ;;
4438 1.1 christos *)
4439 1.1 christos wrapper=$file
4440 1.1 christos ;;
4441 1.1 christos esac
4442 1.1 christos if func_ltwrapper_script_p "$wrapper"; then
4443 1.1 christos notinst_deplibs=
4444 1.1 christos relink_command=
4445 1.1 christos
4446 1.1 christos func_source "$wrapper"
4447 1.1 christos
4448 1.1 christos # Check the variables that should have been set.
4449 1.1 christos test -z "$generated_by_libtool_version" && \
4450 1.1 christos func_fatal_error "invalid libtool wrapper script '$wrapper'"
4451 1.1 christos
4452 1.1 christos finalize=:
4453 1.1 christos for lib in $notinst_deplibs; do
4454 1.1 christos # Check to see that each library is installed.
4455 1.1 christos libdir=
4456 1.1 christos if test -f "$lib"; then
4457 1.1 christos func_source "$lib"
4458 1.1 christos fi
4459 1.1 christos libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
4460 1.1 christos if test -n "$libdir" && test ! -f "$libfile"; then
4461 1.1 christos func_warning "'$lib' has not been installed in '$libdir'"
4462 1.1 christos finalize=false
4463 1.1 christos fi
4464 1.1 christos done
4465 1.1 christos
4466 1.1 christos relink_command=
4467 1.1 christos func_source "$wrapper"
4468 1.1 christos
4469 1.1 christos outputname=
4470 1.1 christos if test no = "$fast_install" && test -n "$relink_command"; then
4471 1.1 christos $opt_dry_run || {
4472 1.1 christos if $finalize; then
4473 1.1 christos tmpdir=`func_mktempdir`
4474 1.1 christos func_basename "$file$stripped_ext"
4475 1.1 christos file=$func_basename_result
4476 1.1 christos outputname=$tmpdir/$file
4477 1.1 christos # Replace the output file specification.
4478 1.1 christos relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
4479 1.1 christos
4480 1.1 christos $opt_quiet || {
4481 1.1 christos func_quote_for_expand "$relink_command"
4482 1.1 christos eval "func_echo $func_quote_for_expand_result"
4483 1.1 christos }
4484 1.1 christos if eval "$relink_command"; then :
4485 1.1 christos else
4486 1.1 christos func_error "error: relink '$file' with the above command before installing it"
4487 1.1 christos $opt_dry_run || ${RM}r "$tmpdir"
4488 1.1 christos continue
4489 1.1 christos fi
4490 1.1 christos file=$outputname
4491 1.1 christos else
4492 1.1 christos func_warning "cannot relink '$file'"
4493 1.1 christos fi
4494 1.1 christos }
4495 1.1 christos else
4496 1.1 christos # Install the binary that we compiled earlier.
4497 1.1 christos file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
4498 1.1 christos fi
4499 1.1 christos fi
4500 1.1 christos
4501 1.1 christos # remove .exe since cygwin /usr/bin/install will append another
4502 1.1 christos # one anyway
4503 1.1 christos case $install_prog,$host in
4504 1.1 christos */usr/bin/install*,*cygwin*)
4505 1.1 christos case $file:$destfile in
4506 1.1 christos *.exe:*.exe)
4507 1.1 christos # this is ok
4508 1.1 christos ;;
4509 1.1 christos *.exe:*)
4510 1.1 christos destfile=$destfile.exe
4511 1.1 christos ;;
4512 1.1 christos *:*.exe)
4513 1.1 christos func_stripname '' '.exe' "$destfile"
4514 1.1 christos destfile=$func_stripname_result
4515 1.1 christos ;;
4516 1.1 christos esac
4517 1.1 christos ;;
4518 1.1 christos esac
4519 1.1 christos func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
4520 1.1 christos $opt_dry_run || if test -n "$outputname"; then
4521 1.1 christos ${RM}r "$tmpdir"
4522 1.1 christos fi
4523 1.1 christos ;;
4524 1.1 christos esac
4525 1.1 christos done
4526 1.1 christos
4527 1.1 christos for file in $staticlibs; do
4528 1.1 christos func_basename "$file"
4529 1.1 christos name=$func_basename_result
4530 1.1 christos
4531 1.1 christos # Set up the ranlib parameters.
4532 1.1 christos oldlib=$destdir/$name
4533 1.1 christos func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
4534 1.1 christos tool_oldlib=$func_to_tool_file_result
4535 1.1 christos
4536 1.1 christos func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
4537 1.1 christos
4538 1.1 christos if test -n "$stripme" && test -n "$old_striplib"; then
4539 1.1 christos func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
4540 1.1 christos fi
4541 1.1 christos
4542 1.1 christos # Do each command in the postinstall commands.
4543 1.1 christos func_execute_cmds "$old_postinstall_cmds" 'exit $?'
4544 1.1 christos done
4545 1.1 christos
4546 1.1 christos test -n "$future_libdirs" && \
4547 1.1 christos func_warning "remember to run '$progname --finish$future_libdirs'"
4548 1.1 christos
4549 1.1 christos if test -n "$current_libdirs"; then
4550 1.1 christos # Maybe just do a dry run.
4551 1.1 christos $opt_dry_run && current_libdirs=" -n$current_libdirs"
4552 1.1 christos exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
4553 1.1 christos else
4554 1.1 christos exit $EXIT_SUCCESS
4555 1.1 christos fi
4556 1.1 christos }
4557 1.1 christos
4558 1.1 christos test install = "$opt_mode" && func_mode_install ${1+"$@"}
4559 1.1 christos
4560 1.1 christos
4561 1.1 christos # func_generate_dlsyms outputname originator pic_p
4562 1.1 christos # Extract symbols from dlprefiles and create ${outputname}S.o with
4563 1.1 christos # a dlpreopen symbol table.
4564 1.1 christos func_generate_dlsyms ()
4565 1.1 christos {
4566 1.1 christos $debug_cmd
4567 1.1 christos
4568 1.1 christos my_outputname=$1
4569 1.1 christos my_originator=$2
4570 1.1 christos my_pic_p=${3-false}
4571 1.1 christos my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
4572 1.1 christos my_dlsyms=
4573 1.1 christos
4574 1.1 christos if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
4575 1.1 christos if test -n "$NM" && test -n "$global_symbol_pipe"; then
4576 1.1 christos my_dlsyms=${my_outputname}S.c
4577 1.1 christos else
4578 1.1 christos func_error "not configured to extract global symbols from dlpreopened files"
4579 1.1 christos fi
4580 1.1 christos fi
4581 1.1 christos
4582 1.1 christos if test -n "$my_dlsyms"; then
4583 1.1 christos case $my_dlsyms in
4584 1.1 christos "") ;;
4585 1.1 christos *.c)
4586 1.1 christos # Discover the nlist of each of the dlfiles.
4587 1.1 christos nlist=$output_objdir/$my_outputname.nm
4588 1.1 christos
4589 1.1 christos func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
4590 1.1 christos
4591 1.1 christos # Parse the name list into a source file.
4592 1.1 christos func_verbose "creating $output_objdir/$my_dlsyms"
4593 1.1 christos
4594 1.1 christos $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
4595 1.1 christos /* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
4596 1.1 christos /* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
4597 1.1 christos
4598 1.1 christos #ifdef __cplusplus
4599 1.1 christos extern \"C\" {
4600 1.1 christos #endif
4601 1.1 christos
4602 1.1 christos #if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
4603 1.1 christos #pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
4604 1.1 christos #endif
4605 1.1 christos
4606 1.1 christos /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
4607 1.1 christos #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
4608 1.1 christos /* DATA imports from DLLs on WIN32 can't be const, because runtime
4609 1.1 christos relocations are performed -- see ld's documentation on pseudo-relocs. */
4610 1.1 christos # define LT_DLSYM_CONST
4611 1.1 christos #elif defined __osf__
4612 1.1 christos /* This system does not cope well with relocations in const data. */
4613 1.1 christos # define LT_DLSYM_CONST
4614 1.1 christos #else
4615 1.1 christos # define LT_DLSYM_CONST const
4616 1.1 christos #endif
4617 1.1 christos
4618 1.1 christos #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
4619 1.1 christos
4620 1.1 christos /* External symbol declarations for the compiler. */\
4621 1.1 christos "
4622 1.1 christos
4623 1.1 christos if test yes = "$dlself"; then
4624 1.1 christos func_verbose "generating symbol list for '$output'"
4625 1.1 christos
4626 1.1 christos $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
4627 1.1 christos
4628 1.1 christos # Add our own program objects to the symbol list.
4629 1.1 christos progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
4630 1.1 christos for progfile in $progfiles; do
4631 1.1 christos func_to_tool_file "$progfile" func_convert_file_msys_to_w32
4632 1.1 christos func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
4633 1.1 christos $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
4634 1.1 christos done
4635 1.1 christos
4636 1.1 christos if test -n "$exclude_expsyms"; then
4637 1.1 christos $opt_dry_run || {
4638 1.1 christos eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
4639 1.1 christos eval '$MV "$nlist"T "$nlist"'
4640 1.1 christos }
4641 1.1 christos fi
4642 1.1 christos
4643 1.1 christos if test -n "$export_symbols_regex"; then
4644 1.1 christos $opt_dry_run || {
4645 1.1 christos eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
4646 1.1 christos eval '$MV "$nlist"T "$nlist"'
4647 1.1 christos }
4648 1.1 christos fi
4649 1.1 christos
4650 1.1 christos # Prepare the list of exported symbols
4651 1.1 christos if test -z "$export_symbols"; then
4652 1.1 christos export_symbols=$output_objdir/$outputname.exp
4653 1.1 christos $opt_dry_run || {
4654 1.1 christos $RM $export_symbols
4655 1.1 christos eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
4656 1.1 christos case $host in
4657 1.1 christos *cygwin* | *mingw* | *cegcc* )
4658 1.1 christos eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
4659 1.1 christos eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
4660 1.1 christos ;;
4661 1.1 christos esac
4662 1.1 christos }
4663 1.1 christos else
4664 1.1 christos $opt_dry_run || {
4665 1.1 christos eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
4666 1.1 christos eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
4667 1.1 christos eval '$MV "$nlist"T "$nlist"'
4668 1.1 christos case $host in
4669 1.1 christos *cygwin* | *mingw* | *cegcc* )
4670 1.1 christos eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
4671 1.1 christos eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
4672 1.1 christos ;;
4673 1.1 christos esac
4674 1.1 christos }
4675 1.1 christos fi
4676 1.1 christos fi
4677 1.1 christos
4678 1.1 christos for dlprefile in $dlprefiles; do
4679 1.1 christos func_verbose "extracting global C symbols from '$dlprefile'"
4680 1.1 christos func_basename "$dlprefile"
4681 1.1 christos name=$func_basename_result
4682 1.1 christos case $host in
4683 1.1 christos *cygwin* | *mingw* | *cegcc* )
4684 1.1 christos # if an import library, we need to obtain dlname
4685 1.1 christos if func_win32_import_lib_p "$dlprefile"; then
4686 1.1 christos func_tr_sh "$dlprefile"
4687 1.1 christos eval "curr_lafile=\$libfile_$func_tr_sh_result"
4688 1.1 christos dlprefile_dlbasename=
4689 1.1 christos if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
4690 1.1 christos # Use subshell, to avoid clobbering current variable values
4691 1.1 christos dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
4692 1.1 christos if test -n "$dlprefile_dlname"; then
4693 1.1 christos func_basename "$dlprefile_dlname"
4694 1.1 christos dlprefile_dlbasename=$func_basename_result
4695 1.1 christos else
4696 1.1 christos # no lafile. user explicitly requested -dlpreopen <import library>.
4697 1.1 christos $sharedlib_from_linklib_cmd "$dlprefile"
4698 1.1 christos dlprefile_dlbasename=$sharedlib_from_linklib_result
4699 1.1 christos fi
4700 1.1 christos fi
4701 1.1 christos $opt_dry_run || {
4702 1.1 christos if test -n "$dlprefile_dlbasename"; then
4703 1.1 christos eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
4704 1.1 christos else
4705 1.1 christos func_warning "Could not compute DLL name from $name"
4706 1.1 christos eval '$ECHO ": $name " >> "$nlist"'
4707 1.1 christos fi
4708 1.1 christos func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4709 1.1 christos eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
4710 1.1 christos $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
4711 1.1 christos }
4712 1.1 christos else # not an import lib
4713 1.1 christos $opt_dry_run || {
4714 1.1 christos eval '$ECHO ": $name " >> "$nlist"'
4715 1.1 christos func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4716 1.1 christos eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
4717 1.1 christos }
4718 1.1 christos fi
4719 1.1 christos ;;
4720 1.1 christos *)
4721 1.1 christos $opt_dry_run || {
4722 1.1 christos eval '$ECHO ": $name " >> "$nlist"'
4723 1.1 christos func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4724 1.1 christos eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
4725 1.1 christos }
4726 1.1 christos ;;
4727 1.1 christos esac
4728 1.1 christos done
4729 1.1 christos
4730 1.1 christos $opt_dry_run || {
4731 1.1 christos # Make sure we have at least an empty file.
4732 1.1 christos test -f "$nlist" || : > "$nlist"
4733 1.1 christos
4734 1.1 christos if test -n "$exclude_expsyms"; then
4735 1.1 christos $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
4736 1.1 christos $MV "$nlist"T "$nlist"
4737 1.1 christos fi
4738 1.1 christos
4739 1.1 christos # Try sorting and uniquifying the output.
4740 1.1 christos if $GREP -v "^: " < "$nlist" |
4741 1.1 christos if sort -k 3 </dev/null >/dev/null 2>&1; then
4742 1.1 christos sort -k 3
4743 1.1 christos else
4744 1.1 christos sort +2
4745 1.1 christos fi |
4746 1.1 christos uniq > "$nlist"S; then
4747 1.1 christos :
4748 1.1 christos else
4749 1.1 christos $GREP -v "^: " < "$nlist" > "$nlist"S
4750 1.1 christos fi
4751 1.1 christos
4752 1.1 christos if test -f "$nlist"S; then
4753 1.1 christos eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
4754 1.1 christos else
4755 1.1 christos echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
4756 1.1 christos fi
4757 1.1 christos
4758 1.1 christos func_show_eval '$RM "${nlist}I"'
4759 1.1 christos if test -n "$global_symbol_to_import"; then
4760 1.1 christos eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
4761 1.1 christos fi
4762 1.1 christos
4763 1.1 christos echo >> "$output_objdir/$my_dlsyms" "\
4764 1.1 christos
4765 1.1 christos /* The mapping between symbol names and symbols. */
4766 1.1 christos typedef struct {
4767 1.1 christos const char *name;
4768 1.1 christos void *address;
4769 1.1 christos } lt_dlsymlist;
4770 1.1 christos extern LT_DLSYM_CONST lt_dlsymlist
4771 1.1 christos lt_${my_prefix}_LTX_preloaded_symbols[];\
4772 1.1 christos "
4773 1.1 christos
4774 1.1 christos if test -s "$nlist"I; then
4775 1.1 christos echo >> "$output_objdir/$my_dlsyms" "\
4776 1.1 christos static void lt_syminit(void)
4777 1.1 christos {
4778 1.1 christos LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
4779 1.1 christos for (; symbol->name; ++symbol)
4780 1.1 christos {"
4781 1.1 christos $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
4782 1.1 christos echo >> "$output_objdir/$my_dlsyms" "\
4783 1.1 christos }
4784 1.1 christos }"
4785 1.1 christos fi
4786 1.1 christos echo >> "$output_objdir/$my_dlsyms" "\
4787 1.1 christos LT_DLSYM_CONST lt_dlsymlist
4788 1.1 christos lt_${my_prefix}_LTX_preloaded_symbols[] =
4789 1.1 christos { {\"$my_originator\", (void *) 0},"
4790 1.1 christos
4791 1.1 christos if test -s "$nlist"I; then
4792 1.1 christos echo >> "$output_objdir/$my_dlsyms" "\
4793 1.1 christos {\"@INIT@\", (void *) <_syminit},"
4794 1.1 christos fi
4795 1.1 christos
4796 1.1 christos case $need_lib_prefix in
4797 1.1 christos no)
4798 1.1 christos eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
4799 1.1 christos ;;
4800 1.1 christos *)
4801 1.1 christos eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
4802 1.1 christos ;;
4803 1.1 christos esac
4804 1.1 christos echo >> "$output_objdir/$my_dlsyms" "\
4805 1.1 christos {0, (void *) 0}
4806 1.1 christos };
4807 1.1 christos
4808 1.1 christos /* This works around a problem in FreeBSD linker */
4809 1.1 christos #ifdef FREEBSD_WORKAROUND
4810 1.1 christos static const void *lt_preloaded_setup() {
4811 1.1 christos return lt_${my_prefix}_LTX_preloaded_symbols;
4812 1.1 christos }
4813 1.1 christos #endif
4814 1.1 christos
4815 1.1 christos #ifdef __cplusplus
4816 1.1 christos }
4817 1.1 christos #endif\
4818 1.1 christos "
4819 1.1 christos } # !$opt_dry_run
4820 1.1 christos
4821 1.1 christos pic_flag_for_symtable=
4822 1.1 christos case "$compile_command " in
4823 1.1 christos *" -static "*) ;;
4824 1.1 christos *)
4825 1.1 christos case $host in
4826 1.1 christos # compiling the symbol table file with pic_flag works around
4827 1.1 christos # a FreeBSD bug that causes programs to crash when -lm is
4828 1.1 christos # linked before any other PIC object. But we must not use
4829 1.1 christos # pic_flag when linking with -static. The problem exists in
4830 1.1 christos # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
4831 1.1 christos *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
4832 1.1 christos pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
4833 1.1 christos *-*-hpux*)
4834 1.1 christos pic_flag_for_symtable=" $pic_flag" ;;
4835 1.1 christos *)
4836 1.1 christos $my_pic_p && pic_flag_for_symtable=" $pic_flag"
4837 1.1 christos ;;
4838 1.1 christos esac
4839 1.1 christos ;;
4840 1.1 christos esac
4841 1.1 christos symtab_cflags=
4842 1.1 christos for arg in $LTCFLAGS; do
4843 1.1 christos case $arg in
4844 1.1 christos -pie | -fpie | -fPIE) ;;
4845 1.1 christos *) func_append symtab_cflags " $arg" ;;
4846 1.1 christos esac
4847 1.1 christos done
4848 1.1 christos
4849 1.1 christos # Now compile the dynamic symbol file.
4850 1.1 christos func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
4851 1.1 christos
4852 1.1 christos # Clean up the generated files.
4853 1.1 christos func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
4854 1.1 christos
4855 1.1 christos # Transform the symbol file into the correct name.
4856 1.1 christos symfileobj=$output_objdir/${my_outputname}S.$objext
4857 1.1 christos case $host in
4858 1.1 christos *cygwin* | *mingw* | *cegcc* )
4859 1.1 christos if test -f "$output_objdir/$my_outputname.def"; then
4860 1.1 christos compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
4861 1.1 christos finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
4862 1.1 christos else
4863 1.1 christos compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
4864 1.1 christos finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
4865 1.1 christos fi
4866 1.1 christos ;;
4867 1.1 christos *)
4868 1.1 christos compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
4869 1.1 christos finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
4870 1.1 christos ;;
4871 1.1 christos esac
4872 1.1 christos ;;
4873 1.1 christos *)
4874 1.1 christos func_fatal_error "unknown suffix for '$my_dlsyms'"
4875 1.1 christos ;;
4876 1.1 christos esac
4877 1.1 christos else
4878 1.1 christos # We keep going just in case the user didn't refer to
4879 1.1 christos # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
4880 1.1 christos # really was required.
4881 1.1 christos
4882 1.1 christos # Nullify the symbol file.
4883 1.1 christos compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
4884 1.1 christos finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
4885 1.1 christos fi
4886 1.1 christos }
4887 1.1 christos
4888 1.1 christos # func_cygming_gnu_implib_p ARG
4889 1.1 christos # This predicate returns with zero status (TRUE) if
4890 1.1 christos # ARG is a GNU/binutils-style import library. Returns
4891 1.1 christos # with nonzero status (FALSE) otherwise.
4892 1.1 christos func_cygming_gnu_implib_p ()
4893 1.1 christos {
4894 1.1 christos $debug_cmd
4895 1.1 christos
4896 1.1 christos func_to_tool_file "$1" func_convert_file_msys_to_w32
4897 1.1 christos 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)$'`
4898 1.1 christos test -n "$func_cygming_gnu_implib_tmp"
4899 1.1 christos }
4900 1.1 christos
4901 1.1 christos # func_cygming_ms_implib_p ARG
4902 1.1 christos # This predicate returns with zero status (TRUE) if
4903 1.1 christos # ARG is an MS-style import library. Returns
4904 1.1 christos # with nonzero status (FALSE) otherwise.
4905 1.1 christos func_cygming_ms_implib_p ()
4906 1.1 christos {
4907 1.1 christos $debug_cmd
4908 1.1 christos
4909 1.1 christos func_to_tool_file "$1" func_convert_file_msys_to_w32
4910 1.1 christos func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
4911 1.1 christos test -n "$func_cygming_ms_implib_tmp"
4912 1.1 christos }
4913 1.1 christos
4914 1.1 christos # func_win32_libid arg
4915 1.1 christos # return the library type of file 'arg'
4916 1.1 christos #
4917 1.1 christos # Need a lot of goo to handle *both* DLLs and import libs
4918 1.1 christos # Has to be a shell function in order to 'eat' the argument
4919 1.1 christos # that is supplied when $file_magic_command is called.
4920 1.1 christos # Despite the name, also deal with 64 bit binaries.
4921 1.1 christos func_win32_libid ()
4922 1.1 christos {
4923 1.1 christos $debug_cmd
4924 1.1 christos
4925 1.1 christos win32_libid_type=unknown
4926 1.1 christos win32_fileres=`file -L $1 2>/dev/null`
4927 1.1 christos case $win32_fileres in
4928 1.1 christos *ar\ archive\ import\ library*) # definitely import
4929 1.1 christos win32_libid_type="x86 archive import"
4930 1.1 christos ;;
4931 1.1 christos *ar\ archive*) # could be an import, or static
4932 1.1 christos # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
4933 1.1 christos if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
4934 1.1 christos $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
4935 1.1 christos case $nm_interface in
4936 1.1 christos "MS dumpbin")
4937 1.1 christos if func_cygming_ms_implib_p "$1" ||
4938 1.1 christos func_cygming_gnu_implib_p "$1"
4939 1.1 christos then
4940 1.1 christos win32_nmres=import
4941 1.1 christos else
4942 1.1 christos win32_nmres=
4943 1.1 christos fi
4944 1.1 christos ;;
4945 1.1 christos *)
4946 1.1 christos func_to_tool_file "$1" func_convert_file_msys_to_w32
4947 1.1 christos win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
4948 1.1 christos $SED -n -e '
4949 1.1 christos 1,100{
4950 1.1 christos / I /{
4951 1.1 christos s|.*|import|
4952 1.1 christos p
4953 1.1 christos q
4954 1.1 christos }
4955 1.1 christos }'`
4956 1.1 christos ;;
4957 1.1 christos esac
4958 1.1 christos case $win32_nmres in
4959 1.1 christos import*) win32_libid_type="x86 archive import";;
4960 1.1 christos *) win32_libid_type="x86 archive static";;
4961 1.1 christos esac
4962 1.1 christos fi
4963 1.1 christos ;;
4964 1.1 christos *DLL*)
4965 1.1 christos win32_libid_type="x86 DLL"
4966 1.1 christos ;;
4967 1.1 christos *executable*) # but shell scripts are "executable" too...
4968 1.1 christos case $win32_fileres in
4969 1.1 christos *MS\ Windows\ PE\ Intel*)
4970 1.1 christos win32_libid_type="x86 DLL"
4971 1.1 christos ;;
4972 1.1 christos esac
4973 1.1 christos ;;
4974 1.1 christos esac
4975 1.1 christos $ECHO "$win32_libid_type"
4976 1.1 christos }
4977 1.1 christos
4978 1.1 christos # func_cygming_dll_for_implib ARG
4979 1.1 christos #
4980 1.1 christos # Platform-specific function to extract the
4981 1.1 christos # name of the DLL associated with the specified
4982 1.1 christos # import library ARG.
4983 1.1 christos # Invoked by eval'ing the libtool variable
4984 1.1 christos # $sharedlib_from_linklib_cmd
4985 1.1 christos # Result is available in the variable
4986 1.1 christos # $sharedlib_from_linklib_result
4987 1.1 christos func_cygming_dll_for_implib ()
4988 1.1 christos {
4989 1.1 christos $debug_cmd
4990 1.1 christos
4991 1.1 christos sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
4992 1.1 christos }
4993 1.1 christos
4994 1.1 christos # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
4995 1.1 christos #
4996 1.1 christos # The is the core of a fallback implementation of a
4997 1.1 christos # platform-specific function to extract the name of the
4998 1.1 christos # DLL associated with the specified import library LIBNAME.
4999 1.1 christos #
5000 1.1 christos # SECTION_NAME is either .idata$6 or .idata$7, depending
5001 1.1 christos # on the platform and compiler that created the implib.
5002 1.1 christos #
5003 1.1 christos # Echos the name of the DLL associated with the
5004 1.1 christos # specified import library.
5005 1.1 christos func_cygming_dll_for_implib_fallback_core ()
5006 1.1 christos {
5007 1.1 christos $debug_cmd
5008 1.1 christos
5009 1.1 christos match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
5010 1.1 christos $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
5011 1.1 christos $SED '/^Contents of section '"$match_literal"':/{
5012 1.1 christos # Place marker at beginning of archive member dllname section
5013 1.1 christos s/.*/====MARK====/
5014 1.1 christos p
5015 1.1 christos d
5016 1.1 christos }
5017 1.1 christos # These lines can sometimes be longer than 43 characters, but
5018 1.1 christos # are always uninteresting
5019 1.1 christos /:[ ]*file format pe[i]\{,1\}-/d
5020 1.1 christos /^In archive [^:]*:/d
5021 1.1 christos # Ensure marker is printed
5022 1.1 christos /^====MARK====/p
5023 1.1 christos # Remove all lines with less than 43 characters
5024 1.1 christos /^.\{43\}/!d
5025 1.1 christos # From remaining lines, remove first 43 characters
5026 1.1 christos s/^.\{43\}//' |
5027 1.1 christos $SED -n '
5028 1.1 christos # Join marker and all lines until next marker into a single line
5029 1.1 christos /^====MARK====/ b para
5030 1.1 christos H
5031 1.1 christos $ b para
5032 1.1 christos b
5033 1.1 christos :para
5034 1.1 christos x
5035 1.1 christos s/\n//g
5036 1.1 christos # Remove the marker
5037 1.1 christos s/^====MARK====//
5038 1.1 christos # Remove trailing dots and whitespace
5039 1.1 christos s/[\. \t]*$//
5040 1.1 christos # Print
5041 1.1 christos /./p' |
5042 1.1 christos # we now have a list, one entry per line, of the stringified
5043 1.1 christos # contents of the appropriate section of all members of the
5044 1.1 christos # archive that possess that section. Heuristic: eliminate
5045 1.1 christos # all those that have a first or second character that is
5046 1.1 christos # a '.' (that is, objdump's representation of an unprintable
5047 1.1 christos # character.) This should work for all archives with less than
5048 1.1 christos # 0x302f exports -- but will fail for DLLs whose name actually
5049 1.1 christos # begins with a literal '.' or a single character followed by
5050 1.1 christos # a '.'.
5051 1.1 christos #
5052 1.1 christos # Of those that remain, print the first one.
5053 1.1 christos $SED -e '/^\./d;/^.\./d;q'
5054 1.1 christos }
5055 1.1 christos
5056 1.1 christos # func_cygming_dll_for_implib_fallback ARG
5057 1.1 christos # Platform-specific function to extract the
5058 1.1 christos # name of the DLL associated with the specified
5059 1.1 christos # import library ARG.
5060 1.1 christos #
5061 1.1 christos # This fallback implementation is for use when $DLLTOOL
5062 1.1 christos # does not support the --identify-strict option.
5063 1.1 christos # Invoked by eval'ing the libtool variable
5064 1.1 christos # $sharedlib_from_linklib_cmd
5065 1.1 christos # Result is available in the variable
5066 1.1 christos # $sharedlib_from_linklib_result
5067 1.1 christos func_cygming_dll_for_implib_fallback ()
5068 1.1 christos {
5069 1.1 christos $debug_cmd
5070 1.1 christos
5071 1.1 christos if func_cygming_gnu_implib_p "$1"; then
5072 1.1 christos # binutils import library
5073 1.1 christos sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
5074 1.1 christos elif func_cygming_ms_implib_p "$1"; then
5075 1.1 christos # ms-generated import library
5076 1.1 christos sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
5077 1.1 christos else
5078 1.1 christos # unknown
5079 1.1 christos sharedlib_from_linklib_result=
5080 1.1 christos fi
5081 1.1 christos }
5082 1.1 christos
5083 1.1 christos
5084 1.1 christos # func_extract_an_archive dir oldlib
5085 1.1 christos func_extract_an_archive ()
5086 1.1 christos {
5087 1.1 christos $debug_cmd
5088 1.1 christos
5089 1.1 christos f_ex_an_ar_dir=$1; shift
5090 1.1 christos f_ex_an_ar_oldlib=$1
5091 1.1 christos if test yes = "$lock_old_archive_extraction"; then
5092 1.1 christos lockfile=$f_ex_an_ar_oldlib.lock
5093 1.1 christos until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
5094 1.1 christos func_echo "Waiting for $lockfile to be removed"
5095 1.1 christos sleep 2
5096 1.1 christos done
5097 1.1 christos fi
5098 1.1 christos func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
5099 1.1 christos 'stat=$?; rm -f "$lockfile"; exit $stat'
5100 1.1 christos if test yes = "$lock_old_archive_extraction"; then
5101 1.1 christos $opt_dry_run || rm -f "$lockfile"
5102 1.1 christos fi
5103 1.1 christos if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
5104 1.1 christos :
5105 1.1 christos else
5106 1.1 christos func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
5107 1.1 christos fi
5108 1.1 christos }
5109 1.1 christos
5110 1.1 christos
5111 1.1 christos # func_extract_archives gentop oldlib ...
5112 1.1 christos func_extract_archives ()
5113 1.1 christos {
5114 1.1 christos $debug_cmd
5115 1.1 christos
5116 1.1 christos my_gentop=$1; shift
5117 1.1 christos my_oldlibs=${1+"$@"}
5118 1.1 christos my_oldobjs=
5119 1.1 christos my_xlib=
5120 1.1 christos my_xabs=
5121 1.1 christos my_xdir=
5122 1.1 christos
5123 1.1 christos for my_xlib in $my_oldlibs; do
5124 1.1 christos # Extract the objects.
5125 1.1 christos case $my_xlib in
5126 1.1 christos [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
5127 1.1 christos *) my_xabs=`pwd`"/$my_xlib" ;;
5128 1.1 christos esac
5129 1.1 christos func_basename "$my_xlib"
5130 1.1 christos my_xlib=$func_basename_result
5131 1.1 christos my_xlib_u=$my_xlib
5132 1.1 christos while :; do
5133 1.1 christos case " $extracted_archives " in
5134 1.1 christos *" $my_xlib_u "*)
5135 1.1 christos func_arith $extracted_serial + 1
5136 1.1 christos extracted_serial=$func_arith_result
5137 1.1 christos my_xlib_u=lt$extracted_serial-$my_xlib ;;
5138 1.1 christos *) break ;;
5139 1.1 christos esac
5140 1.1 christos done
5141 1.1 christos extracted_archives="$extracted_archives $my_xlib_u"
5142 1.1 christos my_xdir=$my_gentop/$my_xlib_u
5143 1.1 christos
5144 1.1 christos func_mkdir_p "$my_xdir"
5145 1.1 christos
5146 1.1 christos case $host in
5147 1.1 christos *-darwin*)
5148 1.1 christos func_verbose "Extracting $my_xabs"
5149 1.1 christos # Do not bother doing anything if just a dry run
5150 1.1 christos $opt_dry_run || {
5151 1.1 christos darwin_orig_dir=`pwd`
5152 1.1 christos cd $my_xdir || exit $?
5153 1.1 christos darwin_archive=$my_xabs
5154 1.1 christos darwin_curdir=`pwd`
5155 1.1 christos func_basename "$darwin_archive"
5156 1.1 christos darwin_base_archive=$func_basename_result
5157 1.1 christos darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
5158 1.1 christos if test -n "$darwin_arches"; then
5159 1.1 christos darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
5160 1.1 christos darwin_arch=
5161 1.1 christos func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
5162 1.1 christos for darwin_arch in $darwin_arches; do
5163 1.1 christos func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
5164 1.1 christos $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
5165 1.1 christos cd "unfat-$$/$darwin_base_archive-$darwin_arch"
5166 1.1 christos func_extract_an_archive "`pwd`" "$darwin_base_archive"
5167 1.1 christos cd "$darwin_curdir"
5168 1.1 christos $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
5169 1.1 christos done # $darwin_arches
5170 1.1 christos ## Okay now we've a bunch of thin objects, gotta fatten them up :)
5171 1.1 christos darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
5172 1.1 christos darwin_file=
5173 1.1 christos darwin_files=
5174 1.1 christos for darwin_file in $darwin_filelist; do
5175 1.1 christos darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
5176 1.1 christos $LIPO -create -output "$darwin_file" $darwin_files
5177 1.1 christos done # $darwin_filelist
5178 1.1 christos $RM -rf unfat-$$
5179 1.1 christos cd "$darwin_orig_dir"
5180 1.1 christos else
5181 1.1 christos cd $darwin_orig_dir
5182 1.1 christos func_extract_an_archive "$my_xdir" "$my_xabs"
5183 1.1 christos fi # $darwin_arches
5184 1.1 christos } # !$opt_dry_run
5185 1.1 christos ;;
5186 1.1 christos *)
5187 1.1 christos func_extract_an_archive "$my_xdir" "$my_xabs"
5188 1.1 christos ;;
5189 1.1 christos esac
5190 1.1 christos my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
5191 1.1 christos done
5192 1.1 christos
5193 1.1 christos func_extract_archives_result=$my_oldobjs
5194 1.1 christos }
5195 1.1 christos
5196 1.1 christos
5197 1.1 christos # func_emit_wrapper [arg=no]
5198 1.1 christos #
5199 1.1 christos # Emit a libtool wrapper script on stdout.
5200 1.1 christos # Don't directly open a file because we may want to
5201 1.1 christos # incorporate the script contents within a cygwin/mingw
5202 1.1 christos # wrapper executable. Must ONLY be called from within
5203 1.1 christos # func_mode_link because it depends on a number of variables
5204 1.1 christos # set therein.
5205 1.1 christos #
5206 1.1 christos # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
5207 1.1 christos # variable will take. If 'yes', then the emitted script
5208 1.1 christos # will assume that the directory where it is stored is
5209 1.1 christos # the $objdir directory. This is a cygwin/mingw-specific
5210 1.1 christos # behavior.
5211 1.1 christos func_emit_wrapper ()
5212 1.1 christos {
5213 1.1 christos func_emit_wrapper_arg1=${1-no}
5214 1.1 christos
5215 1.1 christos $ECHO "\
5216 1.1 christos #! $SHELL
5217 1.1 christos
5218 1.1 christos # $output - temporary wrapper script for $objdir/$outputname
5219 1.1 christos # Generated by $PROGRAM (GNU $PACKAGE) $VERSION
5220 1.1 christos #
5221 1.1 christos # The $output program cannot be directly executed until all the libtool
5222 1.1 christos # libraries that it depends on are installed.
5223 1.1 christos #
5224 1.1 christos # This wrapper script should never be moved out of the build directory.
5225 1.1 christos # If it is, it will not operate correctly.
5226 1.1 christos
5227 1.1 christos # Sed substitution that helps us do robust quoting. It backslashifies
5228 1.1 christos # metacharacters that are still active within double-quoted strings.
5229 1.1 christos sed_quote_subst='$sed_quote_subst'
5230 1.1 christos
5231 1.1 christos # Be Bourne compatible
5232 1.1 christos if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
5233 1.1 christos emulate sh
5234 1.1 christos NULLCMD=:
5235 1.1 christos # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
5236 1.1 christos # is contrary to our usage. Disable this feature.
5237 1.1 christos alias -g '\${1+\"\$@\"}'='\"\$@\"'
5238 1.1 christos setopt NO_GLOB_SUBST
5239 1.1 christos else
5240 1.1 christos case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
5241 1.1 christos fi
5242 1.1 christos BIN_SH=xpg4; export BIN_SH # for Tru64
5243 1.1 christos DUALCASE=1; export DUALCASE # for MKS sh
5244 1.1 christos
5245 1.1 christos # The HP-UX ksh and POSIX shell print the target directory to stdout
5246 1.1 christos # if CDPATH is set.
5247 1.1 christos (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
5248 1.1 christos
5249 1.1 christos relink_command=\"$relink_command\"
5250 1.1 christos
5251 1.1 christos # This environment variable determines our operation mode.
5252 1.1 christos if test \"\$libtool_install_magic\" = \"$magic\"; then
5253 1.1 christos # install mode needs the following variables:
5254 1.1 christos generated_by_libtool_version='$macro_version'
5255 1.1 christos notinst_deplibs='$notinst_deplibs'
5256 1.1 christos else
5257 1.1 christos # When we are sourced in execute mode, \$file and \$ECHO are already set.
5258 1.1 christos if test \"\$libtool_execute_magic\" != \"$magic\"; then
5259 1.1 christos file=\"\$0\""
5260 1.1 christos
5261 1.1 christos qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
5262 1.1 christos $ECHO "\
5263 1.1 christos
5264 1.1 christos # A function that is used when there is no print builtin or printf.
5265 1.1 christos func_fallback_echo ()
5266 1.1 christos {
5267 1.1 christos eval 'cat <<_LTECHO_EOF
5268 1.1 christos \$1
5269 1.1 christos _LTECHO_EOF'
5270 1.1 christos }
5271 1.1 christos ECHO=\"$qECHO\"
5272 1.1 christos fi
5273 1.1 christos
5274 1.1 christos # Very basic option parsing. These options are (a) specific to
5275 1.1 christos # the libtool wrapper, (b) are identical between the wrapper
5276 1.1 christos # /script/ and the wrapper /executable/ that is used only on
5277 1.1 christos # windows platforms, and (c) all begin with the string "--lt-"
5278 1.1 christos # (application programs are unlikely to have options that match
5279 1.1 christos # this pattern).
5280 1.1 christos #
5281 1.1 christos # There are only two supported options: --lt-debug and
5282 1.1 christos # --lt-dump-script. There is, deliberately, no --lt-help.
5283 1.1 christos #
5284 1.1 christos # The first argument to this parsing function should be the
5285 1.1 christos # script's $0 value, followed by "$@".
5286 1.1 christos lt_option_debug=
5287 1.1 christos func_parse_lt_options ()
5288 1.1 christos {
5289 1.1 christos lt_script_arg0=\$0
5290 1.1 christos shift
5291 1.1 christos for lt_opt
5292 1.1 christos do
5293 1.1 christos case \"\$lt_opt\" in
5294 1.1 christos --lt-debug) lt_option_debug=1 ;;
5295 1.1 christos --lt-dump-script)
5296 1.1 christos lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
5297 1.1 christos test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
5298 1.1 christos lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
5299 1.1 christos cat \"\$lt_dump_D/\$lt_dump_F\"
5300 1.1 christos exit 0
5301 1.1 christos ;;
5302 1.1 christos --lt-*)
5303 1.1 christos \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
5304 1.1 christos exit 1
5305 1.1 christos ;;
5306 1.1 christos esac
5307 1.1 christos done
5308 1.1 christos
5309 1.1 christos # Print the debug banner immediately:
5310 1.1 christos if test -n \"\$lt_option_debug\"; then
5311 1.1 christos echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
5312 1.1 christos fi
5313 1.1 christos }
5314 1.1 christos
5315 1.1 christos # Used when --lt-debug. Prints its arguments to stdout
5316 1.1 christos # (redirection is the responsibility of the caller)
5317 1.1 christos func_lt_dump_args ()
5318 1.1 christos {
5319 1.1 christos lt_dump_args_N=1;
5320 1.1 christos for lt_arg
5321 1.1 christos do
5322 1.1 christos \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
5323 1.1 christos lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
5324 1.1 christos done
5325 1.1 christos }
5326 1.1 christos
5327 1.1 christos # Core function for launching the target application
5328 1.1 christos func_exec_program_core ()
5329 1.1 christos {
5330 1.1 christos "
5331 1.1 christos case $host in
5332 1.1 christos # Backslashes separate directories on plain windows
5333 1.1 christos *-*-mingw | *-*-os2* | *-cegcc*)
5334 1.1 christos $ECHO "\
5335 1.1 christos if test -n \"\$lt_option_debug\"; then
5336 1.1 christos \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
5337 1.1 christos func_lt_dump_args \${1+\"\$@\"} 1>&2
5338 1.1 christos fi
5339 1.1 christos exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
5340 1.1 christos "
5341 1.1 christos ;;
5342 1.1 christos
5343 1.1 christos *)
5344 1.1 christos $ECHO "\
5345 1.1 christos if test -n \"\$lt_option_debug\"; then
5346 1.1 christos \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
5347 1.1 christos func_lt_dump_args \${1+\"\$@\"} 1>&2
5348 1.1 christos fi
5349 1.1 christos exec \"\$progdir/\$program\" \${1+\"\$@\"}
5350 1.1 christos "
5351 1.1 christos ;;
5352 1.1 christos esac
5353 1.1 christos $ECHO "\
5354 1.1 christos \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
5355 1.1 christos exit 1
5356 1.1 christos }
5357 1.1 christos
5358 1.1 christos # A function to encapsulate launching the target application
5359 1.1 christos # Strips options in the --lt-* namespace from \$@ and
5360 1.1 christos # launches target application with the remaining arguments.
5361 1.1 christos func_exec_program ()
5362 1.1 christos {
5363 1.1 christos case \" \$* \" in
5364 1.1 christos *\\ --lt-*)
5365 1.1 christos for lt_wr_arg
5366 1.1 christos do
5367 1.1 christos case \$lt_wr_arg in
5368 1.1 christos --lt-*) ;;
5369 1.1 christos *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
5370 1.1 christos esac
5371 1.1 christos shift
5372 1.1 christos done ;;
5373 1.1 christos esac
5374 1.1 christos func_exec_program_core \${1+\"\$@\"}
5375 1.1 christos }
5376 1.1 christos
5377 1.1 christos # Parse options
5378 1.1 christos func_parse_lt_options \"\$0\" \${1+\"\$@\"}
5379 1.1 christos
5380 1.1 christos # Find the directory that this script lives in.
5381 1.1 christos thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
5382 1.1 christos test \"x\$thisdir\" = \"x\$file\" && thisdir=.
5383 1.1 christos
5384 1.1 christos # Follow symbolic links until we get to the real thisdir.
5385 1.1 christos file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
5386 1.1 christos while test -n \"\$file\"; do
5387 1.1 christos destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
5388 1.1 christos
5389 1.1 christos # If there was a directory component, then change thisdir.
5390 1.1 christos if test \"x\$destdir\" != \"x\$file\"; then
5391 1.1 christos case \"\$destdir\" in
5392 1.1 christos [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
5393 1.1 christos *) thisdir=\"\$thisdir/\$destdir\" ;;
5394 1.1 christos esac
5395 1.1 christos fi
5396 1.1 christos
5397 1.1 christos file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
5398 1.1 christos file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
5399 1.1 christos done
5400 1.1 christos
5401 1.1 christos # Usually 'no', except on cygwin/mingw when embedded into
5402 1.1 christos # the cwrapper.
5403 1.1 christos WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
5404 1.1 christos if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
5405 1.1 christos # special case for '.'
5406 1.1 christos if test \"\$thisdir\" = \".\"; then
5407 1.1 christos thisdir=\`pwd\`
5408 1.1 christos fi
5409 1.1 christos # remove .libs from thisdir
5410 1.1 christos case \"\$thisdir\" in
5411 1.1 christos *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
5412 1.1 christos $objdir ) thisdir=. ;;
5413 1.1 christos esac
5414 1.1 christos fi
5415 1.1 christos
5416 1.1 christos # Try to get the absolute directory name.
5417 1.1 christos absdir=\`cd \"\$thisdir\" && pwd\`
5418 1.1 christos test -n \"\$absdir\" && thisdir=\"\$absdir\"
5419 1.1 christos "
5420 1.1 christos
5421 1.1 christos if test yes = "$fast_install"; then
5422 1.1 christos $ECHO "\
5423 1.1 christos program=lt-'$outputname'$exeext
5424 1.1 christos progdir=\"\$thisdir/$objdir\"
5425 1.1 christos
5426 1.1 christos if test ! -f \"\$progdir/\$program\" ||
5427 1.1 christos { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
5428 1.1 christos test \"X\$file\" != \"X\$progdir/\$program\"; }; then
5429 1.1 christos
5430 1.1 christos file=\"\$\$-\$program\"
5431 1.1 christos
5432 1.1 christos if test ! -d \"\$progdir\"; then
5433 1.1 christos $MKDIR \"\$progdir\"
5434 1.1 christos else
5435 1.1 christos $RM \"\$progdir/\$file\"
5436 1.1 christos fi"
5437 1.1 christos
5438 1.1 christos $ECHO "\
5439 1.1 christos
5440 1.1 christos # relink executable if necessary
5441 1.1 christos if test -n \"\$relink_command\"; then
5442 1.1 christos if relink_command_output=\`eval \$relink_command 2>&1\`; then :
5443 1.1 christos else
5444 1.1 christos \$ECHO \"\$relink_command_output\" >&2
5445 1.1 christos $RM \"\$progdir/\$file\"
5446 1.1 christos exit 1
5447 1.1 christos fi
5448 1.1 christos fi
5449 1.1 christos
5450 1.1 christos $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
5451 1.1 christos { $RM \"\$progdir/\$program\";
5452 1.1 christos $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
5453 1.1 christos $RM \"\$progdir/\$file\"
5454 1.1 christos fi"
5455 1.1 christos else
5456 1.1 christos $ECHO "\
5457 1.1 christos program='$outputname'
5458 1.1 christos progdir=\"\$thisdir/$objdir\"
5459 1.1 christos "
5460 1.1 christos fi
5461 1.1 christos
5462 1.1 christos $ECHO "\
5463 1.1 christos
5464 1.1 christos if test -f \"\$progdir/\$program\"; then"
5465 1.1 christos
5466 1.1 christos # fixup the dll searchpath if we need to.
5467 1.1 christos #
5468 1.1 christos # Fix the DLL searchpath if we need to. Do this before prepending
5469 1.1 christos # to shlibpath, because on Windows, both are PATH and uninstalled
5470 1.1 christos # libraries must come first.
5471 1.1 christos if test -n "$dllsearchpath"; then
5472 1.1 christos $ECHO "\
5473 1.1 christos # Add the dll search path components to the executable PATH
5474 1.1 christos PATH=$dllsearchpath:\$PATH
5475 1.1 christos "
5476 1.1 christos fi
5477 1.1 christos
5478 1.1 christos # Export our shlibpath_var if we have one.
5479 1.1 christos if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
5480 1.1 christos $ECHO "\
5481 1.1 christos # Add our own library path to $shlibpath_var
5482 1.1 christos $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
5483 1.1 christos
5484 1.1 christos # Some systems cannot cope with colon-terminated $shlibpath_var
5485 1.1 christos # The second colon is a workaround for a bug in BeOS R4 sed
5486 1.1 christos $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
5487 1.1 christos
5488 1.1 christos export $shlibpath_var
5489 1.1 christos "
5490 1.1 christos fi
5491 1.1 christos
5492 1.1 christos $ECHO "\
5493 1.1 christos if test \"\$libtool_execute_magic\" != \"$magic\"; then
5494 1.1 christos # Run the actual program with our arguments.
5495 1.1 christos func_exec_program \${1+\"\$@\"}
5496 1.1 christos fi
5497 1.1 christos else
5498 1.1 christos # The program doesn't exist.
5499 1.1 christos \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
5500 1.1 christos \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
5501 1.1 christos \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
5502 1.1 christos exit 1
5503 1.1 christos fi
5504 1.1 christos fi\
5505 1.1 christos "
5506 1.1 christos }
5507 1.1 christos
5508 1.1 christos
5509 1.1 christos # func_emit_cwrapperexe_src
5510 1.1 christos # emit the source code for a wrapper executable on stdout
5511 1.1 christos # Must ONLY be called from within func_mode_link because
5512 1.1 christos # it depends on a number of variable set therein.
5513 1.1 christos func_emit_cwrapperexe_src ()
5514 1.1 christos {
5515 1.1 christos cat <<EOF
5516 1.1 christos
5517 1.1 christos /* $cwrappersource - temporary wrapper executable for $objdir/$outputname
5518 1.1 christos Generated by $PROGRAM (GNU $PACKAGE) $VERSION
5519 1.1 christos
5520 1.1 christos The $output program cannot be directly executed until all the libtool
5521 1.1 christos libraries that it depends on are installed.
5522 1.1 christos
5523 1.1 christos This wrapper executable should never be moved out of the build directory.
5524 1.1 christos If it is, it will not operate correctly.
5525 1.1 christos */
5526 1.1 christos EOF
5527 1.1 christos cat <<"EOF"
5528 1.1 christos #ifdef _MSC_VER
5529 1.1 christos # define _CRT_SECURE_NO_DEPRECATE 1
5530 1.1 christos #endif
5531 1.1 christos #include <stdio.h>
5532 1.1 christos #include <stdlib.h>
5533 1.1 christos #ifdef _MSC_VER
5534 1.1 christos # include <direct.h>
5535 1.1 christos # include <process.h>
5536 1.1 christos # include <io.h>
5537 1.1 christos #else
5538 1.1 christos # include <unistd.h>
5539 1.1 christos # include <stdint.h>
5540 1.1 christos # ifdef __CYGWIN__
5541 1.1 christos # include <io.h>
5542 1.1 christos # endif
5543 1.1 christos #endif
5544 1.1 christos #include <malloc.h>
5545 1.1 christos #include <stdarg.h>
5546 1.1 christos #include <assert.h>
5547 1.1 christos #include <string.h>
5548 1.1 christos #include <ctype.h>
5549 1.1 christos #include <errno.h>
5550 1.1 christos #include <fcntl.h>
5551 1.1 christos #include <sys/stat.h>
5552 1.1 christos
5553 1.1 christos #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
5554 1.1 christos
5555 1.1 christos /* declarations of non-ANSI functions */
5556 1.1 christos #if defined __MINGW32__
5557 1.1 christos # ifdef __STRICT_ANSI__
5558 1.1 christos int _putenv (const char *);
5559 1.1 christos # endif
5560 1.1 christos #elif defined __CYGWIN__
5561 1.1 christos # ifdef __STRICT_ANSI__
5562 1.1 christos char *realpath (const char *, char *);
5563 1.1 christos int putenv (char *);
5564 1.1 christos int setenv (const char *, const char *, int);
5565 1.1 christos # endif
5566 1.1 christos /* #elif defined other_platform || defined ... */
5567 1.1 christos #endif
5568 1.1 christos
5569 1.1 christos /* portability defines, excluding path handling macros */
5570 1.1 christos #if defined _MSC_VER
5571 1.1 christos # define setmode _setmode
5572 1.1 christos # define stat _stat
5573 1.1 christos # define chmod _chmod
5574 1.1 christos # define getcwd _getcwd
5575 1.1 christos # define putenv _putenv
5576 1.1 christos # define S_IXUSR _S_IEXEC
5577 1.1 christos #elif defined __MINGW32__
5578 1.1 christos # define setmode _setmode
5579 1.1 christos # define stat _stat
5580 1.1 christos # define chmod _chmod
5581 1.1 christos # define getcwd _getcwd
5582 1.1 christos # define putenv _putenv
5583 1.1 christos #elif defined __CYGWIN__
5584 1.1 christos # define HAVE_SETENV
5585 1.1 christos # define FOPEN_WB "wb"
5586 1.1 christos /* #elif defined other platforms ... */
5587 1.1 christos #endif
5588 1.1 christos
5589 1.1 christos #if defined PATH_MAX
5590 1.1 christos # define LT_PATHMAX PATH_MAX
5591 1.1 christos #elif defined MAXPATHLEN
5592 1.1 christos # define LT_PATHMAX MAXPATHLEN
5593 1.1 christos #else
5594 1.1 christos # define LT_PATHMAX 1024
5595 1.1 christos #endif
5596 1.1 christos
5597 1.1 christos #ifndef S_IXOTH
5598 1.1 christos # define S_IXOTH 0
5599 1.1 christos #endif
5600 1.1 christos #ifndef S_IXGRP
5601 1.1 christos # define S_IXGRP 0
5602 1.1 christos #endif
5603 1.1 christos
5604 1.1 christos /* path handling portability macros */
5605 1.1 christos #ifndef DIR_SEPARATOR
5606 1.1 christos # define DIR_SEPARATOR '/'
5607 1.1 christos # define PATH_SEPARATOR ':'
5608 1.1 christos #endif
5609 1.1 christos
5610 1.1 christos #if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
5611 1.1 christos defined __OS2__
5612 1.1 christos # define HAVE_DOS_BASED_FILE_SYSTEM
5613 1.1 christos # define FOPEN_WB "wb"
5614 1.1 christos # ifndef DIR_SEPARATOR_2
5615 1.1 christos # define DIR_SEPARATOR_2 '\\'
5616 1.1 christos # endif
5617 1.1 christos # ifndef PATH_SEPARATOR_2
5618 1.1 christos # define PATH_SEPARATOR_2 ';'
5619 1.1 christos # endif
5620 1.1 christos #endif
5621 1.1 christos
5622 1.1 christos #ifndef DIR_SEPARATOR_2
5623 1.1 christos # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
5624 1.1 christos #else /* DIR_SEPARATOR_2 */
5625 1.1 christos # define IS_DIR_SEPARATOR(ch) \
5626 1.1 christos (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
5627 1.1 christos #endif /* DIR_SEPARATOR_2 */
5628 1.1 christos
5629 1.1 christos #ifndef PATH_SEPARATOR_2
5630 1.1 christos # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
5631 1.1 christos #else /* PATH_SEPARATOR_2 */
5632 1.1 christos # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
5633 1.1 christos #endif /* PATH_SEPARATOR_2 */
5634 1.1 christos
5635 1.1 christos #ifndef FOPEN_WB
5636 1.1 christos # define FOPEN_WB "w"
5637 1.1 christos #endif
5638 1.1 christos #ifndef _O_BINARY
5639 1.1 christos # define _O_BINARY 0
5640 1.1 christos #endif
5641 1.1 christos
5642 1.1 christos #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
5643 1.1 christos #define XFREE(stale) do { \
5644 1.1 christos if (stale) { free (stale); stale = 0; } \
5645 1.1 christos } while (0)
5646 1.1 christos
5647 1.1 christos #if defined LT_DEBUGWRAPPER
5648 1.1 christos static int lt_debug = 1;
5649 1.1 christos #else
5650 1.1 christos static int lt_debug = 0;
5651 1.1 christos #endif
5652 1.1 christos
5653 1.1 christos const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
5654 1.1 christos
5655 1.1 christos void *xmalloc (size_t num);
5656 1.1 christos char *xstrdup (const char *string);
5657 1.1 christos const char *base_name (const char *name);
5658 1.1 christos char *find_executable (const char *wrapper);
5659 1.1 christos char *chase_symlinks (const char *pathspec);
5660 1.1 christos int make_executable (const char *path);
5661 1.1 christos int check_executable (const char *path);
5662 1.1 christos char *strendzap (char *str, const char *pat);
5663 1.1 christos void lt_debugprintf (const char *file, int line, const char *fmt, ...);
5664 1.1 christos void lt_fatal (const char *file, int line, const char *message, ...);
5665 1.1 christos static const char *nonnull (const char *s);
5666 1.1 christos static const char *nonempty (const char *s);
5667 1.1 christos void lt_setenv (const char *name, const char *value);
5668 1.1 christos char *lt_extend_str (const char *orig_value, const char *add, int to_end);
5669 1.1 christos void lt_update_exe_path (const char *name, const char *value);
5670 1.1 christos void lt_update_lib_path (const char *name, const char *value);
5671 1.1 christos char **prepare_spawn (char **argv);
5672 1.1 christos void lt_dump_script (FILE *f);
5673 1.1 christos EOF
5674 1.1 christos
5675 1.1 christos cat <<EOF
5676 1.1 christos #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
5677 1.1 christos # define externally_visible volatile
5678 1.1 christos #else
5679 1.1 christos # define externally_visible __attribute__((externally_visible)) volatile
5680 1.1 christos #endif
5681 1.1 christos externally_visible const char * MAGIC_EXE = "$magic_exe";
5682 1.1 christos const char * LIB_PATH_VARNAME = "$shlibpath_var";
5683 1.1 christos EOF
5684 1.1 christos
5685 1.1 christos if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
5686 1.1 christos func_to_host_path "$temp_rpath"
5687 1.1 christos cat <<EOF
5688 1.1 christos const char * LIB_PATH_VALUE = "$func_to_host_path_result";
5689 1.1 christos EOF
5690 1.1 christos else
5691 1.1 christos cat <<"EOF"
5692 1.1 christos const char * LIB_PATH_VALUE = "";
5693 1.1 christos EOF
5694 1.1 christos fi
5695 1.1 christos
5696 1.1 christos if test -n "$dllsearchpath"; then
5697 1.1 christos func_to_host_path "$dllsearchpath:"
5698 1.1 christos cat <<EOF
5699 1.1 christos const char * EXE_PATH_VARNAME = "PATH";
5700 1.1 christos const char * EXE_PATH_VALUE = "$func_to_host_path_result";
5701 1.1 christos EOF
5702 1.1 christos else
5703 1.1 christos cat <<"EOF"
5704 1.1 christos const char * EXE_PATH_VARNAME = "";
5705 1.1 christos const char * EXE_PATH_VALUE = "";
5706 1.1 christos EOF
5707 1.1 christos fi
5708 1.1 christos
5709 1.1 christos if test yes = "$fast_install"; then
5710 1.1 christos cat <<EOF
5711 1.1 christos const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
5712 1.1 christos EOF
5713 1.1 christos else
5714 1.1 christos cat <<EOF
5715 1.1 christos const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
5716 1.1 christos EOF
5717 1.1 christos fi
5718 1.1 christos
5719 1.1 christos
5720 1.1 christos cat <<"EOF"
5721 1.1 christos
5722 1.1 christos #define LTWRAPPER_OPTION_PREFIX "--lt-"
5723 1.1 christos
5724 1.1 christos static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
5725 1.1 christos static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script";
5726 1.1 christos static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug";
5727 1.1 christos
5728 1.1 christos int
5729 1.1 christos main (int argc, char *argv[])
5730 1.1 christos {
5731 1.1 christos char **newargz;
5732 1.1 christos int newargc;
5733 1.1 christos char *tmp_pathspec;
5734 1.1 christos char *actual_cwrapper_path;
5735 1.1 christos char *actual_cwrapper_name;
5736 1.1 christos char *target_name;
5737 1.1 christos char *lt_argv_zero;
5738 1.1 christos int rval = 127;
5739 1.1 christos
5740 1.1 christos int i;
5741 1.1 christos
5742 1.1 christos program_name = (char *) xstrdup (base_name (argv[0]));
5743 1.1 christos newargz = XMALLOC (char *, (size_t) argc + 1);
5744 1.1 christos
5745 1.1 christos /* very simple arg parsing; don't want to rely on getopt
5746 1.1 christos * also, copy all non cwrapper options to newargz, except
5747 1.1 christos * argz[0], which is handled differently
5748 1.1 christos */
5749 1.1 christos newargc=0;
5750 1.1 christos for (i = 1; i < argc; i++)
5751 1.1 christos {
5752 1.1 christos if (STREQ (argv[i], dumpscript_opt))
5753 1.1 christos {
5754 1.1 christos EOF
5755 1.1 christos case $host in
5756 1.1 christos *mingw* | *cygwin* )
5757 1.1 christos # make stdout use "unix" line endings
5758 1.1 christos echo " setmode(1,_O_BINARY);"
5759 1.1 christos ;;
5760 1.1 christos esac
5761 1.1 christos
5762 1.1 christos cat <<"EOF"
5763 1.1 christos lt_dump_script (stdout);
5764 1.1 christos return 0;
5765 1.1 christos }
5766 1.1 christos if (STREQ (argv[i], debug_opt))
5767 1.1 christos {
5768 1.1 christos lt_debug = 1;
5769 1.1 christos continue;
5770 1.1 christos }
5771 1.1 christos if (STREQ (argv[i], ltwrapper_option_prefix))
5772 1.1 christos {
5773 1.1 christos /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
5774 1.1 christos namespace, but it is not one of the ones we know about and
5775 1.1 christos have already dealt with, above (inluding dump-script), then
5776 1.1 christos report an error. Otherwise, targets might begin to believe
5777 1.1 christos they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
5778 1.1 christos namespace. The first time any user complains about this, we'll
5779 1.1 christos need to make LTWRAPPER_OPTION_PREFIX a configure-time option
5780 1.1 christos or a configure.ac-settable value.
5781 1.1 christos */
5782 1.1 christos lt_fatal (__FILE__, __LINE__,
5783 1.1 christos "unrecognized %s option: '%s'",
5784 1.1 christos ltwrapper_option_prefix, argv[i]);
5785 1.1 christos }
5786 1.1 christos /* otherwise ... */
5787 1.1 christos newargz[++newargc] = xstrdup (argv[i]);
5788 1.1 christos }
5789 1.1 christos newargz[++newargc] = NULL;
5790 1.1 christos
5791 1.1 christos EOF
5792 1.1 christos cat <<EOF
5793 1.1 christos /* The GNU banner must be the first non-error debug message */
5794 1.1 christos lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
5795 1.1 christos EOF
5796 1.1 christos cat <<"EOF"
5797 1.1 christos lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
5798 1.1 christos lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
5799 1.1 christos
5800 1.1 christos tmp_pathspec = find_executable (argv[0]);
5801 1.1 christos if (tmp_pathspec == NULL)
5802 1.1 christos lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
5803 1.1 christos lt_debugprintf (__FILE__, __LINE__,
5804 1.1 christos "(main) found exe (before symlink chase) at: %s\n",
5805 1.1 christos tmp_pathspec);
5806 1.1 christos
5807 1.1 christos actual_cwrapper_path = chase_symlinks (tmp_pathspec);
5808 1.1 christos lt_debugprintf (__FILE__, __LINE__,
5809 1.1 christos "(main) found exe (after symlink chase) at: %s\n",
5810 1.1 christos actual_cwrapper_path);
5811 1.1 christos XFREE (tmp_pathspec);
5812 1.1 christos
5813 1.1 christos actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
5814 1.1 christos strendzap (actual_cwrapper_path, actual_cwrapper_name);
5815 1.1 christos
5816 1.1 christos /* wrapper name transforms */
5817 1.1 christos strendzap (actual_cwrapper_name, ".exe");
5818 1.1 christos tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
5819 1.1 christos XFREE (actual_cwrapper_name);
5820 1.1 christos actual_cwrapper_name = tmp_pathspec;
5821 1.1 christos tmp_pathspec = 0;
5822 1.1 christos
5823 1.1 christos /* target_name transforms -- use actual target program name; might have lt- prefix */
5824 1.1 christos target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
5825 1.1 christos strendzap (target_name, ".exe");
5826 1.1 christos tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
5827 1.1 christos XFREE (target_name);
5828 1.1 christos target_name = tmp_pathspec;
5829 1.1 christos tmp_pathspec = 0;
5830 1.1 christos
5831 1.1 christos lt_debugprintf (__FILE__, __LINE__,
5832 1.1 christos "(main) libtool target name: %s\n",
5833 1.1 christos target_name);
5834 1.1 christos EOF
5835 1.1 christos
5836 1.1 christos cat <<EOF
5837 1.1 christos newargz[0] =
5838 1.1 christos XMALLOC (char, (strlen (actual_cwrapper_path) +
5839 1.1 christos strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
5840 1.1 christos strcpy (newargz[0], actual_cwrapper_path);
5841 1.1 christos strcat (newargz[0], "$objdir");
5842 1.1 christos strcat (newargz[0], "/");
5843 1.1 christos EOF
5844 1.1 christos
5845 1.1 christos cat <<"EOF"
5846 1.1 christos /* stop here, and copy so we don't have to do this twice */
5847 1.1 christos tmp_pathspec = xstrdup (newargz[0]);
5848 1.1 christos
5849 1.1 christos /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
5850 1.1 christos strcat (newargz[0], actual_cwrapper_name);
5851 1.1 christos
5852 1.1 christos /* DO want the lt- prefix here if it exists, so use target_name */
5853 1.1 christos lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
5854 1.1 christos XFREE (tmp_pathspec);
5855 1.1 christos tmp_pathspec = NULL;
5856 1.1 christos EOF
5857 1.1 christos
5858 1.1 christos case $host_os in
5859 1.1 christos mingw*)
5860 1.1 christos cat <<"EOF"
5861 1.1 christos {
5862 1.1 christos char* p;
5863 1.1 christos while ((p = strchr (newargz[0], '\\')) != NULL)
5864 1.1 christos {
5865 1.1 christos *p = '/';
5866 1.1 christos }
5867 1.1 christos while ((p = strchr (lt_argv_zero, '\\')) != NULL)
5868 1.1 christos {
5869 1.1 christos *p = '/';
5870 1.1 christos }
5871 1.1 christos }
5872 1.1 christos EOF
5873 1.1 christos ;;
5874 1.1 christos esac
5875 1.1 christos
5876 1.1 christos cat <<"EOF"
5877 1.1 christos XFREE (target_name);
5878 1.1 christos XFREE (actual_cwrapper_path);
5879 1.1 christos XFREE (actual_cwrapper_name);
5880 1.1 christos
5881 1.1 christos lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
5882 1.1 christos lt_setenv ("DUALCASE", "1"); /* for MSK sh */
5883 1.1 christos /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must
5884 1.1 christos be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
5885 1.1 christos because on Windows, both *_VARNAMEs are PATH but uninstalled
5886 1.1 christos libraries must come first. */
5887 1.1 christos lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
5888 1.1 christos lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
5889 1.1 christos
5890 1.1 christos lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
5891 1.1 christos nonnull (lt_argv_zero));
5892 1.1 christos for (i = 0; i < newargc; i++)
5893 1.1 christos {
5894 1.1 christos lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
5895 1.1 christos i, nonnull (newargz[i]));
5896 1.1 christos }
5897 1.1 christos
5898 1.1 christos EOF
5899 1.1 christos
5900 1.1 christos case $host_os in
5901 1.1 christos mingw*)
5902 1.1 christos cat <<"EOF"
5903 1.1 christos /* execv doesn't actually work on mingw as expected on unix */
5904 1.1 christos newargz = prepare_spawn (newargz);
5905 1.1 christos rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
5906 1.1 christos if (rval == -1)
5907 1.1 christos {
5908 1.1 christos /* failed to start process */
5909 1.1 christos lt_debugprintf (__FILE__, __LINE__,
5910 1.1 christos "(main) failed to launch target \"%s\": %s\n",
5911 1.1 christos lt_argv_zero, nonnull (strerror (errno)));
5912 1.1 christos return 127;
5913 1.1 christos }
5914 1.1 christos return rval;
5915 1.1 christos EOF
5916 1.1 christos ;;
5917 1.1 christos *)
5918 1.1 christos cat <<"EOF"
5919 1.1 christos execv (lt_argv_zero, newargz);
5920 1.1 christos return rval; /* =127, but avoids unused variable warning */
5921 1.1 christos EOF
5922 1.1 christos ;;
5923 1.1 christos esac
5924 1.1 christos
5925 1.1 christos cat <<"EOF"
5926 1.1 christos }
5927 1.1 christos
5928 1.1 christos void *
5929 1.1 christos xmalloc (size_t num)
5930 1.1 christos {
5931 1.1 christos void *p = (void *) malloc (num);
5932 1.1 christos if (!p)
5933 1.1 christos lt_fatal (__FILE__, __LINE__, "memory exhausted");
5934 1.1 christos
5935 1.1 christos return p;
5936 1.1 christos }
5937 1.1 christos
5938 1.1 christos char *
5939 1.1 christos xstrdup (const char *string)
5940 1.1 christos {
5941 1.1 christos return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
5942 1.1 christos string) : NULL;
5943 1.1 christos }
5944 1.1 christos
5945 1.1 christos const char *
5946 1.1 christos base_name (const char *name)
5947 1.1 christos {
5948 1.1 christos const char *base;
5949 1.1 christos
5950 1.1 christos #if defined HAVE_DOS_BASED_FILE_SYSTEM
5951 1.1 christos /* Skip over the disk name in MSDOS pathnames. */
5952 1.1 christos if (isalpha ((unsigned char) name[0]) && name[1] == ':')
5953 1.1 christos name += 2;
5954 1.1 christos #endif
5955 1.1 christos
5956 1.1 christos for (base = name; *name; name++)
5957 1.1 christos if (IS_DIR_SEPARATOR (*name))
5958 1.1 christos base = name + 1;
5959 1.1 christos return base;
5960 1.1 christos }
5961 1.1 christos
5962 1.1 christos int
5963 1.1 christos check_executable (const char *path)
5964 1.1 christos {
5965 1.1 christos struct stat st;
5966 1.1 christos
5967 1.1 christos lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
5968 1.1 christos nonempty (path));
5969 1.1 christos if ((!path) || (!*path))
5970 1.1 christos return 0;
5971 1.1 christos
5972 1.1 christos if ((stat (path, &st) >= 0)
5973 1.1 christos && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
5974 1.1 christos return 1;
5975 1.1 christos else
5976 1.1 christos return 0;
5977 1.1 christos }
5978 1.1 christos
5979 1.1 christos int
5980 1.1 christos make_executable (const char *path)
5981 1.1 christos {
5982 1.1 christos int rval = 0;
5983 1.1 christos struct stat st;
5984 1.1 christos
5985 1.1 christos lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
5986 1.1 christos nonempty (path));
5987 1.1 christos if ((!path) || (!*path))
5988 1.1 christos return 0;
5989 1.1 christos
5990 1.1 christos if (stat (path, &st) >= 0)
5991 1.1 christos {
5992 1.1 christos rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
5993 1.1 christos }
5994 1.1 christos return rval;
5995 1.1 christos }
5996 1.1 christos
5997 1.1 christos /* Searches for the full path of the wrapper. Returns
5998 1.1 christos newly allocated full path name if found, NULL otherwise
5999 1.1 christos Does not chase symlinks, even on platforms that support them.
6000 1.1 christos */
6001 1.1 christos char *
6002 1.1 christos find_executable (const char *wrapper)
6003 1.1 christos {
6004 1.1 christos int has_slash = 0;
6005 1.1 christos const char *p;
6006 1.1 christos const char *p_next;
6007 1.1 christos /* static buffer for getcwd */
6008 1.1 christos char tmp[LT_PATHMAX + 1];
6009 1.1 christos size_t tmp_len;
6010 1.1 christos char *concat_name;
6011 1.1 christos
6012 1.1 christos lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
6013 1.1 christos nonempty (wrapper));
6014 1.1 christos
6015 1.1 christos if ((wrapper == NULL) || (*wrapper == '\0'))
6016 1.1 christos return NULL;
6017 1.1 christos
6018 1.1 christos /* Absolute path? */
6019 1.1 christos #if defined HAVE_DOS_BASED_FILE_SYSTEM
6020 1.1 christos if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
6021 1.1 christos {
6022 1.1 christos concat_name = xstrdup (wrapper);
6023 1.1 christos if (check_executable (concat_name))
6024 1.1 christos return concat_name;
6025 1.1 christos XFREE (concat_name);
6026 1.1 christos }
6027 1.1 christos else
6028 1.1 christos {
6029 1.1 christos #endif
6030 1.1 christos if (IS_DIR_SEPARATOR (wrapper[0]))
6031 1.1 christos {
6032 1.1 christos concat_name = xstrdup (wrapper);
6033 1.1 christos if (check_executable (concat_name))
6034 1.1 christos return concat_name;
6035 1.1 christos XFREE (concat_name);
6036 1.1 christos }
6037 1.1 christos #if defined HAVE_DOS_BASED_FILE_SYSTEM
6038 1.1 christos }
6039 1.1 christos #endif
6040 1.1 christos
6041 1.1 christos for (p = wrapper; *p; p++)
6042 1.1 christos if (*p == '/')
6043 1.1 christos {
6044 1.1 christos has_slash = 1;
6045 1.1 christos break;
6046 1.1 christos }
6047 1.1 christos if (!has_slash)
6048 1.1 christos {
6049 1.1 christos /* no slashes; search PATH */
6050 1.1 christos const char *path = getenv ("PATH");
6051 1.1 christos if (path != NULL)
6052 1.1 christos {
6053 1.1 christos for (p = path; *p; p = p_next)
6054 1.1 christos {
6055 1.1 christos const char *q;
6056 1.1 christos size_t p_len;
6057 1.1 christos for (q = p; *q; q++)
6058 1.1 christos if (IS_PATH_SEPARATOR (*q))
6059 1.1 christos break;
6060 1.1 christos p_len = (size_t) (q - p);
6061 1.1 christos p_next = (*q == '\0' ? q : q + 1);
6062 1.1 christos if (p_len == 0)
6063 1.1 christos {
6064 1.1 christos /* empty path: current directory */
6065 1.1 christos if (getcwd (tmp, LT_PATHMAX) == NULL)
6066 1.1 christos lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
6067 1.1 christos nonnull (strerror (errno)));
6068 1.1 christos tmp_len = strlen (tmp);
6069 1.1 christos concat_name =
6070 1.1 christos XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
6071 1.1 christos memcpy (concat_name, tmp, tmp_len);
6072 1.1 christos concat_name[tmp_len] = '/';
6073 1.1 christos strcpy (concat_name + tmp_len + 1, wrapper);
6074 1.1 christos }
6075 1.1 christos else
6076 1.1 christos {
6077 1.1 christos concat_name =
6078 1.1 christos XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
6079 1.1 christos memcpy (concat_name, p, p_len);
6080 1.1 christos concat_name[p_len] = '/';
6081 1.1 christos strcpy (concat_name + p_len + 1, wrapper);
6082 1.1 christos }
6083 1.1 christos if (check_executable (concat_name))
6084 1.1 christos return concat_name;
6085 1.1 christos XFREE (concat_name);
6086 1.1 christos }
6087 1.1 christos }
6088 1.1 christos /* not found in PATH; assume curdir */
6089 1.1 christos }
6090 1.1 christos /* Relative path | not found in path: prepend cwd */
6091 1.1 christos if (getcwd (tmp, LT_PATHMAX) == NULL)
6092 1.1 christos lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
6093 1.1 christos nonnull (strerror (errno)));
6094 1.1 christos tmp_len = strlen (tmp);
6095 1.1 christos concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
6096 1.1 christos memcpy (concat_name, tmp, tmp_len);
6097 1.1 christos concat_name[tmp_len] = '/';
6098 1.1 christos strcpy (concat_name + tmp_len + 1, wrapper);
6099 1.1 christos
6100 1.1 christos if (check_executable (concat_name))
6101 1.1 christos return concat_name;
6102 1.1 christos XFREE (concat_name);
6103 1.1 christos return NULL;
6104 1.1 christos }
6105 1.1 christos
6106 1.1 christos char *
6107 1.1 christos chase_symlinks (const char *pathspec)
6108 1.1 christos {
6109 1.1 christos #ifndef S_ISLNK
6110 1.1 christos return xstrdup (pathspec);
6111 1.1 christos #else
6112 1.1 christos char buf[LT_PATHMAX];
6113 1.1 christos struct stat s;
6114 1.1 christos char *tmp_pathspec = xstrdup (pathspec);
6115 1.1 christos char *p;
6116 1.1 christos int has_symlinks = 0;
6117 1.1 christos while (strlen (tmp_pathspec) && !has_symlinks)
6118 1.1 christos {
6119 1.1 christos lt_debugprintf (__FILE__, __LINE__,
6120 1.1 christos "checking path component for symlinks: %s\n",
6121 1.1 christos tmp_pathspec);
6122 1.1 christos if (lstat (tmp_pathspec, &s) == 0)
6123 1.1 christos {
6124 1.1 christos if (S_ISLNK (s.st_mode) != 0)
6125 1.1 christos {
6126 1.1 christos has_symlinks = 1;
6127 1.1 christos break;
6128 1.1 christos }
6129 1.1 christos
6130 1.1 christos /* search backwards for last DIR_SEPARATOR */
6131 1.1 christos p = tmp_pathspec + strlen (tmp_pathspec) - 1;
6132 1.1 christos while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
6133 1.1 christos p--;
6134 1.1 christos if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
6135 1.1 christos {
6136 1.1 christos /* no more DIR_SEPARATORS left */
6137 1.1 christos break;
6138 1.1 christos }
6139 1.1 christos *p = '\0';
6140 1.1 christos }
6141 1.1 christos else
6142 1.1 christos {
6143 1.1 christos lt_fatal (__FILE__, __LINE__,
6144 1.1 christos "error accessing file \"%s\": %s",
6145 1.1 christos tmp_pathspec, nonnull (strerror (errno)));
6146 1.1 christos }
6147 1.1 christos }
6148 1.1 christos XFREE (tmp_pathspec);
6149 1.1 christos
6150 1.1 christos if (!has_symlinks)
6151 1.1 christos {
6152 1.1 christos return xstrdup (pathspec);
6153 1.1 christos }
6154 1.1 christos
6155 1.1 christos tmp_pathspec = realpath (pathspec, buf);
6156 1.1 christos if (tmp_pathspec == 0)
6157 1.1 christos {
6158 1.1 christos lt_fatal (__FILE__, __LINE__,
6159 1.1 christos "could not follow symlinks for %s", pathspec);
6160 1.1 christos }
6161 1.1 christos return xstrdup (tmp_pathspec);
6162 1.1 christos #endif
6163 1.1 christos }
6164 1.1 christos
6165 1.1 christos char *
6166 1.1 christos strendzap (char *str, const char *pat)
6167 1.1 christos {
6168 1.1 christos size_t len, patlen;
6169 1.1 christos
6170 1.1 christos assert (str != NULL);
6171 1.1 christos assert (pat != NULL);
6172 1.1 christos
6173 1.1 christos len = strlen (str);
6174 1.1 christos patlen = strlen (pat);
6175 1.1 christos
6176 1.1 christos if (patlen <= len)
6177 1.1 christos {
6178 1.1 christos str += len - patlen;
6179 1.1 christos if (STREQ (str, pat))
6180 1.1 christos *str = '\0';
6181 1.1 christos }
6182 1.1 christos return str;
6183 1.1 christos }
6184 1.1 christos
6185 1.1 christos void
6186 1.1 christos lt_debugprintf (const char *file, int line, const char *fmt, ...)
6187 1.1 christos {
6188 1.1 christos va_list args;
6189 1.1 christos if (lt_debug)
6190 1.1 christos {
6191 1.1 christos (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
6192 1.1 christos va_start (args, fmt);
6193 1.1 christos (void) vfprintf (stderr, fmt, args);
6194 1.1 christos va_end (args);
6195 1.1 christos }
6196 1.1 christos }
6197 1.1 christos
6198 1.1 christos static void
6199 1.1 christos lt_error_core (int exit_status, const char *file,
6200 1.1 christos int line, const char *mode,
6201 1.1 christos const char *message, va_list ap)
6202 1.1 christos {
6203 1.1 christos fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
6204 1.1 christos vfprintf (stderr, message, ap);
6205 1.1 christos fprintf (stderr, ".\n");
6206 1.1 christos
6207 1.1 christos if (exit_status >= 0)
6208 1.1 christos exit (exit_status);
6209 1.1 christos }
6210 1.1 christos
6211 1.1 christos void
6212 1.1 christos lt_fatal (const char *file, int line, const char *message, ...)
6213 1.1 christos {
6214 1.1 christos va_list ap;
6215 1.1 christos va_start (ap, message);
6216 1.1 christos lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
6217 1.1 christos va_end (ap);
6218 1.1 christos }
6219 1.1 christos
6220 1.1 christos static const char *
6221 1.1 christos nonnull (const char *s)
6222 1.1 christos {
6223 1.1 christos return s ? s : "(null)";
6224 1.1 christos }
6225 1.1 christos
6226 1.1 christos static const char *
6227 1.1 christos nonempty (const char *s)
6228 1.1 christos {
6229 1.1 christos return (s && !*s) ? "(empty)" : nonnull (s);
6230 1.1 christos }
6231 1.1 christos
6232 1.1 christos void
6233 1.1 christos lt_setenv (const char *name, const char *value)
6234 1.1 christos {
6235 1.1 christos lt_debugprintf (__FILE__, __LINE__,
6236 1.1 christos "(lt_setenv) setting '%s' to '%s'\n",
6237 1.1 christos nonnull (name), nonnull (value));
6238 1.1 christos {
6239 1.1 christos #ifdef HAVE_SETENV
6240 1.1 christos /* always make a copy, for consistency with !HAVE_SETENV */
6241 1.1 christos char *str = xstrdup (value);
6242 1.1 christos setenv (name, str, 1);
6243 1.1 christos #else
6244 1.1 christos size_t len = strlen (name) + 1 + strlen (value) + 1;
6245 1.1 christos char *str = XMALLOC (char, len);
6246 1.1 christos sprintf (str, "%s=%s", name, value);
6247 1.1 christos if (putenv (str) != EXIT_SUCCESS)
6248 1.1 christos {
6249 1.1 christos XFREE (str);
6250 1.1 christos }
6251 1.1 christos #endif
6252 1.1 christos }
6253 1.1 christos }
6254 1.1 christos
6255 1.1 christos char *
6256 1.1 christos lt_extend_str (const char *orig_value, const char *add, int to_end)
6257 1.1 christos {
6258 1.1 christos char *new_value;
6259 1.1 christos if (orig_value && *orig_value)
6260 1.1 christos {
6261 1.1 christos size_t orig_value_len = strlen (orig_value);
6262 1.1 christos size_t add_len = strlen (add);
6263 1.1 christos new_value = XMALLOC (char, add_len + orig_value_len + 1);
6264 1.1 christos if (to_end)
6265 1.1 christos {
6266 1.1 christos strcpy (new_value, orig_value);
6267 1.1 christos strcpy (new_value + orig_value_len, add);
6268 1.1 christos }
6269 1.1 christos else
6270 1.1 christos {
6271 1.1 christos strcpy (new_value, add);
6272 1.1 christos strcpy (new_value + add_len, orig_value);
6273 1.1 christos }
6274 1.1 christos }
6275 1.1 christos else
6276 1.1 christos {
6277 1.1 christos new_value = xstrdup (add);
6278 1.1 christos }
6279 1.1 christos return new_value;
6280 1.1 christos }
6281 1.1 christos
6282 1.1 christos void
6283 1.1 christos lt_update_exe_path (const char *name, const char *value)
6284 1.1 christos {
6285 1.1 christos lt_debugprintf (__FILE__, __LINE__,
6286 1.1 christos "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
6287 1.1 christos nonnull (name), nonnull (value));
6288 1.1 christos
6289 1.1 christos if (name && *name && value && *value)
6290 1.1 christos {
6291 1.1 christos char *new_value = lt_extend_str (getenv (name), value, 0);
6292 1.1 christos /* some systems can't cope with a ':'-terminated path #' */
6293 1.1 christos size_t len = strlen (new_value);
6294 1.1 christos while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
6295 1.1 christos {
6296 1.1 christos new_value[--len] = '\0';
6297 1.1 christos }
6298 1.1 christos lt_setenv (name, new_value);
6299 1.1 christos XFREE (new_value);
6300 1.1 christos }
6301 1.1 christos }
6302 1.1 christos
6303 1.1 christos void
6304 1.1 christos lt_update_lib_path (const char *name, const char *value)
6305 1.1 christos {
6306 1.1 christos lt_debugprintf (__FILE__, __LINE__,
6307 1.1 christos "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
6308 1.1 christos nonnull (name), nonnull (value));
6309 1.1 christos
6310 1.1 christos if (name && *name && value && *value)
6311 1.1 christos {
6312 1.1 christos char *new_value = lt_extend_str (getenv (name), value, 0);
6313 1.1 christos lt_setenv (name, new_value);
6314 1.1 christos XFREE (new_value);
6315 1.1 christos }
6316 1.1 christos }
6317 1.1 christos
6318 1.1 christos EOF
6319 1.1 christos case $host_os in
6320 1.1 christos mingw*)
6321 1.1 christos cat <<"EOF"
6322 1.1 christos
6323 1.1 christos /* Prepares an argument vector before calling spawn().
6324 1.1 christos Note that spawn() does not by itself call the command interpreter
6325 1.1 christos (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
6326 1.1 christos ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
6327 1.1 christos GetVersionEx(&v);
6328 1.1 christos v.dwPlatformId == VER_PLATFORM_WIN32_NT;
6329 1.1 christos }) ? "cmd.exe" : "command.com").
6330 1.1 christos Instead it simply concatenates the arguments, separated by ' ', and calls
6331 1.1 christos CreateProcess(). We must quote the arguments since Win32 CreateProcess()
6332 1.1 christos interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
6333 1.1 christos special way:
6334 1.1 christos - Space and tab are interpreted as delimiters. They are not treated as
6335 1.1 christos delimiters if they are surrounded by double quotes: "...".
6336 1.1 christos - Unescaped double quotes are removed from the input. Their only effect is
6337 1.1 christos that within double quotes, space and tab are treated like normal
6338 1.1 christos characters.
6339 1.1 christos - Backslashes not followed by double quotes are not special.
6340 1.1 christos - But 2*n+1 backslashes followed by a double quote become
6341 1.1 christos n backslashes followed by a double quote (n >= 0):
6342 1.1 christos \" -> "
6343 1.1 christos \\\" -> \"
6344 1.1 christos \\\\\" -> \\"
6345 1.1 christos */
6346 1.1 christos #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"
6347 1.1 christos #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"
6348 1.1 christos char **
6349 1.1 christos prepare_spawn (char **argv)
6350 1.1 christos {
6351 1.1 christos size_t argc;
6352 1.1 christos char **new_argv;
6353 1.1 christos size_t i;
6354 1.1 christos
6355 1.1 christos /* Count number of arguments. */
6356 1.1 christos for (argc = 0; argv[argc] != NULL; argc++)
6357 1.1 christos ;
6358 1.1 christos
6359 1.1 christos /* Allocate new argument vector. */
6360 1.1 christos new_argv = XMALLOC (char *, argc + 1);
6361 1.1 christos
6362 1.1 christos /* Put quoted arguments into the new argument vector. */
6363 1.1 christos for (i = 0; i < argc; i++)
6364 1.1 christos {
6365 1.1 christos const char *string = argv[i];
6366 1.1 christos
6367 1.1 christos if (string[0] == '\0')
6368 1.1 christos new_argv[i] = xstrdup ("\"\"");
6369 1.1 christos else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
6370 1.1 christos {
6371 1.1 christos int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
6372 1.1 christos size_t length;
6373 1.1 christos unsigned int backslashes;
6374 1.1 christos const char *s;
6375 1.1 christos char *quoted_string;
6376 1.1 christos char *p;
6377 1.1 christos
6378 1.1 christos length = 0;
6379 1.1 christos backslashes = 0;
6380 1.1 christos if (quote_around)
6381 1.1 christos length++;
6382 1.1 christos for (s = string; *s != '\0'; s++)
6383 1.1 christos {
6384 1.1 christos char c = *s;
6385 1.1 christos if (c == '"')
6386 1.1 christos length += backslashes + 1;
6387 1.1 christos length++;
6388 1.1 christos if (c == '\\')
6389 1.1 christos backslashes++;
6390 1.1 christos else
6391 1.1 christos backslashes = 0;
6392 1.1 christos }
6393 1.1 christos if (quote_around)
6394 1.1 christos length += backslashes + 1;
6395 1.1 christos
6396 1.1 christos quoted_string = XMALLOC (char, length + 1);
6397 1.1 christos
6398 1.1 christos p = quoted_string;
6399 1.1 christos backslashes = 0;
6400 1.1 christos if (quote_around)
6401 1.1 christos *p++ = '"';
6402 1.1 christos for (s = string; *s != '\0'; s++)
6403 1.1 christos {
6404 1.1 christos char c = *s;
6405 1.1 christos if (c == '"')
6406 1.1 christos {
6407 1.1 christos unsigned int j;
6408 1.1 christos for (j = backslashes + 1; j > 0; j--)
6409 1.1 christos *p++ = '\\';
6410 1.1 christos }
6411 1.1 christos *p++ = c;
6412 1.1 christos if (c == '\\')
6413 1.1 christos backslashes++;
6414 1.1 christos else
6415 1.1 christos backslashes = 0;
6416 1.1 christos }
6417 1.1 christos if (quote_around)
6418 1.1 christos {
6419 1.1 christos unsigned int j;
6420 1.1 christos for (j = backslashes; j > 0; j--)
6421 1.1 christos *p++ = '\\';
6422 1.1 christos *p++ = '"';
6423 1.1 christos }
6424 1.1 christos *p = '\0';
6425 1.1 christos
6426 1.1 christos new_argv[i] = quoted_string;
6427 1.1 christos }
6428 1.1 christos else
6429 1.1 christos new_argv[i] = (char *) string;
6430 1.1 christos }
6431 1.1 christos new_argv[argc] = NULL;
6432 1.1 christos
6433 1.1 christos return new_argv;
6434 1.1 christos }
6435 1.1 christos EOF
6436 1.1 christos ;;
6437 1.1 christos esac
6438 1.1 christos
6439 1.1 christos cat <<"EOF"
6440 1.1 christos void lt_dump_script (FILE* f)
6441 1.1 christos {
6442 1.1 christos EOF
6443 1.1 christos func_emit_wrapper yes |
6444 1.1 christos $SED -n -e '
6445 1.1 christos s/^\(.\{79\}\)\(..*\)/\1\
6446 1.1 christos \2/
6447 1.1 christos h
6448 1.1 christos s/\([\\"]\)/\\\1/g
6449 1.1 christos s/$/\\n/
6450 1.1 christos s/\([^\n]*\).*/ fputs ("\1", f);/p
6451 1.1 christos g
6452 1.1 christos D'
6453 1.1 christos cat <<"EOF"
6454 1.1 christos }
6455 1.1 christos EOF
6456 1.1 christos }
6457 1.1 christos # end: func_emit_cwrapperexe_src
6458 1.1 christos
6459 1.1 christos # func_win32_import_lib_p ARG
6460 1.1 christos # True if ARG is an import lib, as indicated by $file_magic_cmd
6461 1.1 christos func_win32_import_lib_p ()
6462 1.1 christos {
6463 1.1 christos $debug_cmd
6464 1.1 christos
6465 1.1 christos case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
6466 1.1 christos *import*) : ;;
6467 1.1 christos *) false ;;
6468 1.1 christos esac
6469 1.1 christos }
6470 1.1 christos
6471 1.1 christos # func_suncc_cstd_abi
6472 1.1 christos # !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
6473 1.1 christos # Several compiler flags select an ABI that is incompatible with the
6474 1.1 christos # Cstd library. Avoid specifying it if any are in CXXFLAGS.
6475 1.1 christos func_suncc_cstd_abi ()
6476 1.1 christos {
6477 1.1 christos $debug_cmd
6478 1.1 christos
6479 1.1 christos case " $compile_command " in
6480 1.1 christos *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
6481 1.1 christos suncc_use_cstd_abi=no
6482 1.1 christos ;;
6483 1.1 christos *)
6484 1.1 christos suncc_use_cstd_abi=yes
6485 1.1 christos ;;
6486 1.1 christos esac
6487 1.1 christos }
6488 1.1 christos
6489 1.1 christos # func_mode_link arg...
6490 1.1 christos func_mode_link ()
6491 1.1 christos {
6492 1.1 christos $debug_cmd
6493 1.1 christos
6494 1.1 christos case $host in
6495 1.1 christos *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
6496 1.1 christos # It is impossible to link a dll without this setting, and
6497 1.1 christos # we shouldn't force the makefile maintainer to figure out
6498 1.1 christos # what system we are compiling for in order to pass an extra
6499 1.1 christos # flag for every libtool invocation.
6500 1.1 christos # allow_undefined=no
6501 1.1 christos
6502 1.1 christos # FIXME: Unfortunately, there are problems with the above when trying
6503 1.1 christos # to make a dll that has undefined symbols, in which case not
6504 1.1 christos # even a static library is built. For now, we need to specify
6505 1.1 christos # -no-undefined on the libtool link line when we can be certain
6506 1.1 christos # that all symbols are satisfied, otherwise we get a static library.
6507 1.1 christos allow_undefined=yes
6508 1.1 christos ;;
6509 1.1 christos *)
6510 1.1 christos allow_undefined=yes
6511 1.1 christos ;;
6512 1.1 christos esac
6513 1.1 christos libtool_args=$nonopt
6514 1.1 christos base_compile="$nonopt $@"
6515 1.1 christos compile_command=$nonopt
6516 1.1 christos finalize_command=$nonopt
6517 1.1 christos
6518 1.1 christos compile_rpath=
6519 1.1 christos finalize_rpath=
6520 1.1 christos compile_shlibpath=
6521 1.1 christos finalize_shlibpath=
6522 1.1 christos convenience=
6523 1.1 christos old_convenience=
6524 1.1 christos deplibs=
6525 1.1 christos old_deplibs=
6526 1.1 christos compiler_flags=
6527 1.1 christos linker_flags=
6528 1.1 christos dllsearchpath=
6529 1.1 christos lib_search_path=`pwd`
6530 1.1 christos inst_prefix_dir=
6531 1.1 christos new_inherited_linker_flags=
6532 1.1 christos
6533 1.1 christos avoid_version=no
6534 1.1 christos bindir=
6535 1.1 christos dlfiles=
6536 1.1 christos dlprefiles=
6537 1.1 christos dlself=no
6538 1.1 christos export_dynamic=no
6539 1.1 christos export_symbols=
6540 1.1 christos export_symbols_regex=
6541 1.1 christos generated=
6542 1.1 christos libobjs=
6543 1.1 christos ltlibs=
6544 1.1 christos module=no
6545 1.1 christos no_install=no
6546 1.1 christos objs=
6547 1.1 christos os2dllname=
6548 1.1 christos non_pic_objects=
6549 1.1 christos precious_files_regex=
6550 1.1 christos prefer_static_libs=no
6551 1.1 christos preload=false
6552 1.1 christos prev=
6553 1.1 christos prevarg=
6554 1.1 christos release=
6555 1.1 christos rpath=
6556 1.1 christos xrpath=
6557 1.1 christos perm_rpath=
6558 1.1 christos temp_rpath=
6559 1.1 christos thread_safe=no
6560 1.1 christos vinfo=
6561 1.1 christos vinfo_number=no
6562 1.1 christos weak_libs=
6563 1.1 christos single_module=$wl-single_module
6564 1.1 christos func_infer_tag $base_compile
6565 1.1 christos
6566 1.1 christos # We need to know -static, to get the right output filenames.
6567 1.1 christos for arg
6568 1.1 christos do
6569 1.1 christos case $arg in
6570 1.1 christos -shared)
6571 1.1 christos test yes != "$build_libtool_libs" \
6572 1.1 christos && func_fatal_configuration "cannot build a shared library"
6573 1.1 christos build_old_libs=no
6574 1.1 christos break
6575 1.1 christos ;;
6576 1.1 christos -all-static | -static | -static-libtool-libs)
6577 1.1 christos case $arg in
6578 1.1 christos -all-static)
6579 1.1 christos if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
6580 1.1 christos func_warning "complete static linking is impossible in this configuration"
6581 1.1 christos fi
6582 1.1 christos if test -n "$link_static_flag"; then
6583 1.1 christos dlopen_self=$dlopen_self_static
6584 1.1 christos fi
6585 1.1 christos prefer_static_libs=yes
6586 1.1 christos ;;
6587 1.1 christos -static)
6588 1.1 christos if test -z "$pic_flag" && test -n "$link_static_flag"; then
6589 1.1 christos dlopen_self=$dlopen_self_static
6590 1.1 christos fi
6591 1.1 christos prefer_static_libs=built
6592 1.1 christos ;;
6593 1.1 christos -static-libtool-libs)
6594 1.1 christos if test -z "$pic_flag" && test -n "$link_static_flag"; then
6595 1.1 christos dlopen_self=$dlopen_self_static
6596 1.1 christos fi
6597 1.1 christos prefer_static_libs=yes
6598 1.1 christos ;;
6599 1.1 christos esac
6600 1.1 christos build_libtool_libs=no
6601 1.1 christos build_old_libs=yes
6602 1.1 christos break
6603 1.1 christos ;;
6604 1.1 christos esac
6605 1.1 christos done
6606 1.1 christos
6607 1.1 christos # See if our shared archives depend on static archives.
6608 1.1 christos test -n "$old_archive_from_new_cmds" && build_old_libs=yes
6609 1.1 christos
6610 1.1 christos # Go through the arguments, transforming them on the way.
6611 1.1 christos while test "$#" -gt 0; do
6612 1.1 christos arg=$1
6613 1.1 christos shift
6614 1.1 christos func_quote_for_eval "$arg"
6615 1.1 christos qarg=$func_quote_for_eval_unquoted_result
6616 1.1 christos func_append libtool_args " $func_quote_for_eval_result"
6617 1.1 christos
6618 1.1 christos # If the previous option needs an argument, assign it.
6619 1.1 christos if test -n "$prev"; then
6620 1.1 christos case $prev in
6621 1.1 christos output)
6622 1.1 christos func_append compile_command " @OUTPUT@"
6623 1.1 christos func_append finalize_command " @OUTPUT@"
6624 1.1 christos ;;
6625 1.1 christos esac
6626 1.1 christos
6627 1.1 christos case $prev in
6628 1.1 christos bindir)
6629 1.1 christos bindir=$arg
6630 1.1 christos prev=
6631 1.1 christos continue
6632 1.1 christos ;;
6633 1.1 christos dlfiles|dlprefiles)
6634 1.1 christos $preload || {
6635 1.1 christos # Add the symbol object into the linking commands.
6636 1.1 christos func_append compile_command " @SYMFILE@"
6637 1.1 christos func_append finalize_command " @SYMFILE@"
6638 1.1 christos preload=:
6639 1.1 christos }
6640 1.1 christos case $arg in
6641 1.1 christos *.la | *.lo) ;; # We handle these cases below.
6642 1.1 christos force)
6643 1.1 christos if test no = "$dlself"; then
6644 1.1 christos dlself=needless
6645 1.1 christos export_dynamic=yes
6646 1.1 christos fi
6647 1.1 christos prev=
6648 1.1 christos continue
6649 1.1 christos ;;
6650 1.1 christos self)
6651 1.1 christos if test dlprefiles = "$prev"; then
6652 1.1 christos dlself=yes
6653 1.1 christos elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
6654 1.1 christos dlself=yes
6655 1.1 christos else
6656 1.1 christos dlself=needless
6657 1.1 christos export_dynamic=yes
6658 1.1 christos fi
6659 1.1 christos prev=
6660 1.1 christos continue
6661 1.1 christos ;;
6662 1.1 christos *)
6663 1.1 christos if test dlfiles = "$prev"; then
6664 1.1 christos func_append dlfiles " $arg"
6665 1.1 christos else
6666 1.1 christos func_append dlprefiles " $arg"
6667 1.1 christos fi
6668 1.1 christos prev=
6669 1.1 christos continue
6670 1.1 christos ;;
6671 1.1 christos esac
6672 1.1 christos ;;
6673 1.1 christos expsyms)
6674 1.1 christos export_symbols=$arg
6675 1.1 christos test -f "$arg" \
6676 1.1 christos || func_fatal_error "symbol file '$arg' does not exist"
6677 1.1 christos prev=
6678 1.1 christos continue
6679 1.1 christos ;;
6680 1.1 christos expsyms_regex)
6681 1.1 christos export_symbols_regex=$arg
6682 1.1 christos prev=
6683 1.1 christos continue
6684 1.1 christos ;;
6685 1.1 christos framework)
6686 1.1 christos case $host in
6687 1.1 christos *-*-darwin*)
6688 1.1 christos case "$deplibs " in
6689 1.1 christos *" $qarg.ltframework "*) ;;
6690 1.1 christos *) func_append deplibs " $qarg.ltframework" # this is fixed later
6691 1.1 christos ;;
6692 1.1 christos esac
6693 1.1 christos ;;
6694 1.1 christos esac
6695 1.1 christos prev=
6696 1.1 christos continue
6697 1.1 christos ;;
6698 1.1 christos inst_prefix)
6699 1.1 christos inst_prefix_dir=$arg
6700 1.1 christos prev=
6701 1.1 christos continue
6702 1.1 christos ;;
6703 1.1 christos mllvm)
6704 1.1 christos # Clang does not use LLVM to link, so we can simply discard any
6705 1.1 christos # '-mllvm $arg' options when doing the link step.
6706 1.1 christos prev=
6707 1.1 christos continue
6708 1.1 christos ;;
6709 1.1 christos objectlist)
6710 1.1 christos if test -f "$arg"; then
6711 1.1 christos save_arg=$arg
6712 1.1 christos moreargs=
6713 1.1 christos for fil in `cat "$save_arg"`
6714 1.1 christos do
6715 1.1 christos # func_append moreargs " $fil"
6716 1.1 christos arg=$fil
6717 1.1 christos # A libtool-controlled object.
6718 1.1 christos
6719 1.1 christos # Check to see that this really is a libtool object.
6720 1.1 christos if func_lalib_unsafe_p "$arg"; then
6721 1.1 christos pic_object=
6722 1.1 christos non_pic_object=
6723 1.1 christos
6724 1.1 christos # Read the .lo file
6725 1.1 christos func_source "$arg"
6726 1.1 christos
6727 1.1 christos if test -z "$pic_object" ||
6728 1.1 christos test -z "$non_pic_object" ||
6729 1.1 christos test none = "$pic_object" &&
6730 1.1 christos test none = "$non_pic_object"; then
6731 1.1 christos func_fatal_error "cannot find name of object for '$arg'"
6732 1.1 christos fi
6733 1.1 christos
6734 1.1 christos # Extract subdirectory from the argument.
6735 1.1 christos func_dirname "$arg" "/" ""
6736 1.1 christos xdir=$func_dirname_result
6737 1.1 christos
6738 1.1 christos if test none != "$pic_object"; then
6739 1.1 christos # Prepend the subdirectory the object is found in.
6740 1.1 christos pic_object=$xdir$pic_object
6741 1.1 christos
6742 1.1 christos if test dlfiles = "$prev"; then
6743 1.1 christos if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
6744 1.1 christos func_append dlfiles " $pic_object"
6745 1.1 christos prev=
6746 1.1 christos continue
6747 1.1 christos else
6748 1.1 christos # If libtool objects are unsupported, then we need to preload.
6749 1.1 christos prev=dlprefiles
6750 1.1 christos fi
6751 1.1 christos fi
6752 1.1 christos
6753 1.1 christos # CHECK ME: I think I busted this. -Ossama
6754 1.1 christos if test dlprefiles = "$prev"; then
6755 1.1 christos # Preload the old-style object.
6756 1.1 christos func_append dlprefiles " $pic_object"
6757 1.1 christos prev=
6758 1.1 christos fi
6759 1.1 christos
6760 1.1 christos # A PIC object.
6761 1.1 christos func_append libobjs " $pic_object"
6762 1.1 christos arg=$pic_object
6763 1.1 christos fi
6764 1.1 christos
6765 1.1 christos # Non-PIC object.
6766 1.1 christos if test none != "$non_pic_object"; then
6767 1.1 christos # Prepend the subdirectory the object is found in.
6768 1.1 christos non_pic_object=$xdir$non_pic_object
6769 1.1 christos
6770 1.1 christos # A standard non-PIC object
6771 1.1 christos func_append non_pic_objects " $non_pic_object"
6772 1.1 christos if test -z "$pic_object" || test none = "$pic_object"; then
6773 1.1 christos arg=$non_pic_object
6774 1.1 christos fi
6775 1.1 christos else
6776 1.1 christos # If the PIC object exists, use it instead.
6777 1.1 christos # $xdir was prepended to $pic_object above.
6778 1.1 christos non_pic_object=$pic_object
6779 1.1 christos func_append non_pic_objects " $non_pic_object"
6780 1.1 christos fi
6781 1.1 christos else
6782 1.1 christos # Only an error if not doing a dry-run.
6783 1.1 christos if $opt_dry_run; then
6784 1.1 christos # Extract subdirectory from the argument.
6785 1.1 christos func_dirname "$arg" "/" ""
6786 1.1 christos xdir=$func_dirname_result
6787 1.1 christos
6788 1.1 christos func_lo2o "$arg"
6789 1.1 christos pic_object=$xdir$objdir/$func_lo2o_result
6790 1.1 christos non_pic_object=$xdir$func_lo2o_result
6791 1.1 christos func_append libobjs " $pic_object"
6792 1.1 christos func_append non_pic_objects " $non_pic_object"
6793 1.1 christos else
6794 1.1 christos func_fatal_error "'$arg' is not a valid libtool object"
6795 1.1 christos fi
6796 1.1 christos fi
6797 1.1 christos done
6798 1.1 christos else
6799 1.1 christos func_fatal_error "link input file '$arg' does not exist"
6800 1.1 christos fi
6801 1.1 christos arg=$save_arg
6802 1.1 christos prev=
6803 1.1 christos continue
6804 1.1 christos ;;
6805 1.1 christos os2dllname)
6806 1.1 christos os2dllname=$arg
6807 1.1 christos prev=
6808 1.1 christos continue
6809 1.1 christos ;;
6810 1.1 christos precious_regex)
6811 1.1 christos precious_files_regex=$arg
6812 1.1 christos prev=
6813 1.1 christos continue
6814 1.1 christos ;;
6815 1.1 christos release)
6816 1.1 christos release=-$arg
6817 1.1 christos prev=
6818 1.1 christos continue
6819 1.1 christos ;;
6820 1.1 christos rpath | xrpath)
6821 1.1 christos # We need an absolute path.
6822 1.1 christos case $arg in
6823 1.1 christos [\\/]* | [A-Za-z]:[\\/]*) ;;
6824 1.1 christos *)
6825 1.1 christos func_fatal_error "only absolute run-paths are allowed"
6826 1.1 christos ;;
6827 1.1 christos esac
6828 1.1 christos if test rpath = "$prev"; then
6829 1.1 christos case "$rpath " in
6830 1.1 christos *" $arg "*) ;;
6831 1.1 christos *) func_append rpath " $arg" ;;
6832 1.1 christos esac
6833 1.1 christos else
6834 1.1 christos case "$xrpath " in
6835 1.1 christos *" $arg "*) ;;
6836 1.1 christos *) func_append xrpath " $arg" ;;
6837 1.1 christos esac
6838 1.1 christos fi
6839 1.1 christos prev=
6840 1.1 christos continue
6841 1.1 christos ;;
6842 1.1 christos shrext)
6843 1.1 christos shrext_cmds=$arg
6844 1.1 christos prev=
6845 1.1 christos continue
6846 1.1 christos ;;
6847 1.1 christos weak)
6848 1.1 christos func_append weak_libs " $arg"
6849 1.1 christos prev=
6850 1.1 christos continue
6851 1.1 christos ;;
6852 1.1 christos xcclinker)
6853 1.1 christos func_append linker_flags " $qarg"
6854 1.1 christos func_append compiler_flags " $qarg"
6855 1.1 christos prev=
6856 1.1 christos func_append compile_command " $qarg"
6857 1.1 christos func_append finalize_command " $qarg"
6858 1.1 christos continue
6859 1.1 christos ;;
6860 1.1 christos xcompiler)
6861 1.1 christos func_append compiler_flags " $qarg"
6862 1.1 christos prev=
6863 1.1 christos func_append compile_command " $qarg"
6864 1.1 christos func_append finalize_command " $qarg"
6865 1.1 christos continue
6866 1.1 christos ;;
6867 1.1 christos xlinker)
6868 1.1 christos func_append linker_flags " $qarg"
6869 1.1 christos func_append compiler_flags " $wl$qarg"
6870 1.1 christos prev=
6871 1.1 christos func_append compile_command " $wl$qarg"
6872 1.1 christos func_append finalize_command " $wl$qarg"
6873 1.1 christos continue
6874 1.1 christos ;;
6875 1.1 christos *)
6876 1.1 christos eval "$prev=\"\$arg\""
6877 1.1 christos prev=
6878 1.1 christos continue
6879 1.1 christos ;;
6880 1.1 christos esac
6881 1.1 christos fi # test -n "$prev"
6882 1.1 christos
6883 1.1 christos prevarg=$arg
6884 1.1 christos
6885 1.1 christos case $arg in
6886 1.1 christos -all-static)
6887 1.1 christos if test -n "$link_static_flag"; then
6888 1.1 christos # See comment for -static flag below, for more details.
6889 1.1 christos func_append compile_command " $link_static_flag"
6890 1.1 christos func_append finalize_command " $link_static_flag"
6891 1.1 christos fi
6892 1.1 christos continue
6893 1.1 christos ;;
6894 1.1 christos
6895 1.1 christos -allow-undefined)
6896 1.1 christos # FIXME: remove this flag sometime in the future.
6897 1.1 christos func_fatal_error "'-allow-undefined' must not be used because it is the default"
6898 1.1 christos ;;
6899 1.1 christos
6900 1.1 christos -avoid-version)
6901 1.1 christos avoid_version=yes
6902 1.1 christos continue
6903 1.1 christos ;;
6904 1.1 christos
6905 1.1 christos -bindir)
6906 1.1 christos prev=bindir
6907 1.1 christos continue
6908 1.1 christos ;;
6909 1.1 christos
6910 1.1 christos -dlopen)
6911 1.1 christos prev=dlfiles
6912 1.1 christos continue
6913 1.1 christos ;;
6914 1.1 christos
6915 1.1 christos -dlpreopen)
6916 1.1 christos prev=dlprefiles
6917 1.1 christos continue
6918 1.1 christos ;;
6919 1.1 christos
6920 1.1 christos -export-dynamic)
6921 1.1 christos export_dynamic=yes
6922 1.1 christos continue
6923 1.1 christos ;;
6924 1.1 christos
6925 1.1 christos -export-symbols | -export-symbols-regex)
6926 1.1 christos if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
6927 1.1 christos func_fatal_error "more than one -exported-symbols argument is not allowed"
6928 1.1 christos fi
6929 1.1 christos if test X-export-symbols = "X$arg"; then
6930 1.1 christos prev=expsyms
6931 1.1 christos else
6932 1.1 christos prev=expsyms_regex
6933 1.1 christos fi
6934 1.1 christos continue
6935 1.1 christos ;;
6936 1.1 christos
6937 1.1 christos -framework)
6938 1.1 christos prev=framework
6939 1.1 christos continue
6940 1.1 christos ;;
6941 1.1 christos
6942 1.1 christos -inst-prefix-dir)
6943 1.1 christos prev=inst_prefix
6944 1.1 christos continue
6945 1.1 christos ;;
6946 1.1 christos
6947 1.1 christos # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
6948 1.1 christos # so, if we see these flags be careful not to treat them like -L
6949 1.1 christos -L[A-Z][A-Z]*:*)
6950 1.1 christos case $with_gcc/$host in
6951 1.1 christos no/*-*-irix* | /*-*-irix*)
6952 1.1 christos func_append compile_command " $arg"
6953 1.1 christos func_append finalize_command " $arg"
6954 1.1 christos ;;
6955 1.1 christos esac
6956 1.1 christos continue
6957 1.1 christos ;;
6958 1.1 christos
6959 1.1 christos -L*)
6960 1.1 christos func_stripname "-L" '' "$arg"
6961 1.1 christos if test -z "$func_stripname_result"; then
6962 1.1 christos if test "$#" -gt 0; then
6963 1.1 christos func_fatal_error "require no space between '-L' and '$1'"
6964 1.1 christos else
6965 1.1 christos func_fatal_error "need path for '-L' option"
6966 1.1 christos fi
6967 1.1 christos fi
6968 1.1 christos func_resolve_sysroot "$func_stripname_result"
6969 1.1 christos dir=$func_resolve_sysroot_result
6970 1.1 christos # We need an absolute path.
6971 1.1 christos case $dir in
6972 1.1 christos [\\/]* | [A-Za-z]:[\\/]*) ;;
6973 1.1 christos *)
6974 1.1 christos absdir=`cd "$dir" && pwd`
6975 1.1 christos test -z "$absdir" && \
6976 1.1 christos func_fatal_error "cannot determine absolute directory name of '$dir'"
6977 1.1 christos dir=$absdir
6978 1.1 christos ;;
6979 1.1 christos esac
6980 1.1 christos case "$deplibs " in
6981 1.1 christos *" -L$dir "* | *" $arg "*)
6982 1.1 christos # Will only happen for absolute or sysroot arguments
6983 1.1 christos ;;
6984 1.1 christos *)
6985 1.1 christos # Preserve sysroot, but never include relative directories
6986 1.1 christos case $dir in
6987 1.1 christos [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
6988 1.1 christos *) func_append deplibs " -L$dir" ;;
6989 1.1 christos esac
6990 1.1 christos func_append lib_search_path " $dir"
6991 1.1 christos ;;
6992 1.1 christos esac
6993 1.1 christos case $host in
6994 1.1 christos *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
6995 1.1 christos testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
6996 1.1 christos case :$dllsearchpath: in
6997 1.1 christos *":$dir:"*) ;;
6998 1.1 christos ::) dllsearchpath=$dir;;
6999 1.1 christos *) func_append dllsearchpath ":$dir";;
7000 1.1 christos esac
7001 1.1 christos case :$dllsearchpath: in
7002 1.1 christos *":$testbindir:"*) ;;
7003 1.1 christos ::) dllsearchpath=$testbindir;;
7004 1.1 christos *) func_append dllsearchpath ":$testbindir";;
7005 1.1 christos esac
7006 1.1 christos ;;
7007 1.1 christos esac
7008 1.1 christos continue
7009 1.1 christos ;;
7010 1.1 christos
7011 1.1 christos -l*)
7012 1.1 christos if test X-lc = "X$arg" || test X-lm = "X$arg"; then
7013 1.1 christos case $host in
7014 1.1 christos *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
7015 1.1 christos # These systems don't actually have a C or math library (as such)
7016 1.1 christos continue
7017 1.1 christos ;;
7018 1.1 christos *-*-os2*)
7019 1.1 christos # These systems don't actually have a C library (as such)
7020 1.1 christos test X-lc = "X$arg" && continue
7021 1.1 christos ;;
7022 1.1 christos *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
7023 1.1 christos # Do not include libc due to us having libc/libc_r.
7024 1.1 christos test X-lc = "X$arg" && continue
7025 1.1 christos ;;
7026 1.1 christos *-*-rhapsody* | *-*-darwin1.[012])
7027 1.1 christos # Rhapsody C and math libraries are in the System framework
7028 1.1 christos func_append deplibs " System.ltframework"
7029 1.1 christos continue
7030 1.1 christos ;;
7031 1.1 christos *-*-sco3.2v5* | *-*-sco5v6*)
7032 1.1 christos # Causes problems with __ctype
7033 1.1 christos test X-lc = "X$arg" && continue
7034 1.1 christos ;;
7035 1.1 christos *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7036 1.1 christos # Compiler inserts libc in the correct place for threads to work
7037 1.1 christos test X-lc = "X$arg" && continue
7038 1.1 christos ;;
7039 1.1 christos esac
7040 1.1 christos elif test X-lc_r = "X$arg"; then
7041 1.1 christos case $host in
7042 1.1 christos *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
7043 1.1 christos # Do not include libc_r directly, use -pthread flag.
7044 1.1 christos continue
7045 1.1 christos ;;
7046 1.1 christos esac
7047 1.1 christos fi
7048 1.1 christos func_append deplibs " $arg"
7049 1.1 christos continue
7050 1.1 christos ;;
7051 1.1 christos
7052 1.1 christos -mllvm)
7053 1.1 christos prev=mllvm
7054 1.1 christos continue
7055 1.1 christos ;;
7056 1.1 christos
7057 1.1 christos -module)
7058 1.1 christos module=yes
7059 1.1 christos continue
7060 1.1 christos ;;
7061 1.1 christos
7062 1.1 christos # Tru64 UNIX uses -model [arg] to determine the layout of C++
7063 1.1 christos # classes, name mangling, and exception handling.
7064 1.1 christos # Darwin uses the -arch flag to determine output architecture.
7065 1.1 christos -model|-arch|-isysroot|--sysroot)
7066 1.1 christos func_append compiler_flags " $arg"
7067 1.1 christos func_append compile_command " $arg"
7068 1.1 christos func_append finalize_command " $arg"
7069 1.1 christos prev=xcompiler
7070 1.1 christos continue
7071 1.1 christos ;;
7072 1.1 christos
7073 1.1 christos -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
7074 1.1 christos |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
7075 1.1 christos func_append compiler_flags " $arg"
7076 1.1 christos func_append compile_command " $arg"
7077 1.1 christos func_append finalize_command " $arg"
7078 1.1 christos case "$new_inherited_linker_flags " in
7079 1.1 christos *" $arg "*) ;;
7080 1.1 christos * ) func_append new_inherited_linker_flags " $arg" ;;
7081 1.1 christos esac
7082 1.1 christos continue
7083 1.1 christos ;;
7084 1.1 christos
7085 1.1 christos -multi_module)
7086 1.1 christos single_module=$wl-multi_module
7087 1.1 christos continue
7088 1.1 christos ;;
7089 1.1 christos
7090 1.1 christos -no-fast-install)
7091 1.1 christos fast_install=no
7092 1.1 christos continue
7093 1.1 christos ;;
7094 1.1 christos
7095 1.1 christos -no-install)
7096 1.1 christos case $host in
7097 1.1 christos *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
7098 1.1 christos # The PATH hackery in wrapper scripts is required on Windows
7099 1.1 christos # and Darwin in order for the loader to find any dlls it needs.
7100 1.1 christos func_warning "'-no-install' is ignored for $host"
7101 1.1 christos func_warning "assuming '-no-fast-install' instead"
7102 1.1 christos fast_install=no
7103 1.1 christos ;;
7104 1.1 christos *) no_install=yes ;;
7105 1.1 christos esac
7106 1.1 christos continue
7107 1.1 christos ;;
7108 1.1 christos
7109 1.1 christos -no-undefined)
7110 1.1 christos allow_undefined=no
7111 1.1 christos continue
7112 1.1 christos ;;
7113 1.1 christos
7114 1.1 christos -objectlist)
7115 1.1 christos prev=objectlist
7116 1.1 christos continue
7117 1.1 christos ;;
7118 1.1 christos
7119 1.1 christos -os2dllname)
7120 1.1 christos prev=os2dllname
7121 1.1 christos continue
7122 1.1 christos ;;
7123 1.1 christos
7124 1.1 christos -o) prev=output ;;
7125 1.1 christos
7126 1.1 christos -precious-files-regex)
7127 1.1 christos prev=precious_regex
7128 1.1 christos continue
7129 1.1 christos ;;
7130 1.1 christos
7131 1.1 christos -release)
7132 1.1 christos prev=release
7133 1.1 christos continue
7134 1.1 christos ;;
7135 1.1 christos
7136 1.1 christos -rpath)
7137 1.1 christos prev=rpath
7138 1.1 christos continue
7139 1.1 christos ;;
7140 1.1 christos
7141 1.1 christos -R)
7142 1.1 christos prev=xrpath
7143 1.1 christos continue
7144 1.1 christos ;;
7145 1.1 christos
7146 1.1 christos -R*)
7147 1.1 christos func_stripname '-R' '' "$arg"
7148 1.1 christos dir=$func_stripname_result
7149 1.1 christos # We need an absolute path.
7150 1.1 christos case $dir in
7151 1.1 christos [\\/]* | [A-Za-z]:[\\/]*) ;;
7152 1.1 christos =*)
7153 1.1 christos func_stripname '=' '' "$dir"
7154 1.1 christos dir=$lt_sysroot$func_stripname_result
7155 1.1 christos ;;
7156 1.1 christos *)
7157 1.1 christos func_fatal_error "only absolute run-paths are allowed"
7158 1.1 christos ;;
7159 1.1 christos esac
7160 1.1 christos case "$xrpath " in
7161 1.1 christos *" $dir "*) ;;
7162 1.1 christos *) func_append xrpath " $dir" ;;
7163 1.1 christos esac
7164 1.1 christos continue
7165 1.1 christos ;;
7166 1.1 christos
7167 1.1 christos -shared)
7168 1.1 christos # The effects of -shared are defined in a previous loop.
7169 1.1 christos continue
7170 1.1 christos ;;
7171 1.1 christos
7172 1.1 christos -shrext)
7173 1.1 christos prev=shrext
7174 1.1 christos continue
7175 1.1 christos ;;
7176 1.1 christos
7177 1.1 christos -static | -static-libtool-libs)
7178 1.1 christos # The effects of -static are defined in a previous loop.
7179 1.1 christos # We used to do the same as -all-static on platforms that
7180 1.1 christos # didn't have a PIC flag, but the assumption that the effects
7181 1.1 christos # would be equivalent was wrong. It would break on at least
7182 1.1 christos # Digital Unix and AIX.
7183 1.1 christos continue
7184 1.1 christos ;;
7185 1.1 christos
7186 1.1 christos -thread-safe)
7187 1.1 christos thread_safe=yes
7188 1.1 christos continue
7189 1.1 christos ;;
7190 1.1 christos
7191 1.1 christos -version-info)
7192 1.1 christos prev=vinfo
7193 1.1 christos continue
7194 1.1 christos ;;
7195 1.1 christos
7196 1.1 christos -version-number)
7197 1.1 christos prev=vinfo
7198 1.1 christos vinfo_number=yes
7199 1.1 christos continue
7200 1.1 christos ;;
7201 1.1 christos
7202 1.1 christos -weak)
7203 1.1 christos prev=weak
7204 1.1 christos continue
7205 1.1 christos ;;
7206 1.1 christos
7207 1.1 christos -Wc,*)
7208 1.1 christos func_stripname '-Wc,' '' "$arg"
7209 1.1 christos args=$func_stripname_result
7210 1.1 christos arg=
7211 1.1 christos save_ifs=$IFS; IFS=,
7212 1.1 christos for flag in $args; do
7213 1.1 christos IFS=$save_ifs
7214 1.1 christos func_quote_for_eval "$flag"
7215 1.1 christos func_append arg " $func_quote_for_eval_result"
7216 1.1 christos func_append compiler_flags " $func_quote_for_eval_result"
7217 1.1 christos done
7218 1.1 christos IFS=$save_ifs
7219 1.1 christos func_stripname ' ' '' "$arg"
7220 1.1 christos arg=$func_stripname_result
7221 1.1 christos ;;
7222 1.1 christos
7223 1.1 christos -Wl,*)
7224 1.1 christos func_stripname '-Wl,' '' "$arg"
7225 1.1 christos args=$func_stripname_result
7226 1.1 christos arg=
7227 1.1 christos save_ifs=$IFS; IFS=,
7228 1.1 christos for flag in $args; do
7229 1.1 christos IFS=$save_ifs
7230 1.1 christos func_quote_for_eval "$flag"
7231 1.1 christos func_append arg " $wl$func_quote_for_eval_result"
7232 1.1 christos func_append compiler_flags " $wl$func_quote_for_eval_result"
7233 1.1 christos func_append linker_flags " $func_quote_for_eval_result"
7234 1.1 christos done
7235 1.1 christos IFS=$save_ifs
7236 1.1 christos func_stripname ' ' '' "$arg"
7237 1.1 christos arg=$func_stripname_result
7238 1.1 christos ;;
7239 1.1 christos
7240 1.1 christos -Xcompiler)
7241 1.1 christos prev=xcompiler
7242 1.1 christos continue
7243 1.1 christos ;;
7244 1.1 christos
7245 1.1 christos -Xlinker)
7246 1.1 christos prev=xlinker
7247 1.1 christos continue
7248 1.1 christos ;;
7249 1.1 christos
7250 1.1 christos -XCClinker)
7251 1.1 christos prev=xcclinker
7252 1.1 christos continue
7253 1.1 christos ;;
7254 1.1 christos
7255 1.1 christos # -msg_* for osf cc
7256 1.1 christos -msg_*)
7257 1.1 christos func_quote_for_eval "$arg"
7258 1.1 christos arg=$func_quote_for_eval_result
7259 1.1 christos ;;
7260 1.1 christos
7261 1.1 christos # Flags to be passed through unchanged, with rationale:
7262 1.1 christos # -64, -mips[0-9] enable 64-bit mode for the SGI compiler
7263 1.1 christos # -r[0-9][0-9]* specify processor for the SGI compiler
7264 1.1 christos # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
7265 1.1 christos # +DA*, +DD* enable 64-bit mode for the HP compiler
7266 1.1 christos # -q* compiler args for the IBM compiler
7267 1.1 christos # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
7268 1.1 christos # -F/path path to uninstalled frameworks, gcc on darwin
7269 1.1 christos # -p, -pg, --coverage, -fprofile-* profiling flags for GCC
7270 1.1 christos # -fstack-protector* stack protector flags for GCC
7271 1.1 christos # @file GCC response files
7272 1.1 christos # -tp=* Portland pgcc target processor selection
7273 1.1 christos # --sysroot=* for sysroot support
7274 1.1 christos # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
7275 1.1.1.2 christos # -specs=* GCC specs files
7276 1.1 christos # -stdlib=* select c++ std lib with clang
7277 1.1.1.2 christos # -fsanitize=* Clang/GCC memory and address sanitizer
7278 1.1 christos -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
7279 1.1 christos -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
7280 1.1.1.2 christos -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
7281 1.1.1.2 christos -specs=*|-fsanitize=*)
7282 1.1 christos func_quote_for_eval "$arg"
7283 1.1 christos arg=$func_quote_for_eval_result
7284 1.1 christos func_append compile_command " $arg"
7285 1.1 christos func_append finalize_command " $arg"
7286 1.1 christos func_append compiler_flags " $arg"
7287 1.1 christos continue
7288 1.1 christos ;;
7289 1.1 christos
7290 1.1 christos -Z*)
7291 1.1 christos if test os2 = "`expr $host : '.*\(os2\)'`"; then
7292 1.1 christos # OS/2 uses -Zxxx to specify OS/2-specific options
7293 1.1 christos compiler_flags="$compiler_flags $arg"
7294 1.1 christos func_append compile_command " $arg"
7295 1.1 christos func_append finalize_command " $arg"
7296 1.1 christos case $arg in
7297 1.1 christos -Zlinker | -Zstack)
7298 1.1 christos prev=xcompiler
7299 1.1 christos ;;
7300 1.1 christos esac
7301 1.1 christos continue
7302 1.1 christos else
7303 1.1 christos # Otherwise treat like 'Some other compiler flag' below
7304 1.1 christos func_quote_for_eval "$arg"
7305 1.1 christos arg=$func_quote_for_eval_result
7306 1.1 christos fi
7307 1.1 christos ;;
7308 1.1 christos
7309 1.1 christos # Some other compiler flag.
7310 1.1 christos -* | +*)
7311 1.1 christos func_quote_for_eval "$arg"
7312 1.1 christos arg=$func_quote_for_eval_result
7313 1.1 christos ;;
7314 1.1 christos
7315 1.1 christos *.$objext)
7316 1.1 christos # A standard object.
7317 1.1 christos func_append objs " $arg"
7318 1.1 christos ;;
7319 1.1 christos
7320 1.1 christos *.lo)
7321 1.1 christos # A libtool-controlled object.
7322 1.1 christos
7323 1.1 christos # Check to see that this really is a libtool object.
7324 1.1 christos if func_lalib_unsafe_p "$arg"; then
7325 1.1 christos pic_object=
7326 1.1 christos non_pic_object=
7327 1.1 christos
7328 1.1 christos # Read the .lo file
7329 1.1 christos func_source "$arg"
7330 1.1 christos
7331 1.1 christos if test -z "$pic_object" ||
7332 1.1 christos test -z "$non_pic_object" ||
7333 1.1 christos test none = "$pic_object" &&
7334 1.1 christos test none = "$non_pic_object"; then
7335 1.1 christos func_fatal_error "cannot find name of object for '$arg'"
7336 1.1 christos fi
7337 1.1 christos
7338 1.1 christos # Extract subdirectory from the argument.
7339 1.1 christos func_dirname "$arg" "/" ""
7340 1.1 christos xdir=$func_dirname_result
7341 1.1 christos
7342 1.1 christos test none = "$pic_object" || {
7343 1.1 christos # Prepend the subdirectory the object is found in.
7344 1.1 christos pic_object=$xdir$pic_object
7345 1.1 christos
7346 1.1 christos if test dlfiles = "$prev"; then
7347 1.1 christos if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
7348 1.1 christos func_append dlfiles " $pic_object"
7349 1.1 christos prev=
7350 1.1 christos continue
7351 1.1 christos else
7352 1.1 christos # If libtool objects are unsupported, then we need to preload.
7353 1.1 christos prev=dlprefiles
7354 1.1 christos fi
7355 1.1 christos fi
7356 1.1 christos
7357 1.1 christos # CHECK ME: I think I busted this. -Ossama
7358 1.1 christos if test dlprefiles = "$prev"; then
7359 1.1 christos # Preload the old-style object.
7360 1.1 christos func_append dlprefiles " $pic_object"
7361 1.1 christos prev=
7362 1.1 christos fi
7363 1.1 christos
7364 1.1 christos # A PIC object.
7365 1.1 christos func_append libobjs " $pic_object"
7366 1.1 christos arg=$pic_object
7367 1.1 christos }
7368 1.1 christos
7369 1.1 christos # Non-PIC object.
7370 1.1 christos if test none != "$non_pic_object"; then
7371 1.1 christos # Prepend the subdirectory the object is found in.
7372 1.1 christos non_pic_object=$xdir$non_pic_object
7373 1.1 christos
7374 1.1 christos # A standard non-PIC object
7375 1.1 christos func_append non_pic_objects " $non_pic_object"
7376 1.1 christos if test -z "$pic_object" || test none = "$pic_object"; then
7377 1.1 christos arg=$non_pic_object
7378 1.1 christos fi
7379 1.1 christos else
7380 1.1 christos # If the PIC object exists, use it instead.
7381 1.1 christos # $xdir was prepended to $pic_object above.
7382 1.1 christos non_pic_object=$pic_object
7383 1.1 christos func_append non_pic_objects " $non_pic_object"
7384 1.1 christos fi
7385 1.1 christos else
7386 1.1 christos # Only an error if not doing a dry-run.
7387 1.1 christos if $opt_dry_run; then
7388 1.1 christos # Extract subdirectory from the argument.
7389 1.1 christos func_dirname "$arg" "/" ""
7390 1.1 christos xdir=$func_dirname_result
7391 1.1 christos
7392 1.1 christos func_lo2o "$arg"
7393 1.1 christos pic_object=$xdir$objdir/$func_lo2o_result
7394 1.1 christos non_pic_object=$xdir$func_lo2o_result
7395 1.1 christos func_append libobjs " $pic_object"
7396 1.1 christos func_append non_pic_objects " $non_pic_object"
7397 1.1 christos else
7398 1.1 christos func_fatal_error "'$arg' is not a valid libtool object"
7399 1.1 christos fi
7400 1.1 christos fi
7401 1.1 christos ;;
7402 1.1 christos
7403 1.1 christos *.$libext)
7404 1.1 christos # An archive.
7405 1.1 christos func_append deplibs " $arg"
7406 1.1 christos func_append old_deplibs " $arg"
7407 1.1 christos continue
7408 1.1 christos ;;
7409 1.1 christos
7410 1.1 christos *.la)
7411 1.1 christos # A libtool-controlled library.
7412 1.1 christos
7413 1.1 christos func_resolve_sysroot "$arg"
7414 1.1 christos if test dlfiles = "$prev"; then
7415 1.1 christos # This library was specified with -dlopen.
7416 1.1 christos func_append dlfiles " $func_resolve_sysroot_result"
7417 1.1 christos prev=
7418 1.1 christos elif test dlprefiles = "$prev"; then
7419 1.1 christos # The library was specified with -dlpreopen.
7420 1.1 christos func_append dlprefiles " $func_resolve_sysroot_result"
7421 1.1 christos prev=
7422 1.1 christos else
7423 1.1 christos func_append deplibs " $func_resolve_sysroot_result"
7424 1.1 christos fi
7425 1.1 christos continue
7426 1.1 christos ;;
7427 1.1 christos
7428 1.1 christos # Some other compiler argument.
7429 1.1 christos *)
7430 1.1 christos # Unknown arguments in both finalize_command and compile_command need
7431 1.1 christos # to be aesthetically quoted because they are evaled later.
7432 1.1 christos func_quote_for_eval "$arg"
7433 1.1 christos arg=$func_quote_for_eval_result
7434 1.1 christos ;;
7435 1.1 christos esac # arg
7436 1.1 christos
7437 1.1 christos # Now actually substitute the argument into the commands.
7438 1.1 christos if test -n "$arg"; then
7439 1.1 christos func_append compile_command " $arg"
7440 1.1 christos func_append finalize_command " $arg"
7441 1.1 christos fi
7442 1.1 christos done # argument parsing loop
7443 1.1 christos
7444 1.1 christos test -n "$prev" && \
7445 1.1 christos func_fatal_help "the '$prevarg' option requires an argument"
7446 1.1 christos
7447 1.1 christos if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
7448 1.1 christos eval arg=\"$export_dynamic_flag_spec\"
7449 1.1 christos func_append compile_command " $arg"
7450 1.1 christos func_append finalize_command " $arg"
7451 1.1 christos fi
7452 1.1 christos
7453 1.1 christos oldlibs=
7454 1.1 christos # calculate the name of the file, without its directory
7455 1.1 christos func_basename "$output"
7456 1.1 christos outputname=$func_basename_result
7457 1.1 christos libobjs_save=$libobjs
7458 1.1 christos
7459 1.1 christos if test -n "$shlibpath_var"; then
7460 1.1 christos # get the directories listed in $shlibpath_var
7461 1.1 christos eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
7462 1.1 christos else
7463 1.1 christos shlib_search_path=
7464 1.1 christos fi
7465 1.1 christos eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
7466 1.1 christos eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
7467 1.1 christos
7468 1.1 christos # Definition is injected by LT_CONFIG during libtool generation.
7469 1.1 christos func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
7470 1.1 christos
7471 1.1 christos func_dirname "$output" "/" ""
7472 1.1 christos output_objdir=$func_dirname_result$objdir
7473 1.1 christos func_to_tool_file "$output_objdir/"
7474 1.1 christos tool_output_objdir=$func_to_tool_file_result
7475 1.1 christos # Create the object directory.
7476 1.1 christos func_mkdir_p "$output_objdir"
7477 1.1 christos
7478 1.1 christos # Determine the type of output
7479 1.1 christos case $output in
7480 1.1 christos "")
7481 1.1 christos func_fatal_help "you must specify an output file"
7482 1.1 christos ;;
7483 1.1 christos *.$libext) linkmode=oldlib ;;
7484 1.1 christos *.lo | *.$objext) linkmode=obj ;;
7485 1.1 christos *.la) linkmode=lib ;;
7486 1.1 christos *) linkmode=prog ;; # Anything else should be a program.
7487 1.1 christos esac
7488 1.1 christos
7489 1.1 christos specialdeplibs=
7490 1.1 christos
7491 1.1 christos libs=
7492 1.1 christos # Find all interdependent deplibs by searching for libraries
7493 1.1 christos # that are linked more than once (e.g. -la -lb -la)
7494 1.1 christos for deplib in $deplibs; do
7495 1.1 christos if $opt_preserve_dup_deps; then
7496 1.1 christos case "$libs " in
7497 1.1 christos *" $deplib "*) func_append specialdeplibs " $deplib" ;;
7498 1.1 christos esac
7499 1.1 christos fi
7500 1.1 christos func_append libs " $deplib"
7501 1.1 christos done
7502 1.1 christos
7503 1.1 christos if test lib = "$linkmode"; then
7504 1.1 christos libs="$predeps $libs $compiler_lib_search_path $postdeps"
7505 1.1 christos
7506 1.1 christos # Compute libraries that are listed more than once in $predeps
7507 1.1 christos # $postdeps and mark them as special (i.e., whose duplicates are
7508 1.1 christos # not to be eliminated).
7509 1.1 christos pre_post_deps=
7510 1.1 christos if $opt_duplicate_compiler_generated_deps; then
7511 1.1 christos for pre_post_dep in $predeps $postdeps; do
7512 1.1 christos case "$pre_post_deps " in
7513 1.1 christos *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
7514 1.1 christos esac
7515 1.1 christos func_append pre_post_deps " $pre_post_dep"
7516 1.1 christos done
7517 1.1 christos fi
7518 1.1 christos pre_post_deps=
7519 1.1 christos fi
7520 1.1 christos
7521 1.1 christos deplibs=
7522 1.1 christos newdependency_libs=
7523 1.1 christos newlib_search_path=
7524 1.1 christos need_relink=no # whether we're linking any uninstalled libtool libraries
7525 1.1 christos notinst_deplibs= # not-installed libtool libraries
7526 1.1 christos notinst_path= # paths that contain not-installed libtool libraries
7527 1.1 christos
7528 1.1 christos case $linkmode in
7529 1.1 christos lib)
7530 1.1 christos passes="conv dlpreopen link"
7531 1.1 christos for file in $dlfiles $dlprefiles; do
7532 1.1 christos case $file in
7533 1.1 christos *.la) ;;
7534 1.1 christos *)
7535 1.1 christos func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
7536 1.1 christos ;;
7537 1.1 christos esac
7538 1.1 christos done
7539 1.1 christos ;;
7540 1.1 christos prog)
7541 1.1 christos compile_deplibs=
7542 1.1 christos finalize_deplibs=
7543 1.1 christos alldeplibs=false
7544 1.1 christos newdlfiles=
7545 1.1 christos newdlprefiles=
7546 1.1 christos passes="conv scan dlopen dlpreopen link"
7547 1.1 christos ;;
7548 1.1 christos *) passes="conv"
7549 1.1 christos ;;
7550 1.1 christos esac
7551 1.1 christos
7552 1.1 christos for pass in $passes; do
7553 1.1 christos # The preopen pass in lib mode reverses $deplibs; put it back here
7554 1.1 christos # so that -L comes before libs that need it for instance...
7555 1.1 christos if test lib,link = "$linkmode,$pass"; then
7556 1.1 christos ## FIXME: Find the place where the list is rebuilt in the wrong
7557 1.1 christos ## order, and fix it there properly
7558 1.1 christos tmp_deplibs=
7559 1.1 christos for deplib in $deplibs; do
7560 1.1 christos tmp_deplibs="$deplib $tmp_deplibs"
7561 1.1 christos done
7562 1.1 christos deplibs=$tmp_deplibs
7563 1.1 christos fi
7564 1.1 christos
7565 1.1 christos if test lib,link = "$linkmode,$pass" ||
7566 1.1 christos test prog,scan = "$linkmode,$pass"; then
7567 1.1 christos libs=$deplibs
7568 1.1 christos deplibs=
7569 1.1 christos fi
7570 1.1 christos if test prog = "$linkmode"; then
7571 1.1 christos case $pass in
7572 1.1 christos dlopen) libs=$dlfiles ;;
7573 1.1 christos dlpreopen) libs=$dlprefiles ;;
7574 1.1.1.2 christos link)
7575 1.1.1.2 christos libs="$deplibs %DEPLIBS%"
7576 1.1.1.2 christos test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
7577 1.1.1.2 christos ;;
7578 1.1 christos esac
7579 1.1 christos fi
7580 1.1 christos if test lib,dlpreopen = "$linkmode,$pass"; then
7581 1.1 christos # Collect and forward deplibs of preopened libtool libs
7582 1.1 christos for lib in $dlprefiles; do
7583 1.1 christos # Ignore non-libtool-libs
7584 1.1 christos dependency_libs=
7585 1.1 christos func_resolve_sysroot "$lib"
7586 1.1 christos case $lib in
7587 1.1 christos *.la) func_source "$func_resolve_sysroot_result" ;;
7588 1.1 christos esac
7589 1.1 christos
7590 1.1 christos # Collect preopened libtool deplibs, except any this library
7591 1.1 christos # has declared as weak libs
7592 1.1 christos for deplib in $dependency_libs; do
7593 1.1 christos func_basename "$deplib"
7594 1.1 christos deplib_base=$func_basename_result
7595 1.1 christos case " $weak_libs " in
7596 1.1 christos *" $deplib_base "*) ;;
7597 1.1 christos *) func_append deplibs " $deplib" ;;
7598 1.1 christos esac
7599 1.1 christos done
7600 1.1 christos done
7601 1.1 christos libs=$dlprefiles
7602 1.1 christos fi
7603 1.1 christos if test dlopen = "$pass"; then
7604 1.1 christos # Collect dlpreopened libraries
7605 1.1 christos save_deplibs=$deplibs
7606 1.1 christos deplibs=
7607 1.1 christos fi
7608 1.1 christos
7609 1.1 christos for deplib in $libs; do
7610 1.1 christos lib=
7611 1.1 christos found=false
7612 1.1 christos case $deplib in
7613 1.1 christos -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
7614 1.1 christos |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
7615 1.1 christos if test prog,link = "$linkmode,$pass"; then
7616 1.1 christos compile_deplibs="$deplib $compile_deplibs"
7617 1.1 christos finalize_deplibs="$deplib $finalize_deplibs"
7618 1.1 christos else
7619 1.1 christos func_append compiler_flags " $deplib"
7620 1.1 christos if test lib = "$linkmode"; then
7621 1.1 christos case "$new_inherited_linker_flags " in
7622 1.1 christos *" $deplib "*) ;;
7623 1.1 christos * ) func_append new_inherited_linker_flags " $deplib" ;;
7624 1.1 christos esac
7625 1.1 christos fi
7626 1.1 christos fi
7627 1.1 christos continue
7628 1.1 christos ;;
7629 1.1 christos -l*)
7630 1.1 christos if test lib != "$linkmode" && test prog != "$linkmode"; then
7631 1.1 christos func_warning "'-l' is ignored for archives/objects"
7632 1.1 christos continue
7633 1.1 christos fi
7634 1.1 christos func_stripname '-l' '' "$deplib"
7635 1.1 christos name=$func_stripname_result
7636 1.1 christos if test lib = "$linkmode"; then
7637 1.1 christos searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
7638 1.1 christos else
7639 1.1 christos searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
7640 1.1 christos fi
7641 1.1 christos for searchdir in $searchdirs; do
7642 1.1 christos for search_ext in .la $std_shrext .so .a; do
7643 1.1 christos # Search the libtool library
7644 1.1 christos lib=$searchdir/lib$name$search_ext
7645 1.1 christos if test -f "$lib"; then
7646 1.1 christos if test .la = "$search_ext"; then
7647 1.1 christos found=:
7648 1.1 christos else
7649 1.1 christos found=false
7650 1.1 christos fi
7651 1.1 christos break 2
7652 1.1 christos fi
7653 1.1 christos done
7654 1.1 christos done
7655 1.1 christos if $found; then
7656 1.1 christos # deplib is a libtool library
7657 1.1 christos # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
7658 1.1 christos # We need to do some special things here, and not later.
7659 1.1 christos if test yes = "$allow_libtool_libs_with_static_runtimes"; then
7660 1.1 christos case " $predeps $postdeps " in
7661 1.1 christos *" $deplib "*)
7662 1.1 christos if func_lalib_p "$lib"; then
7663 1.1 christos library_names=
7664 1.1 christos old_library=
7665 1.1 christos func_source "$lib"
7666 1.1 christos for l in $old_library $library_names; do
7667 1.1 christos ll=$l
7668 1.1 christos done
7669 1.1 christos if test "X$ll" = "X$old_library"; then # only static version available
7670 1.1 christos found=false
7671 1.1 christos func_dirname "$lib" "" "."
7672 1.1 christos ladir=$func_dirname_result
7673 1.1 christos lib=$ladir/$old_library
7674 1.1 christos if test prog,link = "$linkmode,$pass"; then
7675 1.1 christos compile_deplibs="$deplib $compile_deplibs"
7676 1.1 christos finalize_deplibs="$deplib $finalize_deplibs"
7677 1.1 christos else
7678 1.1 christos deplibs="$deplib $deplibs"
7679 1.1 christos test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
7680 1.1 christos fi
7681 1.1 christos continue
7682 1.1 christos fi
7683 1.1 christos fi
7684 1.1 christos ;;
7685 1.1 christos *) ;;
7686 1.1 christos esac
7687 1.1 christos fi
7688 1.1 christos else
7689 1.1 christos # deplib doesn't seem to be a libtool library
7690 1.1 christos if test prog,link = "$linkmode,$pass"; then
7691 1.1 christos compile_deplibs="$deplib $compile_deplibs"
7692 1.1 christos finalize_deplibs="$deplib $finalize_deplibs"
7693 1.1 christos else
7694 1.1 christos deplibs="$deplib $deplibs"
7695 1.1 christos test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
7696 1.1 christos fi
7697 1.1 christos continue
7698 1.1 christos fi
7699 1.1 christos ;; # -l
7700 1.1 christos *.ltframework)
7701 1.1 christos if test prog,link = "$linkmode,$pass"; then
7702 1.1 christos compile_deplibs="$deplib $compile_deplibs"
7703 1.1 christos finalize_deplibs="$deplib $finalize_deplibs"
7704 1.1 christos else
7705 1.1 christos deplibs="$deplib $deplibs"
7706 1.1 christos if test lib = "$linkmode"; then
7707 1.1 christos case "$new_inherited_linker_flags " in
7708 1.1 christos *" $deplib "*) ;;
7709 1.1 christos * ) func_append new_inherited_linker_flags " $deplib" ;;
7710 1.1 christos esac
7711 1.1 christos fi
7712 1.1 christos fi
7713 1.1 christos continue
7714 1.1 christos ;;
7715 1.1 christos -L*)
7716 1.1 christos case $linkmode in
7717 1.1 christos lib)
7718 1.1 christos deplibs="$deplib $deplibs"
7719 1.1 christos test conv = "$pass" && continue
7720 1.1 christos newdependency_libs="$deplib $newdependency_libs"
7721 1.1 christos func_stripname '-L' '' "$deplib"
7722 1.1 christos func_resolve_sysroot "$func_stripname_result"
7723 1.1 christos func_append newlib_search_path " $func_resolve_sysroot_result"
7724 1.1 christos ;;
7725 1.1 christos prog)
7726 1.1 christos if test conv = "$pass"; then
7727 1.1 christos deplibs="$deplib $deplibs"
7728 1.1 christos continue
7729 1.1 christos fi
7730 1.1 christos if test scan = "$pass"; then
7731 1.1 christos deplibs="$deplib $deplibs"
7732 1.1 christos else
7733 1.1 christos compile_deplibs="$deplib $compile_deplibs"
7734 1.1 christos finalize_deplibs="$deplib $finalize_deplibs"
7735 1.1 christos fi
7736 1.1 christos func_stripname '-L' '' "$deplib"
7737 1.1 christos func_resolve_sysroot "$func_stripname_result"
7738 1.1 christos func_append newlib_search_path " $func_resolve_sysroot_result"
7739 1.1 christos ;;
7740 1.1 christos *)
7741 1.1 christos func_warning "'-L' is ignored for archives/objects"
7742 1.1 christos ;;
7743 1.1 christos esac # linkmode
7744 1.1 christos continue
7745 1.1 christos ;; # -L
7746 1.1 christos -R*)
7747 1.1 christos if test link = "$pass"; then
7748 1.1 christos func_stripname '-R' '' "$deplib"
7749 1.1 christos func_resolve_sysroot "$func_stripname_result"
7750 1.1 christos dir=$func_resolve_sysroot_result
7751 1.1 christos # Make sure the xrpath contains only unique directories.
7752 1.1 christos case "$xrpath " in
7753 1.1 christos *" $dir "*) ;;
7754 1.1 christos *) func_append xrpath " $dir" ;;
7755 1.1 christos esac
7756 1.1 christos fi
7757 1.1 christos deplibs="$deplib $deplibs"
7758 1.1 christos continue
7759 1.1 christos ;;
7760 1.1 christos *.la)
7761 1.1 christos func_resolve_sysroot "$deplib"
7762 1.1 christos lib=$func_resolve_sysroot_result
7763 1.1 christos ;;
7764 1.1 christos *.$libext)
7765 1.1 christos if test conv = "$pass"; then
7766 1.1 christos deplibs="$deplib $deplibs"
7767 1.1 christos continue
7768 1.1 christos fi
7769 1.1 christos case $linkmode in
7770 1.1 christos lib)
7771 1.1 christos # Linking convenience modules into shared libraries is allowed,
7772 1.1 christos # but linking other static libraries is non-portable.
7773 1.1 christos case " $dlpreconveniencelibs " in
7774 1.1 christos *" $deplib "*) ;;
7775 1.1 christos *)
7776 1.1 christos valid_a_lib=false
7777 1.1 christos case $deplibs_check_method in
7778 1.1 christos match_pattern*)
7779 1.1 christos set dummy $deplibs_check_method; shift
7780 1.1 christos match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7781 1.1 christos if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
7782 1.1 christos | $EGREP "$match_pattern_regex" > /dev/null; then
7783 1.1 christos valid_a_lib=:
7784 1.1 christos fi
7785 1.1 christos ;;
7786 1.1 christos pass_all)
7787 1.1 christos valid_a_lib=:
7788 1.1 christos ;;
7789 1.1 christos esac
7790 1.1 christos if $valid_a_lib; then
7791 1.1 christos echo
7792 1.1 christos $ECHO "*** Warning: Linking the shared library $output against the"
7793 1.1 christos $ECHO "*** static library $deplib is not portable!"
7794 1.1 christos deplibs="$deplib $deplibs"
7795 1.1 christos else
7796 1.1 christos echo
7797 1.1 christos $ECHO "*** Warning: Trying to link with static lib archive $deplib."
7798 1.1 christos echo "*** I have the capability to make that library automatically link in when"
7799 1.1 christos echo "*** you link to this library. But I can only do this if you have a"
7800 1.1 christos echo "*** shared version of the library, which you do not appear to have"
7801 1.1 christos echo "*** because the file extensions .$libext of this argument makes me believe"
7802 1.1 christos echo "*** that it is just a static archive that I should not use here."
7803 1.1 christos fi
7804 1.1 christos ;;
7805 1.1 christos esac
7806 1.1 christos continue
7807 1.1 christos ;;
7808 1.1 christos prog)
7809 1.1 christos if test link != "$pass"; then
7810 1.1 christos deplibs="$deplib $deplibs"
7811 1.1 christos else
7812 1.1 christos compile_deplibs="$deplib $compile_deplibs"
7813 1.1 christos finalize_deplibs="$deplib $finalize_deplibs"
7814 1.1 christos fi
7815 1.1 christos continue
7816 1.1 christos ;;
7817 1.1 christos esac # linkmode
7818 1.1 christos ;; # *.$libext
7819 1.1 christos *.lo | *.$objext)
7820 1.1 christos if test conv = "$pass"; then
7821 1.1 christos deplibs="$deplib $deplibs"
7822 1.1 christos elif test prog = "$linkmode"; then
7823 1.1 christos if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
7824 1.1 christos # If there is no dlopen support or we're linking statically,
7825 1.1 christos # we need to preload.
7826 1.1 christos func_append newdlprefiles " $deplib"
7827 1.1 christos compile_deplibs="$deplib $compile_deplibs"
7828 1.1 christos finalize_deplibs="$deplib $finalize_deplibs"
7829 1.1 christos else
7830 1.1 christos func_append newdlfiles " $deplib"
7831 1.1 christos fi
7832 1.1 christos fi
7833 1.1 christos continue
7834 1.1 christos ;;
7835 1.1 christos %DEPLIBS%)
7836 1.1 christos alldeplibs=:
7837 1.1 christos continue
7838 1.1 christos ;;
7839 1.1 christos esac # case $deplib
7840 1.1 christos
7841 1.1 christos $found || test -f "$lib" \
7842 1.1 christos || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
7843 1.1 christos
7844 1.1 christos # Check to see that this really is a libtool archive.
7845 1.1 christos func_lalib_unsafe_p "$lib" \
7846 1.1 christos || func_fatal_error "'$lib' is not a valid libtool archive"
7847 1.1 christos
7848 1.1 christos func_dirname "$lib" "" "."
7849 1.1 christos ladir=$func_dirname_result
7850 1.1 christos
7851 1.1 christos dlname=
7852 1.1 christos dlopen=
7853 1.1 christos dlpreopen=
7854 1.1 christos libdir=
7855 1.1 christos library_names=
7856 1.1 christos old_library=
7857 1.1 christos inherited_linker_flags=
7858 1.1 christos # If the library was installed with an old release of libtool,
7859 1.1 christos # it will not redefine variables installed, or shouldnotlink
7860 1.1 christos installed=yes
7861 1.1 christos shouldnotlink=no
7862 1.1 christos avoidtemprpath=
7863 1.1 christos
7864 1.1 christos
7865 1.1 christos # Read the .la file
7866 1.1 christos func_source "$lib"
7867 1.1 christos
7868 1.1 christos # Convert "-framework foo" to "foo.ltframework"
7869 1.1 christos if test -n "$inherited_linker_flags"; then
7870 1.1 christos tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
7871 1.1 christos for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
7872 1.1 christos case " $new_inherited_linker_flags " in
7873 1.1 christos *" $tmp_inherited_linker_flag "*) ;;
7874 1.1 christos *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
7875 1.1 christos esac
7876 1.1 christos done
7877 1.1 christos fi
7878 1.1 christos dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7879 1.1 christos if test lib,link = "$linkmode,$pass" ||
7880 1.1 christos test prog,scan = "$linkmode,$pass" ||
7881 1.1 christos { test prog != "$linkmode" && test lib != "$linkmode"; }; then
7882 1.1 christos test -n "$dlopen" && func_append dlfiles " $dlopen"
7883 1.1 christos test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
7884 1.1 christos fi
7885 1.1 christos
7886 1.1 christos if test conv = "$pass"; then
7887 1.1 christos # Only check for convenience libraries
7888 1.1 christos deplibs="$lib $deplibs"
7889 1.1 christos if test -z "$libdir"; then
7890 1.1 christos if test -z "$old_library"; then
7891 1.1 christos func_fatal_error "cannot find name of link library for '$lib'"
7892 1.1 christos fi
7893 1.1 christos # It is a libtool convenience library, so add in its objects.
7894 1.1 christos func_append convenience " $ladir/$objdir/$old_library"
7895 1.1 christos func_append old_convenience " $ladir/$objdir/$old_library"
7896 1.1.1.2 christos tmp_libs=
7897 1.1.1.2 christos for deplib in $dependency_libs; do
7898 1.1.1.2 christos deplibs="$deplib $deplibs"
7899 1.1.1.2 christos if $opt_preserve_dup_deps; then
7900 1.1.1.2 christos case "$tmp_libs " in
7901 1.1.1.2 christos *" $deplib "*) func_append specialdeplibs " $deplib" ;;
7902 1.1.1.2 christos esac
7903 1.1.1.2 christos fi
7904 1.1.1.2 christos func_append tmp_libs " $deplib"
7905 1.1.1.2 christos done
7906 1.1 christos elif test prog != "$linkmode" && test lib != "$linkmode"; then
7907 1.1 christos func_fatal_error "'$lib' is not a convenience library"
7908 1.1 christos fi
7909 1.1 christos continue
7910 1.1 christos fi # $pass = conv
7911 1.1 christos
7912 1.1 christos
7913 1.1 christos # Get the name of the library we link against.
7914 1.1 christos linklib=
7915 1.1 christos if test -n "$old_library" &&
7916 1.1 christos { test yes = "$prefer_static_libs" ||
7917 1.1 christos test built,no = "$prefer_static_libs,$installed"; }; then
7918 1.1 christos linklib=$old_library
7919 1.1 christos else
7920 1.1 christos for l in $old_library $library_names; do
7921 1.1 christos linklib=$l
7922 1.1 christos done
7923 1.1 christos fi
7924 1.1 christos if test -z "$linklib"; then
7925 1.1 christos func_fatal_error "cannot find name of link library for '$lib'"
7926 1.1 christos fi
7927 1.1 christos
7928 1.1 christos # This library was specified with -dlopen.
7929 1.1 christos if test dlopen = "$pass"; then
7930 1.1 christos test -z "$libdir" \
7931 1.1 christos && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
7932 1.1 christos if test -z "$dlname" ||
7933 1.1 christos test yes != "$dlopen_support" ||
7934 1.1 christos test no = "$build_libtool_libs"
7935 1.1 christos then
7936 1.1 christos # If there is no dlname, no dlopen support or we're linking
7937 1.1 christos # statically, we need to preload. We also need to preload any
7938 1.1 christos # dependent libraries so libltdl's deplib preloader doesn't
7939 1.1 christos # bomb out in the load deplibs phase.
7940 1.1 christos func_append dlprefiles " $lib $dependency_libs"
7941 1.1 christos else
7942 1.1 christos func_append newdlfiles " $lib"
7943 1.1 christos fi
7944 1.1 christos continue
7945 1.1 christos fi # $pass = dlopen
7946 1.1 christos
7947 1.1 christos # We need an absolute path.
7948 1.1 christos case $ladir in
7949 1.1 christos [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
7950 1.1 christos *)
7951 1.1 christos abs_ladir=`cd "$ladir" && pwd`
7952 1.1 christos if test -z "$abs_ladir"; then
7953 1.1 christos func_warning "cannot determine absolute directory name of '$ladir'"
7954 1.1 christos func_warning "passing it literally to the linker, although it might fail"
7955 1.1 christos abs_ladir=$ladir
7956 1.1 christos fi
7957 1.1 christos ;;
7958 1.1 christos esac
7959 1.1 christos func_basename "$lib"
7960 1.1 christos laname=$func_basename_result
7961 1.1 christos
7962 1.1 christos # Find the relevant object directory and library name.
7963 1.1 christos if test yes = "$installed"; then
7964 1.1 christos if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
7965 1.1 christos func_warning "library '$lib' was moved."
7966 1.1 christos dir=$ladir
7967 1.1 christos absdir=$abs_ladir
7968 1.1 christos libdir=$abs_ladir
7969 1.1 christos else
7970 1.1 christos dir=$lt_sysroot$libdir
7971 1.1 christos absdir=$lt_sysroot$libdir
7972 1.1 christos fi
7973 1.1 christos test yes = "$hardcode_automatic" && avoidtemprpath=yes
7974 1.1 christos else
7975 1.1 christos if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
7976 1.1 christos dir=$ladir
7977 1.1 christos absdir=$abs_ladir
7978 1.1 christos # Remove this search path later
7979 1.1 christos func_append notinst_path " $abs_ladir"
7980 1.1 christos else
7981 1.1 christos dir=$ladir/$objdir
7982 1.1 christos absdir=$abs_ladir/$objdir
7983 1.1 christos # Remove this search path later
7984 1.1 christos func_append notinst_path " $abs_ladir"
7985 1.1 christos fi
7986 1.1 christos fi # $installed = yes
7987 1.1 christos func_stripname 'lib' '.la' "$laname"
7988 1.1 christos name=$func_stripname_result
7989 1.1 christos
7990 1.1 christos # This library was specified with -dlpreopen.
7991 1.1 christos if test dlpreopen = "$pass"; then
7992 1.1 christos if test -z "$libdir" && test prog = "$linkmode"; then
7993 1.1 christos func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
7994 1.1 christos fi
7995 1.1 christos case $host in
7996 1.1 christos # special handling for platforms with PE-DLLs.
7997 1.1 christos *cygwin* | *mingw* | *cegcc* )
7998 1.1 christos # Linker will automatically link against shared library if both
7999 1.1 christos # static and shared are present. Therefore, ensure we extract
8000 1.1 christos # symbols from the import library if a shared library is present
8001 1.1 christos # (otherwise, the dlopen module name will be incorrect). We do
8002 1.1 christos # this by putting the import library name into $newdlprefiles.
8003 1.1 christos # We recover the dlopen module name by 'saving' the la file
8004 1.1 christos # name in a special purpose variable, and (later) extracting the
8005 1.1 christos # dlname from the la file.
8006 1.1 christos if test -n "$dlname"; then
8007 1.1 christos func_tr_sh "$dir/$linklib"
8008 1.1 christos eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
8009 1.1 christos func_append newdlprefiles " $dir/$linklib"
8010 1.1 christos else
8011 1.1 christos func_append newdlprefiles " $dir/$old_library"
8012 1.1 christos # Keep a list of preopened convenience libraries to check
8013 1.1 christos # that they are being used correctly in the link pass.
8014 1.1 christos test -z "$libdir" && \
8015 1.1 christos func_append dlpreconveniencelibs " $dir/$old_library"
8016 1.1 christos fi
8017 1.1 christos ;;
8018 1.1 christos * )
8019 1.1 christos # Prefer using a static library (so that no silly _DYNAMIC symbols
8020 1.1 christos # are required to link).
8021 1.1 christos if test -n "$old_library"; then
8022 1.1 christos func_append newdlprefiles " $dir/$old_library"
8023 1.1 christos # Keep a list of preopened convenience libraries to check
8024 1.1 christos # that they are being used correctly in the link pass.
8025 1.1 christos test -z "$libdir" && \
8026 1.1 christos func_append dlpreconveniencelibs " $dir/$old_library"
8027 1.1 christos # Otherwise, use the dlname, so that lt_dlopen finds it.
8028 1.1 christos elif test -n "$dlname"; then
8029 1.1 christos func_append newdlprefiles " $dir/$dlname"
8030 1.1 christos else
8031 1.1 christos func_append newdlprefiles " $dir/$linklib"
8032 1.1 christos fi
8033 1.1 christos ;;
8034 1.1 christos esac
8035 1.1 christos fi # $pass = dlpreopen
8036 1.1 christos
8037 1.1 christos if test -z "$libdir"; then
8038 1.1 christos # Link the convenience library
8039 1.1 christos if test lib = "$linkmode"; then
8040 1.1 christos deplibs="$dir/$old_library $deplibs"
8041 1.1 christos elif test prog,link = "$linkmode,$pass"; then
8042 1.1 christos compile_deplibs="$dir/$old_library $compile_deplibs"
8043 1.1 christos finalize_deplibs="$dir/$old_library $finalize_deplibs"
8044 1.1 christos else
8045 1.1 christos deplibs="$lib $deplibs" # used for prog,scan pass
8046 1.1 christos fi
8047 1.1 christos continue
8048 1.1 christos fi
8049 1.1 christos
8050 1.1 christos
8051 1.1 christos if test prog = "$linkmode" && test link != "$pass"; then
8052 1.1 christos func_append newlib_search_path " $ladir"
8053 1.1 christos deplibs="$lib $deplibs"
8054 1.1 christos
8055 1.1 christos linkalldeplibs=false
8056 1.1 christos if test no != "$link_all_deplibs" || test -z "$library_names" ||
8057 1.1 christos test no = "$build_libtool_libs"; then
8058 1.1 christos linkalldeplibs=:
8059 1.1 christos fi
8060 1.1 christos
8061 1.1 christos tmp_libs=
8062 1.1 christos for deplib in $dependency_libs; do
8063 1.1 christos case $deplib in
8064 1.1 christos -L*) func_stripname '-L' '' "$deplib"
8065 1.1 christos func_resolve_sysroot "$func_stripname_result"
8066 1.1 christos func_append newlib_search_path " $func_resolve_sysroot_result"
8067 1.1 christos ;;
8068 1.1 christos esac
8069 1.1 christos # Need to link against all dependency_libs?
8070 1.1 christos if $linkalldeplibs; then
8071 1.1 christos deplibs="$deplib $deplibs"
8072 1.1 christos else
8073 1.1 christos # Need to hardcode shared library paths
8074 1.1 christos # or/and link against static libraries
8075 1.1 christos newdependency_libs="$deplib $newdependency_libs"
8076 1.1 christos fi
8077 1.1 christos if $opt_preserve_dup_deps; then
8078 1.1 christos case "$tmp_libs " in
8079 1.1 christos *" $deplib "*) func_append specialdeplibs " $deplib" ;;
8080 1.1 christos esac
8081 1.1 christos fi
8082 1.1 christos func_append tmp_libs " $deplib"
8083 1.1 christos done # for deplib
8084 1.1 christos continue
8085 1.1 christos fi # $linkmode = prog...
8086 1.1 christos
8087 1.1 christos if test prog,link = "$linkmode,$pass"; then
8088 1.1 christos if test -n "$library_names" &&
8089 1.1 christos { { test no = "$prefer_static_libs" ||
8090 1.1 christos test built,yes = "$prefer_static_libs,$installed"; } ||
8091 1.1 christos test -z "$old_library"; }; then
8092 1.1 christos # We need to hardcode the library path
8093 1.1 christos if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
8094 1.1 christos # Make sure the rpath contains only unique directories.
8095 1.1 christos case $temp_rpath: in
8096 1.1 christos *"$absdir:"*) ;;
8097 1.1 christos *) func_append temp_rpath "$absdir:" ;;
8098 1.1 christos esac
8099 1.1 christos fi
8100 1.1 christos
8101 1.1 christos # Hardcode the library path.
8102 1.1 christos # Skip directories that are in the system default run-time
8103 1.1 christos # search path.
8104 1.1 christos case " $sys_lib_dlsearch_path " in
8105 1.1 christos *" $absdir "*) ;;
8106 1.1 christos *)
8107 1.1 christos case "$compile_rpath " in
8108 1.1 christos *" $absdir "*) ;;
8109 1.1 christos *) func_append compile_rpath " $absdir" ;;
8110 1.1 christos esac
8111 1.1 christos ;;
8112 1.1 christos esac
8113 1.1 christos case " $sys_lib_dlsearch_path " in
8114 1.1 christos *" $libdir "*) ;;
8115 1.1 christos *)
8116 1.1 christos case "$finalize_rpath " in
8117 1.1 christos *" $libdir "*) ;;
8118 1.1 christos *) func_append finalize_rpath " $libdir" ;;
8119 1.1 christos esac
8120 1.1 christos ;;
8121 1.1 christos esac
8122 1.1 christos fi # $linkmode,$pass = prog,link...
8123 1.1 christos
8124 1.1 christos if $alldeplibs &&
8125 1.1 christos { test pass_all = "$deplibs_check_method" ||
8126 1.1 christos { test yes = "$build_libtool_libs" &&
8127 1.1 christos test -n "$library_names"; }; }; then
8128 1.1 christos # We only need to search for static libraries
8129 1.1 christos continue
8130 1.1 christos fi
8131 1.1 christos fi
8132 1.1 christos
8133 1.1 christos link_static=no # Whether the deplib will be linked statically
8134 1.1 christos use_static_libs=$prefer_static_libs
8135 1.1 christos if test built = "$use_static_libs" && test yes = "$installed"; then
8136 1.1 christos use_static_libs=no
8137 1.1 christos fi
8138 1.1 christos if test -n "$library_names" &&
8139 1.1 christos { test no = "$use_static_libs" || test -z "$old_library"; }; then
8140 1.1 christos case $host in
8141 1.1 christos *cygwin* | *mingw* | *cegcc* | *os2*)
8142 1.1 christos # No point in relinking DLLs because paths are not encoded
8143 1.1 christos func_append notinst_deplibs " $lib"
8144 1.1 christos need_relink=no
8145 1.1 christos ;;
8146 1.1 christos *)
8147 1.1 christos if test no = "$installed"; then
8148 1.1 christos func_append notinst_deplibs " $lib"
8149 1.1 christos need_relink=yes
8150 1.1 christos fi
8151 1.1 christos ;;
8152 1.1 christos esac
8153 1.1 christos # This is a shared library
8154 1.1 christos
8155 1.1 christos # Warn about portability, can't link against -module's on some
8156 1.1 christos # systems (darwin). Don't bleat about dlopened modules though!
8157 1.1 christos dlopenmodule=
8158 1.1 christos for dlpremoduletest in $dlprefiles; do
8159 1.1 christos if test "X$dlpremoduletest" = "X$lib"; then
8160 1.1 christos dlopenmodule=$dlpremoduletest
8161 1.1 christos break
8162 1.1 christos fi
8163 1.1 christos done
8164 1.1 christos if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
8165 1.1 christos echo
8166 1.1 christos if test prog = "$linkmode"; then
8167 1.1 christos $ECHO "*** Warning: Linking the executable $output against the loadable module"
8168 1.1 christos else
8169 1.1 christos $ECHO "*** Warning: Linking the shared library $output against the loadable module"
8170 1.1 christos fi
8171 1.1 christos $ECHO "*** $linklib is not portable!"
8172 1.1 christos fi
8173 1.1 christos if test lib = "$linkmode" &&
8174 1.1 christos test yes = "$hardcode_into_libs"; then
8175 1.1 christos # Hardcode the library path.
8176 1.1 christos # Skip directories that are in the system default run-time
8177 1.1 christos # search path.
8178 1.1 christos case " $sys_lib_dlsearch_path " in
8179 1.1 christos *" $absdir "*) ;;
8180 1.1 christos *)
8181 1.1 christos case "$compile_rpath " in
8182 1.1 christos *" $absdir "*) ;;
8183 1.1 christos *) func_append compile_rpath " $absdir" ;;
8184 1.1 christos esac
8185 1.1 christos ;;
8186 1.1 christos esac
8187 1.1 christos case " $sys_lib_dlsearch_path " in
8188 1.1 christos *" $libdir "*) ;;
8189 1.1 christos *)
8190 1.1 christos case "$finalize_rpath " in
8191 1.1 christos *" $libdir "*) ;;
8192 1.1 christos *) func_append finalize_rpath " $libdir" ;;
8193 1.1 christos esac
8194 1.1 christos ;;
8195 1.1 christos esac
8196 1.1 christos fi
8197 1.1 christos
8198 1.1 christos if test -n "$old_archive_from_expsyms_cmds"; then
8199 1.1 christos # figure out the soname
8200 1.1 christos set dummy $library_names
8201 1.1 christos shift
8202 1.1 christos realname=$1
8203 1.1 christos shift
8204 1.1 christos libname=`eval "\\$ECHO \"$libname_spec\""`
8205 1.1 christos # use dlname if we got it. it's perfectly good, no?
8206 1.1 christos if test -n "$dlname"; then
8207 1.1 christos soname=$dlname
8208 1.1 christos elif test -n "$soname_spec"; then
8209 1.1 christos # bleh windows
8210 1.1 christos case $host in
8211 1.1 christos *cygwin* | mingw* | *cegcc* | *os2*)
8212 1.1 christos func_arith $current - $age
8213 1.1 christos major=$func_arith_result
8214 1.1 christos versuffix=-$major
8215 1.1 christos ;;
8216 1.1 christos esac
8217 1.1 christos eval soname=\"$soname_spec\"
8218 1.1 christos else
8219 1.1 christos soname=$realname
8220 1.1 christos fi
8221 1.1 christos
8222 1.1 christos # Make a new name for the extract_expsyms_cmds to use
8223 1.1 christos soroot=$soname
8224 1.1 christos func_basename "$soroot"
8225 1.1 christos soname=$func_basename_result
8226 1.1 christos func_stripname 'lib' '.dll' "$soname"
8227 1.1 christos newlib=libimp-$func_stripname_result.a
8228 1.1 christos
8229 1.1 christos # If the library has no export list, then create one now
8230 1.1 christos if test -f "$output_objdir/$soname-def"; then :
8231 1.1 christos else
8232 1.1 christos func_verbose "extracting exported symbol list from '$soname'"
8233 1.1 christos func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
8234 1.1 christos fi
8235 1.1 christos
8236 1.1 christos # Create $newlib
8237 1.1 christos if test -f "$output_objdir/$newlib"; then :; else
8238 1.1 christos func_verbose "generating import library for '$soname'"
8239 1.1 christos func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
8240 1.1 christos fi
8241 1.1 christos # make sure the library variables are pointing to the new library
8242 1.1 christos dir=$output_objdir
8243 1.1 christos linklib=$newlib
8244 1.1 christos fi # test -n "$old_archive_from_expsyms_cmds"
8245 1.1 christos
8246 1.1 christos if test prog = "$linkmode" || test relink != "$opt_mode"; then
8247 1.1 christos add_shlibpath=
8248 1.1 christos add_dir=
8249 1.1 christos add=
8250 1.1 christos lib_linked=yes
8251 1.1 christos case $hardcode_action in
8252 1.1 christos immediate | unsupported)
8253 1.1 christos if test no = "$hardcode_direct"; then
8254 1.1 christos add=$dir/$linklib
8255 1.1 christos case $host in
8256 1.1 christos *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
8257 1.1 christos *-*-sysv4*uw2*) add_dir=-L$dir ;;
8258 1.1 christos *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
8259 1.1 christos *-*-unixware7*) add_dir=-L$dir ;;
8260 1.1 christos *-*-darwin* )
8261 1.1 christos # if the lib is a (non-dlopened) module then we cannot
8262 1.1 christos # link against it, someone is ignoring the earlier warnings
8263 1.1 christos if /usr/bin/file -L $add 2> /dev/null |
8264 1.1 christos $GREP ": [^:]* bundle" >/dev/null; then
8265 1.1 christos if test "X$dlopenmodule" != "X$lib"; then
8266 1.1 christos $ECHO "*** Warning: lib $linklib is a module, not a shared library"
8267 1.1 christos if test -z "$old_library"; then
8268 1.1 christos echo
8269 1.1 christos echo "*** And there doesn't seem to be a static archive available"
8270 1.1 christos echo "*** The link will probably fail, sorry"
8271 1.1 christos else
8272 1.1 christos add=$dir/$old_library
8273 1.1 christos fi
8274 1.1 christos elif test -n "$old_library"; then
8275 1.1 christos add=$dir/$old_library
8276 1.1 christos fi
8277 1.1 christos fi
8278 1.1 christos esac
8279 1.1 christos elif test no = "$hardcode_minus_L"; then
8280 1.1 christos case $host in
8281 1.1 christos *-*-sunos*) add_shlibpath=$dir ;;
8282 1.1 christos esac
8283 1.1 christos add_dir=-L$dir
8284 1.1 christos add=-l$name
8285 1.1 christos elif test no = "$hardcode_shlibpath_var"; then
8286 1.1 christos add_shlibpath=$dir
8287 1.1 christos add=-l$name
8288 1.1 christos else
8289 1.1 christos lib_linked=no
8290 1.1 christos fi
8291 1.1 christos ;;
8292 1.1 christos relink)
8293 1.1 christos if test yes = "$hardcode_direct" &&
8294 1.1 christos test no = "$hardcode_direct_absolute"; then
8295 1.1 christos add=$dir/$linklib
8296 1.1 christos elif test yes = "$hardcode_minus_L"; then
8297 1.1 christos add_dir=-L$absdir
8298 1.1 christos # Try looking first in the location we're being installed to.
8299 1.1 christos if test -n "$inst_prefix_dir"; then
8300 1.1 christos case $libdir in
8301 1.1 christos [\\/]*)
8302 1.1 christos func_append add_dir " -L$inst_prefix_dir$libdir"
8303 1.1 christos ;;
8304 1.1 christos esac
8305 1.1 christos fi
8306 1.1 christos add=-l$name
8307 1.1 christos elif test yes = "$hardcode_shlibpath_var"; then
8308 1.1 christos add_shlibpath=$dir
8309 1.1 christos add=-l$name
8310 1.1 christos else
8311 1.1 christos lib_linked=no
8312 1.1 christos fi
8313 1.1 christos ;;
8314 1.1 christos *) lib_linked=no ;;
8315 1.1 christos esac
8316 1.1 christos
8317 1.1 christos if test yes != "$lib_linked"; then
8318 1.1 christos func_fatal_configuration "unsupported hardcode properties"
8319 1.1 christos fi
8320 1.1 christos
8321 1.1 christos if test -n "$add_shlibpath"; then
8322 1.1 christos case :$compile_shlibpath: in
8323 1.1 christos *":$add_shlibpath:"*) ;;
8324 1.1 christos *) func_append compile_shlibpath "$add_shlibpath:" ;;
8325 1.1 christos esac
8326 1.1 christos fi
8327 1.1 christos if test prog = "$linkmode"; then
8328 1.1 christos test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
8329 1.1 christos test -n "$add" && compile_deplibs="$add $compile_deplibs"
8330 1.1 christos else
8331 1.1 christos test -n "$add_dir" && deplibs="$add_dir $deplibs"
8332 1.1 christos test -n "$add" && deplibs="$add $deplibs"
8333 1.1 christos if test yes != "$hardcode_direct" &&
8334 1.1 christos test yes != "$hardcode_minus_L" &&
8335 1.1 christos test yes = "$hardcode_shlibpath_var"; then
8336 1.1 christos case :$finalize_shlibpath: in
8337 1.1 christos *":$libdir:"*) ;;
8338 1.1 christos *) func_append finalize_shlibpath "$libdir:" ;;
8339 1.1 christos esac
8340 1.1 christos fi
8341 1.1 christos fi
8342 1.1 christos fi
8343 1.1 christos
8344 1.1 christos if test prog = "$linkmode" || test relink = "$opt_mode"; then
8345 1.1 christos add_shlibpath=
8346 1.1 christos add_dir=
8347 1.1 christos add=
8348 1.1 christos # Finalize command for both is simple: just hardcode it.
8349 1.1 christos if test yes = "$hardcode_direct" &&
8350 1.1 christos test no = "$hardcode_direct_absolute"; then
8351 1.1 christos add=$libdir/$linklib
8352 1.1 christos elif test yes = "$hardcode_minus_L"; then
8353 1.1 christos add_dir=-L$libdir
8354 1.1 christos add=-l$name
8355 1.1 christos elif test yes = "$hardcode_shlibpath_var"; then
8356 1.1 christos case :$finalize_shlibpath: in
8357 1.1 christos *":$libdir:"*) ;;
8358 1.1 christos *) func_append finalize_shlibpath "$libdir:" ;;
8359 1.1 christos esac
8360 1.1 christos add=-l$name
8361 1.1 christos elif test yes = "$hardcode_automatic"; then
8362 1.1 christos if test -n "$inst_prefix_dir" &&
8363 1.1 christos test -f "$inst_prefix_dir$libdir/$linklib"; then
8364 1.1 christos add=$inst_prefix_dir$libdir/$linklib
8365 1.1 christos else
8366 1.1 christos add=$libdir/$linklib
8367 1.1 christos fi
8368 1.1 christos else
8369 1.1 christos # We cannot seem to hardcode it, guess we'll fake it.
8370 1.1 christos add_dir=-L$libdir
8371 1.1 christos # Try looking first in the location we're being installed to.
8372 1.1 christos if test -n "$inst_prefix_dir"; then
8373 1.1 christos case $libdir in
8374 1.1 christos [\\/]*)
8375 1.1 christos func_append add_dir " -L$inst_prefix_dir$libdir"
8376 1.1 christos ;;
8377 1.1 christos esac
8378 1.1 christos fi
8379 1.1 christos add=-l$name
8380 1.1 christos fi
8381 1.1 christos
8382 1.1 christos if test prog = "$linkmode"; then
8383 1.1 christos test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
8384 1.1 christos test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
8385 1.1 christos else
8386 1.1 christos test -n "$add_dir" && deplibs="$add_dir $deplibs"
8387 1.1 christos test -n "$add" && deplibs="$add $deplibs"
8388 1.1 christos fi
8389 1.1 christos fi
8390 1.1 christos elif test prog = "$linkmode"; then
8391 1.1 christos # Here we assume that one of hardcode_direct or hardcode_minus_L
8392 1.1 christos # is not unsupported. This is valid on all known static and
8393 1.1 christos # shared platforms.
8394 1.1 christos if test unsupported != "$hardcode_direct"; then
8395 1.1 christos test -n "$old_library" && linklib=$old_library
8396 1.1 christos compile_deplibs="$dir/$linklib $compile_deplibs"
8397 1.1 christos finalize_deplibs="$dir/$linklib $finalize_deplibs"
8398 1.1 christos else
8399 1.1 christos compile_deplibs="-l$name -L$dir $compile_deplibs"
8400 1.1 christos finalize_deplibs="-l$name -L$dir $finalize_deplibs"
8401 1.1 christos fi
8402 1.1 christos elif test yes = "$build_libtool_libs"; then
8403 1.1 christos # Not a shared library
8404 1.1 christos if test pass_all != "$deplibs_check_method"; then
8405 1.1 christos # We're trying link a shared library against a static one
8406 1.1 christos # but the system doesn't support it.
8407 1.1 christos
8408 1.1 christos # Just print a warning and add the library to dependency_libs so
8409 1.1 christos # that the program can be linked against the static library.
8410 1.1 christos echo
8411 1.1 christos $ECHO "*** Warning: This system cannot link to static lib archive $lib."
8412 1.1 christos echo "*** I have the capability to make that library automatically link in when"
8413 1.1 christos echo "*** you link to this library. But I can only do this if you have a"
8414 1.1 christos echo "*** shared version of the library, which you do not appear to have."
8415 1.1 christos if test yes = "$module"; then
8416 1.1 christos echo "*** But as you try to build a module library, libtool will still create "
8417 1.1 christos echo "*** a static module, that should work as long as the dlopening application"
8418 1.1 christos echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
8419 1.1 christos if test -z "$global_symbol_pipe"; then
8420 1.1 christos echo
8421 1.1 christos echo "*** However, this would only work if libtool was able to extract symbol"
8422 1.1 christos echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
8423 1.1 christos echo "*** not find such a program. So, this module is probably useless."
8424 1.1 christos echo "*** 'nm' from GNU binutils and a full rebuild may help."
8425 1.1 christos fi
8426 1.1 christos if test no = "$build_old_libs"; then
8427 1.1 christos build_libtool_libs=module
8428 1.1 christos build_old_libs=yes
8429 1.1 christos else
8430 1.1 christos build_libtool_libs=no
8431 1.1 christos fi
8432 1.1 christos fi
8433 1.1 christos else
8434 1.1 christos deplibs="$dir/$old_library $deplibs"
8435 1.1 christos link_static=yes
8436 1.1 christos fi
8437 1.1 christos fi # link shared/static library?
8438 1.1 christos
8439 1.1 christos if test lib = "$linkmode"; then
8440 1.1 christos if test -n "$dependency_libs" &&
8441 1.1 christos { test yes != "$hardcode_into_libs" ||
8442 1.1 christos test yes = "$build_old_libs" ||
8443 1.1 christos test yes = "$link_static"; }; then
8444 1.1 christos # Extract -R from dependency_libs
8445 1.1 christos temp_deplibs=
8446 1.1 christos for libdir in $dependency_libs; do
8447 1.1 christos case $libdir in
8448 1.1 christos -R*) func_stripname '-R' '' "$libdir"
8449 1.1 christos temp_xrpath=$func_stripname_result
8450 1.1 christos case " $xrpath " in
8451 1.1 christos *" $temp_xrpath "*) ;;
8452 1.1 christos *) func_append xrpath " $temp_xrpath";;
8453 1.1 christos esac;;
8454 1.1 christos *) func_append temp_deplibs " $libdir";;
8455 1.1 christos esac
8456 1.1 christos done
8457 1.1 christos dependency_libs=$temp_deplibs
8458 1.1 christos fi
8459 1.1 christos
8460 1.1 christos func_append newlib_search_path " $absdir"
8461 1.1 christos # Link against this library
8462 1.1 christos test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
8463 1.1 christos # ... and its dependency_libs
8464 1.1 christos tmp_libs=
8465 1.1 christos for deplib in $dependency_libs; do
8466 1.1 christos newdependency_libs="$deplib $newdependency_libs"
8467 1.1 christos case $deplib in
8468 1.1 christos -L*) func_stripname '-L' '' "$deplib"
8469 1.1 christos func_resolve_sysroot "$func_stripname_result";;
8470 1.1 christos *) func_resolve_sysroot "$deplib" ;;
8471 1.1 christos esac
8472 1.1 christos if $opt_preserve_dup_deps; then
8473 1.1 christos case "$tmp_libs " in
8474 1.1 christos *" $func_resolve_sysroot_result "*)
8475 1.1 christos func_append specialdeplibs " $func_resolve_sysroot_result" ;;
8476 1.1 christos esac
8477 1.1 christos fi
8478 1.1 christos func_append tmp_libs " $func_resolve_sysroot_result"
8479 1.1 christos done
8480 1.1 christos
8481 1.1 christos if test no != "$link_all_deplibs"; then
8482 1.1 christos # Add the search paths of all dependency libraries
8483 1.1 christos for deplib in $dependency_libs; do
8484 1.1 christos path=
8485 1.1 christos case $deplib in
8486 1.1 christos -L*) path=$deplib ;;
8487 1.1 christos *.la)
8488 1.1 christos func_resolve_sysroot "$deplib"
8489 1.1 christos deplib=$func_resolve_sysroot_result
8490 1.1 christos func_dirname "$deplib" "" "."
8491 1.1 christos dir=$func_dirname_result
8492 1.1 christos # We need an absolute path.
8493 1.1 christos case $dir in
8494 1.1 christos [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
8495 1.1 christos *)
8496 1.1 christos absdir=`cd "$dir" && pwd`
8497 1.1 christos if test -z "$absdir"; then
8498 1.1 christos func_warning "cannot determine absolute directory name of '$dir'"
8499 1.1 christos absdir=$dir
8500 1.1 christos fi
8501 1.1 christos ;;
8502 1.1 christos esac
8503 1.1 christos if $GREP "^installed=no" $deplib > /dev/null; then
8504 1.1 christos case $host in
8505 1.1 christos *-*-darwin*)
8506 1.1 christos depdepl=
8507 1.1 christos eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
8508 1.1 christos if test -n "$deplibrary_names"; then
8509 1.1 christos for tmp in $deplibrary_names; do
8510 1.1 christos depdepl=$tmp
8511 1.1 christos done
8512 1.1 christos if test -f "$absdir/$objdir/$depdepl"; then
8513 1.1 christos depdepl=$absdir/$objdir/$depdepl
8514 1.1 christos darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
8515 1.1 christos if test -z "$darwin_install_name"; then
8516 1.1 christos darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
8517 1.1 christos fi
8518 1.1 christos func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
8519 1.1 christos func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
8520 1.1 christos path=
8521 1.1 christos fi
8522 1.1 christos fi
8523 1.1 christos ;;
8524 1.1 christos *)
8525 1.1 christos path=-L$absdir/$objdir
8526 1.1 christos ;;
8527 1.1 christos esac
8528 1.1 christos else
8529 1.1 christos eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
8530 1.1 christos test -z "$libdir" && \
8531 1.1 christos func_fatal_error "'$deplib' is not a valid libtool archive"
8532 1.1 christos test "$absdir" != "$libdir" && \
8533 1.1 christos func_warning "'$deplib' seems to be moved"
8534 1.1 christos
8535 1.1 christos path=-L$absdir
8536 1.1 christos fi
8537 1.1 christos ;;
8538 1.1 christos esac
8539 1.1 christos case " $deplibs " in
8540 1.1 christos *" $path "*) ;;
8541 1.1 christos *) deplibs="$path $deplibs" ;;
8542 1.1 christos esac
8543 1.1 christos done
8544 1.1 christos fi # link_all_deplibs != no
8545 1.1 christos fi # linkmode = lib
8546 1.1 christos done # for deplib in $libs
8547 1.1 christos if test link = "$pass"; then
8548 1.1 christos if test prog = "$linkmode"; then
8549 1.1 christos compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
8550 1.1 christos finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
8551 1.1 christos else
8552 1.1 christos compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8553 1.1 christos fi
8554 1.1 christos fi
8555 1.1 christos dependency_libs=$newdependency_libs
8556 1.1 christos if test dlpreopen = "$pass"; then
8557 1.1 christos # Link the dlpreopened libraries before other libraries
8558 1.1 christos for deplib in $save_deplibs; do
8559 1.1 christos deplibs="$deplib $deplibs"
8560 1.1 christos done
8561 1.1 christos fi
8562 1.1 christos if test dlopen != "$pass"; then
8563 1.1 christos test conv = "$pass" || {
8564 1.1 christos # Make sure lib_search_path contains only unique directories.
8565 1.1 christos lib_search_path=
8566 1.1 christos for dir in $newlib_search_path; do
8567 1.1 christos case "$lib_search_path " in
8568 1.1 christos *" $dir "*) ;;
8569 1.1 christos *) func_append lib_search_path " $dir" ;;
8570 1.1 christos esac
8571 1.1 christos done
8572 1.1 christos newlib_search_path=
8573 1.1 christos }
8574 1.1 christos
8575 1.1 christos if test prog,link = "$linkmode,$pass"; then
8576 1.1 christos vars="compile_deplibs finalize_deplibs"
8577 1.1 christos else
8578 1.1 christos vars=deplibs
8579 1.1 christos fi
8580 1.1 christos for var in $vars dependency_libs; do
8581 1.1 christos # Add libraries to $var in reverse order
8582 1.1 christos eval tmp_libs=\"\$$var\"
8583 1.1 christos new_libs=
8584 1.1 christos for deplib in $tmp_libs; do
8585 1.1 christos # FIXME: Pedantically, this is the right thing to do, so
8586 1.1 christos # that some nasty dependency loop isn't accidentally
8587 1.1 christos # broken:
8588 1.1 christos #new_libs="$deplib $new_libs"
8589 1.1 christos # Pragmatically, this seems to cause very few problems in
8590 1.1 christos # practice:
8591 1.1 christos case $deplib in
8592 1.1 christos -L*) new_libs="$deplib $new_libs" ;;
8593 1.1 christos -R*) ;;
8594 1.1 christos *)
8595 1.1 christos # And here is the reason: when a library appears more
8596 1.1 christos # than once as an explicit dependence of a library, or
8597 1.1 christos # is implicitly linked in more than once by the
8598 1.1 christos # compiler, it is considered special, and multiple
8599 1.1 christos # occurrences thereof are not removed. Compare this
8600 1.1 christos # with having the same library being listed as a
8601 1.1 christos # dependency of multiple other libraries: in this case,
8602 1.1 christos # we know (pedantically, we assume) the library does not
8603 1.1 christos # need to be listed more than once, so we keep only the
8604 1.1 christos # last copy. This is not always right, but it is rare
8605 1.1 christos # enough that we require users that really mean to play
8606 1.1 christos # such unportable linking tricks to link the library
8607 1.1 christos # using -Wl,-lname, so that libtool does not consider it
8608 1.1 christos # for duplicate removal.
8609 1.1 christos case " $specialdeplibs " in
8610 1.1 christos *" $deplib "*) new_libs="$deplib $new_libs" ;;
8611 1.1 christos *)
8612 1.1 christos case " $new_libs " in
8613 1.1 christos *" $deplib "*) ;;
8614 1.1 christos *) new_libs="$deplib $new_libs" ;;
8615 1.1 christos esac
8616 1.1 christos ;;
8617 1.1 christos esac
8618 1.1 christos ;;
8619 1.1 christos esac
8620 1.1 christos done
8621 1.1 christos tmp_libs=
8622 1.1 christos for deplib in $new_libs; do
8623 1.1 christos case $deplib in
8624 1.1 christos -L*)
8625 1.1 christos case " $tmp_libs " in
8626 1.1 christos *" $deplib "*) ;;
8627 1.1 christos *) func_append tmp_libs " $deplib" ;;
8628 1.1 christos esac
8629 1.1 christos ;;
8630 1.1 christos *) func_append tmp_libs " $deplib" ;;
8631 1.1 christos esac
8632 1.1 christos done
8633 1.1 christos eval $var=\"$tmp_libs\"
8634 1.1 christos done # for var
8635 1.1 christos fi
8636 1.1 christos
8637 1.1 christos # Add Sun CC postdeps if required:
8638 1.1 christos test CXX = "$tagname" && {
8639 1.1 christos case $host_os in
8640 1.1 christos linux*)
8641 1.1 christos case `$CC -V 2>&1 | sed 5q` in
8642 1.1 christos *Sun\ C*) # Sun C++ 5.9
8643 1.1 christos func_suncc_cstd_abi
8644 1.1 christos
8645 1.1 christos if test no != "$suncc_use_cstd_abi"; then
8646 1.1 christos func_append postdeps ' -library=Cstd -library=Crun'
8647 1.1 christos fi
8648 1.1 christos ;;
8649 1.1 christos esac
8650 1.1 christos ;;
8651 1.1 christos
8652 1.1 christos solaris*)
8653 1.1 christos func_cc_basename "$CC"
8654 1.1 christos case $func_cc_basename_result in
8655 1.1 christos CC* | sunCC*)
8656 1.1 christos func_suncc_cstd_abi
8657 1.1 christos
8658 1.1 christos if test no != "$suncc_use_cstd_abi"; then
8659 1.1 christos func_append postdeps ' -library=Cstd -library=Crun'
8660 1.1 christos fi
8661 1.1 christos ;;
8662 1.1 christos esac
8663 1.1 christos ;;
8664 1.1 christos esac
8665 1.1 christos }
8666 1.1 christos
8667 1.1 christos # Last step: remove runtime libs from dependency_libs
8668 1.1 christos # (they stay in deplibs)
8669 1.1 christos tmp_libs=
8670 1.1 christos for i in $dependency_libs; do
8671 1.1 christos case " $predeps $postdeps $compiler_lib_search_path " in
8672 1.1 christos *" $i "*)
8673 1.1 christos i=
8674 1.1 christos ;;
8675 1.1 christos esac
8676 1.1 christos if test -n "$i"; then
8677 1.1 christos func_append tmp_libs " $i"
8678 1.1 christos fi
8679 1.1 christos done
8680 1.1 christos dependency_libs=$tmp_libs
8681 1.1 christos done # for pass
8682 1.1 christos if test prog = "$linkmode"; then
8683 1.1 christos dlfiles=$newdlfiles
8684 1.1 christos fi
8685 1.1 christos if test prog = "$linkmode" || test lib = "$linkmode"; then
8686 1.1 christos dlprefiles=$newdlprefiles
8687 1.1 christos fi
8688 1.1 christos
8689 1.1 christos case $linkmode in
8690 1.1 christos oldlib)
8691 1.1 christos if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
8692 1.1 christos func_warning "'-dlopen' is ignored for archives"
8693 1.1 christos fi
8694 1.1 christos
8695 1.1 christos case " $deplibs" in
8696 1.1 christos *\ -l* | *\ -L*)
8697 1.1 christos func_warning "'-l' and '-L' are ignored for archives" ;;
8698 1.1 christos esac
8699 1.1 christos
8700 1.1 christos test -n "$rpath" && \
8701 1.1 christos func_warning "'-rpath' is ignored for archives"
8702 1.1 christos
8703 1.1 christos test -n "$xrpath" && \
8704 1.1 christos func_warning "'-R' is ignored for archives"
8705 1.1 christos
8706 1.1 christos test -n "$vinfo" && \
8707 1.1 christos func_warning "'-version-info/-version-number' is ignored for archives"
8708 1.1 christos
8709 1.1 christos test -n "$release" && \
8710 1.1 christos func_warning "'-release' is ignored for archives"
8711 1.1 christos
8712 1.1 christos test -n "$export_symbols$export_symbols_regex" && \
8713 1.1 christos func_warning "'-export-symbols' is ignored for archives"
8714 1.1 christos
8715 1.1 christos # Now set the variables for building old libraries.
8716 1.1 christos build_libtool_libs=no
8717 1.1 christos oldlibs=$output
8718 1.1 christos func_append objs "$old_deplibs"
8719 1.1 christos ;;
8720 1.1 christos
8721 1.1 christos lib)
8722 1.1 christos # Make sure we only generate libraries of the form 'libNAME.la'.
8723 1.1 christos case $outputname in
8724 1.1 christos lib*)
8725 1.1 christos func_stripname 'lib' '.la' "$outputname"
8726 1.1 christos name=$func_stripname_result
8727 1.1 christos eval shared_ext=\"$shrext_cmds\"
8728 1.1 christos eval libname=\"$libname_spec\"
8729 1.1 christos ;;
8730 1.1 christos *)
8731 1.1 christos test no = "$module" \
8732 1.1 christos && func_fatal_help "libtool library '$output' must begin with 'lib'"
8733 1.1 christos
8734 1.1 christos if test no != "$need_lib_prefix"; then
8735 1.1 christos # Add the "lib" prefix for modules if required
8736 1.1 christos func_stripname '' '.la' "$outputname"
8737 1.1 christos name=$func_stripname_result
8738 1.1 christos eval shared_ext=\"$shrext_cmds\"
8739 1.1 christos eval libname=\"$libname_spec\"
8740 1.1 christos else
8741 1.1 christos func_stripname '' '.la' "$outputname"
8742 1.1 christos libname=$func_stripname_result
8743 1.1 christos fi
8744 1.1 christos ;;
8745 1.1 christos esac
8746 1.1 christos
8747 1.1 christos if test -n "$objs"; then
8748 1.1 christos if test pass_all != "$deplibs_check_method"; then
8749 1.1 christos func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
8750 1.1 christos else
8751 1.1 christos echo
8752 1.1 christos $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
8753 1.1 christos $ECHO "*** objects $objs is not portable!"
8754 1.1 christos func_append libobjs " $objs"
8755 1.1 christos fi
8756 1.1 christos fi
8757 1.1 christos
8758 1.1 christos test no = "$dlself" \
8759 1.1 christos || func_warning "'-dlopen self' is ignored for libtool libraries"
8760 1.1 christos
8761 1.1 christos set dummy $rpath
8762 1.1 christos shift
8763 1.1 christos test 1 -lt "$#" \
8764 1.1 christos && func_warning "ignoring multiple '-rpath's for a libtool library"
8765 1.1 christos
8766 1.1 christos install_libdir=$1
8767 1.1 christos
8768 1.1 christos oldlibs=
8769 1.1 christos if test -z "$rpath"; then
8770 1.1 christos if test yes = "$build_libtool_libs"; then
8771 1.1 christos # Building a libtool convenience library.
8772 1.1 christos # Some compilers have problems with a '.al' extension so
8773 1.1 christos # convenience libraries should have the same extension an
8774 1.1 christos # archive normally would.
8775 1.1 christos oldlibs="$output_objdir/$libname.$libext $oldlibs"
8776 1.1 christos build_libtool_libs=convenience
8777 1.1 christos build_old_libs=yes
8778 1.1 christos fi
8779 1.1 christos
8780 1.1 christos test -n "$vinfo" && \
8781 1.1 christos func_warning "'-version-info/-version-number' is ignored for convenience libraries"
8782 1.1 christos
8783 1.1 christos test -n "$release" && \
8784 1.1 christos func_warning "'-release' is ignored for convenience libraries"
8785 1.1 christos else
8786 1.1 christos
8787 1.1 christos # Parse the version information argument.
8788 1.1 christos save_ifs=$IFS; IFS=:
8789 1.1 christos set dummy $vinfo 0 0 0
8790 1.1 christos shift
8791 1.1 christos IFS=$save_ifs
8792 1.1 christos
8793 1.1 christos test -n "$7" && \
8794 1.1 christos func_fatal_help "too many parameters to '-version-info'"
8795 1.1 christos
8796 1.1 christos # convert absolute version numbers to libtool ages
8797 1.1 christos # this retains compatibility with .la files and attempts
8798 1.1 christos # to make the code below a bit more comprehensible
8799 1.1 christos
8800 1.1 christos case $vinfo_number in
8801 1.1 christos yes)
8802 1.1 christos number_major=$1
8803 1.1 christos number_minor=$2
8804 1.1 christos number_revision=$3
8805 1.1 christos #
8806 1.1 christos # There are really only two kinds -- those that
8807 1.1 christos # use the current revision as the major version
8808 1.1 christos # and those that subtract age and use age as
8809 1.1 christos # a minor version. But, then there is irix
8810 1.1 christos # that has an extra 1 added just for fun
8811 1.1 christos #
8812 1.1 christos case $version_type in
8813 1.1 christos # correct linux to gnu/linux during the next big refactor
8814 1.1 christos darwin|freebsd-elf|linux|osf|windows|none)
8815 1.1 christos func_arith $number_major + $number_minor
8816 1.1 christos current=$func_arith_result
8817 1.1 christos age=$number_minor
8818 1.1 christos revision=$number_revision
8819 1.1 christos ;;
8820 1.1 christos freebsd-aout|qnx|sunos)
8821 1.1 christos current=$number_major
8822 1.1 christos revision=$number_minor
8823 1.1 christos age=0
8824 1.1 christos ;;
8825 1.1 christos irix|nonstopux)
8826 1.1 christos func_arith $number_major + $number_minor
8827 1.1 christos current=$func_arith_result
8828 1.1 christos age=$number_minor
8829 1.1 christos revision=$number_minor
8830 1.1 christos lt_irix_increment=no
8831 1.1 christos ;;
8832 1.1.1.2 christos *)
8833 1.1.1.2 christos func_fatal_configuration "$modename: unknown library version type '$version_type'"
8834 1.1.1.2 christos ;;
8835 1.1 christos esac
8836 1.1 christos ;;
8837 1.1 christos no)
8838 1.1 christos current=$1
8839 1.1 christos revision=$2
8840 1.1 christos age=$3
8841 1.1 christos ;;
8842 1.1 christos esac
8843 1.1 christos
8844 1.1 christos # Check that each of the things are valid numbers.
8845 1.1 christos case $current in
8846 1.1 christos 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]) ;;
8847 1.1 christos *)
8848 1.1 christos func_error "CURRENT '$current' must be a nonnegative integer"
8849 1.1 christos func_fatal_error "'$vinfo' is not valid version information"
8850 1.1 christos ;;
8851 1.1 christos esac
8852 1.1 christos
8853 1.1 christos case $revision in
8854 1.1 christos 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]) ;;
8855 1.1 christos *)
8856 1.1 christos func_error "REVISION '$revision' must be a nonnegative integer"
8857 1.1 christos func_fatal_error "'$vinfo' is not valid version information"
8858 1.1 christos ;;
8859 1.1 christos esac
8860 1.1 christos
8861 1.1 christos case $age in
8862 1.1 christos 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]) ;;
8863 1.1 christos *)
8864 1.1 christos func_error "AGE '$age' must be a nonnegative integer"
8865 1.1 christos func_fatal_error "'$vinfo' is not valid version information"
8866 1.1 christos ;;
8867 1.1 christos esac
8868 1.1 christos
8869 1.1 christos if test "$age" -gt "$current"; then
8870 1.1 christos func_error "AGE '$age' is greater than the current interface number '$current'"
8871 1.1 christos func_fatal_error "'$vinfo' is not valid version information"
8872 1.1 christos fi
8873 1.1 christos
8874 1.1 christos # Calculate the version variables.
8875 1.1 christos major=
8876 1.1 christos versuffix=
8877 1.1 christos verstring=
8878 1.1 christos case $version_type in
8879 1.1 christos none) ;;
8880 1.1 christos
8881 1.1 christos darwin)
8882 1.1 christos # Like Linux, but with the current version available in
8883 1.1 christos # verstring for coding it into the library header
8884 1.1 christos func_arith $current - $age
8885 1.1 christos major=.$func_arith_result
8886 1.1 christos versuffix=$major.$age.$revision
8887 1.1 christos # Darwin ld doesn't like 0 for these options...
8888 1.1 christos func_arith $current + 1
8889 1.1 christos minor_current=$func_arith_result
8890 1.1 christos xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
8891 1.1 christos verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
8892 1.1 christos # On Darwin other compilers
8893 1.1 christos case $CC in
8894 1.1 christos nagfor*)
8895 1.1 christos verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
8896 1.1 christos ;;
8897 1.1 christos *)
8898 1.1 christos verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
8899 1.1 christos ;;
8900 1.1 christos esac
8901 1.1 christos ;;
8902 1.1 christos
8903 1.1 christos freebsd-aout)
8904 1.1 christos major=.$current
8905 1.1 christos versuffix=.$current.$revision
8906 1.1 christos ;;
8907 1.1 christos
8908 1.1 christos freebsd-elf)
8909 1.1 christos func_arith $current - $age
8910 1.1 christos major=.$func_arith_result
8911 1.1 christos versuffix=$major.$age.$revision
8912 1.1 christos ;;
8913 1.1 christos
8914 1.1 christos irix | nonstopux)
8915 1.1 christos if test no = "$lt_irix_increment"; then
8916 1.1 christos func_arith $current - $age
8917 1.1 christos else
8918 1.1 christos func_arith $current - $age + 1
8919 1.1 christos fi
8920 1.1 christos major=$func_arith_result
8921 1.1 christos
8922 1.1 christos case $version_type in
8923 1.1 christos nonstopux) verstring_prefix=nonstopux ;;
8924 1.1 christos *) verstring_prefix=sgi ;;
8925 1.1 christos esac
8926 1.1 christos verstring=$verstring_prefix$major.$revision
8927 1.1 christos
8928 1.1 christos # Add in all the interfaces that we are compatible with.
8929 1.1 christos loop=$revision
8930 1.1 christos while test 0 -ne "$loop"; do
8931 1.1 christos func_arith $revision - $loop
8932 1.1 christos iface=$func_arith_result
8933 1.1 christos func_arith $loop - 1
8934 1.1 christos loop=$func_arith_result
8935 1.1 christos verstring=$verstring_prefix$major.$iface:$verstring
8936 1.1 christos done
8937 1.1 christos
8938 1.1 christos # Before this point, $major must not contain '.'.
8939 1.1 christos major=.$major
8940 1.1 christos versuffix=$major.$revision
8941 1.1 christos ;;
8942 1.1 christos
8943 1.1 christos linux) # correct to gnu/linux during the next big refactor
8944 1.1 christos func_arith $current - $age
8945 1.1 christos major=.$func_arith_result
8946 1.1 christos versuffix=$major.$age.$revision
8947 1.1 christos ;;
8948 1.1 christos
8949 1.1 christos osf)
8950 1.1 christos func_arith $current - $age
8951 1.1 christos major=.$func_arith_result
8952 1.1 christos versuffix=.$current.$age.$revision
8953 1.1 christos verstring=$current.$age.$revision
8954 1.1 christos
8955 1.1 christos # Add in all the interfaces that we are compatible with.
8956 1.1 christos loop=$age
8957 1.1 christos while test 0 -ne "$loop"; do
8958 1.1 christos func_arith $current - $loop
8959 1.1 christos iface=$func_arith_result
8960 1.1 christos func_arith $loop - 1
8961 1.1 christos loop=$func_arith_result
8962 1.1 christos verstring=$verstring:$iface.0
8963 1.1 christos done
8964 1.1 christos
8965 1.1 christos # Make executables depend on our current version.
8966 1.1 christos func_append verstring ":$current.0"
8967 1.1 christos ;;
8968 1.1 christos
8969 1.1 christos qnx)
8970 1.1 christos major=.$current
8971 1.1 christos versuffix=.$current
8972 1.1 christos ;;
8973 1.1 christos
8974 1.1 christos sco)
8975 1.1 christos major=.$current
8976 1.1 christos versuffix=.$current
8977 1.1 christos ;;
8978 1.1 christos
8979 1.1 christos sunos)
8980 1.1 christos major=.$current
8981 1.1 christos versuffix=.$current.$revision
8982 1.1 christos ;;
8983 1.1 christos
8984 1.1 christos windows)
8985 1.1 christos # Use '-' rather than '.', since we only want one
8986 1.1 christos # extension on DOS 8.3 file systems.
8987 1.1 christos func_arith $current - $age
8988 1.1 christos major=$func_arith_result
8989 1.1 christos versuffix=-$major
8990 1.1 christos ;;
8991 1.1 christos
8992 1.1 christos *)
8993 1.1 christos func_fatal_configuration "unknown library version type '$version_type'"
8994 1.1 christos ;;
8995 1.1 christos esac
8996 1.1 christos
8997 1.1 christos # Clear the version info if we defaulted, and they specified a release.
8998 1.1 christos if test -z "$vinfo" && test -n "$release"; then
8999 1.1 christos major=
9000 1.1 christos case $version_type in
9001 1.1 christos darwin)
9002 1.1 christos # we can't check for "0.0" in archive_cmds due to quoting
9003 1.1 christos # problems, so we reset it completely
9004 1.1 christos verstring=
9005 1.1 christos ;;
9006 1.1 christos *)
9007 1.1 christos verstring=0.0
9008 1.1 christos ;;
9009 1.1 christos esac
9010 1.1 christos if test no = "$need_version"; then
9011 1.1 christos versuffix=
9012 1.1 christos else
9013 1.1 christos versuffix=.0.0
9014 1.1 christos fi
9015 1.1 christos fi
9016 1.1 christos
9017 1.1 christos # Remove version info from name if versioning should be avoided
9018 1.1 christos if test yes,no = "$avoid_version,$need_version"; then
9019 1.1 christos major=
9020 1.1 christos versuffix=
9021 1.1 christos verstring=
9022 1.1 christos fi
9023 1.1 christos
9024 1.1 christos # Check to see if the archive will have undefined symbols.
9025 1.1 christos if test yes = "$allow_undefined"; then
9026 1.1 christos if test unsupported = "$allow_undefined_flag"; then
9027 1.1 christos if test yes = "$build_old_libs"; then
9028 1.1 christos func_warning "undefined symbols not allowed in $host shared libraries; building static only"
9029 1.1 christos build_libtool_libs=no
9030 1.1 christos else
9031 1.1 christos func_fatal_error "can't build $host shared library unless -no-undefined is specified"
9032 1.1 christos fi
9033 1.1 christos fi
9034 1.1 christos else
9035 1.1 christos # Don't allow undefined symbols.
9036 1.1 christos allow_undefined_flag=$no_undefined_flag
9037 1.1 christos fi
9038 1.1 christos
9039 1.1 christos fi
9040 1.1 christos
9041 1.1 christos func_generate_dlsyms "$libname" "$libname" :
9042 1.1 christos func_append libobjs " $symfileobj"
9043 1.1 christos test " " = "$libobjs" && libobjs=
9044 1.1 christos
9045 1.1 christos if test relink != "$opt_mode"; then
9046 1.1 christos # Remove our outputs, but don't remove object files since they
9047 1.1 christos # may have been created when compiling PIC objects.
9048 1.1 christos removelist=
9049 1.1 christos tempremovelist=`$ECHO "$output_objdir/*"`
9050 1.1 christos for p in $tempremovelist; do
9051 1.1 christos case $p in
9052 1.1 christos *.$objext | *.gcno)
9053 1.1 christos ;;
9054 1.1 christos $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
9055 1.1 christos if test -n "$precious_files_regex"; then
9056 1.1 christos if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
9057 1.1 christos then
9058 1.1 christos continue
9059 1.1 christos fi
9060 1.1 christos fi
9061 1.1 christos func_append removelist " $p"
9062 1.1 christos ;;
9063 1.1 christos *) ;;
9064 1.1 christos esac
9065 1.1 christos done
9066 1.1 christos test -n "$removelist" && \
9067 1.1 christos func_show_eval "${RM}r \$removelist"
9068 1.1 christos fi
9069 1.1 christos
9070 1.1 christos # Now set the variables for building old libraries.
9071 1.1 christos if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
9072 1.1 christos func_append oldlibs " $output_objdir/$libname.$libext"
9073 1.1 christos
9074 1.1 christos # Transform .lo files to .o files.
9075 1.1 christos oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
9076 1.1 christos fi
9077 1.1 christos
9078 1.1 christos # Eliminate all temporary directories.
9079 1.1 christos #for path in $notinst_path; do
9080 1.1 christos # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
9081 1.1 christos # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
9082 1.1 christos # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
9083 1.1 christos #done
9084 1.1 christos
9085 1.1 christos if test -n "$xrpath"; then
9086 1.1 christos # If the user specified any rpath flags, then add them.
9087 1.1 christos temp_xrpath=
9088 1.1 christos for libdir in $xrpath; do
9089 1.1 christos func_replace_sysroot "$libdir"
9090 1.1 christos func_append temp_xrpath " -R$func_replace_sysroot_result"
9091 1.1 christos case "$finalize_rpath " in
9092 1.1 christos *" $libdir "*) ;;
9093 1.1 christos *) func_append finalize_rpath " $libdir" ;;
9094 1.1 christos esac
9095 1.1 christos done
9096 1.1 christos if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
9097 1.1 christos dependency_libs="$temp_xrpath $dependency_libs"
9098 1.1 christos fi
9099 1.1 christos fi
9100 1.1 christos
9101 1.1 christos # Make sure dlfiles contains only unique files that won't be dlpreopened
9102 1.1 christos old_dlfiles=$dlfiles
9103 1.1 christos dlfiles=
9104 1.1 christos for lib in $old_dlfiles; do
9105 1.1 christos case " $dlprefiles $dlfiles " in
9106 1.1 christos *" $lib "*) ;;
9107 1.1 christos *) func_append dlfiles " $lib" ;;
9108 1.1 christos esac
9109 1.1 christos done
9110 1.1 christos
9111 1.1 christos # Make sure dlprefiles contains only unique files
9112 1.1 christos old_dlprefiles=$dlprefiles
9113 1.1 christos dlprefiles=
9114 1.1 christos for lib in $old_dlprefiles; do
9115 1.1 christos case "$dlprefiles " in
9116 1.1 christos *" $lib "*) ;;
9117 1.1 christos *) func_append dlprefiles " $lib" ;;
9118 1.1 christos esac
9119 1.1 christos done
9120 1.1 christos
9121 1.1 christos if test yes = "$build_libtool_libs"; then
9122 1.1 christos if test -n "$rpath"; then
9123 1.1 christos case $host in
9124 1.1 christos *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
9125 1.1 christos # these systems don't actually have a c library (as such)!
9126 1.1 christos ;;
9127 1.1 christos *-*-rhapsody* | *-*-darwin1.[012])
9128 1.1 christos # Rhapsody C library is in the System framework
9129 1.1 christos func_append deplibs " System.ltframework"
9130 1.1 christos ;;
9131 1.1 christos *-*-netbsd*)
9132 1.1 christos # Don't link with libc until the a.out ld.so is fixed.
9133 1.1 christos ;;
9134 1.1 christos *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
9135 1.1 christos # Do not include libc due to us having libc/libc_r.
9136 1.1 christos ;;
9137 1.1 christos *-*-sco3.2v5* | *-*-sco5v6*)
9138 1.1 christos # Causes problems with __ctype
9139 1.1 christos ;;
9140 1.1 christos *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
9141 1.1 christos # Compiler inserts libc in the correct place for threads to work
9142 1.1 christos ;;
9143 1.1 christos *)
9144 1.1 christos # Add libc to deplibs on all other systems if necessary.
9145 1.1 christos if test yes = "$build_libtool_need_lc"; then
9146 1.1 christos func_append deplibs " -lc"
9147 1.1 christos fi
9148 1.1 christos ;;
9149 1.1 christos esac
9150 1.1 christos fi
9151 1.1 christos
9152 1.1 christos # Transform deplibs into only deplibs that can be linked in shared.
9153 1.1 christos name_save=$name
9154 1.1 christos libname_save=$libname
9155 1.1 christos release_save=$release
9156 1.1 christos versuffix_save=$versuffix
9157 1.1 christos major_save=$major
9158 1.1 christos # I'm not sure if I'm treating the release correctly. I think
9159 1.1 christos # release should show up in the -l (ie -lgmp5) so we don't want to
9160 1.1 christos # add it in twice. Is that correct?
9161 1.1 christos release=
9162 1.1 christos versuffix=
9163 1.1 christos major=
9164 1.1 christos newdeplibs=
9165 1.1 christos droppeddeps=no
9166 1.1 christos case $deplibs_check_method in
9167 1.1 christos pass_all)
9168 1.1 christos # Don't check for shared/static. Everything works.
9169 1.1 christos # This might be a little naive. We might want to check
9170 1.1 christos # whether the library exists or not. But this is on
9171 1.1 christos # osf3 & osf4 and I'm not really sure... Just
9172 1.1 christos # implementing what was already the behavior.
9173 1.1 christos newdeplibs=$deplibs
9174 1.1 christos ;;
9175 1.1 christos test_compile)
9176 1.1 christos # This code stresses the "libraries are programs" paradigm to its
9177 1.1 christos # limits. Maybe even breaks it. We compile a program, linking it
9178 1.1 christos # against the deplibs as a proxy for the library. Then we can check
9179 1.1 christos # whether they linked in statically or dynamically with ldd.
9180 1.1 christos $opt_dry_run || $RM conftest.c
9181 1.1 christos cat > conftest.c <<EOF
9182 1.1 christos int main() { return 0; }
9183 1.1 christos EOF
9184 1.1 christos $opt_dry_run || $RM conftest
9185 1.1 christos if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
9186 1.1 christos ldd_output=`ldd conftest`
9187 1.1 christos for i in $deplibs; do
9188 1.1 christos case $i in
9189 1.1 christos -l*)
9190 1.1 christos func_stripname -l '' "$i"
9191 1.1 christos name=$func_stripname_result
9192 1.1 christos if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9193 1.1 christos case " $predeps $postdeps " in
9194 1.1 christos *" $i "*)
9195 1.1 christos func_append newdeplibs " $i"
9196 1.1 christos i=
9197 1.1 christos ;;
9198 1.1 christos esac
9199 1.1 christos fi
9200 1.1 christos if test -n "$i"; then
9201 1.1 christos libname=`eval "\\$ECHO \"$libname_spec\""`
9202 1.1 christos deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
9203 1.1 christos set dummy $deplib_matches; shift
9204 1.1 christos deplib_match=$1
9205 1.1 christos if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
9206 1.1 christos func_append newdeplibs " $i"
9207 1.1 christos else
9208 1.1 christos droppeddeps=yes
9209 1.1 christos echo
9210 1.1 christos $ECHO "*** Warning: dynamic linker does not accept needed library $i."
9211 1.1 christos echo "*** I have the capability to make that library automatically link in when"
9212 1.1 christos echo "*** you link to this library. But I can only do this if you have a"
9213 1.1 christos echo "*** shared version of the library, which I believe you do not have"
9214 1.1 christos echo "*** because a test_compile did reveal that the linker did not use it for"
9215 1.1 christos echo "*** its dynamic dependency list that programs get resolved with at runtime."
9216 1.1 christos fi
9217 1.1 christos fi
9218 1.1 christos ;;
9219 1.1 christos *)
9220 1.1 christos func_append newdeplibs " $i"
9221 1.1 christos ;;
9222 1.1 christos esac
9223 1.1 christos done
9224 1.1 christos else
9225 1.1 christos # Error occurred in the first compile. Let's try to salvage
9226 1.1 christos # the situation: Compile a separate program for each library.
9227 1.1 christos for i in $deplibs; do
9228 1.1 christos case $i in
9229 1.1 christos -l*)
9230 1.1 christos func_stripname -l '' "$i"
9231 1.1 christos name=$func_stripname_result
9232 1.1 christos $opt_dry_run || $RM conftest
9233 1.1 christos if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
9234 1.1 christos ldd_output=`ldd conftest`
9235 1.1 christos if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9236 1.1 christos case " $predeps $postdeps " in
9237 1.1 christos *" $i "*)
9238 1.1 christos func_append newdeplibs " $i"
9239 1.1 christos i=
9240 1.1 christos ;;
9241 1.1 christos esac
9242 1.1 christos fi
9243 1.1 christos if test -n "$i"; then
9244 1.1 christos libname=`eval "\\$ECHO \"$libname_spec\""`
9245 1.1 christos deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
9246 1.1 christos set dummy $deplib_matches; shift
9247 1.1 christos deplib_match=$1
9248 1.1 christos if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
9249 1.1 christos func_append newdeplibs " $i"
9250 1.1 christos else
9251 1.1 christos droppeddeps=yes
9252 1.1 christos echo
9253 1.1 christos $ECHO "*** Warning: dynamic linker does not accept needed library $i."
9254 1.1 christos echo "*** I have the capability to make that library automatically link in when"
9255 1.1 christos echo "*** you link to this library. But I can only do this if you have a"
9256 1.1 christos echo "*** shared version of the library, which you do not appear to have"
9257 1.1 christos echo "*** because a test_compile did reveal that the linker did not use this one"
9258 1.1 christos echo "*** as a dynamic dependency that programs can get resolved with at runtime."
9259 1.1 christos fi
9260 1.1 christos fi
9261 1.1 christos else
9262 1.1 christos droppeddeps=yes
9263 1.1 christos echo
9264 1.1 christos $ECHO "*** Warning! Library $i is needed by this library but I was not able to"
9265 1.1 christos echo "*** make it link in! You will probably need to install it or some"
9266 1.1 christos echo "*** library that it depends on before this library will be fully"
9267 1.1 christos echo "*** functional. Installing it before continuing would be even better."
9268 1.1 christos fi
9269 1.1 christos ;;
9270 1.1 christos *)
9271 1.1 christos func_append newdeplibs " $i"
9272 1.1 christos ;;
9273 1.1 christos esac
9274 1.1 christos done
9275 1.1 christos fi
9276 1.1 christos ;;
9277 1.1 christos file_magic*)
9278 1.1 christos set dummy $deplibs_check_method; shift
9279 1.1 christos file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9280 1.1 christos for a_deplib in $deplibs; do
9281 1.1 christos case $a_deplib in
9282 1.1 christos -l*)
9283 1.1 christos func_stripname -l '' "$a_deplib"
9284 1.1 christos name=$func_stripname_result
9285 1.1 christos if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9286 1.1 christos case " $predeps $postdeps " in
9287 1.1 christos *" $a_deplib "*)
9288 1.1 christos func_append newdeplibs " $a_deplib"
9289 1.1 christos a_deplib=
9290 1.1 christos ;;
9291 1.1 christos esac
9292 1.1 christos fi
9293 1.1 christos if test -n "$a_deplib"; then
9294 1.1 christos libname=`eval "\\$ECHO \"$libname_spec\""`
9295 1.1 christos if test -n "$file_magic_glob"; then
9296 1.1 christos libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
9297 1.1 christos else
9298 1.1 christos libnameglob=$libname
9299 1.1 christos fi
9300 1.1 christos test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
9301 1.1 christos for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
9302 1.1 christos if test yes = "$want_nocaseglob"; then
9303 1.1 christos shopt -s nocaseglob
9304 1.1 christos potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9305 1.1 christos $nocaseglob
9306 1.1 christos else
9307 1.1 christos potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9308 1.1 christos fi
9309 1.1 christos for potent_lib in $potential_libs; do
9310 1.1 christos # Follow soft links.
9311 1.1 christos if ls -lLd "$potent_lib" 2>/dev/null |
9312 1.1 christos $GREP " -> " >/dev/null; then
9313 1.1 christos continue
9314 1.1 christos fi
9315 1.1 christos # The statement above tries to avoid entering an
9316 1.1 christos # endless loop below, in case of cyclic links.
9317 1.1 christos # We might still enter an endless loop, since a link
9318 1.1 christos # loop can be closed while we follow links,
9319 1.1 christos # but so what?
9320 1.1 christos potlib=$potent_lib
9321 1.1 christos while test -h "$potlib" 2>/dev/null; do
9322 1.1 christos potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
9323 1.1 christos case $potliblink in
9324 1.1 christos [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
9325 1.1 christos *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
9326 1.1 christos esac
9327 1.1 christos done
9328 1.1 christos if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
9329 1.1 christos $SED -e 10q |
9330 1.1 christos $EGREP "$file_magic_regex" > /dev/null; then
9331 1.1 christos func_append newdeplibs " $a_deplib"
9332 1.1 christos a_deplib=
9333 1.1 christos break 2
9334 1.1 christos fi
9335 1.1 christos done
9336 1.1 christos done
9337 1.1 christos fi
9338 1.1 christos if test -n "$a_deplib"; then
9339 1.1 christos droppeddeps=yes
9340 1.1 christos echo
9341 1.1 christos $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
9342 1.1 christos echo "*** I have the capability to make that library automatically link in when"
9343 1.1 christos echo "*** you link to this library. But I can only do this if you have a"
9344 1.1 christos echo "*** shared version of the library, which you do not appear to have"
9345 1.1 christos echo "*** because I did check the linker path looking for a file starting"
9346 1.1 christos if test -z "$potlib"; then
9347 1.1 christos $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
9348 1.1 christos else
9349 1.1 christos $ECHO "*** with $libname and none of the candidates passed a file format test"
9350 1.1 christos $ECHO "*** using a file magic. Last file checked: $potlib"
9351 1.1 christos fi
9352 1.1 christos fi
9353 1.1 christos ;;
9354 1.1 christos *)
9355 1.1 christos # Add a -L argument.
9356 1.1 christos func_append newdeplibs " $a_deplib"
9357 1.1 christos ;;
9358 1.1 christos esac
9359 1.1 christos done # Gone through all deplibs.
9360 1.1 christos ;;
9361 1.1 christos match_pattern*)
9362 1.1 christos set dummy $deplibs_check_method; shift
9363 1.1 christos match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9364 1.1 christos for a_deplib in $deplibs; do
9365 1.1 christos case $a_deplib in
9366 1.1 christos -l*)
9367 1.1 christos func_stripname -l '' "$a_deplib"
9368 1.1 christos name=$func_stripname_result
9369 1.1 christos if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9370 1.1 christos case " $predeps $postdeps " in
9371 1.1 christos *" $a_deplib "*)
9372 1.1 christos func_append newdeplibs " $a_deplib"
9373 1.1 christos a_deplib=
9374 1.1 christos ;;
9375 1.1 christos esac
9376 1.1 christos fi
9377 1.1 christos if test -n "$a_deplib"; then
9378 1.1 christos libname=`eval "\\$ECHO \"$libname_spec\""`
9379 1.1 christos for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
9380 1.1 christos potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
9381 1.1 christos for potent_lib in $potential_libs; do
9382 1.1 christos potlib=$potent_lib # see symlink-check above in file_magic test
9383 1.1 christos if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
9384 1.1 christos $EGREP "$match_pattern_regex" > /dev/null; then
9385 1.1 christos func_append newdeplibs " $a_deplib"
9386 1.1 christos a_deplib=
9387 1.1 christos break 2
9388 1.1 christos fi
9389 1.1 christos done
9390 1.1 christos done
9391 1.1 christos fi
9392 1.1 christos if test -n "$a_deplib"; then
9393 1.1 christos droppeddeps=yes
9394 1.1 christos echo
9395 1.1 christos $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
9396 1.1 christos echo "*** I have the capability to make that library automatically link in when"
9397 1.1 christos echo "*** you link to this library. But I can only do this if you have a"
9398 1.1 christos echo "*** shared version of the library, which you do not appear to have"
9399 1.1 christos echo "*** because I did check the linker path looking for a file starting"
9400 1.1 christos if test -z "$potlib"; then
9401 1.1 christos $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
9402 1.1 christos else
9403 1.1 christos $ECHO "*** with $libname and none of the candidates passed a file format test"
9404 1.1 christos $ECHO "*** using a regex pattern. Last file checked: $potlib"
9405 1.1 christos fi
9406 1.1 christos fi
9407 1.1 christos ;;
9408 1.1 christos *)
9409 1.1 christos # Add a -L argument.
9410 1.1 christos func_append newdeplibs " $a_deplib"
9411 1.1 christos ;;
9412 1.1 christos esac
9413 1.1 christos done # Gone through all deplibs.
9414 1.1 christos ;;
9415 1.1 christos none | unknown | *)
9416 1.1 christos newdeplibs=
9417 1.1 christos tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
9418 1.1 christos if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9419 1.1 christos for i in $predeps $postdeps; do
9420 1.1 christos # can't use Xsed below, because $i might contain '/'
9421 1.1 christos tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
9422 1.1 christos done
9423 1.1 christos fi
9424 1.1 christos case $tmp_deplibs in
9425 1.1 christos *[!\ \ ]*)
9426 1.1 christos echo
9427 1.1 christos if test none = "$deplibs_check_method"; then
9428 1.1 christos echo "*** Warning: inter-library dependencies are not supported in this platform."
9429 1.1 christos else
9430 1.1 christos echo "*** Warning: inter-library dependencies are not known to be supported."
9431 1.1 christos fi
9432 1.1 christos echo "*** All declared inter-library dependencies are being dropped."
9433 1.1 christos droppeddeps=yes
9434 1.1 christos ;;
9435 1.1 christos esac
9436 1.1 christos ;;
9437 1.1 christos esac
9438 1.1 christos versuffix=$versuffix_save
9439 1.1 christos major=$major_save
9440 1.1 christos release=$release_save
9441 1.1 christos libname=$libname_save
9442 1.1 christos name=$name_save
9443 1.1 christos
9444 1.1 christos case $host in
9445 1.1 christos *-*-rhapsody* | *-*-darwin1.[012])
9446 1.1 christos # On Rhapsody replace the C library with the System framework
9447 1.1 christos newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
9448 1.1 christos ;;
9449 1.1 christos esac
9450 1.1 christos
9451 1.1 christos if test yes = "$droppeddeps"; then
9452 1.1 christos if test yes = "$module"; then
9453 1.1 christos echo
9454 1.1 christos echo "*** Warning: libtool could not satisfy all declared inter-library"
9455 1.1 christos $ECHO "*** dependencies of module $libname. Therefore, libtool will create"
9456 1.1 christos echo "*** a static module, that should work as long as the dlopening"
9457 1.1 christos echo "*** application is linked with the -dlopen flag."
9458 1.1 christos if test -z "$global_symbol_pipe"; then
9459 1.1 christos echo
9460 1.1 christos echo "*** However, this would only work if libtool was able to extract symbol"
9461 1.1 christos echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
9462 1.1 christos echo "*** not find such a program. So, this module is probably useless."
9463 1.1 christos echo "*** 'nm' from GNU binutils and a full rebuild may help."
9464 1.1 christos fi
9465 1.1 christos if test no = "$build_old_libs"; then
9466 1.1 christos oldlibs=$output_objdir/$libname.$libext
9467 1.1 christos build_libtool_libs=module
9468 1.1 christos build_old_libs=yes
9469 1.1 christos else
9470 1.1 christos build_libtool_libs=no
9471 1.1 christos fi
9472 1.1 christos else
9473 1.1 christos echo "*** The inter-library dependencies that have been dropped here will be"
9474 1.1 christos echo "*** automatically added whenever a program is linked with this library"
9475 1.1 christos echo "*** or is declared to -dlopen it."
9476 1.1 christos
9477 1.1 christos if test no = "$allow_undefined"; then
9478 1.1 christos echo
9479 1.1 christos echo "*** Since this library must not contain undefined symbols,"
9480 1.1 christos echo "*** because either the platform does not support them or"
9481 1.1 christos echo "*** it was explicitly requested with -no-undefined,"
9482 1.1 christos echo "*** libtool will only create a static version of it."
9483 1.1 christos if test no = "$build_old_libs"; then
9484 1.1 christos oldlibs=$output_objdir/$libname.$libext
9485 1.1 christos build_libtool_libs=module
9486 1.1 christos build_old_libs=yes
9487 1.1 christos else
9488 1.1 christos build_libtool_libs=no
9489 1.1 christos fi
9490 1.1 christos fi
9491 1.1 christos fi
9492 1.1 christos fi
9493 1.1 christos # Done checking deplibs!
9494 1.1 christos deplibs=$newdeplibs
9495 1.1 christos fi
9496 1.1 christos # Time to change all our "foo.ltframework" stuff back to "-framework foo"
9497 1.1 christos case $host in
9498 1.1 christos *-*-darwin*)
9499 1.1 christos newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9500 1.1 christos new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9501 1.1 christos deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9502 1.1 christos ;;
9503 1.1 christos esac
9504 1.1 christos
9505 1.1 christos # move library search paths that coincide with paths to not yet
9506 1.1 christos # installed libraries to the beginning of the library search list
9507 1.1 christos new_libs=
9508 1.1 christos for path in $notinst_path; do
9509 1.1 christos case " $new_libs " in
9510 1.1 christos *" -L$path/$objdir "*) ;;
9511 1.1 christos *)
9512 1.1 christos case " $deplibs " in
9513 1.1 christos *" -L$path/$objdir "*)
9514 1.1 christos func_append new_libs " -L$path/$objdir" ;;
9515 1.1 christos esac
9516 1.1 christos ;;
9517 1.1 christos esac
9518 1.1 christos done
9519 1.1 christos for deplib in $deplibs; do
9520 1.1 christos case $deplib in
9521 1.1 christos -L*)
9522 1.1 christos case " $new_libs " in
9523 1.1 christos *" $deplib "*) ;;
9524 1.1 christos *) func_append new_libs " $deplib" ;;
9525 1.1 christos esac
9526 1.1 christos ;;
9527 1.1 christos *) func_append new_libs " $deplib" ;;
9528 1.1 christos esac
9529 1.1 christos done
9530 1.1 christos deplibs=$new_libs
9531 1.1 christos
9532 1.1 christos # All the library-specific variables (install_libdir is set above).
9533 1.1 christos library_names=
9534 1.1 christos old_library=
9535 1.1 christos dlname=
9536 1.1 christos
9537 1.1 christos # Test again, we may have decided not to build it any more
9538 1.1 christos if test yes = "$build_libtool_libs"; then
9539 1.1 christos # Remove $wl instances when linking with ld.
9540 1.1 christos # FIXME: should test the right _cmds variable.
9541 1.1 christos case $archive_cmds in
9542 1.1 christos *\$LD\ *) wl= ;;
9543 1.1 christos esac
9544 1.1 christos if test yes = "$hardcode_into_libs"; then
9545 1.1 christos # Hardcode the library paths
9546 1.1 christos hardcode_libdirs=
9547 1.1 christos dep_rpath=
9548 1.1 christos rpath=$finalize_rpath
9549 1.1 christos test relink = "$opt_mode" || rpath=$compile_rpath$rpath
9550 1.1 christos for libdir in $rpath; do
9551 1.1 christos if test -n "$hardcode_libdir_flag_spec"; then
9552 1.1 christos if test -n "$hardcode_libdir_separator"; then
9553 1.1 christos func_replace_sysroot "$libdir"
9554 1.1 christos libdir=$func_replace_sysroot_result
9555 1.1 christos if test -z "$hardcode_libdirs"; then
9556 1.1 christos hardcode_libdirs=$libdir
9557 1.1 christos else
9558 1.1 christos # Just accumulate the unique libdirs.
9559 1.1 christos case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
9560 1.1 christos *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
9561 1.1 christos ;;
9562 1.1 christos *)
9563 1.1 christos func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
9564 1.1 christos ;;
9565 1.1 christos esac
9566 1.1 christos fi
9567 1.1 christos else
9568 1.1 christos eval flag=\"$hardcode_libdir_flag_spec\"
9569 1.1 christos func_append dep_rpath " $flag"
9570 1.1 christos fi
9571 1.1 christos elif test -n "$runpath_var"; then
9572 1.1 christos case "$perm_rpath " in
9573 1.1 christos *" $libdir "*) ;;
9574 1.1 christos *) func_append perm_rpath " $libdir" ;;
9575 1.1 christos esac
9576 1.1 christos fi
9577 1.1 christos done
9578 1.1 christos # Substitute the hardcoded libdirs into the rpath.
9579 1.1 christos if test -n "$hardcode_libdir_separator" &&
9580 1.1 christos test -n "$hardcode_libdirs"; then
9581 1.1 christos libdir=$hardcode_libdirs
9582 1.1 christos eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
9583 1.1 christos fi
9584 1.1 christos if test -n "$runpath_var" && test -n "$perm_rpath"; then
9585 1.1 christos # We should set the runpath_var.
9586 1.1 christos rpath=
9587 1.1 christos for dir in $perm_rpath; do
9588 1.1 christos func_append rpath "$dir:"
9589 1.1 christos done
9590 1.1 christos eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
9591 1.1 christos fi
9592 1.1 christos test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
9593 1.1 christos fi
9594 1.1 christos
9595 1.1 christos shlibpath=$finalize_shlibpath
9596 1.1 christos test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
9597 1.1 christos if test -n "$shlibpath"; then
9598 1.1 christos eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
9599 1.1 christos fi
9600 1.1 christos
9601 1.1 christos # Get the real and link names of the library.
9602 1.1 christos eval shared_ext=\"$shrext_cmds\"
9603 1.1 christos eval library_names=\"$library_names_spec\"
9604 1.1 christos set dummy $library_names
9605 1.1 christos shift
9606 1.1 christos realname=$1
9607 1.1 christos shift
9608 1.1 christos
9609 1.1 christos if test -n "$soname_spec"; then
9610 1.1 christos eval soname=\"$soname_spec\"
9611 1.1 christos else
9612 1.1 christos soname=$realname
9613 1.1 christos fi
9614 1.1 christos if test -z "$dlname"; then
9615 1.1 christos dlname=$soname
9616 1.1 christos fi
9617 1.1 christos
9618 1.1 christos lib=$output_objdir/$realname
9619 1.1 christos linknames=
9620 1.1 christos for link
9621 1.1 christos do
9622 1.1 christos func_append linknames " $link"
9623 1.1 christos done
9624 1.1 christos
9625 1.1 christos # Use standard objects if they are pic
9626 1.1 christos test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
9627 1.1 christos test "X$libobjs" = "X " && libobjs=
9628 1.1 christos
9629 1.1 christos delfiles=
9630 1.1 christos if test -n "$export_symbols" && test -n "$include_expsyms"; then
9631 1.1 christos $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
9632 1.1 christos export_symbols=$output_objdir/$libname.uexp
9633 1.1 christos func_append delfiles " $export_symbols"
9634 1.1 christos fi
9635 1.1 christos
9636 1.1 christos orig_export_symbols=
9637 1.1 christos case $host_os in
9638 1.1 christos cygwin* | mingw* | cegcc*)
9639 1.1 christos if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
9640 1.1 christos # exporting using user supplied symfile
9641 1.1 christos func_dll_def_p "$export_symbols" || {
9642 1.1 christos # and it's NOT already a .def file. Must figure out
9643 1.1 christos # which of the given symbols are data symbols and tag
9644 1.1 christos # them as such. So, trigger use of export_symbols_cmds.
9645 1.1 christos # export_symbols gets reassigned inside the "prepare
9646 1.1 christos # the list of exported symbols" if statement, so the
9647 1.1 christos # include_expsyms logic still works.
9648 1.1 christos orig_export_symbols=$export_symbols
9649 1.1 christos export_symbols=
9650 1.1 christos always_export_symbols=yes
9651 1.1 christos }
9652 1.1 christos fi
9653 1.1 christos ;;
9654 1.1 christos esac
9655 1.1 christos
9656 1.1 christos # Prepare the list of exported symbols
9657 1.1 christos if test -z "$export_symbols"; then
9658 1.1 christos if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
9659 1.1 christos func_verbose "generating symbol list for '$libname.la'"
9660 1.1 christos export_symbols=$output_objdir/$libname.exp
9661 1.1 christos $opt_dry_run || $RM $export_symbols
9662 1.1 christos cmds=$export_symbols_cmds
9663 1.1 christos save_ifs=$IFS; IFS='~'
9664 1.1 christos for cmd1 in $cmds; do
9665 1.1 christos IFS=$save_ifs
9666 1.1 christos # Take the normal branch if the nm_file_list_spec branch
9667 1.1 christos # doesn't work or if tool conversion is not needed.
9668 1.1 christos case $nm_file_list_spec~$to_tool_file_cmd in
9669 1.1 christos *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
9670 1.1 christos try_normal_branch=yes
9671 1.1 christos eval cmd=\"$cmd1\"
9672 1.1 christos func_len " $cmd"
9673 1.1 christos len=$func_len_result
9674 1.1 christos ;;
9675 1.1 christos *)
9676 1.1 christos try_normal_branch=no
9677 1.1 christos ;;
9678 1.1 christos esac
9679 1.1 christos if test yes = "$try_normal_branch" \
9680 1.1 christos && { test "$len" -lt "$max_cmd_len" \
9681 1.1 christos || test "$max_cmd_len" -le -1; }
9682 1.1 christos then
9683 1.1 christos func_show_eval "$cmd" 'exit $?'
9684 1.1 christos skipped_export=false
9685 1.1 christos elif test -n "$nm_file_list_spec"; then
9686 1.1 christos func_basename "$output"
9687 1.1 christos output_la=$func_basename_result
9688 1.1 christos save_libobjs=$libobjs
9689 1.1 christos save_output=$output
9690 1.1 christos output=$output_objdir/$output_la.nm
9691 1.1 christos func_to_tool_file "$output"
9692 1.1 christos libobjs=$nm_file_list_spec$func_to_tool_file_result
9693 1.1 christos func_append delfiles " $output"
9694 1.1 christos func_verbose "creating $NM input file list: $output"
9695 1.1 christos for obj in $save_libobjs; do
9696 1.1 christos func_to_tool_file "$obj"
9697 1.1 christos $ECHO "$func_to_tool_file_result"
9698 1.1 christos done > "$output"
9699 1.1 christos eval cmd=\"$cmd1\"
9700 1.1 christos func_show_eval "$cmd" 'exit $?'
9701 1.1 christos output=$save_output
9702 1.1 christos libobjs=$save_libobjs
9703 1.1 christos skipped_export=false
9704 1.1 christos else
9705 1.1 christos # The command line is too long to execute in one step.
9706 1.1 christos func_verbose "using reloadable object file for export list..."
9707 1.1 christos skipped_export=:
9708 1.1 christos # Break out early, otherwise skipped_export may be
9709 1.1 christos # set to false by a later but shorter cmd.
9710 1.1 christos break
9711 1.1 christos fi
9712 1.1 christos done
9713 1.1 christos IFS=$save_ifs
9714 1.1 christos if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
9715 1.1 christos func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
9716 1.1 christos func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
9717 1.1 christos fi
9718 1.1 christos fi
9719 1.1 christos fi
9720 1.1 christos
9721 1.1 christos if test -n "$export_symbols" && test -n "$include_expsyms"; then
9722 1.1 christos tmp_export_symbols=$export_symbols
9723 1.1 christos test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
9724 1.1 christos $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
9725 1.1 christos fi
9726 1.1 christos
9727 1.1 christos if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
9728 1.1 christos # The given exports_symbols file has to be filtered, so filter it.
9729 1.1 christos func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
9730 1.1 christos # FIXME: $output_objdir/$libname.filter potentially contains lots of
9731 1.1 christos # 's' commands, which not all seds can handle. GNU sed should be fine
9732 1.1 christos # though. Also, the filter scales superlinearly with the number of
9733 1.1 christos # global variables. join(1) would be nice here, but unfortunately
9734 1.1 christos # isn't a blessed tool.
9735 1.1 christos $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
9736 1.1 christos func_append delfiles " $export_symbols $output_objdir/$libname.filter"
9737 1.1 christos export_symbols=$output_objdir/$libname.def
9738 1.1 christos $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
9739 1.1 christos fi
9740 1.1 christos
9741 1.1 christos tmp_deplibs=
9742 1.1 christos for test_deplib in $deplibs; do
9743 1.1 christos case " $convenience " in
9744 1.1 christos *" $test_deplib "*) ;;
9745 1.1 christos *)
9746 1.1 christos func_append tmp_deplibs " $test_deplib"
9747 1.1 christos ;;
9748 1.1 christos esac
9749 1.1 christos done
9750 1.1 christos deplibs=$tmp_deplibs
9751 1.1 christos
9752 1.1 christos if test -n "$convenience"; then
9753 1.1 christos if test -n "$whole_archive_flag_spec" &&
9754 1.1 christos test yes = "$compiler_needs_object" &&
9755 1.1 christos test -z "$libobjs"; then
9756 1.1 christos # extract the archives, so we have objects to list.
9757 1.1 christos # TODO: could optimize this to just extract one archive.
9758 1.1 christos whole_archive_flag_spec=
9759 1.1 christos fi
9760 1.1 christos if test -n "$whole_archive_flag_spec"; then
9761 1.1 christos save_libobjs=$libobjs
9762 1.1 christos eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
9763 1.1 christos test "X$libobjs" = "X " && libobjs=
9764 1.1 christos else
9765 1.1 christos gentop=$output_objdir/${outputname}x
9766 1.1 christos func_append generated " $gentop"
9767 1.1 christos
9768 1.1 christos func_extract_archives $gentop $convenience
9769 1.1 christos func_append libobjs " $func_extract_archives_result"
9770 1.1 christos test "X$libobjs" = "X " && libobjs=
9771 1.1 christos fi
9772 1.1 christos fi
9773 1.1 christos
9774 1.1 christos if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
9775 1.1 christos eval flag=\"$thread_safe_flag_spec\"
9776 1.1 christos func_append linker_flags " $flag"
9777 1.1 christos fi
9778 1.1 christos
9779 1.1 christos # Make a backup of the uninstalled library when relinking
9780 1.1 christos if test relink = "$opt_mode"; then
9781 1.1 christos $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
9782 1.1 christos fi
9783 1.1 christos
9784 1.1 christos # Do each of the archive commands.
9785 1.1 christos if test yes = "$module" && test -n "$module_cmds"; then
9786 1.1 christos if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
9787 1.1 christos eval test_cmds=\"$module_expsym_cmds\"
9788 1.1 christos cmds=$module_expsym_cmds
9789 1.1 christos else
9790 1.1 christos eval test_cmds=\"$module_cmds\"
9791 1.1 christos cmds=$module_cmds
9792 1.1 christos fi
9793 1.1 christos else
9794 1.1 christos if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
9795 1.1 christos eval test_cmds=\"$archive_expsym_cmds\"
9796 1.1 christos cmds=$archive_expsym_cmds
9797 1.1 christos else
9798 1.1 christos eval test_cmds=\"$archive_cmds\"
9799 1.1 christos cmds=$archive_cmds
9800 1.1 christos fi
9801 1.1 christos fi
9802 1.1 christos
9803 1.1 christos if test : != "$skipped_export" &&
9804 1.1 christos func_len " $test_cmds" &&
9805 1.1 christos len=$func_len_result &&
9806 1.1 christos test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
9807 1.1 christos :
9808 1.1 christos else
9809 1.1 christos # The command line is too long to link in one step, link piecewise
9810 1.1 christos # or, if using GNU ld and skipped_export is not :, use a linker
9811 1.1 christos # script.
9812 1.1 christos
9813 1.1 christos # Save the value of $output and $libobjs because we want to
9814 1.1 christos # use them later. If we have whole_archive_flag_spec, we
9815 1.1 christos # want to use save_libobjs as it was before
9816 1.1 christos # whole_archive_flag_spec was expanded, because we can't
9817 1.1 christos # assume the linker understands whole_archive_flag_spec.
9818 1.1 christos # This may have to be revisited, in case too many
9819 1.1 christos # convenience libraries get linked in and end up exceeding
9820 1.1 christos # the spec.
9821 1.1 christos if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
9822 1.1 christos save_libobjs=$libobjs
9823 1.1 christos fi
9824 1.1 christos save_output=$output
9825 1.1 christos func_basename "$output"
9826 1.1 christos output_la=$func_basename_result
9827 1.1 christos
9828 1.1 christos # Clear the reloadable object creation command queue and
9829 1.1 christos # initialize k to one.
9830 1.1 christos test_cmds=
9831 1.1 christos concat_cmds=
9832 1.1 christos objlist=
9833 1.1 christos last_robj=
9834 1.1 christos k=1
9835 1.1 christos
9836 1.1 christos if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
9837 1.1 christos output=$output_objdir/$output_la.lnkscript
9838 1.1 christos func_verbose "creating GNU ld script: $output"
9839 1.1 christos echo 'INPUT (' > $output
9840 1.1 christos for obj in $save_libobjs
9841 1.1 christos do
9842 1.1 christos func_to_tool_file "$obj"
9843 1.1 christos $ECHO "$func_to_tool_file_result" >> $output
9844 1.1 christos done
9845 1.1 christos echo ')' >> $output
9846 1.1 christos func_append delfiles " $output"
9847 1.1 christos func_to_tool_file "$output"
9848 1.1 christos output=$func_to_tool_file_result
9849 1.1 christos elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
9850 1.1 christos output=$output_objdir/$output_la.lnk
9851 1.1 christos func_verbose "creating linker input file list: $output"
9852 1.1 christos : > $output
9853 1.1 christos set x $save_libobjs
9854 1.1 christos shift
9855 1.1 christos firstobj=
9856 1.1 christos if test yes = "$compiler_needs_object"; then
9857 1.1 christos firstobj="$1 "
9858 1.1 christos shift
9859 1.1 christos fi
9860 1.1 christos for obj
9861 1.1 christos do
9862 1.1 christos func_to_tool_file "$obj"
9863 1.1 christos $ECHO "$func_to_tool_file_result" >> $output
9864 1.1 christos done
9865 1.1 christos func_append delfiles " $output"
9866 1.1 christos func_to_tool_file "$output"
9867 1.1 christos output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
9868 1.1 christos else
9869 1.1 christos if test -n "$save_libobjs"; then
9870 1.1 christos func_verbose "creating reloadable object files..."
9871 1.1 christos output=$output_objdir/$output_la-$k.$objext
9872 1.1 christos eval test_cmds=\"$reload_cmds\"
9873 1.1 christos func_len " $test_cmds"
9874 1.1 christos len0=$func_len_result
9875 1.1 christos len=$len0
9876 1.1 christos
9877 1.1 christos # Loop over the list of objects to be linked.
9878 1.1 christos for obj in $save_libobjs
9879 1.1 christos do
9880 1.1 christos func_len " $obj"
9881 1.1 christos func_arith $len + $func_len_result
9882 1.1 christos len=$func_arith_result
9883 1.1 christos if test -z "$objlist" ||
9884 1.1 christos test "$len" -lt "$max_cmd_len"; then
9885 1.1 christos func_append objlist " $obj"
9886 1.1 christos else
9887 1.1 christos # The command $test_cmds is almost too long, add a
9888 1.1 christos # command to the queue.
9889 1.1 christos if test 1 -eq "$k"; then
9890 1.1 christos # The first file doesn't have a previous command to add.
9891 1.1 christos reload_objs=$objlist
9892 1.1 christos eval concat_cmds=\"$reload_cmds\"
9893 1.1 christos else
9894 1.1 christos # All subsequent reloadable object files will link in
9895 1.1 christos # the last one created.
9896 1.1 christos reload_objs="$objlist $last_robj"
9897 1.1 christos eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
9898 1.1 christos fi
9899 1.1 christos last_robj=$output_objdir/$output_la-$k.$objext
9900 1.1 christos func_arith $k + 1
9901 1.1 christos k=$func_arith_result
9902 1.1 christos output=$output_objdir/$output_la-$k.$objext
9903 1.1 christos objlist=" $obj"
9904 1.1 christos func_len " $last_robj"
9905 1.1 christos func_arith $len0 + $func_len_result
9906 1.1 christos len=$func_arith_result
9907 1.1 christos fi
9908 1.1 christos done
9909 1.1 christos # Handle the remaining objects by creating one last
9910 1.1 christos # reloadable object file. All subsequent reloadable object
9911 1.1 christos # files will link in the last one created.
9912 1.1 christos test -z "$concat_cmds" || concat_cmds=$concat_cmds~
9913 1.1 christos reload_objs="$objlist $last_robj"
9914 1.1 christos eval concat_cmds=\"\$concat_cmds$reload_cmds\"
9915 1.1 christos if test -n "$last_robj"; then
9916 1.1 christos eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
9917 1.1 christos fi
9918 1.1 christos func_append delfiles " $output"
9919 1.1 christos
9920 1.1 christos else
9921 1.1 christos output=
9922 1.1 christos fi
9923 1.1 christos
9924 1.1 christos ${skipped_export-false} && {
9925 1.1 christos func_verbose "generating symbol list for '$libname.la'"
9926 1.1 christos export_symbols=$output_objdir/$libname.exp
9927 1.1 christos $opt_dry_run || $RM $export_symbols
9928 1.1 christos libobjs=$output
9929 1.1 christos # Append the command to create the export file.
9930 1.1 christos test -z "$concat_cmds" || concat_cmds=$concat_cmds~
9931 1.1 christos eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
9932 1.1 christos if test -n "$last_robj"; then
9933 1.1 christos eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
9934 1.1 christos fi
9935 1.1 christos }
9936 1.1 christos
9937 1.1 christos test -n "$save_libobjs" &&
9938 1.1 christos func_verbose "creating a temporary reloadable object file: $output"
9939 1.1 christos
9940 1.1 christos # Loop through the commands generated above and execute them.
9941 1.1 christos save_ifs=$IFS; IFS='~'
9942 1.1 christos for cmd in $concat_cmds; do
9943 1.1 christos IFS=$save_ifs
9944 1.1 christos $opt_quiet || {
9945 1.1 christos func_quote_for_expand "$cmd"
9946 1.1 christos eval "func_echo $func_quote_for_expand_result"
9947 1.1 christos }
9948 1.1 christos $opt_dry_run || eval "$cmd" || {
9949 1.1 christos lt_exit=$?
9950 1.1 christos
9951 1.1 christos # Restore the uninstalled library and exit
9952 1.1 christos if test relink = "$opt_mode"; then
9953 1.1 christos ( cd "$output_objdir" && \
9954 1.1 christos $RM "${realname}T" && \
9955 1.1 christos $MV "${realname}U" "$realname" )
9956 1.1 christos fi
9957 1.1 christos
9958 1.1 christos exit $lt_exit
9959 1.1 christos }
9960 1.1 christos done
9961 1.1 christos IFS=$save_ifs
9962 1.1 christos
9963 1.1 christos if test -n "$export_symbols_regex" && ${skipped_export-false}; then
9964 1.1 christos func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
9965 1.1 christos func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
9966 1.1 christos fi
9967 1.1 christos fi
9968 1.1 christos
9969 1.1 christos ${skipped_export-false} && {
9970 1.1 christos if test -n "$export_symbols" && test -n "$include_expsyms"; then
9971 1.1 christos tmp_export_symbols=$export_symbols
9972 1.1 christos test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
9973 1.1 christos $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
9974 1.1 christos fi
9975 1.1 christos
9976 1.1 christos if test -n "$orig_export_symbols"; then
9977 1.1 christos # The given exports_symbols file has to be filtered, so filter it.
9978 1.1 christos func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
9979 1.1 christos # FIXME: $output_objdir/$libname.filter potentially contains lots of
9980 1.1 christos # 's' commands, which not all seds can handle. GNU sed should be fine
9981 1.1 christos # though. Also, the filter scales superlinearly with the number of
9982 1.1 christos # global variables. join(1) would be nice here, but unfortunately
9983 1.1 christos # isn't a blessed tool.
9984 1.1 christos $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
9985 1.1 christos func_append delfiles " $export_symbols $output_objdir/$libname.filter"
9986 1.1 christos export_symbols=$output_objdir/$libname.def
9987 1.1 christos $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
9988 1.1 christos fi
9989 1.1 christos }
9990 1.1 christos
9991 1.1 christos libobjs=$output
9992 1.1 christos # Restore the value of output.
9993 1.1 christos output=$save_output
9994 1.1 christos
9995 1.1 christos if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
9996 1.1 christos eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
9997 1.1 christos test "X$libobjs" = "X " && libobjs=
9998 1.1 christos fi
9999 1.1 christos # Expand the library linking commands again to reset the
10000 1.1 christos # value of $libobjs for piecewise linking.
10001 1.1 christos
10002 1.1 christos # Do each of the archive commands.
10003 1.1 christos if test yes = "$module" && test -n "$module_cmds"; then
10004 1.1 christos if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
10005 1.1 christos cmds=$module_expsym_cmds
10006 1.1 christos else
10007 1.1 christos cmds=$module_cmds
10008 1.1 christos fi
10009 1.1 christos else
10010 1.1 christos if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
10011 1.1 christos cmds=$archive_expsym_cmds
10012 1.1 christos else
10013 1.1 christos cmds=$archive_cmds
10014 1.1 christos fi
10015 1.1 christos fi
10016 1.1 christos fi
10017 1.1 christos
10018 1.1 christos if test -n "$delfiles"; then
10019 1.1 christos # Append the command to remove temporary files to $cmds.
10020 1.1 christos eval cmds=\"\$cmds~\$RM $delfiles\"
10021 1.1 christos fi
10022 1.1 christos
10023 1.1 christos # Add any objects from preloaded convenience libraries
10024 1.1 christos if test -n "$dlprefiles"; then
10025 1.1 christos gentop=$output_objdir/${outputname}x
10026 1.1 christos func_append generated " $gentop"
10027 1.1 christos
10028 1.1 christos func_extract_archives $gentop $dlprefiles
10029 1.1 christos func_append libobjs " $func_extract_archives_result"
10030 1.1 christos test "X$libobjs" = "X " && libobjs=
10031 1.1 christos fi
10032 1.1 christos
10033 1.1 christos save_ifs=$IFS; IFS='~'
10034 1.1 christos for cmd in $cmds; do
10035 1.1 christos IFS=$sp$nl
10036 1.1 christos eval cmd=\"$cmd\"
10037 1.1 christos IFS=$save_ifs
10038 1.1 christos $opt_quiet || {
10039 1.1 christos func_quote_for_expand "$cmd"
10040 1.1 christos eval "func_echo $func_quote_for_expand_result"
10041 1.1 christos }
10042 1.1 christos $opt_dry_run || eval "$cmd" || {
10043 1.1 christos lt_exit=$?
10044 1.1 christos
10045 1.1 christos # Restore the uninstalled library and exit
10046 1.1 christos if test relink = "$opt_mode"; then
10047 1.1 christos ( cd "$output_objdir" && \
10048 1.1 christos $RM "${realname}T" && \
10049 1.1 christos $MV "${realname}U" "$realname" )
10050 1.1 christos fi
10051 1.1 christos
10052 1.1 christos exit $lt_exit
10053 1.1 christos }
10054 1.1 christos done
10055 1.1 christos IFS=$save_ifs
10056 1.1 christos
10057 1.1 christos # Restore the uninstalled library and exit
10058 1.1 christos if test relink = "$opt_mode"; then
10059 1.1 christos $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
10060 1.1 christos
10061 1.1 christos if test -n "$convenience"; then
10062 1.1 christos if test -z "$whole_archive_flag_spec"; then
10063 1.1 christos func_show_eval '${RM}r "$gentop"'
10064 1.1 christos fi
10065 1.1 christos fi
10066 1.1 christos
10067 1.1 christos exit $EXIT_SUCCESS
10068 1.1 christos fi
10069 1.1 christos
10070 1.1 christos # Create links to the real library.
10071 1.1 christos for linkname in $linknames; do
10072 1.1 christos if test "$realname" != "$linkname"; then
10073 1.1 christos func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
10074 1.1 christos fi
10075 1.1 christos done
10076 1.1 christos
10077 1.1 christos # If -module or -export-dynamic was specified, set the dlname.
10078 1.1 christos if test yes = "$module" || test yes = "$export_dynamic"; then
10079 1.1 christos # On all known operating systems, these are identical.
10080 1.1 christos dlname=$soname
10081 1.1 christos fi
10082 1.1 christos fi
10083 1.1 christos ;;
10084 1.1 christos
10085 1.1 christos obj)
10086 1.1 christos if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
10087 1.1 christos func_warning "'-dlopen' is ignored for objects"
10088 1.1 christos fi
10089 1.1 christos
10090 1.1 christos case " $deplibs" in
10091 1.1 christos *\ -l* | *\ -L*)
10092 1.1 christos func_warning "'-l' and '-L' are ignored for objects" ;;
10093 1.1 christos esac
10094 1.1 christos
10095 1.1 christos test -n "$rpath" && \
10096 1.1 christos func_warning "'-rpath' is ignored for objects"
10097 1.1 christos
10098 1.1 christos test -n "$xrpath" && \
10099 1.1 christos func_warning "'-R' is ignored for objects"
10100 1.1 christos
10101 1.1 christos test -n "$vinfo" && \
10102 1.1 christos func_warning "'-version-info' is ignored for objects"
10103 1.1 christos
10104 1.1 christos test -n "$release" && \
10105 1.1 christos func_warning "'-release' is ignored for objects"
10106 1.1 christos
10107 1.1 christos case $output in
10108 1.1 christos *.lo)
10109 1.1 christos test -n "$objs$old_deplibs" && \
10110 1.1 christos func_fatal_error "cannot build library object '$output' from non-libtool objects"
10111 1.1 christos
10112 1.1 christos libobj=$output
10113 1.1 christos func_lo2o "$libobj"
10114 1.1 christos obj=$func_lo2o_result
10115 1.1 christos ;;
10116 1.1 christos *)
10117 1.1 christos libobj=
10118 1.1 christos obj=$output
10119 1.1 christos ;;
10120 1.1 christos esac
10121 1.1 christos
10122 1.1 christos # Delete the old objects.
10123 1.1 christos $opt_dry_run || $RM $obj $libobj
10124 1.1 christos
10125 1.1 christos # Objects from convenience libraries. This assumes
10126 1.1 christos # single-version convenience libraries. Whenever we create
10127 1.1 christos # different ones for PIC/non-PIC, this we'll have to duplicate
10128 1.1 christos # the extraction.
10129 1.1 christos reload_conv_objs=
10130 1.1 christos gentop=
10131 1.1 christos # if reload_cmds runs $LD directly, get rid of -Wl from
10132 1.1 christos # whole_archive_flag_spec and hope we can get by with turning comma
10133 1.1 christos # into space.
10134 1.1 christos case $reload_cmds in
10135 1.1 christos *\$LD[\ \$]*) wl= ;;
10136 1.1 christos esac
10137 1.1 christos if test -n "$convenience"; then
10138 1.1 christos if test -n "$whole_archive_flag_spec"; then
10139 1.1 christos eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
10140 1.1 christos test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
10141 1.1 christos reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
10142 1.1 christos else
10143 1.1 christos gentop=$output_objdir/${obj}x
10144 1.1 christos func_append generated " $gentop"
10145 1.1 christos
10146 1.1 christos func_extract_archives $gentop $convenience
10147 1.1 christos reload_conv_objs="$reload_objs $func_extract_archives_result"
10148 1.1 christos fi
10149 1.1 christos fi
10150 1.1 christos
10151 1.1 christos # If we're not building shared, we need to use non_pic_objs
10152 1.1 christos test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
10153 1.1 christos
10154 1.1 christos # Create the old-style object.
10155 1.1 christos reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
10156 1.1 christos
10157 1.1 christos output=$obj
10158 1.1 christos func_execute_cmds "$reload_cmds" 'exit $?'
10159 1.1 christos
10160 1.1 christos # Exit if we aren't doing a library object file.
10161 1.1 christos if test -z "$libobj"; then
10162 1.1 christos if test -n "$gentop"; then
10163 1.1 christos func_show_eval '${RM}r "$gentop"'
10164 1.1 christos fi
10165 1.1 christos
10166 1.1 christos exit $EXIT_SUCCESS
10167 1.1 christos fi
10168 1.1 christos
10169 1.1 christos test yes = "$build_libtool_libs" || {
10170 1.1 christos if test -n "$gentop"; then
10171 1.1 christos func_show_eval '${RM}r "$gentop"'
10172 1.1 christos fi
10173 1.1 christos
10174 1.1 christos # Create an invalid libtool object if no PIC, so that we don't
10175 1.1 christos # accidentally link it into a program.
10176 1.1 christos # $show "echo timestamp > $libobj"
10177 1.1 christos # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
10178 1.1 christos exit $EXIT_SUCCESS
10179 1.1 christos }
10180 1.1 christos
10181 1.1 christos if test -n "$pic_flag" || test default != "$pic_mode"; then
10182 1.1 christos # Only do commands if we really have different PIC objects.
10183 1.1 christos reload_objs="$libobjs $reload_conv_objs"
10184 1.1 christos output=$libobj
10185 1.1 christos func_execute_cmds "$reload_cmds" 'exit $?'
10186 1.1 christos fi
10187 1.1 christos
10188 1.1 christos if test -n "$gentop"; then
10189 1.1 christos func_show_eval '${RM}r "$gentop"'
10190 1.1 christos fi
10191 1.1 christos
10192 1.1 christos exit $EXIT_SUCCESS
10193 1.1 christos ;;
10194 1.1 christos
10195 1.1 christos prog)
10196 1.1 christos case $host in
10197 1.1 christos *cygwin*) func_stripname '' '.exe' "$output"
10198 1.1 christos output=$func_stripname_result.exe;;
10199 1.1 christos esac
10200 1.1 christos test -n "$vinfo" && \
10201 1.1 christos func_warning "'-version-info' is ignored for programs"
10202 1.1 christos
10203 1.1 christos test -n "$release" && \
10204 1.1 christos func_warning "'-release' is ignored for programs"
10205 1.1 christos
10206 1.1 christos $preload \
10207 1.1 christos && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
10208 1.1 christos && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
10209 1.1 christos
10210 1.1 christos case $host in
10211 1.1 christos *-*-rhapsody* | *-*-darwin1.[012])
10212 1.1 christos # On Rhapsody replace the C library is the System framework
10213 1.1 christos compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
10214 1.1 christos finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
10215 1.1 christos ;;
10216 1.1 christos esac
10217 1.1 christos
10218 1.1 christos case $host in
10219 1.1 christos *-*-darwin*)
10220 1.1 christos # Don't allow lazy linking, it breaks C++ global constructors
10221 1.1 christos # But is supposedly fixed on 10.4 or later (yay!).
10222 1.1 christos if test CXX = "$tagname"; then
10223 1.1 christos case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
10224 1.1 christos 10.[0123])
10225 1.1 christos func_append compile_command " $wl-bind_at_load"
10226 1.1 christos func_append finalize_command " $wl-bind_at_load"
10227 1.1 christos ;;
10228 1.1 christos esac
10229 1.1 christos fi
10230 1.1 christos # Time to change all our "foo.ltframework" stuff back to "-framework foo"
10231 1.1 christos compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
10232 1.1 christos finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
10233 1.1 christos ;;
10234 1.1 christos esac
10235 1.1 christos
10236 1.1 christos
10237 1.1 christos # move library search paths that coincide with paths to not yet
10238 1.1 christos # installed libraries to the beginning of the library search list
10239 1.1 christos new_libs=
10240 1.1 christos for path in $notinst_path; do
10241 1.1 christos case " $new_libs " in
10242 1.1 christos *" -L$path/$objdir "*) ;;
10243 1.1 christos *)
10244 1.1 christos case " $compile_deplibs " in
10245 1.1 christos *" -L$path/$objdir "*)
10246 1.1 christos func_append new_libs " -L$path/$objdir" ;;
10247 1.1 christos esac
10248 1.1 christos ;;
10249 1.1 christos esac
10250 1.1 christos done
10251 1.1 christos for deplib in $compile_deplibs; do
10252 1.1 christos case $deplib in
10253 1.1 christos -L*)
10254 1.1 christos case " $new_libs " in
10255 1.1 christos *" $deplib "*) ;;
10256 1.1 christos *) func_append new_libs " $deplib" ;;
10257 1.1 christos esac
10258 1.1 christos ;;
10259 1.1 christos *) func_append new_libs " $deplib" ;;
10260 1.1 christos esac
10261 1.1 christos done
10262 1.1 christos compile_deplibs=$new_libs
10263 1.1 christos
10264 1.1 christos
10265 1.1 christos func_append compile_command " $compile_deplibs"
10266 1.1 christos func_append finalize_command " $finalize_deplibs"
10267 1.1 christos
10268 1.1 christos if test -n "$rpath$xrpath"; then
10269 1.1 christos # If the user specified any rpath flags, then add them.
10270 1.1 christos for libdir in $rpath $xrpath; do
10271 1.1 christos # This is the magic to use -rpath.
10272 1.1 christos case "$finalize_rpath " in
10273 1.1 christos *" $libdir "*) ;;
10274 1.1 christos *) func_append finalize_rpath " $libdir" ;;
10275 1.1 christos esac
10276 1.1 christos done
10277 1.1 christos fi
10278 1.1 christos
10279 1.1 christos # Now hardcode the library paths
10280 1.1 christos rpath=
10281 1.1 christos hardcode_libdirs=
10282 1.1 christos for libdir in $compile_rpath $finalize_rpath; do
10283 1.1 christos if test -n "$hardcode_libdir_flag_spec"; then
10284 1.1 christos if test -n "$hardcode_libdir_separator"; then
10285 1.1 christos if test -z "$hardcode_libdirs"; then
10286 1.1 christos hardcode_libdirs=$libdir
10287 1.1 christos else
10288 1.1 christos # Just accumulate the unique libdirs.
10289 1.1 christos case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10290 1.1 christos *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10291 1.1 christos ;;
10292 1.1 christos *)
10293 1.1 christos func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10294 1.1 christos ;;
10295 1.1 christos esac
10296 1.1 christos fi
10297 1.1 christos else
10298 1.1 christos eval flag=\"$hardcode_libdir_flag_spec\"
10299 1.1 christos func_append rpath " $flag"
10300 1.1 christos fi
10301 1.1 christos elif test -n "$runpath_var"; then
10302 1.1 christos case "$perm_rpath " in
10303 1.1 christos *" $libdir "*) ;;
10304 1.1 christos *) func_append perm_rpath " $libdir" ;;
10305 1.1 christos esac
10306 1.1 christos fi
10307 1.1 christos case $host in
10308 1.1 christos *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
10309 1.1 christos testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
10310 1.1 christos case :$dllsearchpath: in
10311 1.1 christos *":$libdir:"*) ;;
10312 1.1 christos ::) dllsearchpath=$libdir;;
10313 1.1 christos *) func_append dllsearchpath ":$libdir";;
10314 1.1 christos esac
10315 1.1 christos case :$dllsearchpath: in
10316 1.1 christos *":$testbindir:"*) ;;
10317 1.1 christos ::) dllsearchpath=$testbindir;;
10318 1.1 christos *) func_append dllsearchpath ":$testbindir";;
10319 1.1 christos esac
10320 1.1 christos ;;
10321 1.1 christos esac
10322 1.1 christos done
10323 1.1 christos # Substitute the hardcoded libdirs into the rpath.
10324 1.1 christos if test -n "$hardcode_libdir_separator" &&
10325 1.1 christos test -n "$hardcode_libdirs"; then
10326 1.1 christos libdir=$hardcode_libdirs
10327 1.1 christos eval rpath=\" $hardcode_libdir_flag_spec\"
10328 1.1 christos fi
10329 1.1 christos compile_rpath=$rpath
10330 1.1 christos
10331 1.1 christos rpath=
10332 1.1 christos hardcode_libdirs=
10333 1.1 christos for libdir in $finalize_rpath; do
10334 1.1 christos if test -n "$hardcode_libdir_flag_spec"; then
10335 1.1 christos if test -n "$hardcode_libdir_separator"; then
10336 1.1 christos if test -z "$hardcode_libdirs"; then
10337 1.1 christos hardcode_libdirs=$libdir
10338 1.1 christos else
10339 1.1 christos # Just accumulate the unique libdirs.
10340 1.1 christos case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10341 1.1 christos *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10342 1.1 christos ;;
10343 1.1 christos *)
10344 1.1 christos func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10345 1.1 christos ;;
10346 1.1 christos esac
10347 1.1 christos fi
10348 1.1 christos else
10349 1.1 christos eval flag=\"$hardcode_libdir_flag_spec\"
10350 1.1 christos func_append rpath " $flag"
10351 1.1 christos fi
10352 1.1 christos elif test -n "$runpath_var"; then
10353 1.1 christos case "$finalize_perm_rpath " in
10354 1.1 christos *" $libdir "*) ;;
10355 1.1 christos *) func_append finalize_perm_rpath " $libdir" ;;
10356 1.1 christos esac
10357 1.1 christos fi
10358 1.1 christos done
10359 1.1 christos # Substitute the hardcoded libdirs into the rpath.
10360 1.1 christos if test -n "$hardcode_libdir_separator" &&
10361 1.1 christos test -n "$hardcode_libdirs"; then
10362 1.1 christos libdir=$hardcode_libdirs
10363 1.1 christos eval rpath=\" $hardcode_libdir_flag_spec\"
10364 1.1 christos fi
10365 1.1 christos finalize_rpath=$rpath
10366 1.1 christos
10367 1.1 christos if test -n "$libobjs" && test yes = "$build_old_libs"; then
10368 1.1 christos # Transform all the library objects into standard objects.
10369 1.1 christos compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
10370 1.1 christos finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
10371 1.1 christos fi
10372 1.1 christos
10373 1.1 christos func_generate_dlsyms "$outputname" "@PROGRAM@" false
10374 1.1 christos
10375 1.1 christos # template prelinking step
10376 1.1 christos if test -n "$prelink_cmds"; then
10377 1.1 christos func_execute_cmds "$prelink_cmds" 'exit $?'
10378 1.1 christos fi
10379 1.1 christos
10380 1.1 christos wrappers_required=:
10381 1.1 christos case $host in
10382 1.1 christos *cegcc* | *mingw32ce*)
10383 1.1 christos # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
10384 1.1 christos wrappers_required=false
10385 1.1 christos ;;
10386 1.1 christos *cygwin* | *mingw* )
10387 1.1 christos test yes = "$build_libtool_libs" || wrappers_required=false
10388 1.1 christos ;;
10389 1.1 christos *)
10390 1.1 christos if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
10391 1.1 christos wrappers_required=false
10392 1.1 christos fi
10393 1.1 christos ;;
10394 1.1 christos esac
10395 1.1 christos $wrappers_required || {
10396 1.1 christos # Replace the output file specification.
10397 1.1 christos compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
10398 1.1 christos link_command=$compile_command$compile_rpath
10399 1.1 christos
10400 1.1 christos # We have no uninstalled library dependencies, so finalize right now.
10401 1.1 christos exit_status=0
10402 1.1 christos func_show_eval "$link_command" 'exit_status=$?'
10403 1.1 christos
10404 1.1 christos if test -n "$postlink_cmds"; then
10405 1.1 christos func_to_tool_file "$output"
10406 1.1 christos postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10407 1.1 christos func_execute_cmds "$postlink_cmds" 'exit $?'
10408 1.1 christos fi
10409 1.1 christos
10410 1.1 christos # Delete the generated files.
10411 1.1 christos if test -f "$output_objdir/${outputname}S.$objext"; then
10412 1.1 christos func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
10413 1.1 christos fi
10414 1.1 christos
10415 1.1 christos exit $exit_status
10416 1.1 christos }
10417 1.1 christos
10418 1.1 christos if test -n "$compile_shlibpath$finalize_shlibpath"; then
10419 1.1 christos compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
10420 1.1 christos fi
10421 1.1 christos if test -n "$finalize_shlibpath"; then
10422 1.1 christos finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
10423 1.1 christos fi
10424 1.1 christos
10425 1.1 christos compile_var=
10426 1.1 christos finalize_var=
10427 1.1 christos if test -n "$runpath_var"; then
10428 1.1 christos if test -n "$perm_rpath"; then
10429 1.1 christos # We should set the runpath_var.
10430 1.1 christos rpath=
10431 1.1 christos for dir in $perm_rpath; do
10432 1.1 christos func_append rpath "$dir:"
10433 1.1 christos done
10434 1.1 christos compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
10435 1.1 christos fi
10436 1.1 christos if test -n "$finalize_perm_rpath"; then
10437 1.1 christos # We should set the runpath_var.
10438 1.1 christos rpath=
10439 1.1 christos for dir in $finalize_perm_rpath; do
10440 1.1 christos func_append rpath "$dir:"
10441 1.1 christos done
10442 1.1 christos finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
10443 1.1 christos fi
10444 1.1 christos fi
10445 1.1 christos
10446 1.1 christos if test yes = "$no_install"; then
10447 1.1 christos # We don't need to create a wrapper script.
10448 1.1 christos link_command=$compile_var$compile_command$compile_rpath
10449 1.1 christos # Replace the output file specification.
10450 1.1 christos link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
10451 1.1 christos # Delete the old output file.
10452 1.1 christos $opt_dry_run || $RM $output
10453 1.1 christos # Link the executable and exit
10454 1.1 christos func_show_eval "$link_command" 'exit $?'
10455 1.1 christos
10456 1.1 christos if test -n "$postlink_cmds"; then
10457 1.1 christos func_to_tool_file "$output"
10458 1.1 christos postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10459 1.1 christos func_execute_cmds "$postlink_cmds" 'exit $?'
10460 1.1 christos fi
10461 1.1 christos
10462 1.1 christos exit $EXIT_SUCCESS
10463 1.1 christos fi
10464 1.1 christos
10465 1.1 christos case $hardcode_action,$fast_install in
10466 1.1 christos relink,*)
10467 1.1 christos # Fast installation is not supported
10468 1.1 christos link_command=$compile_var$compile_command$compile_rpath
10469 1.1 christos relink_command=$finalize_var$finalize_command$finalize_rpath
10470 1.1 christos
10471 1.1 christos func_warning "this platform does not like uninstalled shared libraries"
10472 1.1 christos func_warning "'$output' will be relinked during installation"
10473 1.1 christos ;;
10474 1.1 christos *,yes)
10475 1.1 christos link_command=$finalize_var$compile_command$finalize_rpath
10476 1.1 christos relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
10477 1.1 christos ;;
10478 1.1 christos *,no)
10479 1.1 christos link_command=$compile_var$compile_command$compile_rpath
10480 1.1 christos relink_command=$finalize_var$finalize_command$finalize_rpath
10481 1.1 christos ;;
10482 1.1 christos *,needless)
10483 1.1 christos link_command=$finalize_var$compile_command$finalize_rpath
10484 1.1 christos relink_command=
10485 1.1 christos ;;
10486 1.1 christos esac
10487 1.1 christos
10488 1.1 christos # Replace the output file specification.
10489 1.1 christos link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
10490 1.1 christos
10491 1.1 christos # Delete the old output files.
10492 1.1 christos $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
10493 1.1 christos
10494 1.1 christos func_show_eval "$link_command" 'exit $?'
10495 1.1 christos
10496 1.1 christos if test -n "$postlink_cmds"; then
10497 1.1 christos func_to_tool_file "$output_objdir/$outputname"
10498 1.1 christos 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'`
10499 1.1 christos func_execute_cmds "$postlink_cmds" 'exit $?'
10500 1.1 christos fi
10501 1.1 christos
10502 1.1 christos # Now create the wrapper script.
10503 1.1 christos func_verbose "creating $output"
10504 1.1 christos
10505 1.1 christos # Quote the relink command for shipping.
10506 1.1 christos if test -n "$relink_command"; then
10507 1.1 christos # Preserve any variables that may affect compiler behavior
10508 1.1 christos for var in $variables_saved_for_relink; do
10509 1.1 christos if eval test -z \"\${$var+set}\"; then
10510 1.1 christos relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
10511 1.1 christos elif eval var_value=\$$var; test -z "$var_value"; then
10512 1.1 christos relink_command="$var=; export $var; $relink_command"
10513 1.1 christos else
10514 1.1 christos func_quote_for_eval "$var_value"
10515 1.1 christos relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
10516 1.1 christos fi
10517 1.1 christos done
10518 1.1 christos relink_command="(cd `pwd`; $relink_command)"
10519 1.1 christos relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
10520 1.1 christos fi
10521 1.1 christos
10522 1.1 christos # Only actually do things if not in dry run mode.
10523 1.1 christos $opt_dry_run || {
10524 1.1 christos # win32 will think the script is a binary if it has
10525 1.1 christos # a .exe suffix, so we strip it off here.
10526 1.1 christos case $output in
10527 1.1 christos *.exe) func_stripname '' '.exe' "$output"
10528 1.1 christos output=$func_stripname_result ;;
10529 1.1 christos esac
10530 1.1 christos # test for cygwin because mv fails w/o .exe extensions
10531 1.1 christos case $host in
10532 1.1 christos *cygwin*)
10533 1.1 christos exeext=.exe
10534 1.1 christos func_stripname '' '.exe' "$outputname"
10535 1.1 christos outputname=$func_stripname_result ;;
10536 1.1 christos *) exeext= ;;
10537 1.1 christos esac
10538 1.1 christos case $host in
10539 1.1 christos *cygwin* | *mingw* )
10540 1.1 christos func_dirname_and_basename "$output" "" "."
10541 1.1 christos output_name=$func_basename_result
10542 1.1 christos output_path=$func_dirname_result
10543 1.1 christos cwrappersource=$output_path/$objdir/lt-$output_name.c
10544 1.1 christos cwrapper=$output_path/$output_name.exe
10545 1.1 christos $RM $cwrappersource $cwrapper
10546 1.1 christos trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
10547 1.1 christos
10548 1.1 christos func_emit_cwrapperexe_src > $cwrappersource
10549 1.1 christos
10550 1.1 christos # The wrapper executable is built using the $host compiler,
10551 1.1 christos # because it contains $host paths and files. If cross-
10552 1.1 christos # compiling, it, like the target executable, must be
10553 1.1 christos # executed on the $host or under an emulation environment.
10554 1.1 christos $opt_dry_run || {
10555 1.1 christos $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
10556 1.1 christos $STRIP $cwrapper
10557 1.1 christos }
10558 1.1 christos
10559 1.1 christos # Now, create the wrapper script for func_source use:
10560 1.1 christos func_ltwrapper_scriptname $cwrapper
10561 1.1 christos $RM $func_ltwrapper_scriptname_result
10562 1.1 christos trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
10563 1.1 christos $opt_dry_run || {
10564 1.1 christos # note: this script will not be executed, so do not chmod.
10565 1.1 christos if test "x$build" = "x$host"; then
10566 1.1 christos $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
10567 1.1 christos else
10568 1.1 christos func_emit_wrapper no > $func_ltwrapper_scriptname_result
10569 1.1 christos fi
10570 1.1 christos }
10571 1.1 christos ;;
10572 1.1 christos * )
10573 1.1 christos $RM $output
10574 1.1 christos trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
10575 1.1 christos
10576 1.1 christos func_emit_wrapper no > $output
10577 1.1 christos chmod +x $output
10578 1.1 christos ;;
10579 1.1 christos esac
10580 1.1 christos }
10581 1.1 christos exit $EXIT_SUCCESS
10582 1.1 christos ;;
10583 1.1 christos esac
10584 1.1 christos
10585 1.1 christos # See if we need to build an old-fashioned archive.
10586 1.1 christos for oldlib in $oldlibs; do
10587 1.1 christos
10588 1.1 christos case $build_libtool_libs in
10589 1.1 christos convenience)
10590 1.1 christos oldobjs="$libobjs_save $symfileobj"
10591 1.1 christos addlibs=$convenience
10592 1.1 christos build_libtool_libs=no
10593 1.1 christos ;;
10594 1.1 christos module)
10595 1.1 christos oldobjs=$libobjs_save
10596 1.1 christos addlibs=$old_convenience
10597 1.1 christos build_libtool_libs=no
10598 1.1 christos ;;
10599 1.1 christos *)
10600 1.1 christos oldobjs="$old_deplibs $non_pic_objects"
10601 1.1 christos $preload && test -f "$symfileobj" \
10602 1.1 christos && func_append oldobjs " $symfileobj"
10603 1.1 christos addlibs=$old_convenience
10604 1.1 christos ;;
10605 1.1 christos esac
10606 1.1 christos
10607 1.1 christos if test -n "$addlibs"; then
10608 1.1 christos gentop=$output_objdir/${outputname}x
10609 1.1 christos func_append generated " $gentop"
10610 1.1 christos
10611 1.1 christos func_extract_archives $gentop $addlibs
10612 1.1 christos func_append oldobjs " $func_extract_archives_result"
10613 1.1 christos fi
10614 1.1 christos
10615 1.1 christos # Do each command in the archive commands.
10616 1.1 christos if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
10617 1.1 christos cmds=$old_archive_from_new_cmds
10618 1.1 christos else
10619 1.1 christos
10620 1.1 christos # Add any objects from preloaded convenience libraries
10621 1.1 christos if test -n "$dlprefiles"; then
10622 1.1 christos gentop=$output_objdir/${outputname}x
10623 1.1 christos func_append generated " $gentop"
10624 1.1 christos
10625 1.1 christos func_extract_archives $gentop $dlprefiles
10626 1.1 christos func_append oldobjs " $func_extract_archives_result"
10627 1.1 christos fi
10628 1.1 christos
10629 1.1 christos # POSIX demands no paths to be encoded in archives. We have
10630 1.1 christos # to avoid creating archives with duplicate basenames if we
10631 1.1 christos # might have to extract them afterwards, e.g., when creating a
10632 1.1 christos # static archive out of a convenience library, or when linking
10633 1.1 christos # the entirety of a libtool archive into another (currently
10634 1.1 christos # not supported by libtool).
10635 1.1 christos if (for obj in $oldobjs
10636 1.1 christos do
10637 1.1 christos func_basename "$obj"
10638 1.1 christos $ECHO "$func_basename_result"
10639 1.1 christos done | sort | sort -uc >/dev/null 2>&1); then
10640 1.1 christos :
10641 1.1 christos else
10642 1.1 christos echo "copying selected object files to avoid basename conflicts..."
10643 1.1 christos gentop=$output_objdir/${outputname}x
10644 1.1 christos func_append generated " $gentop"
10645 1.1 christos func_mkdir_p "$gentop"
10646 1.1 christos save_oldobjs=$oldobjs
10647 1.1 christos oldobjs=
10648 1.1 christos counter=1
10649 1.1 christos for obj in $save_oldobjs
10650 1.1 christos do
10651 1.1 christos func_basename "$obj"
10652 1.1 christos objbase=$func_basename_result
10653 1.1 christos case " $oldobjs " in
10654 1.1 christos " ") oldobjs=$obj ;;
10655 1.1 christos *[\ /]"$objbase "*)
10656 1.1 christos while :; do
10657 1.1 christos # Make sure we don't pick an alternate name that also
10658 1.1 christos # overlaps.
10659 1.1 christos newobj=lt$counter-$objbase
10660 1.1 christos func_arith $counter + 1
10661 1.1 christos counter=$func_arith_result
10662 1.1 christos case " $oldobjs " in
10663 1.1 christos *[\ /]"$newobj "*) ;;
10664 1.1 christos *) if test ! -f "$gentop/$newobj"; then break; fi ;;
10665 1.1 christos esac
10666 1.1 christos done
10667 1.1 christos func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
10668 1.1 christos func_append oldobjs " $gentop/$newobj"
10669 1.1 christos ;;
10670 1.1 christos *) func_append oldobjs " $obj" ;;
10671 1.1 christos esac
10672 1.1 christos done
10673 1.1 christos fi
10674 1.1 christos func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
10675 1.1 christos tool_oldlib=$func_to_tool_file_result
10676 1.1 christos eval cmds=\"$old_archive_cmds\"
10677 1.1 christos
10678 1.1 christos func_len " $cmds"
10679 1.1 christos len=$func_len_result
10680 1.1 christos if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
10681 1.1 christos cmds=$old_archive_cmds
10682 1.1 christos elif test -n "$archiver_list_spec"; then
10683 1.1 christos func_verbose "using command file archive linking..."
10684 1.1 christos for obj in $oldobjs
10685 1.1 christos do
10686 1.1 christos func_to_tool_file "$obj"
10687 1.1 christos $ECHO "$func_to_tool_file_result"
10688 1.1 christos done > $output_objdir/$libname.libcmd
10689 1.1 christos func_to_tool_file "$output_objdir/$libname.libcmd"
10690 1.1 christos oldobjs=" $archiver_list_spec$func_to_tool_file_result"
10691 1.1 christos cmds=$old_archive_cmds
10692 1.1 christos else
10693 1.1 christos # the command line is too long to link in one step, link in parts
10694 1.1 christos func_verbose "using piecewise archive linking..."
10695 1.1 christos save_RANLIB=$RANLIB
10696 1.1 christos RANLIB=:
10697 1.1 christos objlist=
10698 1.1 christos concat_cmds=
10699 1.1 christos save_oldobjs=$oldobjs
10700 1.1 christos oldobjs=
10701 1.1 christos # Is there a better way of finding the last object in the list?
10702 1.1 christos for obj in $save_oldobjs
10703 1.1 christos do
10704 1.1 christos last_oldobj=$obj
10705 1.1 christos done
10706 1.1 christos eval test_cmds=\"$old_archive_cmds\"
10707 1.1 christos func_len " $test_cmds"
10708 1.1 christos len0=$func_len_result
10709 1.1 christos len=$len0
10710 1.1 christos for obj in $save_oldobjs
10711 1.1 christos do
10712 1.1 christos func_len " $obj"
10713 1.1 christos func_arith $len + $func_len_result
10714 1.1 christos len=$func_arith_result
10715 1.1 christos func_append objlist " $obj"
10716 1.1 christos if test "$len" -lt "$max_cmd_len"; then
10717 1.1 christos :
10718 1.1 christos else
10719 1.1 christos # the above command should be used before it gets too long
10720 1.1 christos oldobjs=$objlist
10721 1.1 christos if test "$obj" = "$last_oldobj"; then
10722 1.1 christos RANLIB=$save_RANLIB
10723 1.1 christos fi
10724 1.1 christos test -z "$concat_cmds" || concat_cmds=$concat_cmds~
10725 1.1 christos eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
10726 1.1 christos objlist=
10727 1.1 christos len=$len0
10728 1.1 christos fi
10729 1.1 christos done
10730 1.1 christos RANLIB=$save_RANLIB
10731 1.1 christos oldobjs=$objlist
10732 1.1 christos if test -z "$oldobjs"; then
10733 1.1 christos eval cmds=\"\$concat_cmds\"
10734 1.1 christos else
10735 1.1 christos eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
10736 1.1 christos fi
10737 1.1 christos fi
10738 1.1 christos fi
10739 1.1 christos func_execute_cmds "$cmds" 'exit $?'
10740 1.1 christos done
10741 1.1 christos
10742 1.1 christos test -n "$generated" && \
10743 1.1 christos func_show_eval "${RM}r$generated"
10744 1.1 christos
10745 1.1 christos # Now create the libtool archive.
10746 1.1 christos case $output in
10747 1.1 christos *.la)
10748 1.1 christos old_library=
10749 1.1 christos test yes = "$build_old_libs" && old_library=$libname.$libext
10750 1.1 christos func_verbose "creating $output"
10751 1.1 christos
10752 1.1 christos # Preserve any variables that may affect compiler behavior
10753 1.1 christos for var in $variables_saved_for_relink; do
10754 1.1 christos if eval test -z \"\${$var+set}\"; then
10755 1.1 christos relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
10756 1.1 christos elif eval var_value=\$$var; test -z "$var_value"; then
10757 1.1 christos relink_command="$var=; export $var; $relink_command"
10758 1.1 christos else
10759 1.1 christos func_quote_for_eval "$var_value"
10760 1.1 christos relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
10761 1.1 christos fi
10762 1.1 christos done
10763 1.1 christos # Quote the link command for shipping.
10764 1.1 christos relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
10765 1.1 christos relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
10766 1.1 christos if test yes = "$hardcode_automatic"; then
10767 1.1 christos relink_command=
10768 1.1 christos fi
10769 1.1 christos
10770 1.1 christos # Only create the output if not a dry run.
10771 1.1 christos $opt_dry_run || {
10772 1.1 christos for installed in no yes; do
10773 1.1 christos if test yes = "$installed"; then
10774 1.1 christos if test -z "$install_libdir"; then
10775 1.1 christos break
10776 1.1 christos fi
10777 1.1 christos output=$output_objdir/${outputname}i
10778 1.1 christos # Replace all uninstalled libtool libraries with the installed ones
10779 1.1 christos newdependency_libs=
10780 1.1 christos for deplib in $dependency_libs; do
10781 1.1 christos case $deplib in
10782 1.1 christos *.la)
10783 1.1 christos func_basename "$deplib"
10784 1.1 christos name=$func_basename_result
10785 1.1 christos func_resolve_sysroot "$deplib"
10786 1.1 christos eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
10787 1.1 christos test -z "$libdir" && \
10788 1.1 christos func_fatal_error "'$deplib' is not a valid libtool archive"
10789 1.1 christos func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
10790 1.1 christos ;;
10791 1.1 christos -L*)
10792 1.1 christos func_stripname -L '' "$deplib"
10793 1.1 christos func_replace_sysroot "$func_stripname_result"
10794 1.1 christos func_append newdependency_libs " -L$func_replace_sysroot_result"
10795 1.1 christos ;;
10796 1.1 christos -R*)
10797 1.1 christos func_stripname -R '' "$deplib"
10798 1.1 christos func_replace_sysroot "$func_stripname_result"
10799 1.1 christos func_append newdependency_libs " -R$func_replace_sysroot_result"
10800 1.1 christos ;;
10801 1.1 christos *) func_append newdependency_libs " $deplib" ;;
10802 1.1 christos esac
10803 1.1 christos done
10804 1.1 christos dependency_libs=$newdependency_libs
10805 1.1 christos newdlfiles=
10806 1.1 christos
10807 1.1 christos for lib in $dlfiles; do
10808 1.1 christos case $lib in
10809 1.1 christos *.la)
10810 1.1 christos func_basename "$lib"
10811 1.1 christos name=$func_basename_result
10812 1.1 christos eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
10813 1.1 christos test -z "$libdir" && \
10814 1.1 christos func_fatal_error "'$lib' is not a valid libtool archive"
10815 1.1 christos func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
10816 1.1 christos ;;
10817 1.1 christos *) func_append newdlfiles " $lib" ;;
10818 1.1 christos esac
10819 1.1 christos done
10820 1.1 christos dlfiles=$newdlfiles
10821 1.1 christos newdlprefiles=
10822 1.1 christos for lib in $dlprefiles; do
10823 1.1 christos case $lib in
10824 1.1 christos *.la)
10825 1.1 christos # Only pass preopened files to the pseudo-archive (for
10826 1.1 christos # eventual linking with the app. that links it) if we
10827 1.1 christos # didn't already link the preopened objects directly into
10828 1.1 christos # the library:
10829 1.1 christos func_basename "$lib"
10830 1.1 christos name=$func_basename_result
10831 1.1 christos eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
10832 1.1 christos test -z "$libdir" && \
10833 1.1 christos func_fatal_error "'$lib' is not a valid libtool archive"
10834 1.1 christos func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
10835 1.1 christos ;;
10836 1.1 christos esac
10837 1.1 christos done
10838 1.1 christos dlprefiles=$newdlprefiles
10839 1.1 christos else
10840 1.1 christos newdlfiles=
10841 1.1 christos for lib in $dlfiles; do
10842 1.1 christos case $lib in
10843 1.1 christos [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
10844 1.1 christos *) abs=`pwd`"/$lib" ;;
10845 1.1 christos esac
10846 1.1 christos func_append newdlfiles " $abs"
10847 1.1 christos done
10848 1.1 christos dlfiles=$newdlfiles
10849 1.1 christos newdlprefiles=
10850 1.1 christos for lib in $dlprefiles; do
10851 1.1 christos case $lib in
10852 1.1 christos [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
10853 1.1 christos *) abs=`pwd`"/$lib" ;;
10854 1.1 christos esac
10855 1.1 christos func_append newdlprefiles " $abs"
10856 1.1 christos done
10857 1.1 christos dlprefiles=$newdlprefiles
10858 1.1 christos fi
10859 1.1 christos $RM $output
10860 1.1 christos # place dlname in correct position for cygwin
10861 1.1 christos # In fact, it would be nice if we could use this code for all target
10862 1.1 christos # systems that can't hard-code library paths into their executables
10863 1.1 christos # and that have no shared library path variable independent of PATH,
10864 1.1 christos # but it turns out we can't easily determine that from inspecting
10865 1.1 christos # libtool variables, so we have to hard-code the OSs to which it
10866 1.1 christos # applies here; at the moment, that means platforms that use the PE
10867 1.1 christos # object format with DLL files. See the long comment at the top of
10868 1.1 christos # tests/bindir.at for full details.
10869 1.1 christos tdlname=$dlname
10870 1.1 christos case $host,$output,$installed,$module,$dlname in
10871 1.1 christos *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
10872 1.1 christos # If a -bindir argument was supplied, place the dll there.
10873 1.1 christos if test -n "$bindir"; then
10874 1.1 christos func_relative_path "$install_libdir" "$bindir"
10875 1.1 christos tdlname=$func_relative_path_result/$dlname
10876 1.1 christos else
10877 1.1 christos # Otherwise fall back on heuristic.
10878 1.1 christos tdlname=../bin/$dlname
10879 1.1 christos fi
10880 1.1 christos ;;
10881 1.1 christos esac
10882 1.1 christos $ECHO > $output "\
10883 1.1 christos # $outputname - a libtool library file
10884 1.1 christos # Generated by $PROGRAM (GNU $PACKAGE) $VERSION
10885 1.1 christos #
10886 1.1 christos # Please DO NOT delete this file!
10887 1.1 christos # It is necessary for linking the library.
10888 1.1 christos
10889 1.1 christos # The name that we can dlopen(3).
10890 1.1 christos dlname='$tdlname'
10891 1.1 christos
10892 1.1 christos # Names of this library.
10893 1.1 christos library_names='$library_names'
10894 1.1 christos
10895 1.1 christos # The name of the static archive.
10896 1.1 christos old_library='$old_library'
10897 1.1 christos
10898 1.1 christos # Linker flags that cannot go in dependency_libs.
10899 1.1 christos inherited_linker_flags='$new_inherited_linker_flags'
10900 1.1 christos
10901 1.1 christos # Libraries that this one depends upon.
10902 1.1 christos dependency_libs='$dependency_libs'
10903 1.1 christos
10904 1.1 christos # Names of additional weak libraries provided by this library
10905 1.1 christos weak_library_names='$weak_libs'
10906 1.1 christos
10907 1.1 christos # Version information for $libname.
10908 1.1 christos current=$current
10909 1.1 christos age=$age
10910 1.1 christos revision=$revision
10911 1.1 christos
10912 1.1 christos # Is this an already installed library?
10913 1.1 christos installed=$installed
10914 1.1 christos
10915 1.1 christos # Should we warn about portability when linking against -modules?
10916 1.1 christos shouldnotlink=$module
10917 1.1 christos
10918 1.1 christos # Files to dlopen/dlpreopen
10919 1.1 christos dlopen='$dlfiles'
10920 1.1 christos dlpreopen='$dlprefiles'
10921 1.1 christos
10922 1.1 christos # Directory that this library needs to be installed in:
10923 1.1 christos libdir='$install_libdir'"
10924 1.1 christos if test no,yes = "$installed,$need_relink"; then
10925 1.1 christos $ECHO >> $output "\
10926 1.1 christos relink_command=\"$relink_command\""
10927 1.1 christos fi
10928 1.1 christos done
10929 1.1 christos }
10930 1.1 christos
10931 1.1 christos # Do a symbolic link so that the libtool archive can be found in
10932 1.1 christos # LD_LIBRARY_PATH before the program is installed.
10933 1.1 christos func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
10934 1.1 christos ;;
10935 1.1 christos esac
10936 1.1 christos exit $EXIT_SUCCESS
10937 1.1 christos }
10938 1.1 christos
10939 1.1 christos if test link = "$opt_mode" || test relink = "$opt_mode"; then
10940 1.1 christos func_mode_link ${1+"$@"}
10941 1.1 christos fi
10942 1.1 christos
10943 1.1 christos
10944 1.1 christos # func_mode_uninstall arg...
10945 1.1 christos func_mode_uninstall ()
10946 1.1 christos {
10947 1.1 christos $debug_cmd
10948 1.1 christos
10949 1.1 christos RM=$nonopt
10950 1.1 christos files=
10951 1.1 christos rmforce=false
10952 1.1 christos exit_status=0
10953 1.1 christos
10954 1.1 christos # This variable tells wrapper scripts just to set variables rather
10955 1.1 christos # than running their programs.
10956 1.1 christos libtool_install_magic=$magic
10957 1.1 christos
10958 1.1 christos for arg
10959 1.1 christos do
10960 1.1 christos case $arg in
10961 1.1 christos -f) func_append RM " $arg"; rmforce=: ;;
10962 1.1 christos -*) func_append RM " $arg" ;;
10963 1.1 christos *) func_append files " $arg" ;;
10964 1.1 christos esac
10965 1.1 christos done
10966 1.1 christos
10967 1.1 christos test -z "$RM" && \
10968 1.1 christos func_fatal_help "you must specify an RM program"
10969 1.1 christos
10970 1.1 christos rmdirs=
10971 1.1 christos
10972 1.1 christos for file in $files; do
10973 1.1 christos func_dirname "$file" "" "."
10974 1.1 christos dir=$func_dirname_result
10975 1.1 christos if test . = "$dir"; then
10976 1.1 christos odir=$objdir
10977 1.1 christos else
10978 1.1 christos odir=$dir/$objdir
10979 1.1 christos fi
10980 1.1 christos func_basename "$file"
10981 1.1 christos name=$func_basename_result
10982 1.1 christos test uninstall = "$opt_mode" && odir=$dir
10983 1.1 christos
10984 1.1 christos # Remember odir for removal later, being careful to avoid duplicates
10985 1.1 christos if test clean = "$opt_mode"; then
10986 1.1 christos case " $rmdirs " in
10987 1.1 christos *" $odir "*) ;;
10988 1.1 christos *) func_append rmdirs " $odir" ;;
10989 1.1 christos esac
10990 1.1 christos fi
10991 1.1 christos
10992 1.1 christos # Don't error if the file doesn't exist and rm -f was used.
10993 1.1 christos if { test -L "$file"; } >/dev/null 2>&1 ||
10994 1.1 christos { test -h "$file"; } >/dev/null 2>&1 ||
10995 1.1 christos test -f "$file"; then
10996 1.1 christos :
10997 1.1 christos elif test -d "$file"; then
10998 1.1 christos exit_status=1
10999 1.1 christos continue
11000 1.1 christos elif $rmforce; then
11001 1.1 christos continue
11002 1.1 christos fi
11003 1.1 christos
11004 1.1 christos rmfiles=$file
11005 1.1 christos
11006 1.1 christos case $name in
11007 1.1 christos *.la)
11008 1.1 christos # Possibly a libtool archive, so verify it.
11009 1.1 christos if func_lalib_p "$file"; then
11010 1.1 christos func_source $dir/$name
11011 1.1 christos
11012 1.1 christos # Delete the libtool libraries and symlinks.
11013 1.1 christos for n in $library_names; do
11014 1.1 christos func_append rmfiles " $odir/$n"
11015 1.1 christos done
11016 1.1 christos test -n "$old_library" && func_append rmfiles " $odir/$old_library"
11017 1.1 christos
11018 1.1 christos case $opt_mode in
11019 1.1 christos clean)
11020 1.1 christos case " $library_names " in
11021 1.1 christos *" $dlname "*) ;;
11022 1.1 christos *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
11023 1.1 christos esac
11024 1.1 christos test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
11025 1.1 christos ;;
11026 1.1 christos uninstall)
11027 1.1 christos if test -n "$library_names"; then
11028 1.1 christos # Do each command in the postuninstall commands.
11029 1.1 christos func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
11030 1.1 christos fi
11031 1.1 christos
11032 1.1 christos if test -n "$old_library"; then
11033 1.1 christos # Do each command in the old_postuninstall commands.
11034 1.1 christos func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
11035 1.1 christos fi
11036 1.1 christos # FIXME: should reinstall the best remaining shared library.
11037 1.1 christos ;;
11038 1.1 christos esac
11039 1.1 christos fi
11040 1.1 christos ;;
11041 1.1 christos
11042 1.1 christos *.lo)
11043 1.1 christos # Possibly a libtool object, so verify it.
11044 1.1 christos if func_lalib_p "$file"; then
11045 1.1 christos
11046 1.1 christos # Read the .lo file
11047 1.1 christos func_source $dir/$name
11048 1.1 christos
11049 1.1 christos # Add PIC object to the list of files to remove.
11050 1.1 christos if test -n "$pic_object" && test none != "$pic_object"; then
11051 1.1 christos func_append rmfiles " $dir/$pic_object"
11052 1.1 christos fi
11053 1.1 christos
11054 1.1 christos # Add non-PIC object to the list of files to remove.
11055 1.1 christos if test -n "$non_pic_object" && test none != "$non_pic_object"; then
11056 1.1 christos func_append rmfiles " $dir/$non_pic_object"
11057 1.1 christos fi
11058 1.1 christos fi
11059 1.1 christos ;;
11060 1.1 christos
11061 1.1 christos *)
11062 1.1 christos if test clean = "$opt_mode"; then
11063 1.1 christos noexename=$name
11064 1.1 christos case $file in
11065 1.1 christos *.exe)
11066 1.1 christos func_stripname '' '.exe' "$file"
11067 1.1 christos file=$func_stripname_result
11068 1.1 christos func_stripname '' '.exe' "$name"
11069 1.1 christos noexename=$func_stripname_result
11070 1.1 christos # $file with .exe has already been added to rmfiles,
11071 1.1 christos # add $file without .exe
11072 1.1 christos func_append rmfiles " $file"
11073 1.1 christos ;;
11074 1.1 christos esac
11075 1.1 christos # Do a test to see if this is a libtool program.
11076 1.1 christos if func_ltwrapper_p "$file"; then
11077 1.1 christos if func_ltwrapper_executable_p "$file"; then
11078 1.1 christos func_ltwrapper_scriptname "$file"
11079 1.1 christos relink_command=
11080 1.1 christos func_source $func_ltwrapper_scriptname_result
11081 1.1 christos func_append rmfiles " $func_ltwrapper_scriptname_result"
11082 1.1 christos else
11083 1.1 christos relink_command=
11084 1.1 christos func_source $dir/$noexename
11085 1.1 christos fi
11086 1.1 christos
11087 1.1 christos # note $name still contains .exe if it was in $file originally
11088 1.1 christos # as does the version of $file that was added into $rmfiles
11089 1.1 christos func_append rmfiles " $odir/$name $odir/${name}S.$objext"
11090 1.1 christos if test yes = "$fast_install" && test -n "$relink_command"; then
11091 1.1 christos func_append rmfiles " $odir/lt-$name"
11092 1.1 christos fi
11093 1.1 christos if test "X$noexename" != "X$name"; then
11094 1.1 christos func_append rmfiles " $odir/lt-$noexename.c"
11095 1.1 christos fi
11096 1.1 christos fi
11097 1.1 christos fi
11098 1.1 christos ;;
11099 1.1 christos esac
11100 1.1 christos func_show_eval "$RM $rmfiles" 'exit_status=1'
11101 1.1 christos done
11102 1.1 christos
11103 1.1 christos # Try to remove the $objdir's in the directories where we deleted files
11104 1.1 christos for dir in $rmdirs; do
11105 1.1 christos if test -d "$dir"; then
11106 1.1 christos func_show_eval "rmdir $dir >/dev/null 2>&1"
11107 1.1 christos fi
11108 1.1 christos done
11109 1.1 christos
11110 1.1 christos exit $exit_status
11111 1.1 christos }
11112 1.1 christos
11113 1.1 christos if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
11114 1.1 christos func_mode_uninstall ${1+"$@"}
11115 1.1 christos fi
11116 1.1 christos
11117 1.1 christos test -z "$opt_mode" && {
11118 1.1 christos help=$generic_help
11119 1.1 christos func_fatal_help "you must specify a MODE"
11120 1.1 christos }
11121 1.1 christos
11122 1.1 christos test -z "$exec_cmd" && \
11123 1.1 christos func_fatal_help "invalid operation mode '$opt_mode'"
11124 1.1 christos
11125 1.1 christos if test -n "$exec_cmd"; then
11126 1.1 christos eval exec "$exec_cmd"
11127 1.1 christos exit $EXIT_FAILURE
11128 1.1 christos fi
11129 1.1 christos
11130 1.1 christos exit $exit_status
11131 1.1 christos
11132 1.1 christos
11133 1.1 christos # The TAGs below are defined such that we never get into a situation
11134 1.1 christos # where we disable both kinds of libraries. Given conflicting
11135 1.1 christos # choices, we go for a static library, that is the most portable,
11136 1.1 christos # since we can't tell whether shared libraries were disabled because
11137 1.1 christos # the user asked for that or because the platform doesn't support
11138 1.1 christos # them. This is particularly important on AIX, because we don't
11139 1.1 christos # support having both static and shared libraries enabled at the same
11140 1.1 christos # time on that platform, so we default to a shared-only configuration.
11141 1.1 christos # If a disable-shared tag is given, we'll fallback to a static-only
11142 1.1 christos # configuration. But we'll never go from static-only to shared-only.
11143 1.1 christos
11144 1.1 christos # ### BEGIN LIBTOOL TAG CONFIG: disable-shared
11145 1.1 christos build_libtool_libs=no
11146 1.1 christos build_old_libs=yes
11147 1.1 christos # ### END LIBTOOL TAG CONFIG: disable-shared
11148 1.1 christos
11149 1.1 christos # ### BEGIN LIBTOOL TAG CONFIG: disable-static
11150 1.1 christos build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
11151 1.1 christos # ### END LIBTOOL TAG CONFIG: disable-static
11152 1.1 christos
11153 1.1 christos # Local Variables:
11154 1.1 christos # mode:shell-script
11155 1.1 christos # sh-indentation:2
11156 1.1 christos # End:
11157