ltmain.sh revision 3f6d0e1d
1c3c9db83Smrg 23f6d0e1dSmrg# libtool (GNU libtool) 2.4.2 3c3c9db83Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 4c3c9db83Smrg 53f6d0e1dSmrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 63f6d0e1dSmrg# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. 7c3c9db83Smrg# This is free software; see the source for copying conditions. There is NO 8c3c9db83Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 9c3c9db83Smrg 10c3c9db83Smrg# GNU Libtool is free software; you can redistribute it and/or modify 11692f60a7Smrg# it under the terms of the GNU General Public License as published by 12692f60a7Smrg# the Free Software Foundation; either version 2 of the License, or 13692f60a7Smrg# (at your option) any later version. 14692f60a7Smrg# 15c3c9db83Smrg# As a special exception to the GNU General Public License, 16c3c9db83Smrg# if you distribute this file as part of a program or library that 17c3c9db83Smrg# is built using GNU Libtool, you may include this file under the 18c3c9db83Smrg# same distribution terms that you use for the rest of that program. 19c3c9db83Smrg# 20c3c9db83Smrg# GNU Libtool is distributed in the hope that it will be useful, but 21692f60a7Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 22692f60a7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 23692f60a7Smrg# General Public License for more details. 24692f60a7Smrg# 25692f60a7Smrg# You should have received a copy of the GNU General Public License 26c3c9db83Smrg# along with GNU Libtool; see the file COPYING. If not, a copy 27c3c9db83Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 28c3c9db83Smrg# or obtained by writing to the Free Software Foundation, Inc., 29c3c9db83Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 302e71ea71Smrg 31c3c9db83Smrg# Usage: $progname [OPTION]... [MODE-ARG]... 32c3c9db83Smrg# 33c3c9db83Smrg# Provide generalized library-building support services. 34c3c9db83Smrg# 353f6d0e1dSmrg# --config show all configuration variables 363f6d0e1dSmrg# --debug enable verbose shell tracing 373f6d0e1dSmrg# -n, --dry-run display commands without modifying any files 383f6d0e1dSmrg# --features display basic configuration information and exit 393f6d0e1dSmrg# --mode=MODE use operation mode MODE 403f6d0e1dSmrg# --preserve-dup-deps don't remove duplicate dependency libraries 413f6d0e1dSmrg# --quiet, --silent don't print informational messages 423f6d0e1dSmrg# --no-quiet, --no-silent 433f6d0e1dSmrg# print informational messages (default) 443f6d0e1dSmrg# --no-warn don't display warning messages 453f6d0e1dSmrg# --tag=TAG use configuration variables from tag TAG 463f6d0e1dSmrg# -v, --verbose print more informational messages than default 473f6d0e1dSmrg# --no-verbose don't print the extra informational messages 483f6d0e1dSmrg# --version print version information 493f6d0e1dSmrg# -h, --help, --help-all print short, long, or detailed help message 50c3c9db83Smrg# 51c3c9db83Smrg# MODE must be one of the following: 52c3c9db83Smrg# 533f6d0e1dSmrg# clean remove files from the build directory 543f6d0e1dSmrg# compile compile a source file into a libtool object 553f6d0e1dSmrg# execute automatically set library path, then run a program 563f6d0e1dSmrg# finish complete the installation of libtool libraries 573f6d0e1dSmrg# install install libraries or executables 583f6d0e1dSmrg# link create a library or an executable 593f6d0e1dSmrg# uninstall remove libraries from an installed directory 60c3c9db83Smrg# 613f6d0e1dSmrg# MODE-ARGS vary depending on the MODE. When passed as first option, 623f6d0e1dSmrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. 63c3c9db83Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 64c3c9db83Smrg# 65c3c9db83Smrg# When reporting a bug, please describe a test case to reproduce it and 66c3c9db83Smrg# include the following information: 67c3c9db83Smrg# 683f6d0e1dSmrg# host-triplet: $host 693f6d0e1dSmrg# shell: $SHELL 703f6d0e1dSmrg# compiler: $LTCC 713f6d0e1dSmrg# compiler flags: $LTCFLAGS 723f6d0e1dSmrg# linker: $LD (gnu? $with_gnu_ld) 733f6d0e1dSmrg# $progname: (GNU libtool) 2.4.2 743f6d0e1dSmrg# automake: $automake_version 753f6d0e1dSmrg# autoconf: $autoconf_version 76c3c9db83Smrg# 77c3c9db83Smrg# Report bugs to <bug-libtool@gnu.org>. 783f6d0e1dSmrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>. 793f6d0e1dSmrg# General help using GNU software: <http://www.gnu.org/gethelp/>. 80692f60a7Smrg 813f6d0e1dSmrgPROGRAM=libtool 82692f60a7SmrgPACKAGE=libtool 833f6d0e1dSmrgVERSION=2.4.2 84c3c9db83SmrgTIMESTAMP="" 853f6d0e1dSmrgpackage_revision=1.3337 8654569438Smrg 87c3c9db83Smrg# Be Bourne compatible 8854569438Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 8954569438Smrg emulate sh 9054569438Smrg NULLCMD=: 9154569438Smrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 9254569438Smrg # is contrary to our usage. Disable this feature. 9354569438Smrg alias -g '${1+"$@"}'='"$@"' 94692f60a7Smrg setopt NO_GLOB_SUBST 9554569438Smrgelse 9654569438Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 97692f60a7Smrgfi 9854569438SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 9954569438SmrgDUALCASE=1; export DUALCASE # for MKS sh 100692f60a7Smrg 1013f6d0e1dSmrg# A function that is used when there is no print builtin or printf. 1023f6d0e1dSmrgfunc_fallback_echo () 1033f6d0e1dSmrg{ 1043f6d0e1dSmrg eval 'cat <<_LTECHO_EOF 1053f6d0e1dSmrg$1 1063f6d0e1dSmrg_LTECHO_EOF' 1073f6d0e1dSmrg} 1083f6d0e1dSmrg 109c3c9db83Smrg# NLS nuisances: We save the old values to restore during execute mode. 110c3c9db83Smrglt_user_locale= 111c3c9db83Smrglt_safe_locale= 11254569438Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 11354569438Smrgdo 11454569438Smrg eval "if test \"\${$lt_var+set}\" = set; then 115c3c9db83Smrg save_$lt_var=\$$lt_var 116c3c9db83Smrg $lt_var=C 11754569438Smrg export $lt_var 118c3c9db83Smrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 119c3c9db83Smrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 12054569438Smrg fi" 12154569438Smrgdone 1223f6d0e1dSmrgLC_ALL=C 1233f6d0e1dSmrgLANGUAGE=C 1243f6d0e1dSmrgexport LANGUAGE LC_ALL 12554569438Smrg 126c3c9db83Smrg$lt_unset CDPATH 127c3c9db83Smrg 128c3c9db83Smrg 1293f6d0e1dSmrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 1303f6d0e1dSmrg# is ksh but when the shell is invoked as "sh" and the current value of 1313f6d0e1dSmrg# the _XPG environment variable is not equal to 1 (one), the special 1323f6d0e1dSmrg# positional parameter $0, within a function call, is the name of the 1333f6d0e1dSmrg# function. 1343f6d0e1dSmrgprogpath="$0" 135c3c9db83Smrg 136c3c9db83Smrg 137c3c9db83Smrg 138c3c9db83Smrg: ${CP="cp -f"} 1393f6d0e1dSmrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} 140c3c9db83Smrg: ${MAKE="make"} 141c3c9db83Smrg: ${MKDIR="mkdir"} 142c3c9db83Smrg: ${MV="mv -f"} 143c3c9db83Smrg: ${RM="rm -f"} 144c3c9db83Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 145c3c9db83Smrg: ${Xsed="$SED -e 1s/^X//"} 146c3c9db83Smrg 147c3c9db83Smrg# Global variables: 148c3c9db83SmrgEXIT_SUCCESS=0 149c3c9db83SmrgEXIT_FAILURE=1 150c3c9db83SmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 151c3c9db83SmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 152c3c9db83Smrg 153c3c9db83Smrgexit_status=$EXIT_SUCCESS 154692f60a7Smrg 155692f60a7Smrg# Make sure IFS has a sensible default 156692f60a7Smrglt_nl=' 157692f60a7Smrg' 158692f60a7SmrgIFS=" $lt_nl" 159692f60a7Smrg 160c3c9db83Smrgdirname="s,/[^/]*$,," 161c3c9db83Smrgbasename="s,^.*/,," 162c3c9db83Smrg 1633f6d0e1dSmrg# func_dirname file append nondir_replacement 1643f6d0e1dSmrg# Compute the dirname of FILE. If nonempty, add APPEND to the result, 1653f6d0e1dSmrg# otherwise set result to NONDIR_REPLACEMENT. 1663f6d0e1dSmrgfunc_dirname () 1673f6d0e1dSmrg{ 1683f6d0e1dSmrg func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` 1693f6d0e1dSmrg if test "X$func_dirname_result" = "X${1}"; then 1703f6d0e1dSmrg func_dirname_result="${3}" 1713f6d0e1dSmrg else 1723f6d0e1dSmrg func_dirname_result="$func_dirname_result${2}" 1733f6d0e1dSmrg fi 1743f6d0e1dSmrg} # func_dirname may be replaced by extended shell implementation 1753f6d0e1dSmrg 1763f6d0e1dSmrg 1773f6d0e1dSmrg# func_basename file 1783f6d0e1dSmrgfunc_basename () 1793f6d0e1dSmrg{ 1803f6d0e1dSmrg func_basename_result=`$ECHO "${1}" | $SED "$basename"` 1813f6d0e1dSmrg} # func_basename may be replaced by extended shell implementation 1823f6d0e1dSmrg 1833f6d0e1dSmrg 184c3c9db83Smrg# func_dirname_and_basename file append nondir_replacement 185c3c9db83Smrg# perform func_basename and func_dirname in a single function 186c3c9db83Smrg# call: 187c3c9db83Smrg# dirname: Compute the dirname of FILE. If nonempty, 188c3c9db83Smrg# add APPEND to the result, otherwise set result 189c3c9db83Smrg# to NONDIR_REPLACEMENT. 190c3c9db83Smrg# value returned in "$func_dirname_result" 191c3c9db83Smrg# basename: Compute filename of FILE. 192c3c9db83Smrg# value retuned in "$func_basename_result" 193c3c9db83Smrg# Implementation must be kept synchronized with func_dirname 194c3c9db83Smrg# and func_basename. For efficiency, we do not delegate to 195c3c9db83Smrg# those functions but instead duplicate the functionality here. 196c3c9db83Smrgfunc_dirname_and_basename () 197c3c9db83Smrg{ 1983f6d0e1dSmrg # Extract subdirectory from the argument. 1993f6d0e1dSmrg func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` 2003f6d0e1dSmrg if test "X$func_dirname_result" = "X${1}"; then 2013f6d0e1dSmrg func_dirname_result="${3}" 2023f6d0e1dSmrg else 2033f6d0e1dSmrg func_dirname_result="$func_dirname_result${2}" 2043f6d0e1dSmrg fi 2053f6d0e1dSmrg func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` 2063f6d0e1dSmrg} # func_dirname_and_basename may be replaced by extended shell implementation 2073f6d0e1dSmrg 2083f6d0e1dSmrg 2093f6d0e1dSmrg# func_stripname prefix suffix name 2103f6d0e1dSmrg# strip PREFIX and SUFFIX off of NAME. 2113f6d0e1dSmrg# PREFIX and SUFFIX must not contain globbing or regex special 2123f6d0e1dSmrg# characters, hashes, percent signs, but SUFFIX may contain a leading 2133f6d0e1dSmrg# dot (in which case that matches only a dot). 2143f6d0e1dSmrg# func_strip_suffix prefix name 2153f6d0e1dSmrgfunc_stripname () 2163f6d0e1dSmrg{ 2173f6d0e1dSmrg case ${2} in 2183f6d0e1dSmrg .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; 2193f6d0e1dSmrg *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; 2203f6d0e1dSmrg esac 2213f6d0e1dSmrg} # func_stripname may be replaced by extended shell implementation 2223f6d0e1dSmrg 2233f6d0e1dSmrg 2243f6d0e1dSmrg# These SED scripts presuppose an absolute path with a trailing slash. 2253f6d0e1dSmrgpathcar='s,^/\([^/]*\).*$,\1,' 2263f6d0e1dSmrgpathcdr='s,^/[^/]*,,' 2273f6d0e1dSmrgremovedotparts=':dotsl 2283f6d0e1dSmrg s@/\./@/@g 2293f6d0e1dSmrg t dotsl 2303f6d0e1dSmrg s,/\.$,/,' 2313f6d0e1dSmrgcollapseslashes='s@/\{1,\}@/@g' 2323f6d0e1dSmrgfinalslash='s,/*$,/,' 2333f6d0e1dSmrg 2343f6d0e1dSmrg# func_normal_abspath PATH 2353f6d0e1dSmrg# Remove doubled-up and trailing slashes, "." path components, 2363f6d0e1dSmrg# and cancel out any ".." path components in PATH after making 2373f6d0e1dSmrg# it an absolute path. 2383f6d0e1dSmrg# value returned in "$func_normal_abspath_result" 2393f6d0e1dSmrgfunc_normal_abspath () 2403f6d0e1dSmrg{ 2413f6d0e1dSmrg # Start from root dir and reassemble the path. 2423f6d0e1dSmrg func_normal_abspath_result= 2433f6d0e1dSmrg func_normal_abspath_tpath=$1 2443f6d0e1dSmrg func_normal_abspath_altnamespace= 2453f6d0e1dSmrg case $func_normal_abspath_tpath in 2463f6d0e1dSmrg "") 2473f6d0e1dSmrg # Empty path, that just means $cwd. 2483f6d0e1dSmrg func_stripname '' '/' "`pwd`" 2493f6d0e1dSmrg func_normal_abspath_result=$func_stripname_result 2503f6d0e1dSmrg return 2513f6d0e1dSmrg ;; 2523f6d0e1dSmrg # The next three entries are used to spot a run of precisely 2533f6d0e1dSmrg # two leading slashes without using negated character classes; 2543f6d0e1dSmrg # we take advantage of case's first-match behaviour. 2553f6d0e1dSmrg ///*) 2563f6d0e1dSmrg # Unusual form of absolute path, do nothing. 2573f6d0e1dSmrg ;; 2583f6d0e1dSmrg //*) 2593f6d0e1dSmrg # Not necessarily an ordinary path; POSIX reserves leading '//' 2603f6d0e1dSmrg # and for example Cygwin uses it to access remote file shares 2613f6d0e1dSmrg # over CIFS/SMB, so we conserve a leading double slash if found. 2623f6d0e1dSmrg func_normal_abspath_altnamespace=/ 2633f6d0e1dSmrg ;; 2643f6d0e1dSmrg /*) 2653f6d0e1dSmrg # Absolute path, do nothing. 2663f6d0e1dSmrg ;; 2673f6d0e1dSmrg *) 2683f6d0e1dSmrg # Relative path, prepend $cwd. 2693f6d0e1dSmrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 2703f6d0e1dSmrg ;; 2713f6d0e1dSmrg esac 2723f6d0e1dSmrg # Cancel out all the simple stuff to save iterations. We also want 2733f6d0e1dSmrg # the path to end with a slash for ease of parsing, so make sure 2743f6d0e1dSmrg # there is one (and only one) here. 2753f6d0e1dSmrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2763f6d0e1dSmrg -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` 2773f6d0e1dSmrg while :; do 2783f6d0e1dSmrg # Processed it all yet? 2793f6d0e1dSmrg if test "$func_normal_abspath_tpath" = / ; then 2803f6d0e1dSmrg # If we ascended to the root using ".." the result may be empty now. 2813f6d0e1dSmrg if test -z "$func_normal_abspath_result" ; then 2823f6d0e1dSmrg func_normal_abspath_result=/ 2833f6d0e1dSmrg fi 2843f6d0e1dSmrg break 2853f6d0e1dSmrg fi 2863f6d0e1dSmrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2873f6d0e1dSmrg -e "$pathcar"` 2883f6d0e1dSmrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2893f6d0e1dSmrg -e "$pathcdr"` 2903f6d0e1dSmrg # Figure out what to do with it 2913f6d0e1dSmrg case $func_normal_abspath_tcomponent in 2923f6d0e1dSmrg "") 2933f6d0e1dSmrg # Trailing empty path component, ignore it. 2943f6d0e1dSmrg ;; 2953f6d0e1dSmrg ..) 2963f6d0e1dSmrg # Parent dir; strip last assembled component from result. 2973f6d0e1dSmrg func_dirname "$func_normal_abspath_result" 2983f6d0e1dSmrg func_normal_abspath_result=$func_dirname_result 2993f6d0e1dSmrg ;; 3003f6d0e1dSmrg *) 3013f6d0e1dSmrg # Actual path component, append it. 3023f6d0e1dSmrg func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent 3033f6d0e1dSmrg ;; 3043f6d0e1dSmrg esac 3053f6d0e1dSmrg done 3063f6d0e1dSmrg # Restore leading double-slash if one was found on entry. 3073f6d0e1dSmrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 308c3c9db83Smrg} 30985ee4c00Smrg 3103f6d0e1dSmrg# func_relative_path SRCDIR DSTDIR 3113f6d0e1dSmrg# generates a relative path from SRCDIR to DSTDIR, with a trailing 3123f6d0e1dSmrg# slash if non-empty, suitable for immediately appending a filename 3133f6d0e1dSmrg# without needing to append a separator. 3143f6d0e1dSmrg# value returned in "$func_relative_path_result" 3153f6d0e1dSmrgfunc_relative_path () 3163f6d0e1dSmrg{ 3173f6d0e1dSmrg func_relative_path_result= 3183f6d0e1dSmrg func_normal_abspath "$1" 3193f6d0e1dSmrg func_relative_path_tlibdir=$func_normal_abspath_result 3203f6d0e1dSmrg func_normal_abspath "$2" 3213f6d0e1dSmrg func_relative_path_tbindir=$func_normal_abspath_result 3223f6d0e1dSmrg 3233f6d0e1dSmrg # Ascend the tree starting from libdir 3243f6d0e1dSmrg while :; do 3253f6d0e1dSmrg # check if we have found a prefix of bindir 3263f6d0e1dSmrg case $func_relative_path_tbindir in 3273f6d0e1dSmrg $func_relative_path_tlibdir) 3283f6d0e1dSmrg # found an exact match 3293f6d0e1dSmrg func_relative_path_tcancelled= 3303f6d0e1dSmrg break 3313f6d0e1dSmrg ;; 3323f6d0e1dSmrg $func_relative_path_tlibdir*) 3333f6d0e1dSmrg # found a matching prefix 3343f6d0e1dSmrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 3353f6d0e1dSmrg func_relative_path_tcancelled=$func_stripname_result 3363f6d0e1dSmrg if test -z "$func_relative_path_result"; then 3373f6d0e1dSmrg func_relative_path_result=. 3383f6d0e1dSmrg fi 3393f6d0e1dSmrg break 3403f6d0e1dSmrg ;; 3413f6d0e1dSmrg *) 3423f6d0e1dSmrg func_dirname $func_relative_path_tlibdir 3433f6d0e1dSmrg func_relative_path_tlibdir=${func_dirname_result} 3443f6d0e1dSmrg if test "x$func_relative_path_tlibdir" = x ; then 3453f6d0e1dSmrg # Have to descend all the way to the root! 3463f6d0e1dSmrg func_relative_path_result=../$func_relative_path_result 3473f6d0e1dSmrg func_relative_path_tcancelled=$func_relative_path_tbindir 3483f6d0e1dSmrg break 3493f6d0e1dSmrg fi 3503f6d0e1dSmrg func_relative_path_result=../$func_relative_path_result 3513f6d0e1dSmrg ;; 3523f6d0e1dSmrg esac 3533f6d0e1dSmrg done 354c3c9db83Smrg 3553f6d0e1dSmrg # Now calculate path; take care to avoid doubling-up slashes. 3563f6d0e1dSmrg func_stripname '' '/' "$func_relative_path_result" 3573f6d0e1dSmrg func_relative_path_result=$func_stripname_result 3583f6d0e1dSmrg func_stripname '/' '/' "$func_relative_path_tcancelled" 3593f6d0e1dSmrg if test "x$func_stripname_result" != x ; then 3603f6d0e1dSmrg func_relative_path_result=${func_relative_path_result}/${func_stripname_result} 3613f6d0e1dSmrg fi 3623f6d0e1dSmrg 3633f6d0e1dSmrg # Normalisation. If bindir is libdir, return empty string, 3643f6d0e1dSmrg # else relative path ending with a slash; either way, target 3653f6d0e1dSmrg # file name can be directly appended. 3663f6d0e1dSmrg if test ! -z "$func_relative_path_result"; then 3673f6d0e1dSmrg func_stripname './' '' "$func_relative_path_result/" 3683f6d0e1dSmrg func_relative_path_result=$func_stripname_result 3693f6d0e1dSmrg fi 3703f6d0e1dSmrg} 371c3c9db83Smrg 372c3c9db83Smrg# The name of this program: 373c3c9db83Smrgfunc_dirname_and_basename "$progpath" 374c3c9db83Smrgprogname=$func_basename_result 375c3c9db83Smrg 376c3c9db83Smrg# Make sure we have an absolute path for reexecution: 377c3c9db83Smrgcase $progpath in 378c3c9db83Smrg [\\/]*|[A-Za-z]:\\*) ;; 379c3c9db83Smrg *[\\/]*) 380c3c9db83Smrg progdir=$func_dirname_result 381c3c9db83Smrg progdir=`cd "$progdir" && pwd` 382c3c9db83Smrg progpath="$progdir/$progname" 383c3c9db83Smrg ;; 384c3c9db83Smrg *) 385c3c9db83Smrg save_IFS="$IFS" 3863f6d0e1dSmrg IFS=${PATH_SEPARATOR-:} 387c3c9db83Smrg for progdir in $PATH; do 388c3c9db83Smrg IFS="$save_IFS" 389c3c9db83Smrg test -x "$progdir/$progname" && break 390c3c9db83Smrg done 391c3c9db83Smrg IFS="$save_IFS" 392c3c9db83Smrg test -n "$progdir" || progdir=`pwd` 393c3c9db83Smrg progpath="$progdir/$progname" 394c3c9db83Smrg ;; 395c3c9db83Smrgesac 396c3c9db83Smrg 397c3c9db83Smrg# Sed substitution that helps us do robust quoting. It backslashifies 398c3c9db83Smrg# metacharacters that are still active within double-quoted strings. 399c3c9db83SmrgXsed="${SED}"' -e 1s/^X//' 400c3c9db83Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 401c3c9db83Smrg 402c3c9db83Smrg# Same as above, but do not quote variable references. 403c3c9db83Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 404c3c9db83Smrg 4053f6d0e1dSmrg# Sed substitution that turns a string into a regex matching for the 4063f6d0e1dSmrg# string literally. 4073f6d0e1dSmrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g' 4083f6d0e1dSmrg 4093f6d0e1dSmrg# Sed substitution that converts a w32 file name or path 4103f6d0e1dSmrg# which contains forward slashes, into one that contains 4113f6d0e1dSmrg# (escaped) backslashes. A very naive implementation. 4123f6d0e1dSmrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 4133f6d0e1dSmrg 414c3c9db83Smrg# Re-`\' parameter expansions in output of double_quote_subst that were 415c3c9db83Smrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 416c3c9db83Smrg# in input to double_quote_subst, that '$' was protected from expansion. 417c3c9db83Smrg# Since each input `\' is now two `\'s, look for any number of runs of 418c3c9db83Smrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 419c3c9db83Smrgbs='\\' 420c3c9db83Smrgbs2='\\\\' 421c3c9db83Smrgbs4='\\\\\\\\' 422c3c9db83Smrgdollar='\$' 423c3c9db83Smrgsed_double_backslash="\ 424c3c9db83Smrg s/$bs4/&\\ 425c3c9db83Smrg/g 426c3c9db83Smrg s/^$bs2$dollar/$bs&/ 427c3c9db83Smrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 428c3c9db83Smrg s/\n//g" 429c3c9db83Smrg 430c3c9db83Smrg# Standard options: 431c3c9db83Smrgopt_dry_run=false 432c3c9db83Smrgopt_help=false 433c3c9db83Smrgopt_quiet=false 434c3c9db83Smrgopt_verbose=false 435c3c9db83Smrgopt_warning=: 436c3c9db83Smrg 437c3c9db83Smrg# func_echo arg... 438c3c9db83Smrg# Echo program name prefixed message, along with the current mode 439c3c9db83Smrg# name if it has been set yet. 440c3c9db83Smrgfunc_echo () 441c3c9db83Smrg{ 4423f6d0e1dSmrg $ECHO "$progname: ${opt_mode+$opt_mode: }$*" 443c3c9db83Smrg} 444c3c9db83Smrg 445c3c9db83Smrg# func_verbose arg... 446c3c9db83Smrg# Echo program name prefixed message in verbose mode only. 447c3c9db83Smrgfunc_verbose () 448c3c9db83Smrg{ 449c3c9db83Smrg $opt_verbose && func_echo ${1+"$@"} 450c3c9db83Smrg 451c3c9db83Smrg # A bug in bash halts the script if the last line of a function 452c3c9db83Smrg # fails when set -e is in force, so we need another command to 453c3c9db83Smrg # work around that: 454c3c9db83Smrg : 455c3c9db83Smrg} 456c3c9db83Smrg 4573f6d0e1dSmrg# func_echo_all arg... 4583f6d0e1dSmrg# Invoke $ECHO with all args, space-separated. 4593f6d0e1dSmrgfunc_echo_all () 4603f6d0e1dSmrg{ 4613f6d0e1dSmrg $ECHO "$*" 4623f6d0e1dSmrg} 4633f6d0e1dSmrg 464c3c9db83Smrg# func_error arg... 465c3c9db83Smrg# Echo program name prefixed message to standard error. 466c3c9db83Smrgfunc_error () 467c3c9db83Smrg{ 4683f6d0e1dSmrg $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 469c3c9db83Smrg} 470c3c9db83Smrg 471c3c9db83Smrg# func_warning arg... 472c3c9db83Smrg# Echo program name prefixed warning message to standard error. 473c3c9db83Smrgfunc_warning () 474c3c9db83Smrg{ 4753f6d0e1dSmrg $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 476c3c9db83Smrg 477c3c9db83Smrg # bash bug again: 478c3c9db83Smrg : 479c3c9db83Smrg} 480c3c9db83Smrg 481c3c9db83Smrg# func_fatal_error arg... 482c3c9db83Smrg# Echo program name prefixed message to standard error, and exit. 483c3c9db83Smrgfunc_fatal_error () 484c3c9db83Smrg{ 485c3c9db83Smrg func_error ${1+"$@"} 486c3c9db83Smrg exit $EXIT_FAILURE 487c3c9db83Smrg} 488c3c9db83Smrg 489c3c9db83Smrg# func_fatal_help arg... 490c3c9db83Smrg# Echo program name prefixed message to standard error, followed by 491c3c9db83Smrg# a help hint, and exit. 492c3c9db83Smrgfunc_fatal_help () 493c3c9db83Smrg{ 494c3c9db83Smrg func_error ${1+"$@"} 495c3c9db83Smrg func_fatal_error "$help" 496c3c9db83Smrg} 497c3c9db83Smrghelp="Try \`$progname --help' for more information." ## default 498c3c9db83Smrg 499c3c9db83Smrg 500c3c9db83Smrg# func_grep expression filename 501c3c9db83Smrg# Check whether EXPRESSION matches any line of FILENAME, without output. 502c3c9db83Smrgfunc_grep () 503c3c9db83Smrg{ 504c3c9db83Smrg $GREP "$1" "$2" >/dev/null 2>&1 505c3c9db83Smrg} 506c3c9db83Smrg 507c3c9db83Smrg 508c3c9db83Smrg# func_mkdir_p directory-path 509c3c9db83Smrg# Make sure the entire path to DIRECTORY-PATH is available. 510c3c9db83Smrgfunc_mkdir_p () 511c3c9db83Smrg{ 512c3c9db83Smrg my_directory_path="$1" 513c3c9db83Smrg my_dir_list= 514c3c9db83Smrg 515c3c9db83Smrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 516c3c9db83Smrg 517c3c9db83Smrg # Protect directory names starting with `-' 518c3c9db83Smrg case $my_directory_path in 519c3c9db83Smrg -*) my_directory_path="./$my_directory_path" ;; 520c3c9db83Smrg esac 521c3c9db83Smrg 522c3c9db83Smrg # While some portion of DIR does not yet exist... 523c3c9db83Smrg while test ! -d "$my_directory_path"; do 524c3c9db83Smrg # ...make a list in topmost first order. Use a colon delimited 525c3c9db83Smrg # list incase some portion of path contains whitespace. 526c3c9db83Smrg my_dir_list="$my_directory_path:$my_dir_list" 527c3c9db83Smrg 528c3c9db83Smrg # If the last portion added has no slash in it, the list is done 529c3c9db83Smrg case $my_directory_path in */*) ;; *) break ;; esac 530c3c9db83Smrg 531c3c9db83Smrg # ...otherwise throw away the child directory and loop 5323f6d0e1dSmrg my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` 533c3c9db83Smrg done 5343f6d0e1dSmrg my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` 535c3c9db83Smrg 536c3c9db83Smrg save_mkdir_p_IFS="$IFS"; IFS=':' 537c3c9db83Smrg for my_dir in $my_dir_list; do 538c3c9db83Smrg IFS="$save_mkdir_p_IFS" 539c3c9db83Smrg # mkdir can fail with a `File exist' error if two processes 540c3c9db83Smrg # try to create one of the directories concurrently. Don't 541c3c9db83Smrg # stop in that case! 542c3c9db83Smrg $MKDIR "$my_dir" 2>/dev/null || : 543c3c9db83Smrg done 544c3c9db83Smrg IFS="$save_mkdir_p_IFS" 545c3c9db83Smrg 546c3c9db83Smrg # Bail out if we (or some other process) failed to create a directory. 547c3c9db83Smrg test -d "$my_directory_path" || \ 548c3c9db83Smrg func_fatal_error "Failed to create \`$1'" 549c3c9db83Smrg fi 550c3c9db83Smrg} 551692f60a7Smrg 552692f60a7Smrg 553692f60a7Smrg# func_mktempdir [string] 554692f60a7Smrg# Make a temporary directory that won't clash with other running 555692f60a7Smrg# libtool processes, and avoids race conditions if possible. If 556692f60a7Smrg# given, STRING is the basename for that directory. 557692f60a7Smrgfunc_mktempdir () 558692f60a7Smrg{ 559692f60a7Smrg my_template="${TMPDIR-/tmp}/${1-$progname}" 560692f60a7Smrg 561c3c9db83Smrg if test "$opt_dry_run" = ":"; then 562692f60a7Smrg # Return a directory name, but don't create it in dry-run mode 563692f60a7Smrg my_tmpdir="${my_template}-$$" 564692f60a7Smrg else 565692f60a7Smrg 566692f60a7Smrg # If mktemp works, use that first and foremost 567692f60a7Smrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 568692f60a7Smrg 569692f60a7Smrg if test ! -d "$my_tmpdir"; then 570c3c9db83Smrg # Failing that, at least try and use $RANDOM to avoid a race 571c3c9db83Smrg my_tmpdir="${my_template}-${RANDOM-0}$$" 572692f60a7Smrg 573c3c9db83Smrg save_mktempdir_umask=`umask` 574c3c9db83Smrg umask 0077 575c3c9db83Smrg $MKDIR "$my_tmpdir" 576c3c9db83Smrg umask $save_mktempdir_umask 577692f60a7Smrg fi 578692f60a7Smrg 579692f60a7Smrg # If we're not in dry-run mode, bomb out on failure 580c3c9db83Smrg test -d "$my_tmpdir" || \ 581c3c9db83Smrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 582692f60a7Smrg fi 583692f60a7Smrg 5843f6d0e1dSmrg $ECHO "$my_tmpdir" 585692f60a7Smrg} 586692f60a7Smrg 587692f60a7Smrg 588c3c9db83Smrg# func_quote_for_eval arg 589c3c9db83Smrg# Aesthetically quote ARG to be evaled later. 590c3c9db83Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 591c3c9db83Smrg# is double-quoted, suitable for a subsequent eval, whereas 592c3c9db83Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 593c3c9db83Smrg# which are still active within double quotes backslashified. 594c3c9db83Smrgfunc_quote_for_eval () 595692f60a7Smrg{ 596c3c9db83Smrg case $1 in 597c3c9db83Smrg *[\\\`\"\$]*) 5983f6d0e1dSmrg func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; 599c3c9db83Smrg *) 600c3c9db83Smrg func_quote_for_eval_unquoted_result="$1" ;; 601c3c9db83Smrg esac 602c3c9db83Smrg 603c3c9db83Smrg case $func_quote_for_eval_unquoted_result in 604c3c9db83Smrg # Double-quote args containing shell metacharacters to delay 605c3c9db83Smrg # word splitting, command substitution and and variable 606c3c9db83Smrg # expansion for a subsequent eval. 607c3c9db83Smrg # Many Bourne shells cannot handle close brackets correctly 608c3c9db83Smrg # in scan sets, so we specify it separately. 609c3c9db83Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 610c3c9db83Smrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 611c3c9db83Smrg ;; 612c3c9db83Smrg *) 613c3c9db83Smrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 614692f60a7Smrg esac 615692f60a7Smrg} 616692f60a7Smrg 617692f60a7Smrg 618c3c9db83Smrg# func_quote_for_expand arg 619c3c9db83Smrg# Aesthetically quote ARG to be evaled later; same as above, 620c3c9db83Smrg# but do not quote variable references. 621c3c9db83Smrgfunc_quote_for_expand () 622692f60a7Smrg{ 623c3c9db83Smrg case $1 in 624c3c9db83Smrg *[\\\`\"]*) 6253f6d0e1dSmrg my_arg=`$ECHO "$1" | $SED \ 626c3c9db83Smrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 627692f60a7Smrg *) 628c3c9db83Smrg my_arg="$1" ;; 629c3c9db83Smrg esac 630c3c9db83Smrg 631c3c9db83Smrg case $my_arg in 632c3c9db83Smrg # Double-quote args containing shell metacharacters to delay 633c3c9db83Smrg # word splitting and command substitution for a subsequent eval. 634c3c9db83Smrg # Many Bourne shells cannot handle close brackets correctly 635c3c9db83Smrg # in scan sets, so we specify it separately. 636c3c9db83Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 637c3c9db83Smrg my_arg="\"$my_arg\"" 638c3c9db83Smrg ;; 639c3c9db83Smrg esac 640c3c9db83Smrg 641c3c9db83Smrg func_quote_for_expand_result="$my_arg" 642692f60a7Smrg} 643692f60a7Smrg 644692f60a7Smrg 645c3c9db83Smrg# func_show_eval cmd [fail_exp] 646c3c9db83Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 647c3c9db83Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 648c3c9db83Smrg# is given, then evaluate it. 649c3c9db83Smrgfunc_show_eval () 650692f60a7Smrg{ 651c3c9db83Smrg my_cmd="$1" 652c3c9db83Smrg my_fail_exp="${2-:}" 65385ee4c00Smrg 654c3c9db83Smrg ${opt_silent-false} || { 655c3c9db83Smrg func_quote_for_expand "$my_cmd" 656c3c9db83Smrg eval "func_echo $func_quote_for_expand_result" 657c3c9db83Smrg } 658c3c9db83Smrg 659c3c9db83Smrg if ${opt_dry_run-false}; then :; else 660c3c9db83Smrg eval "$my_cmd" 661c3c9db83Smrg my_status=$? 662c3c9db83Smrg if test "$my_status" -eq 0; then :; else 663c3c9db83Smrg eval "(exit $my_status); $my_fail_exp" 664c3c9db83Smrg fi 665692f60a7Smrg fi 666692f60a7Smrg} 667692f60a7Smrg 668c3c9db83Smrg 669c3c9db83Smrg# func_show_eval_locale cmd [fail_exp] 670c3c9db83Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 671c3c9db83Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 672c3c9db83Smrg# is given, then evaluate it. Use the saved locale for evaluation. 673c3c9db83Smrgfunc_show_eval_locale () 674692f60a7Smrg{ 675c3c9db83Smrg my_cmd="$1" 676c3c9db83Smrg my_fail_exp="${2-:}" 677c3c9db83Smrg 678c3c9db83Smrg ${opt_silent-false} || { 679c3c9db83Smrg func_quote_for_expand "$my_cmd" 680c3c9db83Smrg eval "func_echo $func_quote_for_expand_result" 681c3c9db83Smrg } 682c3c9db83Smrg 683c3c9db83Smrg if ${opt_dry_run-false}; then :; else 684c3c9db83Smrg eval "$lt_user_locale 685c3c9db83Smrg $my_cmd" 686c3c9db83Smrg my_status=$? 687c3c9db83Smrg eval "$lt_safe_locale" 688c3c9db83Smrg if test "$my_status" -eq 0; then :; else 689c3c9db83Smrg eval "(exit $my_status); $my_fail_exp" 690c3c9db83Smrg fi 691692f60a7Smrg fi 692c3c9db83Smrg} 693692f60a7Smrg 6943f6d0e1dSmrg# func_tr_sh 6953f6d0e1dSmrg# Turn $1 into a string suitable for a shell variable name. 6963f6d0e1dSmrg# Result is stored in $func_tr_sh_result. All characters 6973f6d0e1dSmrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 6983f6d0e1dSmrg# if $1 begins with a digit, a '_' is prepended as well. 6993f6d0e1dSmrgfunc_tr_sh () 7003f6d0e1dSmrg{ 7013f6d0e1dSmrg case $1 in 7023f6d0e1dSmrg [0-9]* | *[!a-zA-Z0-9_]*) 7033f6d0e1dSmrg func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` 7043f6d0e1dSmrg ;; 7053f6d0e1dSmrg * ) 7063f6d0e1dSmrg func_tr_sh_result=$1 7073f6d0e1dSmrg ;; 7083f6d0e1dSmrg esac 7093f6d0e1dSmrg} 710c3c9db83Smrg 711c3c9db83Smrg 712c3c9db83Smrg# func_version 713c3c9db83Smrg# Echo version message to standard output and exit. 714c3c9db83Smrgfunc_version () 715c3c9db83Smrg{ 7163f6d0e1dSmrg $opt_debug 7173f6d0e1dSmrg 7183f6d0e1dSmrg $SED -n '/(C)/!b go 7193f6d0e1dSmrg :more 7203f6d0e1dSmrg /\./!{ 7213f6d0e1dSmrg N 7223f6d0e1dSmrg s/\n# / / 7233f6d0e1dSmrg b more 7243f6d0e1dSmrg } 7253f6d0e1dSmrg :go 7263f6d0e1dSmrg /^# '$PROGRAM' (GNU /,/# warranty; / { 727c3c9db83Smrg s/^# // 728c3c9db83Smrg s/^# *$// 729c3c9db83Smrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 730c3c9db83Smrg p 731c3c9db83Smrg }' < "$progpath" 732c3c9db83Smrg exit $? 733c3c9db83Smrg} 734c3c9db83Smrg 735c3c9db83Smrg# func_usage 736c3c9db83Smrg# Echo short help message to standard output and exit. 737c3c9db83Smrgfunc_usage () 738c3c9db83Smrg{ 7393f6d0e1dSmrg $opt_debug 7403f6d0e1dSmrg 7413f6d0e1dSmrg $SED -n '/^# Usage:/,/^# *.*--help/ { 742c3c9db83Smrg s/^# // 743c3c9db83Smrg s/^# *$// 744c3c9db83Smrg s/\$progname/'$progname'/ 745c3c9db83Smrg p 746c3c9db83Smrg }' < "$progpath" 7473f6d0e1dSmrg echo 748c3c9db83Smrg $ECHO "run \`$progname --help | more' for full usage" 749c3c9db83Smrg exit $? 750c3c9db83Smrg} 751c3c9db83Smrg 7523f6d0e1dSmrg# func_help [NOEXIT] 7533f6d0e1dSmrg# Echo long help message to standard output and exit, 7543f6d0e1dSmrg# unless 'noexit' is passed as argument. 755c3c9db83Smrgfunc_help () 756c3c9db83Smrg{ 7573f6d0e1dSmrg $opt_debug 7583f6d0e1dSmrg 759c3c9db83Smrg $SED -n '/^# Usage:/,/# Report bugs to/ { 7603f6d0e1dSmrg :print 761c3c9db83Smrg s/^# // 762c3c9db83Smrg s/^# *$// 763c3c9db83Smrg s*\$progname*'$progname'* 764c3c9db83Smrg s*\$host*'"$host"'* 765c3c9db83Smrg s*\$SHELL*'"$SHELL"'* 766c3c9db83Smrg s*\$LTCC*'"$LTCC"'* 767c3c9db83Smrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 768c3c9db83Smrg s*\$LD*'"$LD"'* 769c3c9db83Smrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 7703f6d0e1dSmrg s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ 7713f6d0e1dSmrg s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ 772c3c9db83Smrg p 7733f6d0e1dSmrg d 7743f6d0e1dSmrg } 7753f6d0e1dSmrg /^# .* home page:/b print 7763f6d0e1dSmrg /^# General help using/b print 7773f6d0e1dSmrg ' < "$progpath" 7783f6d0e1dSmrg ret=$? 7793f6d0e1dSmrg if test -z "$1"; then 7803f6d0e1dSmrg exit $ret 7813f6d0e1dSmrg fi 782c3c9db83Smrg} 783c3c9db83Smrg 784c3c9db83Smrg# func_missing_arg argname 785c3c9db83Smrg# Echo program name prefixed message to standard error and set global 786c3c9db83Smrg# exit_cmd. 787c3c9db83Smrgfunc_missing_arg () 788c3c9db83Smrg{ 7893f6d0e1dSmrg $opt_debug 7903f6d0e1dSmrg 7913f6d0e1dSmrg func_error "missing argument for $1." 792c3c9db83Smrg exit_cmd=exit 793692f60a7Smrg} 794692f60a7Smrg 79585ee4c00Smrg 7963f6d0e1dSmrg# func_split_short_opt shortopt 7973f6d0e1dSmrg# Set func_split_short_opt_name and func_split_short_opt_arg shell 7983f6d0e1dSmrg# variables after splitting SHORTOPT after the 2nd character. 7993f6d0e1dSmrgfunc_split_short_opt () 8003f6d0e1dSmrg{ 8013f6d0e1dSmrg my_sed_short_opt='1s/^\(..\).*$/\1/;q' 8023f6d0e1dSmrg my_sed_short_rest='1s/^..\(.*\)$/\1/;q' 80385ee4c00Smrg 8043f6d0e1dSmrg func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` 8053f6d0e1dSmrg func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` 8063f6d0e1dSmrg} # func_split_short_opt may be replaced by extended shell implementation 8073f6d0e1dSmrg 8083f6d0e1dSmrg 8093f6d0e1dSmrg# func_split_long_opt longopt 8103f6d0e1dSmrg# Set func_split_long_opt_name and func_split_long_opt_arg shell 8113f6d0e1dSmrg# variables after splitting LONGOPT at the `=' sign. 8123f6d0e1dSmrgfunc_split_long_opt () 8133f6d0e1dSmrg{ 8143f6d0e1dSmrg my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' 8153f6d0e1dSmrg my_sed_long_arg='1s/^--[^=]*=//' 8163f6d0e1dSmrg 8173f6d0e1dSmrg func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` 8183f6d0e1dSmrg func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` 8193f6d0e1dSmrg} # func_split_long_opt may be replaced by extended shell implementation 8203f6d0e1dSmrg 8213f6d0e1dSmrgexit_cmd=: 822c3c9db83Smrg 823c3c9db83Smrg 824c3c9db83Smrg 825692f60a7Smrg 826692f60a7Smrg 827c3c9db83Smrgmagic="%%%MAGIC variable%%%" 828c3c9db83Smrgmagic_exe="%%%MAGIC EXE variable%%%" 829692f60a7Smrg 830c3c9db83Smrg# Global variables. 831c3c9db83Smrgnonopt= 832c3c9db83Smrgpreserve_args= 833c3c9db83Smrglo2o="s/\\.lo\$/.${objext}/" 834c3c9db83Smrgo2lo="s/\\.${objext}\$/.lo/" 835c3c9db83Smrgextracted_archives= 836c3c9db83Smrgextracted_serial=0 83785ee4c00Smrg 838c3c9db83Smrg# If this variable is set in any of the actions, the command in it 839c3c9db83Smrg# will be execed at the end. This prevents here-documents from being 840c3c9db83Smrg# left over by shells. 841c3c9db83Smrgexec_cmd= 842c3c9db83Smrg 8433f6d0e1dSmrg# func_append var value 8443f6d0e1dSmrg# Append VALUE to the end of shell variable VAR. 8453f6d0e1dSmrgfunc_append () 8463f6d0e1dSmrg{ 8473f6d0e1dSmrg eval "${1}=\$${1}\${2}" 8483f6d0e1dSmrg} # func_append may be replaced by extended shell implementation 8493f6d0e1dSmrg 8503f6d0e1dSmrg# func_append_quoted var value 8513f6d0e1dSmrg# Quote VALUE and append to the end of shell variable VAR, separated 8523f6d0e1dSmrg# by a space. 8533f6d0e1dSmrgfunc_append_quoted () 8543f6d0e1dSmrg{ 8553f6d0e1dSmrg func_quote_for_eval "${2}" 8563f6d0e1dSmrg eval "${1}=\$${1}\\ \$func_quote_for_eval_result" 8573f6d0e1dSmrg} # func_append_quoted may be replaced by extended shell implementation 8583f6d0e1dSmrg 8593f6d0e1dSmrg 8603f6d0e1dSmrg# func_arith arithmetic-term... 8613f6d0e1dSmrgfunc_arith () 8623f6d0e1dSmrg{ 8633f6d0e1dSmrg func_arith_result=`expr "${@}"` 8643f6d0e1dSmrg} # func_arith may be replaced by extended shell implementation 8653f6d0e1dSmrg 8663f6d0e1dSmrg 8673f6d0e1dSmrg# func_len string 8683f6d0e1dSmrg# STRING may not start with a hyphen. 8693f6d0e1dSmrgfunc_len () 8703f6d0e1dSmrg{ 8713f6d0e1dSmrg func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` 8723f6d0e1dSmrg} # func_len may be replaced by extended shell implementation 8733f6d0e1dSmrg 8743f6d0e1dSmrg 8753f6d0e1dSmrg# func_lo2o object 8763f6d0e1dSmrgfunc_lo2o () 8773f6d0e1dSmrg{ 8783f6d0e1dSmrg func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` 8793f6d0e1dSmrg} # func_lo2o may be replaced by extended shell implementation 8803f6d0e1dSmrg 8813f6d0e1dSmrg 8823f6d0e1dSmrg# func_xform libobj-or-source 8833f6d0e1dSmrgfunc_xform () 8843f6d0e1dSmrg{ 8853f6d0e1dSmrg func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` 8863f6d0e1dSmrg} # func_xform may be replaced by extended shell implementation 8873f6d0e1dSmrg 8883f6d0e1dSmrg 889c3c9db83Smrg# func_fatal_configuration arg... 890c3c9db83Smrg# Echo program name prefixed message to standard error, followed by 891c3c9db83Smrg# a configuration failure hint, and exit. 892c3c9db83Smrgfunc_fatal_configuration () 893c3c9db83Smrg{ 894c3c9db83Smrg func_error ${1+"$@"} 895c3c9db83Smrg func_error "See the $PACKAGE documentation for more information." 896c3c9db83Smrg func_fatal_error "Fatal configuration error." 897c3c9db83Smrg} 89854569438Smrg 89985ee4c00Smrg 900c3c9db83Smrg# func_config 901c3c9db83Smrg# Display the configuration for all the tags in this script. 902c3c9db83Smrgfunc_config () 903c3c9db83Smrg{ 904c3c9db83Smrg re_begincf='^# ### BEGIN LIBTOOL' 905c3c9db83Smrg re_endcf='^# ### END LIBTOOL' 906c3c9db83Smrg 907c3c9db83Smrg # Default configuration. 908c3c9db83Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 909692f60a7Smrg 910692f60a7Smrg # Now print the configurations for the tags. 911692f60a7Smrg for tagname in $taglist; do 912c3c9db83Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 913692f60a7Smrg done 9142e71ea71Smrg 915c3c9db83Smrg exit $? 916c3c9db83Smrg} 9172e71ea71Smrg 918c3c9db83Smrg# func_features 919c3c9db83Smrg# Display the features supported by this script. 920c3c9db83Smrgfunc_features () 921c3c9db83Smrg{ 9223f6d0e1dSmrg echo "host: $host" 923692f60a7Smrg if test "$build_libtool_libs" = yes; then 9243f6d0e1dSmrg echo "enable shared libraries" 925692f60a7Smrg else 9263f6d0e1dSmrg echo "disable shared libraries" 927692f60a7Smrg fi 928692f60a7Smrg if test "$build_old_libs" = yes; then 9293f6d0e1dSmrg echo "enable static libraries" 930692f60a7Smrg else 9313f6d0e1dSmrg echo "disable static libraries" 932692f60a7Smrg fi 933c3c9db83Smrg 934692f60a7Smrg exit $? 935c3c9db83Smrg} 936692f60a7Smrg 937c3c9db83Smrg# func_enable_tag tagname 938c3c9db83Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 939c3c9db83Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 940c3c9db83Smrg# variable here. 941c3c9db83Smrgfunc_enable_tag () 942c3c9db83Smrg{ 943c3c9db83Smrg # Global variable: 944c3c9db83Smrg tagname="$1" 945692f60a7Smrg 946c3c9db83Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 947c3c9db83Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 948c3c9db83Smrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 94985ee4c00Smrg 950c3c9db83Smrg # Validate tagname. 951c3c9db83Smrg case $tagname in 952c3c9db83Smrg *[!-_A-Za-z0-9,/]*) 953c3c9db83Smrg func_fatal_error "invalid tag name: $tagname" 954c3c9db83Smrg ;; 955c3c9db83Smrg esac 956692f60a7Smrg 957c3c9db83Smrg # Don't test for the "default" C tag, as we know it's 958c3c9db83Smrg # there but not specially marked. 959c3c9db83Smrg case $tagname in 960c3c9db83Smrg CC) ;; 961c3c9db83Smrg *) 962c3c9db83Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 963c3c9db83Smrg taglist="$taglist $tagname" 964c3c9db83Smrg 965c3c9db83Smrg # Evaluate the configuration. Be careful to quote the path 966c3c9db83Smrg # and the sed script, to avoid splitting on whitespace, but 967c3c9db83Smrg # also don't use non-portable quotes within backquotes within 968c3c9db83Smrg # quotes we have to do it in 2 steps: 969c3c9db83Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 970c3c9db83Smrg eval "$extractedcf" 971c3c9db83Smrg else 972c3c9db83Smrg func_error "ignoring unknown tag $tagname" 973c3c9db83Smrg fi 974c3c9db83Smrg ;; 975c3c9db83Smrg esac 976c3c9db83Smrg} 977c3c9db83Smrg 9783f6d0e1dSmrg# func_check_version_match 9793f6d0e1dSmrg# Ensure that we are using m4 macros, and libtool script from the same 9803f6d0e1dSmrg# release of libtool. 9813f6d0e1dSmrgfunc_check_version_match () 982c3c9db83Smrg{ 9833f6d0e1dSmrg if test "$package_revision" != "$macro_revision"; then 9843f6d0e1dSmrg if test "$VERSION" != "$macro_version"; then 9853f6d0e1dSmrg if test -z "$macro_version"; then 9863f6d0e1dSmrg cat >&2 <<_LT_EOF 9873f6d0e1dSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 9883f6d0e1dSmrg$progname: definition of this LT_INIT comes from an older release. 9893f6d0e1dSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 9903f6d0e1dSmrg$progname: and run autoconf again. 9913f6d0e1dSmrg_LT_EOF 9923f6d0e1dSmrg else 9933f6d0e1dSmrg cat >&2 <<_LT_EOF 9943f6d0e1dSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 9953f6d0e1dSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 9963f6d0e1dSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 9973f6d0e1dSmrg$progname: and run autoconf again. 9983f6d0e1dSmrg_LT_EOF 9993f6d0e1dSmrg fi 10003f6d0e1dSmrg else 10013f6d0e1dSmrg cat >&2 <<_LT_EOF 10023f6d0e1dSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 10033f6d0e1dSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 10043f6d0e1dSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 10053f6d0e1dSmrg$progname: of $PACKAGE $VERSION and run autoconf again. 10063f6d0e1dSmrg_LT_EOF 10073f6d0e1dSmrg fi 10083f6d0e1dSmrg 10093f6d0e1dSmrg exit $EXIT_MISMATCH 10103f6d0e1dSmrg fi 10113f6d0e1dSmrg} 10123f6d0e1dSmrg 10133f6d0e1dSmrg 10143f6d0e1dSmrg# Shorthand for --mode=foo, only valid as the first argument 10153f6d0e1dSmrgcase $1 in 10163f6d0e1dSmrgclean|clea|cle|cl) 10173f6d0e1dSmrg shift; set dummy --mode clean ${1+"$@"}; shift 10183f6d0e1dSmrg ;; 10193f6d0e1dSmrgcompile|compil|compi|comp|com|co|c) 10203f6d0e1dSmrg shift; set dummy --mode compile ${1+"$@"}; shift 10213f6d0e1dSmrg ;; 10223f6d0e1dSmrgexecute|execut|execu|exec|exe|ex|e) 10233f6d0e1dSmrg shift; set dummy --mode execute ${1+"$@"}; shift 10243f6d0e1dSmrg ;; 10253f6d0e1dSmrgfinish|finis|fini|fin|fi|f) 10263f6d0e1dSmrg shift; set dummy --mode finish ${1+"$@"}; shift 10273f6d0e1dSmrg ;; 10283f6d0e1dSmrginstall|instal|insta|inst|ins|in|i) 10293f6d0e1dSmrg shift; set dummy --mode install ${1+"$@"}; shift 10303f6d0e1dSmrg ;; 10313f6d0e1dSmrglink|lin|li|l) 10323f6d0e1dSmrg shift; set dummy --mode link ${1+"$@"}; shift 10333f6d0e1dSmrg ;; 10343f6d0e1dSmrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 10353f6d0e1dSmrg shift; set dummy --mode uninstall ${1+"$@"}; shift 10363f6d0e1dSmrg ;; 10373f6d0e1dSmrgesac 10383f6d0e1dSmrg 10393f6d0e1dSmrg 10403f6d0e1dSmrg 10413f6d0e1dSmrg# Option defaults: 10423f6d0e1dSmrgopt_debug=: 10433f6d0e1dSmrgopt_dry_run=false 10443f6d0e1dSmrgopt_config=false 10453f6d0e1dSmrgopt_preserve_dup_deps=false 10463f6d0e1dSmrgopt_features=false 10473f6d0e1dSmrgopt_finish=false 10483f6d0e1dSmrgopt_help=false 10493f6d0e1dSmrgopt_help_all=false 10503f6d0e1dSmrgopt_silent=: 10513f6d0e1dSmrgopt_warning=: 10523f6d0e1dSmrgopt_verbose=: 10533f6d0e1dSmrgopt_silent=false 10543f6d0e1dSmrgopt_verbose=false 10552e71ea71Smrg 1056692f60a7Smrg 10573f6d0e1dSmrg# Parse options once, thoroughly. This comes as soon as possible in the 10583f6d0e1dSmrg# script to make things like `--version' happen as quickly as we can. 10593f6d0e1dSmrg{ 10603f6d0e1dSmrg # this just eases exit handling 10613f6d0e1dSmrg while test $# -gt 0; do 1062c3c9db83Smrg opt="$1" 1063c3c9db83Smrg shift 1064c3c9db83Smrg case $opt in 10653f6d0e1dSmrg --debug|-x) opt_debug='set -x' 1066c3c9db83Smrg func_echo "enabling shell trace mode" 1067c3c9db83Smrg $opt_debug 1068c3c9db83Smrg ;; 10693f6d0e1dSmrg --dry-run|--dryrun|-n) 10703f6d0e1dSmrg opt_dry_run=: 1071c3c9db83Smrg ;; 10723f6d0e1dSmrg --config) 10733f6d0e1dSmrg opt_config=: 10743f6d0e1dSmrgfunc_config 10753f6d0e1dSmrg ;; 10763f6d0e1dSmrg --dlopen|-dlopen) 10773f6d0e1dSmrg optarg="$1" 10783f6d0e1dSmrg opt_dlopen="${opt_dlopen+$opt_dlopen 10793f6d0e1dSmrg}$optarg" 1080c3c9db83Smrg shift 1081c3c9db83Smrg ;; 1082c3c9db83Smrg --preserve-dup-deps) 10833f6d0e1dSmrg opt_preserve_dup_deps=: 1084c3c9db83Smrg ;; 10853f6d0e1dSmrg --features) 10863f6d0e1dSmrg opt_features=: 10873f6d0e1dSmrgfunc_features 10883f6d0e1dSmrg ;; 10893f6d0e1dSmrg --finish) 10903f6d0e1dSmrg opt_finish=: 10913f6d0e1dSmrgset dummy --mode finish ${1+"$@"}; shift 10923f6d0e1dSmrg ;; 10933f6d0e1dSmrg --help) 10943f6d0e1dSmrg opt_help=: 10953f6d0e1dSmrg ;; 10963f6d0e1dSmrg --help-all) 10973f6d0e1dSmrg opt_help_all=: 10983f6d0e1dSmrgopt_help=': help-all' 10993f6d0e1dSmrg ;; 11003f6d0e1dSmrg --mode) 11013f6d0e1dSmrg test $# = 0 && func_missing_arg $opt && break 11023f6d0e1dSmrg optarg="$1" 11033f6d0e1dSmrg opt_mode="$optarg" 11043f6d0e1dSmrgcase $optarg in 11053f6d0e1dSmrg # Valid mode arguments: 11063f6d0e1dSmrg clean|compile|execute|finish|install|link|relink|uninstall) ;; 11073f6d0e1dSmrg 11083f6d0e1dSmrg # Catch anything else as an error 11093f6d0e1dSmrg *) func_error "invalid argument for $opt" 11103f6d0e1dSmrg exit_cmd=exit 11113f6d0e1dSmrg break 11123f6d0e1dSmrg ;; 11133f6d0e1dSmrgesac 11143f6d0e1dSmrg shift 11153f6d0e1dSmrg ;; 11163f6d0e1dSmrg --no-silent|--no-quiet) 1117c3c9db83Smrg opt_silent=false 11183f6d0e1dSmrgfunc_append preserve_args " $opt" 1119c3c9db83Smrg ;; 11203f6d0e1dSmrg --no-warning|--no-warn) 11213f6d0e1dSmrg opt_warning=false 11223f6d0e1dSmrgfunc_append preserve_args " $opt" 11233f6d0e1dSmrg ;; 11243f6d0e1dSmrg --no-verbose) 11253f6d0e1dSmrg opt_verbose=false 11263f6d0e1dSmrgfunc_append preserve_args " $opt" 11273f6d0e1dSmrg ;; 11283f6d0e1dSmrg --silent|--quiet) 11293f6d0e1dSmrg opt_silent=: 11303f6d0e1dSmrgfunc_append preserve_args " $opt" 11313f6d0e1dSmrg opt_verbose=false 11323f6d0e1dSmrg ;; 11333f6d0e1dSmrg --verbose|-v) 11343f6d0e1dSmrg opt_verbose=: 11353f6d0e1dSmrgfunc_append preserve_args " $opt" 11363f6d0e1dSmrgopt_silent=false 11373f6d0e1dSmrg ;; 11383f6d0e1dSmrg --tag) 11393f6d0e1dSmrg test $# = 0 && func_missing_arg $opt && break 11403f6d0e1dSmrg optarg="$1" 11413f6d0e1dSmrg opt_tag="$optarg" 11423f6d0e1dSmrgfunc_append preserve_args " $opt $optarg" 11433f6d0e1dSmrgfunc_enable_tag "$optarg" 1144c3c9db83Smrg shift 1145c3c9db83Smrg ;; 1146c3c9db83Smrg 11473f6d0e1dSmrg -\?|-h) func_usage ;; 11483f6d0e1dSmrg --help) func_help ;; 11493f6d0e1dSmrg --version) func_version ;; 11503f6d0e1dSmrg 1151c3c9db83Smrg # Separate optargs to long options: 11523f6d0e1dSmrg --*=*) 11533f6d0e1dSmrg func_split_long_opt "$opt" 11543f6d0e1dSmrg set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} 1155c3c9db83Smrg shift 1156c3c9db83Smrg ;; 1157c3c9db83Smrg 11583f6d0e1dSmrg # Separate non-argument short options: 11593f6d0e1dSmrg -\?*|-h*|-n*|-v*) 11603f6d0e1dSmrg func_split_short_opt "$opt" 11613f6d0e1dSmrg set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} 11623f6d0e1dSmrg shift 1163c3c9db83Smrg ;; 11643f6d0e1dSmrg 11653f6d0e1dSmrg --) break ;; 11663f6d0e1dSmrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 11673f6d0e1dSmrg *) set dummy "$opt" ${1+"$@"}; shift; break ;; 1168c3c9db83Smrg esac 1169c3c9db83Smrg done 1170c3c9db83Smrg 11713f6d0e1dSmrg # Validate options: 11723f6d0e1dSmrg 11733f6d0e1dSmrg # save first non-option argument 11743f6d0e1dSmrg if test "$#" -gt 0; then 11753f6d0e1dSmrg nonopt="$opt" 11763f6d0e1dSmrg shift 11773f6d0e1dSmrg fi 11783f6d0e1dSmrg 11793f6d0e1dSmrg # preserve --debug 11803f6d0e1dSmrg test "$opt_debug" = : || func_append preserve_args " --debug" 1181c3c9db83Smrg 1182c3c9db83Smrg case $host in 1183c3c9db83Smrg *cygwin* | *mingw* | *pw32* | *cegcc*) 1184c3c9db83Smrg # don't eliminate duplications in $postdeps and $predeps 1185c3c9db83Smrg opt_duplicate_compiler_generated_deps=: 11862e71ea71Smrg ;; 11872e71ea71Smrg *) 11883f6d0e1dSmrg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 1189c3c9db83Smrg ;; 1190c3c9db83Smrg esac 119185ee4c00Smrg 11923f6d0e1dSmrg $opt_help || { 11933f6d0e1dSmrg # Sanity checks first: 11943f6d0e1dSmrg func_check_version_match 1195c3c9db83Smrg 11963f6d0e1dSmrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 11973f6d0e1dSmrg func_fatal_configuration "not configured to build any kind of library" 1198c3c9db83Smrg fi 1199c3c9db83Smrg 12003f6d0e1dSmrg # Darwin sucks 12013f6d0e1dSmrg eval std_shrext=\"$shrext_cmds\" 1202c3c9db83Smrg 12033f6d0e1dSmrg # Only execute mode is allowed to have -dlopen flags. 12043f6d0e1dSmrg if test -n "$opt_dlopen" && test "$opt_mode" != execute; then 12053f6d0e1dSmrg func_error "unrecognized option \`-dlopen'" 12063f6d0e1dSmrg $ECHO "$help" 1>&2 12073f6d0e1dSmrg exit $EXIT_FAILURE 12083f6d0e1dSmrg fi 1209692f60a7Smrg 12103f6d0e1dSmrg # Change the help message to a mode-specific one. 12113f6d0e1dSmrg generic_help="$help" 12123f6d0e1dSmrg help="Try \`$progname --help --mode=$opt_mode' for more information." 12133f6d0e1dSmrg } 1214c3c9db83Smrg 1215c3c9db83Smrg 12163f6d0e1dSmrg # Bail if the options were screwed 12173f6d0e1dSmrg $exit_cmd $EXIT_FAILURE 12183f6d0e1dSmrg} 1219c3c9db83Smrg 1220c3c9db83Smrg 1221692f60a7Smrg 1222692f60a7Smrg 12233f6d0e1dSmrg## ----------- ## 12243f6d0e1dSmrg## Main. ## 12253f6d0e1dSmrg## ----------- ## 1226692f60a7Smrg 1227c3c9db83Smrg# func_lalib_p file 1228c3c9db83Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1229c3c9db83Smrg# This function is only a basic sanity check; it will hardly flush out 1230c3c9db83Smrg# determined imposters. 1231c3c9db83Smrgfunc_lalib_p () 1232c3c9db83Smrg{ 1233c3c9db83Smrg test -f "$1" && 1234c3c9db83Smrg $SED -e 4q "$1" 2>/dev/null \ 1235c3c9db83Smrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 1236c3c9db83Smrg} 1237692f60a7Smrg 1238c3c9db83Smrg# func_lalib_unsafe_p file 1239c3c9db83Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1240c3c9db83Smrg# This function implements the same check as func_lalib_p without 1241c3c9db83Smrg# resorting to external programs. To this end, it redirects stdin and 1242c3c9db83Smrg# closes it afterwards, without saving the original file descriptor. 1243c3c9db83Smrg# As a safety measure, use it only where a negative result would be 1244c3c9db83Smrg# fatal anyway. Works if `file' does not exist. 1245c3c9db83Smrgfunc_lalib_unsafe_p () 1246c3c9db83Smrg{ 1247c3c9db83Smrg lalib_p=no 1248c3c9db83Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 1249c3c9db83Smrg for lalib_p_l in 1 2 3 4 1250c3c9db83Smrg do 1251c3c9db83Smrg read lalib_p_line 1252c3c9db83Smrg case "$lalib_p_line" in 1253c3c9db83Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 1254c3c9db83Smrg esac 1255c3c9db83Smrg done 1256c3c9db83Smrg exec 0<&5 5<&- 1257c3c9db83Smrg fi 1258c3c9db83Smrg test "$lalib_p" = yes 1259c3c9db83Smrg} 1260692f60a7Smrg 1261c3c9db83Smrg# func_ltwrapper_script_p file 1262c3c9db83Smrg# True iff FILE is a libtool wrapper script 1263c3c9db83Smrg# This function is only a basic sanity check; it will hardly flush out 1264c3c9db83Smrg# determined imposters. 1265c3c9db83Smrgfunc_ltwrapper_script_p () 1266c3c9db83Smrg{ 1267c3c9db83Smrg func_lalib_p "$1" 1268c3c9db83Smrg} 1269692f60a7Smrg 1270c3c9db83Smrg# func_ltwrapper_executable_p file 1271c3c9db83Smrg# True iff FILE is a libtool wrapper executable 1272c3c9db83Smrg# This function is only a basic sanity check; it will hardly flush out 1273c3c9db83Smrg# determined imposters. 1274c3c9db83Smrgfunc_ltwrapper_executable_p () 1275c3c9db83Smrg{ 1276c3c9db83Smrg func_ltwrapper_exec_suffix= 1277c3c9db83Smrg case $1 in 1278c3c9db83Smrg *.exe) ;; 1279c3c9db83Smrg *) func_ltwrapper_exec_suffix=.exe ;; 1280c3c9db83Smrg esac 1281c3c9db83Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 1282c3c9db83Smrg} 128385ee4c00Smrg 1284c3c9db83Smrg# func_ltwrapper_scriptname file 1285c3c9db83Smrg# Assumes file is an ltwrapper_executable 1286c3c9db83Smrg# uses $file to determine the appropriate filename for a 1287c3c9db83Smrg# temporary ltwrapper_script. 1288c3c9db83Smrgfunc_ltwrapper_scriptname () 1289c3c9db83Smrg{ 12903f6d0e1dSmrg func_dirname_and_basename "$1" "" "." 12913f6d0e1dSmrg func_stripname '' '.exe' "$func_basename_result" 12923f6d0e1dSmrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 1293c3c9db83Smrg} 1294c3c9db83Smrg 1295c3c9db83Smrg# func_ltwrapper_p file 1296c3c9db83Smrg# True iff FILE is a libtool wrapper script or wrapper executable 1297c3c9db83Smrg# This function is only a basic sanity check; it will hardly flush out 1298c3c9db83Smrg# determined imposters. 1299c3c9db83Smrgfunc_ltwrapper_p () 1300c3c9db83Smrg{ 1301c3c9db83Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 1302c3c9db83Smrg} 1303c3c9db83Smrg 1304c3c9db83Smrg 1305c3c9db83Smrg# func_execute_cmds commands fail_cmd 1306c3c9db83Smrg# Execute tilde-delimited COMMANDS. 1307c3c9db83Smrg# If FAIL_CMD is given, eval that upon failure. 1308c3c9db83Smrg# FAIL_CMD may read-access the current command in variable CMD! 1309c3c9db83Smrgfunc_execute_cmds () 1310c3c9db83Smrg{ 1311c3c9db83Smrg $opt_debug 1312c3c9db83Smrg save_ifs=$IFS; IFS='~' 1313c3c9db83Smrg for cmd in $1; do 1314c3c9db83Smrg IFS=$save_ifs 1315c3c9db83Smrg eval cmd=\"$cmd\" 1316c3c9db83Smrg func_show_eval "$cmd" "${2-:}" 1317c3c9db83Smrg done 1318c3c9db83Smrg IFS=$save_ifs 1319c3c9db83Smrg} 1320c3c9db83Smrg 1321c3c9db83Smrg 1322c3c9db83Smrg# func_source file 1323c3c9db83Smrg# Source FILE, adding directory component if necessary. 1324c3c9db83Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 1325c3c9db83Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 1326c3c9db83Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 1327c3c9db83Smrg# `FILE.' does not work on cygwin managed mounts. 1328c3c9db83Smrgfunc_source () 1329c3c9db83Smrg{ 1330c3c9db83Smrg $opt_debug 1331c3c9db83Smrg case $1 in 1332c3c9db83Smrg */* | *\\*) . "$1" ;; 1333c3c9db83Smrg *) . "./$1" ;; 1334c3c9db83Smrg esac 1335c3c9db83Smrg} 1336c3c9db83Smrg 1337c3c9db83Smrg 13383f6d0e1dSmrg# func_resolve_sysroot PATH 13393f6d0e1dSmrg# Replace a leading = in PATH with a sysroot. Store the result into 13403f6d0e1dSmrg# func_resolve_sysroot_result 13413f6d0e1dSmrgfunc_resolve_sysroot () 13423f6d0e1dSmrg{ 13433f6d0e1dSmrg func_resolve_sysroot_result=$1 13443f6d0e1dSmrg case $func_resolve_sysroot_result in 13453f6d0e1dSmrg =*) 13463f6d0e1dSmrg func_stripname '=' '' "$func_resolve_sysroot_result" 13473f6d0e1dSmrg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 13483f6d0e1dSmrg ;; 13493f6d0e1dSmrg esac 13503f6d0e1dSmrg} 13513f6d0e1dSmrg 13523f6d0e1dSmrg# func_replace_sysroot PATH 13533f6d0e1dSmrg# If PATH begins with the sysroot, replace it with = and 13543f6d0e1dSmrg# store the result into func_replace_sysroot_result. 13553f6d0e1dSmrgfunc_replace_sysroot () 13563f6d0e1dSmrg{ 13573f6d0e1dSmrg case "$lt_sysroot:$1" in 13583f6d0e1dSmrg ?*:"$lt_sysroot"*) 13593f6d0e1dSmrg func_stripname "$lt_sysroot" '' "$1" 13603f6d0e1dSmrg func_replace_sysroot_result="=$func_stripname_result" 13613f6d0e1dSmrg ;; 13623f6d0e1dSmrg *) 13633f6d0e1dSmrg # Including no sysroot. 13643f6d0e1dSmrg func_replace_sysroot_result=$1 13653f6d0e1dSmrg ;; 13663f6d0e1dSmrg esac 13673f6d0e1dSmrg} 13683f6d0e1dSmrg 1369c3c9db83Smrg# func_infer_tag arg 1370c3c9db83Smrg# Infer tagged configuration to use if any are available and 1371c3c9db83Smrg# if one wasn't chosen via the "--tag" command line option. 1372c3c9db83Smrg# Only attempt this if the compiler in the base compile 1373c3c9db83Smrg# command doesn't match the default compiler. 1374c3c9db83Smrg# arg is usually of the form 'gcc ...' 1375c3c9db83Smrgfunc_infer_tag () 1376c3c9db83Smrg{ 1377c3c9db83Smrg $opt_debug 1378c3c9db83Smrg if test -n "$available_tags" && test -z "$tagname"; then 1379c3c9db83Smrg CC_quoted= 1380c3c9db83Smrg for arg in $CC; do 13813f6d0e1dSmrg func_append_quoted CC_quoted "$arg" 1382c3c9db83Smrg done 13833f6d0e1dSmrg CC_expanded=`func_echo_all $CC` 13843f6d0e1dSmrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1385c3c9db83Smrg case $@ in 1386c3c9db83Smrg # Blanks in the command may have been stripped by the calling shell, 1387c3c9db83Smrg # but not from the CC environment variable when configure was run. 13883f6d0e1dSmrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 13893f6d0e1dSmrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 1390c3c9db83Smrg # Blanks at the start of $base_compile will cause this to fail 1391c3c9db83Smrg # if we don't check for them as well. 1392c3c9db83Smrg *) 1393c3c9db83Smrg for z in $available_tags; do 1394c3c9db83Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 1395c3c9db83Smrg # Evaluate the configuration. 1396c3c9db83Smrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 1397c3c9db83Smrg CC_quoted= 1398c3c9db83Smrg for arg in $CC; do 1399c3c9db83Smrg # Double-quote args containing other shell metacharacters. 14003f6d0e1dSmrg func_append_quoted CC_quoted "$arg" 1401c3c9db83Smrg done 14023f6d0e1dSmrg CC_expanded=`func_echo_all $CC` 14033f6d0e1dSmrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1404c3c9db83Smrg case "$@ " in 14053f6d0e1dSmrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 14063f6d0e1dSmrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 1407c3c9db83Smrg # The compiler in the base compile command matches 1408c3c9db83Smrg # the one in the tagged configuration. 1409c3c9db83Smrg # Assume this is the tagged configuration we want. 1410c3c9db83Smrg tagname=$z 1411c3c9db83Smrg break 1412c3c9db83Smrg ;; 1413c3c9db83Smrg esac 1414c3c9db83Smrg fi 1415c3c9db83Smrg done 1416c3c9db83Smrg # If $tagname still isn't set, then no tagged configuration 1417c3c9db83Smrg # was found and let the user know that the "--tag" command 1418c3c9db83Smrg # line option must be used. 1419c3c9db83Smrg if test -z "$tagname"; then 1420c3c9db83Smrg func_echo "unable to infer tagged configuration" 1421c3c9db83Smrg func_fatal_error "specify a tag with \`--tag'" 1422c3c9db83Smrg# else 1423c3c9db83Smrg# func_verbose "using $tagname tagged configuration" 1424c3c9db83Smrg fi 1425c3c9db83Smrg ;; 1426c3c9db83Smrg esac 1427c3c9db83Smrg fi 1428c3c9db83Smrg} 1429c3c9db83Smrg 1430c3c9db83Smrg 1431c3c9db83Smrg 1432c3c9db83Smrg# func_write_libtool_object output_name pic_name nonpic_name 1433c3c9db83Smrg# Create a libtool object file (analogous to a ".la" file), 1434c3c9db83Smrg# but don't create it if we're doing a dry run. 1435c3c9db83Smrgfunc_write_libtool_object () 1436c3c9db83Smrg{ 1437c3c9db83Smrg write_libobj=${1} 1438c3c9db83Smrg if test "$build_libtool_libs" = yes; then 1439c3c9db83Smrg write_lobj=\'${2}\' 1440c3c9db83Smrg else 1441c3c9db83Smrg write_lobj=none 1442c3c9db83Smrg fi 1443c3c9db83Smrg 1444c3c9db83Smrg if test "$build_old_libs" = yes; then 1445c3c9db83Smrg write_oldobj=\'${3}\' 1446c3c9db83Smrg else 1447c3c9db83Smrg write_oldobj=none 1448c3c9db83Smrg fi 1449c3c9db83Smrg 1450c3c9db83Smrg $opt_dry_run || { 1451c3c9db83Smrg cat >${write_libobj}T <<EOF 1452c3c9db83Smrg# $write_libobj - a libtool object file 1453c3c9db83Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 1454c3c9db83Smrg# 1455c3c9db83Smrg# Please DO NOT delete this file! 1456c3c9db83Smrg# It is necessary for linking the library. 1457c3c9db83Smrg 1458c3c9db83Smrg# Name of the PIC object. 1459c3c9db83Smrgpic_object=$write_lobj 1460c3c9db83Smrg 1461c3c9db83Smrg# Name of the non-PIC object 1462c3c9db83Smrgnon_pic_object=$write_oldobj 1463c3c9db83Smrg 1464c3c9db83SmrgEOF 1465c3c9db83Smrg $MV "${write_libobj}T" "${write_libobj}" 1466c3c9db83Smrg } 1467c3c9db83Smrg} 1468c3c9db83Smrg 14693f6d0e1dSmrg 14703f6d0e1dSmrg################################################## 14713f6d0e1dSmrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 14723f6d0e1dSmrg################################################## 14733f6d0e1dSmrg 14743f6d0e1dSmrg# func_convert_core_file_wine_to_w32 ARG 14753f6d0e1dSmrg# Helper function used by file name conversion functions when $build is *nix, 14763f6d0e1dSmrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a 14773f6d0e1dSmrg# correctly configured wine environment available, with the winepath program 14783f6d0e1dSmrg# in $build's $PATH. 14793f6d0e1dSmrg# 14803f6d0e1dSmrg# ARG is the $build file name to be converted to w32 format. 14813f6d0e1dSmrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will 14823f6d0e1dSmrg# be empty on error (or when ARG is empty) 14833f6d0e1dSmrgfunc_convert_core_file_wine_to_w32 () 14843f6d0e1dSmrg{ 14853f6d0e1dSmrg $opt_debug 14863f6d0e1dSmrg func_convert_core_file_wine_to_w32_result="$1" 14873f6d0e1dSmrg if test -n "$1"; then 14883f6d0e1dSmrg # Unfortunately, winepath does not exit with a non-zero error code, so we 14893f6d0e1dSmrg # are forced to check the contents of stdout. On the other hand, if the 14903f6d0e1dSmrg # command is not found, the shell will set an exit code of 127 and print 14913f6d0e1dSmrg # *an error message* to stdout. So we must check for both error code of 14923f6d0e1dSmrg # zero AND non-empty stdout, which explains the odd construction: 14933f6d0e1dSmrg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 14943f6d0e1dSmrg if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then 14953f6d0e1dSmrg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 14963f6d0e1dSmrg $SED -e "$lt_sed_naive_backslashify"` 14973f6d0e1dSmrg else 14983f6d0e1dSmrg func_convert_core_file_wine_to_w32_result= 14993f6d0e1dSmrg fi 15003f6d0e1dSmrg fi 15013f6d0e1dSmrg} 15023f6d0e1dSmrg# end: func_convert_core_file_wine_to_w32 15033f6d0e1dSmrg 15043f6d0e1dSmrg 15053f6d0e1dSmrg# func_convert_core_path_wine_to_w32 ARG 15063f6d0e1dSmrg# Helper function used by path conversion functions when $build is *nix, and 15073f6d0e1dSmrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 15083f6d0e1dSmrg# configured wine environment available, with the winepath program in $build's 15093f6d0e1dSmrg# $PATH. Assumes ARG has no leading or trailing path separator characters. 15103f6d0e1dSmrg# 15113f6d0e1dSmrg# ARG is path to be converted from $build format to win32. 15123f6d0e1dSmrg# Result is available in $func_convert_core_path_wine_to_w32_result. 15133f6d0e1dSmrg# Unconvertible file (directory) names in ARG are skipped; if no directory names 15143f6d0e1dSmrg# are convertible, then the result may be empty. 15153f6d0e1dSmrgfunc_convert_core_path_wine_to_w32 () 15163f6d0e1dSmrg{ 15173f6d0e1dSmrg $opt_debug 15183f6d0e1dSmrg # unfortunately, winepath doesn't convert paths, only file names 15193f6d0e1dSmrg func_convert_core_path_wine_to_w32_result="" 15203f6d0e1dSmrg if test -n "$1"; then 15213f6d0e1dSmrg oldIFS=$IFS 15223f6d0e1dSmrg IFS=: 15233f6d0e1dSmrg for func_convert_core_path_wine_to_w32_f in $1; do 15243f6d0e1dSmrg IFS=$oldIFS 15253f6d0e1dSmrg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 15263f6d0e1dSmrg if test -n "$func_convert_core_file_wine_to_w32_result" ; then 15273f6d0e1dSmrg if test -z "$func_convert_core_path_wine_to_w32_result"; then 15283f6d0e1dSmrg func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" 15293f6d0e1dSmrg else 15303f6d0e1dSmrg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 15313f6d0e1dSmrg fi 15323f6d0e1dSmrg fi 15333f6d0e1dSmrg done 15343f6d0e1dSmrg IFS=$oldIFS 15353f6d0e1dSmrg fi 15363f6d0e1dSmrg} 15373f6d0e1dSmrg# end: func_convert_core_path_wine_to_w32 15383f6d0e1dSmrg 15393f6d0e1dSmrg 15403f6d0e1dSmrg# func_cygpath ARGS... 15413f6d0e1dSmrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 15423f6d0e1dSmrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 15433f6d0e1dSmrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 15443f6d0e1dSmrg# (2), returns the Cygwin file name or path in func_cygpath_result (input 15453f6d0e1dSmrg# file name or path is assumed to be in w32 format, as previously converted 15463f6d0e1dSmrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name 15473f6d0e1dSmrg# or path in func_cygpath_result (input file name or path is assumed to be in 15483f6d0e1dSmrg# Cygwin format). Returns an empty string on error. 15493f6d0e1dSmrg# 15503f6d0e1dSmrg# ARGS are passed to cygpath, with the last one being the file name or path to 15513f6d0e1dSmrg# be converted. 15523f6d0e1dSmrg# 15533f6d0e1dSmrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 15543f6d0e1dSmrg# environment variable; do not put it in $PATH. 15553f6d0e1dSmrgfunc_cygpath () 15563f6d0e1dSmrg{ 15573f6d0e1dSmrg $opt_debug 15583f6d0e1dSmrg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 15593f6d0e1dSmrg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 15603f6d0e1dSmrg if test "$?" -ne 0; then 15613f6d0e1dSmrg # on failure, ensure result is empty 15623f6d0e1dSmrg func_cygpath_result= 15633f6d0e1dSmrg fi 15643f6d0e1dSmrg else 15653f6d0e1dSmrg func_cygpath_result= 15663f6d0e1dSmrg func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" 15673f6d0e1dSmrg fi 15683f6d0e1dSmrg} 15693f6d0e1dSmrg#end: func_cygpath 15703f6d0e1dSmrg 15713f6d0e1dSmrg 15723f6d0e1dSmrg# func_convert_core_msys_to_w32 ARG 15733f6d0e1dSmrg# Convert file name or path ARG from MSYS format to w32 format. Return 15743f6d0e1dSmrg# result in func_convert_core_msys_to_w32_result. 15753f6d0e1dSmrgfunc_convert_core_msys_to_w32 () 15763f6d0e1dSmrg{ 15773f6d0e1dSmrg $opt_debug 15783f6d0e1dSmrg # awkward: cmd appends spaces to result 15793f6d0e1dSmrg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 15803f6d0e1dSmrg $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 15813f6d0e1dSmrg} 15823f6d0e1dSmrg#end: func_convert_core_msys_to_w32 15833f6d0e1dSmrg 15843f6d0e1dSmrg 15853f6d0e1dSmrg# func_convert_file_check ARG1 ARG2 15863f6d0e1dSmrg# Verify that ARG1 (a file name in $build format) was converted to $host 15873f6d0e1dSmrg# format in ARG2. Otherwise, emit an error message, but continue (resetting 15883f6d0e1dSmrg# func_to_host_file_result to ARG1). 15893f6d0e1dSmrgfunc_convert_file_check () 15903f6d0e1dSmrg{ 15913f6d0e1dSmrg $opt_debug 15923f6d0e1dSmrg if test -z "$2" && test -n "$1" ; then 15933f6d0e1dSmrg func_error "Could not determine host file name corresponding to" 15943f6d0e1dSmrg func_error " \`$1'" 15953f6d0e1dSmrg func_error "Continuing, but uninstalled executables may not work." 15963f6d0e1dSmrg # Fallback: 15973f6d0e1dSmrg func_to_host_file_result="$1" 15983f6d0e1dSmrg fi 15993f6d0e1dSmrg} 16003f6d0e1dSmrg# end func_convert_file_check 16013f6d0e1dSmrg 16023f6d0e1dSmrg 16033f6d0e1dSmrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 16043f6d0e1dSmrg# Verify that FROM_PATH (a path in $build format) was converted to $host 16053f6d0e1dSmrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 16063f6d0e1dSmrg# func_to_host_file_result to a simplistic fallback value (see below). 16073f6d0e1dSmrgfunc_convert_path_check () 16083f6d0e1dSmrg{ 16093f6d0e1dSmrg $opt_debug 16103f6d0e1dSmrg if test -z "$4" && test -n "$3"; then 16113f6d0e1dSmrg func_error "Could not determine the host path corresponding to" 16123f6d0e1dSmrg func_error " \`$3'" 16133f6d0e1dSmrg func_error "Continuing, but uninstalled executables may not work." 16143f6d0e1dSmrg # Fallback. This is a deliberately simplistic "conversion" and 16153f6d0e1dSmrg # should not be "improved". See libtool.info. 16163f6d0e1dSmrg if test "x$1" != "x$2"; then 16173f6d0e1dSmrg lt_replace_pathsep_chars="s|$1|$2|g" 16183f6d0e1dSmrg func_to_host_path_result=`echo "$3" | 16193f6d0e1dSmrg $SED -e "$lt_replace_pathsep_chars"` 16203f6d0e1dSmrg else 16213f6d0e1dSmrg func_to_host_path_result="$3" 16223f6d0e1dSmrg fi 16233f6d0e1dSmrg fi 16243f6d0e1dSmrg} 16253f6d0e1dSmrg# end func_convert_path_check 16263f6d0e1dSmrg 16273f6d0e1dSmrg 16283f6d0e1dSmrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 16293f6d0e1dSmrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 16303f6d0e1dSmrg# and appending REPL if ORIG matches BACKPAT. 16313f6d0e1dSmrgfunc_convert_path_front_back_pathsep () 16323f6d0e1dSmrg{ 16333f6d0e1dSmrg $opt_debug 16343f6d0e1dSmrg case $4 in 16353f6d0e1dSmrg $1 ) func_to_host_path_result="$3$func_to_host_path_result" 16363f6d0e1dSmrg ;; 16373f6d0e1dSmrg esac 16383f6d0e1dSmrg case $4 in 16393f6d0e1dSmrg $2 ) func_append func_to_host_path_result "$3" 16403f6d0e1dSmrg ;; 16413f6d0e1dSmrg esac 16423f6d0e1dSmrg} 16433f6d0e1dSmrg# end func_convert_path_front_back_pathsep 16443f6d0e1dSmrg 16453f6d0e1dSmrg 16463f6d0e1dSmrg################################################## 16473f6d0e1dSmrg# $build to $host FILE NAME CONVERSION FUNCTIONS # 16483f6d0e1dSmrg################################################## 16493f6d0e1dSmrg# invoked via `$to_host_file_cmd ARG' 16503f6d0e1dSmrg# 16513f6d0e1dSmrg# In each case, ARG is the path to be converted from $build to $host format. 16523f6d0e1dSmrg# Result will be available in $func_to_host_file_result. 16533f6d0e1dSmrg 16543f6d0e1dSmrg 16553f6d0e1dSmrg# func_to_host_file ARG 16563f6d0e1dSmrg# Converts the file name ARG from $build format to $host format. Return result 16573f6d0e1dSmrg# in func_to_host_file_result. 16583f6d0e1dSmrgfunc_to_host_file () 16593f6d0e1dSmrg{ 16603f6d0e1dSmrg $opt_debug 16613f6d0e1dSmrg $to_host_file_cmd "$1" 16623f6d0e1dSmrg} 16633f6d0e1dSmrg# end func_to_host_file 16643f6d0e1dSmrg 16653f6d0e1dSmrg 16663f6d0e1dSmrg# func_to_tool_file ARG LAZY 16673f6d0e1dSmrg# converts the file name ARG from $build format to toolchain format. Return 16683f6d0e1dSmrg# result in func_to_tool_file_result. If the conversion in use is listed 16693f6d0e1dSmrg# in (the comma separated) LAZY, no conversion takes place. 16703f6d0e1dSmrgfunc_to_tool_file () 16713f6d0e1dSmrg{ 16723f6d0e1dSmrg $opt_debug 16733f6d0e1dSmrg case ,$2, in 16743f6d0e1dSmrg *,"$to_tool_file_cmd",*) 16753f6d0e1dSmrg func_to_tool_file_result=$1 16763f6d0e1dSmrg ;; 16773f6d0e1dSmrg *) 16783f6d0e1dSmrg $to_tool_file_cmd "$1" 16793f6d0e1dSmrg func_to_tool_file_result=$func_to_host_file_result 16803f6d0e1dSmrg ;; 16813f6d0e1dSmrg esac 16823f6d0e1dSmrg} 16833f6d0e1dSmrg# end func_to_tool_file 16843f6d0e1dSmrg 16853f6d0e1dSmrg 16863f6d0e1dSmrg# func_convert_file_noop ARG 16873f6d0e1dSmrg# Copy ARG to func_to_host_file_result. 16883f6d0e1dSmrgfunc_convert_file_noop () 16893f6d0e1dSmrg{ 16903f6d0e1dSmrg func_to_host_file_result="$1" 16913f6d0e1dSmrg} 16923f6d0e1dSmrg# end func_convert_file_noop 16933f6d0e1dSmrg 16943f6d0e1dSmrg 16953f6d0e1dSmrg# func_convert_file_msys_to_w32 ARG 16963f6d0e1dSmrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 16973f6d0e1dSmrg# conversion to w32 is not available inside the cwrapper. Returns result in 16983f6d0e1dSmrg# func_to_host_file_result. 16993f6d0e1dSmrgfunc_convert_file_msys_to_w32 () 17003f6d0e1dSmrg{ 17013f6d0e1dSmrg $opt_debug 17023f6d0e1dSmrg func_to_host_file_result="$1" 17033f6d0e1dSmrg if test -n "$1"; then 17043f6d0e1dSmrg func_convert_core_msys_to_w32 "$1" 17053f6d0e1dSmrg func_to_host_file_result="$func_convert_core_msys_to_w32_result" 17063f6d0e1dSmrg fi 17073f6d0e1dSmrg func_convert_file_check "$1" "$func_to_host_file_result" 17083f6d0e1dSmrg} 17093f6d0e1dSmrg# end func_convert_file_msys_to_w32 17103f6d0e1dSmrg 17113f6d0e1dSmrg 17123f6d0e1dSmrg# func_convert_file_cygwin_to_w32 ARG 17133f6d0e1dSmrg# Convert file name ARG from Cygwin to w32 format. Returns result in 17143f6d0e1dSmrg# func_to_host_file_result. 17153f6d0e1dSmrgfunc_convert_file_cygwin_to_w32 () 17163f6d0e1dSmrg{ 17173f6d0e1dSmrg $opt_debug 17183f6d0e1dSmrg func_to_host_file_result="$1" 17193f6d0e1dSmrg if test -n "$1"; then 17203f6d0e1dSmrg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 17213f6d0e1dSmrg # LT_CYGPATH in this case. 17223f6d0e1dSmrg func_to_host_file_result=`cygpath -m "$1"` 17233f6d0e1dSmrg fi 17243f6d0e1dSmrg func_convert_file_check "$1" "$func_to_host_file_result" 17253f6d0e1dSmrg} 17263f6d0e1dSmrg# end func_convert_file_cygwin_to_w32 17273f6d0e1dSmrg 17283f6d0e1dSmrg 17293f6d0e1dSmrg# func_convert_file_nix_to_w32 ARG 17303f6d0e1dSmrg# Convert file name ARG from *nix to w32 format. Requires a wine environment 17313f6d0e1dSmrg# and a working winepath. Returns result in func_to_host_file_result. 17323f6d0e1dSmrgfunc_convert_file_nix_to_w32 () 17333f6d0e1dSmrg{ 17343f6d0e1dSmrg $opt_debug 17353f6d0e1dSmrg func_to_host_file_result="$1" 17363f6d0e1dSmrg if test -n "$1"; then 17373f6d0e1dSmrg func_convert_core_file_wine_to_w32 "$1" 17383f6d0e1dSmrg func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" 17393f6d0e1dSmrg fi 17403f6d0e1dSmrg func_convert_file_check "$1" "$func_to_host_file_result" 17413f6d0e1dSmrg} 17423f6d0e1dSmrg# end func_convert_file_nix_to_w32 17433f6d0e1dSmrg 17443f6d0e1dSmrg 17453f6d0e1dSmrg# func_convert_file_msys_to_cygwin ARG 17463f6d0e1dSmrg# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 17473f6d0e1dSmrg# Returns result in func_to_host_file_result. 17483f6d0e1dSmrgfunc_convert_file_msys_to_cygwin () 17493f6d0e1dSmrg{ 17503f6d0e1dSmrg $opt_debug 17513f6d0e1dSmrg func_to_host_file_result="$1" 17523f6d0e1dSmrg if test -n "$1"; then 17533f6d0e1dSmrg func_convert_core_msys_to_w32 "$1" 17543f6d0e1dSmrg func_cygpath -u "$func_convert_core_msys_to_w32_result" 17553f6d0e1dSmrg func_to_host_file_result="$func_cygpath_result" 17563f6d0e1dSmrg fi 17573f6d0e1dSmrg func_convert_file_check "$1" "$func_to_host_file_result" 17583f6d0e1dSmrg} 17593f6d0e1dSmrg# end func_convert_file_msys_to_cygwin 17603f6d0e1dSmrg 17613f6d0e1dSmrg 17623f6d0e1dSmrg# func_convert_file_nix_to_cygwin ARG 17633f6d0e1dSmrg# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 17643f6d0e1dSmrg# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 17653f6d0e1dSmrg# in func_to_host_file_result. 17663f6d0e1dSmrgfunc_convert_file_nix_to_cygwin () 17673f6d0e1dSmrg{ 17683f6d0e1dSmrg $opt_debug 17693f6d0e1dSmrg func_to_host_file_result="$1" 17703f6d0e1dSmrg if test -n "$1"; then 17713f6d0e1dSmrg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 17723f6d0e1dSmrg func_convert_core_file_wine_to_w32 "$1" 17733f6d0e1dSmrg func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 17743f6d0e1dSmrg func_to_host_file_result="$func_cygpath_result" 17753f6d0e1dSmrg fi 17763f6d0e1dSmrg func_convert_file_check "$1" "$func_to_host_file_result" 17773f6d0e1dSmrg} 17783f6d0e1dSmrg# end func_convert_file_nix_to_cygwin 17793f6d0e1dSmrg 17803f6d0e1dSmrg 17813f6d0e1dSmrg############################################# 17823f6d0e1dSmrg# $build to $host PATH CONVERSION FUNCTIONS # 17833f6d0e1dSmrg############################################# 17843f6d0e1dSmrg# invoked via `$to_host_path_cmd ARG' 17853f6d0e1dSmrg# 17863f6d0e1dSmrg# In each case, ARG is the path to be converted from $build to $host format. 17873f6d0e1dSmrg# The result will be available in $func_to_host_path_result. 17883f6d0e1dSmrg# 17893f6d0e1dSmrg# Path separators are also converted from $build format to $host format. If 17903f6d0e1dSmrg# ARG begins or ends with a path separator character, it is preserved (but 17913f6d0e1dSmrg# converted to $host format) on output. 17923f6d0e1dSmrg# 17933f6d0e1dSmrg# All path conversion functions are named using the following convention: 17943f6d0e1dSmrg# file name conversion function : func_convert_file_X_to_Y () 17953f6d0e1dSmrg# path conversion function : func_convert_path_X_to_Y () 17963f6d0e1dSmrg# where, for any given $build/$host combination the 'X_to_Y' value is the 17973f6d0e1dSmrg# same. If conversion functions are added for new $build/$host combinations, 17983f6d0e1dSmrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd 17993f6d0e1dSmrg# will break. 18003f6d0e1dSmrg 18013f6d0e1dSmrg 18023f6d0e1dSmrg# func_init_to_host_path_cmd 18033f6d0e1dSmrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the 18043f6d0e1dSmrg# appropriate value, based on the value of $to_host_file_cmd. 18053f6d0e1dSmrgto_host_path_cmd= 18063f6d0e1dSmrgfunc_init_to_host_path_cmd () 18073f6d0e1dSmrg{ 18083f6d0e1dSmrg $opt_debug 18093f6d0e1dSmrg if test -z "$to_host_path_cmd"; then 18103f6d0e1dSmrg func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 18113f6d0e1dSmrg to_host_path_cmd="func_convert_path_${func_stripname_result}" 18123f6d0e1dSmrg fi 18133f6d0e1dSmrg} 18143f6d0e1dSmrg 18153f6d0e1dSmrg 18163f6d0e1dSmrg# func_to_host_path ARG 18173f6d0e1dSmrg# Converts the path ARG from $build format to $host format. Return result 18183f6d0e1dSmrg# in func_to_host_path_result. 18193f6d0e1dSmrgfunc_to_host_path () 18203f6d0e1dSmrg{ 18213f6d0e1dSmrg $opt_debug 18223f6d0e1dSmrg func_init_to_host_path_cmd 18233f6d0e1dSmrg $to_host_path_cmd "$1" 18243f6d0e1dSmrg} 18253f6d0e1dSmrg# end func_to_host_path 18263f6d0e1dSmrg 18273f6d0e1dSmrg 18283f6d0e1dSmrg# func_convert_path_noop ARG 18293f6d0e1dSmrg# Copy ARG to func_to_host_path_result. 18303f6d0e1dSmrgfunc_convert_path_noop () 18313f6d0e1dSmrg{ 18323f6d0e1dSmrg func_to_host_path_result="$1" 18333f6d0e1dSmrg} 18343f6d0e1dSmrg# end func_convert_path_noop 18353f6d0e1dSmrg 18363f6d0e1dSmrg 18373f6d0e1dSmrg# func_convert_path_msys_to_w32 ARG 18383f6d0e1dSmrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 18393f6d0e1dSmrg# conversion to w32 is not available inside the cwrapper. Returns result in 18403f6d0e1dSmrg# func_to_host_path_result. 18413f6d0e1dSmrgfunc_convert_path_msys_to_w32 () 18423f6d0e1dSmrg{ 18433f6d0e1dSmrg $opt_debug 18443f6d0e1dSmrg func_to_host_path_result="$1" 18453f6d0e1dSmrg if test -n "$1"; then 18463f6d0e1dSmrg # Remove leading and trailing path separator characters from ARG. MSYS 18473f6d0e1dSmrg # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 18483f6d0e1dSmrg # and winepath ignores them completely. 18493f6d0e1dSmrg func_stripname : : "$1" 18503f6d0e1dSmrg func_to_host_path_tmp1=$func_stripname_result 18513f6d0e1dSmrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 18523f6d0e1dSmrg func_to_host_path_result="$func_convert_core_msys_to_w32_result" 18533f6d0e1dSmrg func_convert_path_check : ";" \ 18543f6d0e1dSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 18553f6d0e1dSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 18563f6d0e1dSmrg fi 18573f6d0e1dSmrg} 18583f6d0e1dSmrg# end func_convert_path_msys_to_w32 18593f6d0e1dSmrg 18603f6d0e1dSmrg 18613f6d0e1dSmrg# func_convert_path_cygwin_to_w32 ARG 18623f6d0e1dSmrg# Convert path ARG from Cygwin to w32 format. Returns result in 18633f6d0e1dSmrg# func_to_host_file_result. 18643f6d0e1dSmrgfunc_convert_path_cygwin_to_w32 () 18653f6d0e1dSmrg{ 18663f6d0e1dSmrg $opt_debug 18673f6d0e1dSmrg func_to_host_path_result="$1" 18683f6d0e1dSmrg if test -n "$1"; then 18693f6d0e1dSmrg # See func_convert_path_msys_to_w32: 18703f6d0e1dSmrg func_stripname : : "$1" 18713f6d0e1dSmrg func_to_host_path_tmp1=$func_stripname_result 18723f6d0e1dSmrg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 18733f6d0e1dSmrg func_convert_path_check : ";" \ 18743f6d0e1dSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 18753f6d0e1dSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 18763f6d0e1dSmrg fi 18773f6d0e1dSmrg} 18783f6d0e1dSmrg# end func_convert_path_cygwin_to_w32 18793f6d0e1dSmrg 18803f6d0e1dSmrg 18813f6d0e1dSmrg# func_convert_path_nix_to_w32 ARG 18823f6d0e1dSmrg# Convert path ARG from *nix to w32 format. Requires a wine environment and 18833f6d0e1dSmrg# a working winepath. Returns result in func_to_host_file_result. 18843f6d0e1dSmrgfunc_convert_path_nix_to_w32 () 18853f6d0e1dSmrg{ 18863f6d0e1dSmrg $opt_debug 18873f6d0e1dSmrg func_to_host_path_result="$1" 18883f6d0e1dSmrg if test -n "$1"; then 18893f6d0e1dSmrg # See func_convert_path_msys_to_w32: 18903f6d0e1dSmrg func_stripname : : "$1" 18913f6d0e1dSmrg func_to_host_path_tmp1=$func_stripname_result 18923f6d0e1dSmrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 18933f6d0e1dSmrg func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" 18943f6d0e1dSmrg func_convert_path_check : ";" \ 18953f6d0e1dSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 18963f6d0e1dSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 18973f6d0e1dSmrg fi 18983f6d0e1dSmrg} 18993f6d0e1dSmrg# end func_convert_path_nix_to_w32 19003f6d0e1dSmrg 19013f6d0e1dSmrg 19023f6d0e1dSmrg# func_convert_path_msys_to_cygwin ARG 19033f6d0e1dSmrg# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 19043f6d0e1dSmrg# Returns result in func_to_host_file_result. 19053f6d0e1dSmrgfunc_convert_path_msys_to_cygwin () 19063f6d0e1dSmrg{ 19073f6d0e1dSmrg $opt_debug 19083f6d0e1dSmrg func_to_host_path_result="$1" 19093f6d0e1dSmrg if test -n "$1"; then 19103f6d0e1dSmrg # See func_convert_path_msys_to_w32: 19113f6d0e1dSmrg func_stripname : : "$1" 19123f6d0e1dSmrg func_to_host_path_tmp1=$func_stripname_result 19133f6d0e1dSmrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 19143f6d0e1dSmrg func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 19153f6d0e1dSmrg func_to_host_path_result="$func_cygpath_result" 19163f6d0e1dSmrg func_convert_path_check : : \ 19173f6d0e1dSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 19183f6d0e1dSmrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 19193f6d0e1dSmrg fi 19203f6d0e1dSmrg} 19213f6d0e1dSmrg# end func_convert_path_msys_to_cygwin 19223f6d0e1dSmrg 19233f6d0e1dSmrg 19243f6d0e1dSmrg# func_convert_path_nix_to_cygwin ARG 19253f6d0e1dSmrg# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 19263f6d0e1dSmrg# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 19273f6d0e1dSmrg# func_to_host_file_result. 19283f6d0e1dSmrgfunc_convert_path_nix_to_cygwin () 19293f6d0e1dSmrg{ 19303f6d0e1dSmrg $opt_debug 19313f6d0e1dSmrg func_to_host_path_result="$1" 19323f6d0e1dSmrg if test -n "$1"; then 19333f6d0e1dSmrg # Remove leading and trailing path separator characters from 19343f6d0e1dSmrg # ARG. msys behavior is inconsistent here, cygpath turns them 19353f6d0e1dSmrg # into '.;' and ';.', and winepath ignores them completely. 19363f6d0e1dSmrg func_stripname : : "$1" 19373f6d0e1dSmrg func_to_host_path_tmp1=$func_stripname_result 19383f6d0e1dSmrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 19393f6d0e1dSmrg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 19403f6d0e1dSmrg func_to_host_path_result="$func_cygpath_result" 19413f6d0e1dSmrg func_convert_path_check : : \ 19423f6d0e1dSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 19433f6d0e1dSmrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 19443f6d0e1dSmrg fi 19453f6d0e1dSmrg} 19463f6d0e1dSmrg# end func_convert_path_nix_to_cygwin 19473f6d0e1dSmrg 19483f6d0e1dSmrg 1949c3c9db83Smrg# func_mode_compile arg... 1950c3c9db83Smrgfunc_mode_compile () 1951c3c9db83Smrg{ 1952c3c9db83Smrg $opt_debug 1953c3c9db83Smrg # Get the compilation command and the source file. 1954c3c9db83Smrg base_compile= 1955c3c9db83Smrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 1956c3c9db83Smrg suppress_opt=yes 1957c3c9db83Smrg suppress_output= 1958c3c9db83Smrg arg_mode=normal 1959c3c9db83Smrg libobj= 1960c3c9db83Smrg later= 1961c3c9db83Smrg pie_flag= 1962c3c9db83Smrg 1963c3c9db83Smrg for arg 1964c3c9db83Smrg do 1965c3c9db83Smrg case $arg_mode in 1966c3c9db83Smrg arg ) 1967c3c9db83Smrg # do not "continue". Instead, add this to base_compile 1968c3c9db83Smrg lastarg="$arg" 1969c3c9db83Smrg arg_mode=normal 1970c3c9db83Smrg ;; 1971c3c9db83Smrg 1972c3c9db83Smrg target ) 1973c3c9db83Smrg libobj="$arg" 1974c3c9db83Smrg arg_mode=normal 1975c3c9db83Smrg continue 1976c3c9db83Smrg ;; 1977c3c9db83Smrg 1978c3c9db83Smrg normal ) 1979c3c9db83Smrg # Accept any command-line options. 1980c3c9db83Smrg case $arg in 1981c3c9db83Smrg -o) 1982c3c9db83Smrg test -n "$libobj" && \ 1983c3c9db83Smrg func_fatal_error "you cannot specify \`-o' more than once" 1984c3c9db83Smrg arg_mode=target 1985c3c9db83Smrg continue 1986c3c9db83Smrg ;; 1987c3c9db83Smrg 1988c3c9db83Smrg -pie | -fpie | -fPIE) 19893f6d0e1dSmrg func_append pie_flag " $arg" 1990c3c9db83Smrg continue 1991c3c9db83Smrg ;; 1992c3c9db83Smrg 1993c3c9db83Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 19943f6d0e1dSmrg func_append later " $arg" 1995c3c9db83Smrg continue 1996c3c9db83Smrg ;; 1997c3c9db83Smrg 1998c3c9db83Smrg -no-suppress) 1999692f60a7Smrg suppress_opt=no 2000692f60a7Smrg continue 2001692f60a7Smrg ;; 2002692f60a7Smrg 2003692f60a7Smrg -Xcompiler) 2004692f60a7Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 2005692f60a7Smrg continue # The current "srcfile" will either be retained or 2006692f60a7Smrg ;; # replaced later. I would guess that would be a bug. 2007692f60a7Smrg 2008692f60a7Smrg -Wc,*) 2009c3c9db83Smrg func_stripname '-Wc,' '' "$arg" 2010c3c9db83Smrg args=$func_stripname_result 2011692f60a7Smrg lastarg= 2012692f60a7Smrg save_ifs="$IFS"; IFS=',' 2013c3c9db83Smrg for arg in $args; do 2014692f60a7Smrg IFS="$save_ifs" 20153f6d0e1dSmrg func_append_quoted lastarg "$arg" 2016692f60a7Smrg done 2017692f60a7Smrg IFS="$save_ifs" 2018c3c9db83Smrg func_stripname ' ' '' "$lastarg" 2019c3c9db83Smrg lastarg=$func_stripname_result 2020692f60a7Smrg 2021692f60a7Smrg # Add the arguments to base_compile. 20223f6d0e1dSmrg func_append base_compile " $lastarg" 2023692f60a7Smrg continue 2024692f60a7Smrg ;; 2025692f60a7Smrg 2026c3c9db83Smrg *) 2027692f60a7Smrg # Accept the current argument as the source file. 2028692f60a7Smrg # The previous "srcfile" becomes the current argument. 2029692f60a7Smrg # 2030692f60a7Smrg lastarg="$srcfile" 2031692f60a7Smrg srcfile="$arg" 2032692f60a7Smrg ;; 2033692f60a7Smrg esac # case $arg 2034692f60a7Smrg ;; 2035692f60a7Smrg esac # case $arg_mode 2036692f60a7Smrg 2037692f60a7Smrg # Aesthetically quote the previous argument. 20383f6d0e1dSmrg func_append_quoted base_compile "$lastarg" 2039692f60a7Smrg done # for arg 2040692f60a7Smrg 2041692f60a7Smrg case $arg_mode in 2042692f60a7Smrg arg) 2043c3c9db83Smrg func_fatal_error "you must specify an argument for -Xcompile" 2044692f60a7Smrg ;; 2045692f60a7Smrg target) 2046c3c9db83Smrg func_fatal_error "you must specify a target with \`-o'" 2047692f60a7Smrg ;; 2048692f60a7Smrg *) 2049692f60a7Smrg # Get the name of the library object. 2050c3c9db83Smrg test -z "$libobj" && { 2051c3c9db83Smrg func_basename "$srcfile" 2052c3c9db83Smrg libobj="$func_basename_result" 2053c3c9db83Smrg } 2054692f60a7Smrg ;; 2055692f60a7Smrg esac 2056692f60a7Smrg 2057692f60a7Smrg # Recognize several different file suffixes. 2058692f60a7Smrg # If the user specifies -o file.o, it is replaced with file.lo 2059692f60a7Smrg case $libobj in 2060c3c9db83Smrg *.[cCFSifmso] | \ 2061c3c9db83Smrg *.ada | *.adb | *.ads | *.asm | \ 2062c3c9db83Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 20633f6d0e1dSmrg *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 2064c3c9db83Smrg func_xform "$libobj" 2065c3c9db83Smrg libobj=$func_xform_result 2066c3c9db83Smrg ;; 2067692f60a7Smrg esac 2068692f60a7Smrg 2069692f60a7Smrg case $libobj in 2070c3c9db83Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 2071692f60a7Smrg *) 2072c3c9db83Smrg func_fatal_error "cannot determine name of library object from \`$libobj'" 2073692f60a7Smrg ;; 2074692f60a7Smrg esac 2075692f60a7Smrg 2076692f60a7Smrg func_infer_tag $base_compile 2077692f60a7Smrg 2078692f60a7Smrg for arg in $later; do 2079692f60a7Smrg case $arg in 2080c3c9db83Smrg -shared) 2081c3c9db83Smrg test "$build_libtool_libs" != yes && \ 2082c3c9db83Smrg func_fatal_configuration "can not build a shared library" 2083c3c9db83Smrg build_old_libs=no 2084c3c9db83Smrg continue 2085c3c9db83Smrg ;; 2086c3c9db83Smrg 2087692f60a7Smrg -static) 2088c3c9db83Smrg build_libtool_libs=no 2089692f60a7Smrg build_old_libs=yes 2090692f60a7Smrg continue 2091692f60a7Smrg ;; 2092692f60a7Smrg 2093692f60a7Smrg -prefer-pic) 2094692f60a7Smrg pic_mode=yes 2095692f60a7Smrg continue 2096692f60a7Smrg ;; 2097692f60a7Smrg 2098692f60a7Smrg -prefer-non-pic) 2099692f60a7Smrg pic_mode=no 2100692f60a7Smrg continue 2101692f60a7Smrg ;; 2102692f60a7Smrg esac 2103692f60a7Smrg done 2104692f60a7Smrg 2105c3c9db83Smrg func_quote_for_eval "$libobj" 2106c3c9db83Smrg test "X$libobj" != "X$func_quote_for_eval_result" \ 2107c3c9db83Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 2108c3c9db83Smrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 2109c3c9db83Smrg func_dirname_and_basename "$obj" "/" "" 2110c3c9db83Smrg objname="$func_basename_result" 2111c3c9db83Smrg xdir="$func_dirname_result" 2112692f60a7Smrg lobj=${xdir}$objdir/$objname 2113692f60a7Smrg 2114c3c9db83Smrg test -z "$base_compile" && \ 2115c3c9db83Smrg func_fatal_help "you must specify a compilation command" 2116692f60a7Smrg 2117692f60a7Smrg # Delete any leftover library objects. 2118692f60a7Smrg if test "$build_old_libs" = yes; then 2119692f60a7Smrg removelist="$obj $lobj $libobj ${libobj}T" 2120692f60a7Smrg else 2121692f60a7Smrg removelist="$lobj $libobj ${libobj}T" 2122692f60a7Smrg fi 2123692f60a7Smrg 2124692f60a7Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 2125692f60a7Smrg case $host_os in 2126c3c9db83Smrg cygwin* | mingw* | pw32* | os2* | cegcc*) 2127692f60a7Smrg pic_mode=default 2128692f60a7Smrg ;; 2129692f60a7Smrg esac 2130692f60a7Smrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 2131692f60a7Smrg # non-PIC code in shared libraries is not supported 2132692f60a7Smrg pic_mode=default 2133692f60a7Smrg fi 2134692f60a7Smrg 2135692f60a7Smrg # Calculate the filename of the output object if compiler does 2136692f60a7Smrg # not support -o with -c 2137692f60a7Smrg if test "$compiler_c_o" = no; then 21383f6d0e1dSmrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} 2139692f60a7Smrg lockfile="$output_obj.lock" 2140692f60a7Smrg else 2141692f60a7Smrg output_obj= 2142692f60a7Smrg need_locks=no 2143692f60a7Smrg lockfile= 2144692f60a7Smrg fi 2145692f60a7Smrg 2146692f60a7Smrg # Lock this critical section if it is needed 2147692f60a7Smrg # We use this script file to make the link, it avoids creating a new file 2148692f60a7Smrg if test "$need_locks" = yes; then 2149c3c9db83Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 2150c3c9db83Smrg func_echo "Waiting for $lockfile to be removed" 2151692f60a7Smrg sleep 2 2152692f60a7Smrg done 2153692f60a7Smrg elif test "$need_locks" = warn; then 2154692f60a7Smrg if test -f "$lockfile"; then 2155c3c9db83Smrg $ECHO "\ 2156692f60a7Smrg*** ERROR, $lockfile exists and contains: 2157692f60a7Smrg`cat $lockfile 2>/dev/null` 2158692f60a7Smrg 2159692f60a7SmrgThis indicates that another process is trying to use the same 2160692f60a7Smrgtemporary object file, and libtool could not work around it because 2161692f60a7Smrgyour compiler does not support \`-c' and \`-o' together. If you 2162692f60a7Smrgrepeat this compilation, it may succeed, by chance, but you had better 2163692f60a7Smrgavoid parallel builds (make -j) in this platform, or get a better 2164692f60a7Smrgcompiler." 2165692f60a7Smrg 2166c3c9db83Smrg $opt_dry_run || $RM $removelist 2167692f60a7Smrg exit $EXIT_FAILURE 2168692f60a7Smrg fi 21693f6d0e1dSmrg func_append removelist " $output_obj" 2170c3c9db83Smrg $ECHO "$srcfile" > "$lockfile" 2171692f60a7Smrg fi 2172692f60a7Smrg 2173c3c9db83Smrg $opt_dry_run || $RM $removelist 21743f6d0e1dSmrg func_append removelist " $lockfile" 2175c3c9db83Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 2176c3c9db83Smrg 21773f6d0e1dSmrg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 21783f6d0e1dSmrg srcfile=$func_to_tool_file_result 2179c3c9db83Smrg func_quote_for_eval "$srcfile" 2180c3c9db83Smrg qsrcfile=$func_quote_for_eval_result 2181692f60a7Smrg 2182692f60a7Smrg # Only build a PIC object if we are building libtool libraries. 2183692f60a7Smrg if test "$build_libtool_libs" = yes; then 2184692f60a7Smrg # Without this assignment, base_compile gets emptied. 2185692f60a7Smrg fbsd_hideous_sh_bug=$base_compile 2186692f60a7Smrg 2187692f60a7Smrg if test "$pic_mode" != no; then 2188692f60a7Smrg command="$base_compile $qsrcfile $pic_flag" 2189692f60a7Smrg else 2190692f60a7Smrg # Don't build PIC code 2191692f60a7Smrg command="$base_compile $qsrcfile" 2192692f60a7Smrg fi 2193692f60a7Smrg 2194c3c9db83Smrg func_mkdir_p "$xdir$objdir" 2195692f60a7Smrg 2196692f60a7Smrg if test -z "$output_obj"; then 2197692f60a7Smrg # Place PIC objects in $objdir 21983f6d0e1dSmrg func_append command " -o $lobj" 2199692f60a7Smrg fi 2200692f60a7Smrg 2201c3c9db83Smrg func_show_eval_locale "$command" \ 2202c3c9db83Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 2203692f60a7Smrg 2204692f60a7Smrg if test "$need_locks" = warn && 2205692f60a7Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2206c3c9db83Smrg $ECHO "\ 2207692f60a7Smrg*** ERROR, $lockfile contains: 2208692f60a7Smrg`cat $lockfile 2>/dev/null` 2209692f60a7Smrg 2210692f60a7Smrgbut it should contain: 2211692f60a7Smrg$srcfile 2212692f60a7Smrg 2213692f60a7SmrgThis indicates that another process is trying to use the same 2214692f60a7Smrgtemporary object file, and libtool could not work around it because 2215692f60a7Smrgyour compiler does not support \`-c' and \`-o' together. If you 2216692f60a7Smrgrepeat this compilation, it may succeed, by chance, but you had better 2217692f60a7Smrgavoid parallel builds (make -j) in this platform, or get a better 2218692f60a7Smrgcompiler." 2219692f60a7Smrg 2220c3c9db83Smrg $opt_dry_run || $RM $removelist 2221692f60a7Smrg exit $EXIT_FAILURE 2222692f60a7Smrg fi 2223692f60a7Smrg 2224692f60a7Smrg # Just move the object if needed, then go on to compile the next one 2225692f60a7Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 2226c3c9db83Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 2227c3c9db83Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2228692f60a7Smrg fi 2229692f60a7Smrg 2230692f60a7Smrg # Allow error messages only from the first compilation. 2231692f60a7Smrg if test "$suppress_opt" = yes; then 2232c3c9db83Smrg suppress_output=' >/dev/null 2>&1' 2233692f60a7Smrg fi 2234692f60a7Smrg fi 2235692f60a7Smrg 2236692f60a7Smrg # Only build a position-dependent object if we build old libraries. 2237692f60a7Smrg if test "$build_old_libs" = yes; then 2238692f60a7Smrg if test "$pic_mode" != yes; then 2239692f60a7Smrg # Don't build PIC code 2240c3c9db83Smrg command="$base_compile $qsrcfile$pie_flag" 2241692f60a7Smrg else 2242692f60a7Smrg command="$base_compile $qsrcfile $pic_flag" 2243692f60a7Smrg fi 2244692f60a7Smrg if test "$compiler_c_o" = yes; then 22453f6d0e1dSmrg func_append command " -o $obj" 2246692f60a7Smrg fi 2247692f60a7Smrg 2248692f60a7Smrg # Suppress compiler output if we already did a PIC compilation. 22493f6d0e1dSmrg func_append command "$suppress_output" 2250c3c9db83Smrg func_show_eval_locale "$command" \ 2251c3c9db83Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 2252692f60a7Smrg 2253692f60a7Smrg if test "$need_locks" = warn && 2254692f60a7Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2255c3c9db83Smrg $ECHO "\ 2256692f60a7Smrg*** ERROR, $lockfile contains: 2257692f60a7Smrg`cat $lockfile 2>/dev/null` 2258692f60a7Smrg 2259692f60a7Smrgbut it should contain: 2260692f60a7Smrg$srcfile 2261692f60a7Smrg 2262692f60a7SmrgThis indicates that another process is trying to use the same 2263692f60a7Smrgtemporary object file, and libtool could not work around it because 2264692f60a7Smrgyour compiler does not support \`-c' and \`-o' together. If you 2265692f60a7Smrgrepeat this compilation, it may succeed, by chance, but you had better 2266692f60a7Smrgavoid parallel builds (make -j) in this platform, or get a better 2267692f60a7Smrgcompiler." 2268692f60a7Smrg 2269c3c9db83Smrg $opt_dry_run || $RM $removelist 2270692f60a7Smrg exit $EXIT_FAILURE 2271692f60a7Smrg fi 2272692f60a7Smrg 2273692f60a7Smrg # Just move the object if needed 2274692f60a7Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 2275c3c9db83Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 2276c3c9db83Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2277692f60a7Smrg fi 2278692f60a7Smrg fi 2279692f60a7Smrg 2280c3c9db83Smrg $opt_dry_run || { 2281c3c9db83Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 2282692f60a7Smrg 2283c3c9db83Smrg # Unlock the critical section if it was locked 2284c3c9db83Smrg if test "$need_locks" != no; then 2285c3c9db83Smrg removelist=$lockfile 2286c3c9db83Smrg $RM "$lockfile" 2287c3c9db83Smrg fi 2288c3c9db83Smrg } 2289692f60a7Smrg 2290692f60a7Smrg exit $EXIT_SUCCESS 2291c3c9db83Smrg} 2292692f60a7Smrg 2293c3c9db83Smrg$opt_help || { 22943f6d0e1dSmrg test "$opt_mode" = compile && func_mode_compile ${1+"$@"} 2295c3c9db83Smrg} 2296692f60a7Smrg 2297c3c9db83Smrgfunc_mode_help () 2298c3c9db83Smrg{ 2299c3c9db83Smrg # We need to display help for each of the modes. 23003f6d0e1dSmrg case $opt_mode in 2301c3c9db83Smrg "") 2302c3c9db83Smrg # Generic help is extracted from the usage comments 2303c3c9db83Smrg # at the start of this file. 2304c3c9db83Smrg func_help 2305c3c9db83Smrg ;; 2306692f60a7Smrg 2307c3c9db83Smrg clean) 2308c3c9db83Smrg $ECHO \ 2309c3c9db83Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 2310692f60a7Smrg 2311c3c9db83SmrgRemove files from the build directory. 2312692f60a7Smrg 2313c3c9db83SmrgRM is the name of the program to use to delete files associated with each FILE 2314c3c9db83Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2315c3c9db83Smrgto RM. 2316692f60a7Smrg 2317c3c9db83SmrgIf FILE is a libtool library, object or program, all the files associated 2318c3c9db83Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 2319c3c9db83Smrg ;; 2320692f60a7Smrg 2321c3c9db83Smrg compile) 2322c3c9db83Smrg $ECHO \ 2323c3c9db83Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 2324692f60a7Smrg 2325c3c9db83SmrgCompile a source file into a libtool library object. 2326692f60a7Smrg 2327c3c9db83SmrgThis mode accepts the following additional options: 2328692f60a7Smrg 2329c3c9db83Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 2330c3c9db83Smrg -no-suppress do not suppress compiler output for multiple passes 23313f6d0e1dSmrg -prefer-pic try to build PIC objects only 23323f6d0e1dSmrg -prefer-non-pic try to build non-PIC objects only 2333c3c9db83Smrg -shared do not build a \`.o' file suitable for static linking 2334c3c9db83Smrg -static only build a \`.o' file suitable for static linking 23353f6d0e1dSmrg -Wc,FLAG pass FLAG directly to the compiler 2336692f60a7Smrg 2337c3c9db83SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 2338c3c9db83Smrgfrom the given SOURCEFILE. 2339692f60a7Smrg 2340c3c9db83SmrgThe output file name is determined by removing the directory component from 2341c3c9db83SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 2342c3c9db83Smrglibrary object suffix, \`.lo'." 2343c3c9db83Smrg ;; 2344692f60a7Smrg 2345c3c9db83Smrg execute) 2346c3c9db83Smrg $ECHO \ 2347c3c9db83Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 2348692f60a7Smrg 2349c3c9db83SmrgAutomatically set library path, then run a program. 2350692f60a7Smrg 2351c3c9db83SmrgThis mode accepts the following additional options: 2352692f60a7Smrg 2353c3c9db83Smrg -dlopen FILE add the directory containing FILE to the library path 2354692f60a7Smrg 2355c3c9db83SmrgThis mode sets the library path environment variable according to \`-dlopen' 2356c3c9db83Smrgflags. 2357692f60a7Smrg 2358c3c9db83SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 2359c3c9db83Smrginto their corresponding uninstalled binary, and any of their required library 2360c3c9db83Smrgdirectories are added to the library path. 2361692f60a7Smrg 2362c3c9db83SmrgThen, COMMAND is executed, with ARGS as arguments." 2363c3c9db83Smrg ;; 2364692f60a7Smrg 2365c3c9db83Smrg finish) 2366c3c9db83Smrg $ECHO \ 2367c3c9db83Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 2368692f60a7Smrg 2369c3c9db83SmrgComplete the installation of libtool libraries. 2370692f60a7Smrg 2371c3c9db83SmrgEach LIBDIR is a directory that contains libtool libraries. 2372692f60a7Smrg 2373c3c9db83SmrgThe commands that this mode executes may require superuser privileges. Use 2374c3c9db83Smrgthe \`--dry-run' option if you just want to see what would be executed." 2375c3c9db83Smrg ;; 2376692f60a7Smrg 2377c3c9db83Smrg install) 2378c3c9db83Smrg $ECHO \ 2379c3c9db83Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 2380692f60a7Smrg 2381c3c9db83SmrgInstall executables or libraries. 2382692f60a7Smrg 2383c3c9db83SmrgINSTALL-COMMAND is the installation command. The first component should be 2384c3c9db83Smrgeither the \`install' or \`cp' program. 2385692f60a7Smrg 2386c3c9db83SmrgThe following components of INSTALL-COMMAND are treated specially: 2387692f60a7Smrg 23883f6d0e1dSmrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 2389692f60a7Smrg 2390c3c9db83SmrgThe rest of the components are interpreted as arguments to that command (only 2391c3c9db83SmrgBSD-compatible install options are recognized)." 2392c3c9db83Smrg ;; 2393692f60a7Smrg 2394c3c9db83Smrg link) 2395c3c9db83Smrg $ECHO \ 2396c3c9db83Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 2397692f60a7Smrg 2398c3c9db83SmrgLink object files or libraries together to form another library, or to 2399c3c9db83Smrgcreate an executable program. 2400692f60a7Smrg 2401c3c9db83SmrgLINK-COMMAND is a command using the C compiler that you would use to create 2402c3c9db83Smrga program from several object files. 2403692f60a7Smrg 2404c3c9db83SmrgThe following components of LINK-COMMAND are treated specially: 2405692f60a7Smrg 2406c3c9db83Smrg -all-static do not do any dynamic linking at all 2407c3c9db83Smrg -avoid-version do not add a version suffix if possible 24083f6d0e1dSmrg -bindir BINDIR specify path to binaries directory (for systems where 24093f6d0e1dSmrg libraries must be found in the PATH setting at runtime) 2410c3c9db83Smrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 2411c3c9db83Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 2412c3c9db83Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 2413c3c9db83Smrg -export-symbols SYMFILE 2414c3c9db83Smrg try to export only the symbols listed in SYMFILE 2415c3c9db83Smrg -export-symbols-regex REGEX 2416c3c9db83Smrg try to export only the symbols matching REGEX 2417c3c9db83Smrg -LLIBDIR search LIBDIR for required installed libraries 2418c3c9db83Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 2419c3c9db83Smrg -module build a library that can dlopened 2420c3c9db83Smrg -no-fast-install disable the fast-install mode 2421c3c9db83Smrg -no-install link a not-installable executable 2422c3c9db83Smrg -no-undefined declare that a library does not refer to external symbols 2423c3c9db83Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 2424c3c9db83Smrg -objectlist FILE Use a list of object files found in FILE to specify objects 2425c3c9db83Smrg -precious-files-regex REGEX 2426c3c9db83Smrg don't remove output files matching REGEX 2427c3c9db83Smrg -release RELEASE specify package release information 2428c3c9db83Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 2429c3c9db83Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 2430c3c9db83Smrg -shared only do dynamic linking of libtool libraries 2431c3c9db83Smrg -shrext SUFFIX override the standard shared library file extension 2432c3c9db83Smrg -static do not do any dynamic linking of uninstalled libtool libraries 2433c3c9db83Smrg -static-libtool-libs 2434c3c9db83Smrg do not do any dynamic linking of libtool libraries 2435c3c9db83Smrg -version-info CURRENT[:REVISION[:AGE]] 2436c3c9db83Smrg specify library version info [each variable defaults to 0] 2437c3c9db83Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 24383f6d0e1dSmrg -Wc,FLAG 24393f6d0e1dSmrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 24403f6d0e1dSmrg -Wl,FLAG 24413f6d0e1dSmrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 24423f6d0e1dSmrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 2443692f60a7Smrg 2444c3c9db83SmrgAll other options (arguments beginning with \`-') are ignored. 2445692f60a7Smrg 2446c3c9db83SmrgEvery other argument is treated as a filename. Files ending in \`.la' are 2447c3c9db83Smrgtreated as uninstalled libtool libraries, other files are standard or library 2448c3c9db83Smrgobject files. 2449692f60a7Smrg 2450c3c9db83SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 2451c3c9db83Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 2452c3c9db83Smrgrequired, except when creating a convenience library. 2453692f60a7Smrg 2454c3c9db83SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 2455c3c9db83Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 2456692f60a7Smrg 2457c3c9db83SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 2458c3c9db83Smrgis created, otherwise an executable program is created." 24592e71ea71Smrg ;; 2460692f60a7Smrg 2461c3c9db83Smrg uninstall) 2462c3c9db83Smrg $ECHO \ 2463c3c9db83Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 2464692f60a7Smrg 2465c3c9db83SmrgRemove libraries from an installation directory. 2466692f60a7Smrg 2467c3c9db83SmrgRM is the name of the program to use to delete files associated with each FILE 2468c3c9db83Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2469c3c9db83Smrgto RM. 247085ee4c00Smrg 2471c3c9db83SmrgIf FILE is a libtool library, all the files associated with it are deleted. 2472c3c9db83SmrgOtherwise, only FILE itself is deleted using RM." 2473c3c9db83Smrg ;; 247485ee4c00Smrg 2475c3c9db83Smrg *) 24763f6d0e1dSmrg func_fatal_help "invalid operation mode \`$opt_mode'" 2477c3c9db83Smrg ;; 2478c3c9db83Smrg esac 247985ee4c00Smrg 24803f6d0e1dSmrg echo 2481c3c9db83Smrg $ECHO "Try \`$progname --help' for more information about other modes." 2482c3c9db83Smrg} 248385ee4c00Smrg 24843f6d0e1dSmrg# Now that we've collected a possible --mode arg, show help if necessary 24853f6d0e1dSmrgif $opt_help; then 24863f6d0e1dSmrg if test "$opt_help" = :; then 24873f6d0e1dSmrg func_mode_help 24883f6d0e1dSmrg else 24893f6d0e1dSmrg { 24903f6d0e1dSmrg func_help noexit 24913f6d0e1dSmrg for opt_mode in compile link execute install finish uninstall clean; do 24923f6d0e1dSmrg func_mode_help 24933f6d0e1dSmrg done 24943f6d0e1dSmrg } | sed -n '1p; 2,$s/^Usage:/ or: /p' 24953f6d0e1dSmrg { 24963f6d0e1dSmrg func_help noexit 24973f6d0e1dSmrg for opt_mode in compile link execute install finish uninstall clean; do 24983f6d0e1dSmrg echo 24993f6d0e1dSmrg func_mode_help 25003f6d0e1dSmrg done 25013f6d0e1dSmrg } | 25023f6d0e1dSmrg sed '1d 25033f6d0e1dSmrg /^When reporting/,/^Report/{ 25043f6d0e1dSmrg H 25053f6d0e1dSmrg d 25063f6d0e1dSmrg } 25073f6d0e1dSmrg $x 25083f6d0e1dSmrg /information about other modes/d 25093f6d0e1dSmrg /more detailed .*MODE/d 25103f6d0e1dSmrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 25113f6d0e1dSmrg fi 25123f6d0e1dSmrg exit $? 25133f6d0e1dSmrgfi 251485ee4c00Smrg 251585ee4c00Smrg 2516c3c9db83Smrg# func_mode_execute arg... 2517c3c9db83Smrgfunc_mode_execute () 2518c3c9db83Smrg{ 2519c3c9db83Smrg $opt_debug 2520c3c9db83Smrg # The first argument is the command name. 2521c3c9db83Smrg cmd="$nonopt" 2522c3c9db83Smrg test -z "$cmd" && \ 2523c3c9db83Smrg func_fatal_help "you must specify a COMMAND" 25242e71ea71Smrg 2525c3c9db83Smrg # Handle -dlopen flags immediately. 25263f6d0e1dSmrg for file in $opt_dlopen; do 2527c3c9db83Smrg test -f "$file" \ 2528c3c9db83Smrg || func_fatal_help "\`$file' is not a file" 25292e71ea71Smrg 2530c3c9db83Smrg dir= 2531c3c9db83Smrg case $file in 2532c3c9db83Smrg *.la) 25333f6d0e1dSmrg func_resolve_sysroot "$file" 25343f6d0e1dSmrg file=$func_resolve_sysroot_result 25353f6d0e1dSmrg 2536c3c9db83Smrg # Check to see that this really is a libtool archive. 2537c3c9db83Smrg func_lalib_unsafe_p "$file" \ 2538c3c9db83Smrg || func_fatal_help "\`$lib' is not a valid libtool archive" 25392e71ea71Smrg 2540c3c9db83Smrg # Read the libtool library. 2541c3c9db83Smrg dlname= 2542c3c9db83Smrg library_names= 2543c3c9db83Smrg func_source "$file" 2544692f60a7Smrg 2545c3c9db83Smrg # Skip this library if it cannot be dlopened. 2546c3c9db83Smrg if test -z "$dlname"; then 2547c3c9db83Smrg # Warn if it was a shared library. 2548c3c9db83Smrg test -n "$library_names" && \ 2549c3c9db83Smrg func_warning "\`$file' was not linked with \`-export-dynamic'" 2550c3c9db83Smrg continue 2551c3c9db83Smrg fi 2552692f60a7Smrg 2553c3c9db83Smrg func_dirname "$file" "" "." 2554c3c9db83Smrg dir="$func_dirname_result" 2555692f60a7Smrg 2556c3c9db83Smrg if test -f "$dir/$objdir/$dlname"; then 25573f6d0e1dSmrg func_append dir "/$objdir" 2558c3c9db83Smrg else 2559c3c9db83Smrg if test ! -f "$dir/$dlname"; then 2560c3c9db83Smrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 2561c3c9db83Smrg fi 2562c3c9db83Smrg fi 25632e71ea71Smrg ;; 2564692f60a7Smrg 2565c3c9db83Smrg *.lo) 2566c3c9db83Smrg # Just add the directory containing the .lo file. 2567c3c9db83Smrg func_dirname "$file" "" "." 2568c3c9db83Smrg dir="$func_dirname_result" 25692e71ea71Smrg ;; 2570692f60a7Smrg 2571c3c9db83Smrg *) 2572c3c9db83Smrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 25732e71ea71Smrg continue 25742e71ea71Smrg ;; 2575c3c9db83Smrg esac 2576692f60a7Smrg 2577c3c9db83Smrg # Get the absolute pathname. 2578c3c9db83Smrg absdir=`cd "$dir" && pwd` 2579c3c9db83Smrg test -n "$absdir" && dir="$absdir" 258085ee4c00Smrg 2581c3c9db83Smrg # Now add the directory to shlibpath_var. 2582c3c9db83Smrg if eval "test -z \"\$$shlibpath_var\""; then 2583c3c9db83Smrg eval "$shlibpath_var=\"\$dir\"" 2584c3c9db83Smrg else 2585c3c9db83Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 2586c3c9db83Smrg fi 2587c3c9db83Smrg done 258885ee4c00Smrg 2589c3c9db83Smrg # This variable tells wrapper scripts just to set shlibpath_var 2590c3c9db83Smrg # rather than running their programs. 2591c3c9db83Smrg libtool_execute_magic="$magic" 259285ee4c00Smrg 2593c3c9db83Smrg # Check if any of the arguments is a wrapper script. 2594c3c9db83Smrg args= 2595c3c9db83Smrg for file 2596c3c9db83Smrg do 2597c3c9db83Smrg case $file in 25983f6d0e1dSmrg -* | *.la | *.lo ) ;; 2599c3c9db83Smrg *) 2600c3c9db83Smrg # Do a test to see if this is really a libtool program. 2601c3c9db83Smrg if func_ltwrapper_script_p "$file"; then 2602c3c9db83Smrg func_source "$file" 2603c3c9db83Smrg # Transform arg to wrapped name. 2604c3c9db83Smrg file="$progdir/$program" 2605c3c9db83Smrg elif func_ltwrapper_executable_p "$file"; then 2606c3c9db83Smrg func_ltwrapper_scriptname "$file" 2607c3c9db83Smrg func_source "$func_ltwrapper_scriptname_result" 2608c3c9db83Smrg # Transform arg to wrapped name. 2609c3c9db83Smrg file="$progdir/$program" 2610c3c9db83Smrg fi 2611c3c9db83Smrg ;; 2612c3c9db83Smrg esac 2613c3c9db83Smrg # Quote arguments (to preserve shell metacharacters). 26143f6d0e1dSmrg func_append_quoted args "$file" 2615c3c9db83Smrg done 261685ee4c00Smrg 2617c3c9db83Smrg if test "X$opt_dry_run" = Xfalse; then 2618c3c9db83Smrg if test -n "$shlibpath_var"; then 2619c3c9db83Smrg # Export the shlibpath_var. 2620c3c9db83Smrg eval "export $shlibpath_var" 2621c3c9db83Smrg fi 262285ee4c00Smrg 2623c3c9db83Smrg # Restore saved environment variables 2624c3c9db83Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 2625c3c9db83Smrg do 2626c3c9db83Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 2627c3c9db83Smrg $lt_var=\$save_$lt_var; export $lt_var 26282e71ea71Smrg else 2629c3c9db83Smrg $lt_unset $lt_var 2630c3c9db83Smrg fi" 2631c3c9db83Smrg done 263285ee4c00Smrg 2633c3c9db83Smrg # Now prepare to actually exec the command. 2634c3c9db83Smrg exec_cmd="\$cmd$args" 2635c3c9db83Smrg else 2636c3c9db83Smrg # Display what would be done. 2637c3c9db83Smrg if test -n "$shlibpath_var"; then 2638c3c9db83Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 26393f6d0e1dSmrg echo "export $shlibpath_var" 2640c3c9db83Smrg fi 2641c3c9db83Smrg $ECHO "$cmd$args" 2642c3c9db83Smrg exit $EXIT_SUCCESS 2643c3c9db83Smrg fi 2644c3c9db83Smrg} 264585ee4c00Smrg 26463f6d0e1dSmrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"} 264785ee4c00Smrg 26482e71ea71Smrg 2649c3c9db83Smrg# func_mode_finish arg... 2650c3c9db83Smrgfunc_mode_finish () 2651c3c9db83Smrg{ 2652c3c9db83Smrg $opt_debug 26533f6d0e1dSmrg libs= 26543f6d0e1dSmrg libdirs= 2655c3c9db83Smrg admincmds= 2656692f60a7Smrg 26573f6d0e1dSmrg for opt in "$nonopt" ${1+"$@"} 26583f6d0e1dSmrg do 26593f6d0e1dSmrg if test -d "$opt"; then 26603f6d0e1dSmrg func_append libdirs " $opt" 26613f6d0e1dSmrg 26623f6d0e1dSmrg elif test -f "$opt"; then 26633f6d0e1dSmrg if func_lalib_unsafe_p "$opt"; then 26643f6d0e1dSmrg func_append libs " $opt" 26653f6d0e1dSmrg else 26663f6d0e1dSmrg func_warning "\`$opt' is not a valid libtool archive" 26673f6d0e1dSmrg fi 26683f6d0e1dSmrg 26693f6d0e1dSmrg else 26703f6d0e1dSmrg func_fatal_error "invalid argument \`$opt'" 26713f6d0e1dSmrg fi 26723f6d0e1dSmrg done 26733f6d0e1dSmrg 26743f6d0e1dSmrg if test -n "$libs"; then 26753f6d0e1dSmrg if test -n "$lt_sysroot"; then 26763f6d0e1dSmrg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 26773f6d0e1dSmrg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 26783f6d0e1dSmrg else 26793f6d0e1dSmrg sysroot_cmd= 26803f6d0e1dSmrg fi 26813f6d0e1dSmrg 26823f6d0e1dSmrg # Remove sysroot references 26833f6d0e1dSmrg if $opt_dry_run; then 26843f6d0e1dSmrg for lib in $libs; do 26853f6d0e1dSmrg echo "removing references to $lt_sysroot and \`=' prefixes from $lib" 26863f6d0e1dSmrg done 26873f6d0e1dSmrg else 26883f6d0e1dSmrg tmpdir=`func_mktempdir` 26893f6d0e1dSmrg for lib in $libs; do 26903f6d0e1dSmrg sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 26913f6d0e1dSmrg > $tmpdir/tmp-la 26923f6d0e1dSmrg mv -f $tmpdir/tmp-la $lib 26933f6d0e1dSmrg done 26943f6d0e1dSmrg ${RM}r "$tmpdir" 26953f6d0e1dSmrg fi 26963f6d0e1dSmrg fi 2697692f60a7Smrg 26983f6d0e1dSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2699c3c9db83Smrg for libdir in $libdirs; do 2700c3c9db83Smrg if test -n "$finish_cmds"; then 2701c3c9db83Smrg # Do each command in the finish commands. 2702c3c9db83Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 2703c3c9db83Smrg'"$cmd"'"' 27042e71ea71Smrg fi 2705c3c9db83Smrg if test -n "$finish_eval"; then 2706c3c9db83Smrg # Do the single finish_eval. 2707c3c9db83Smrg eval cmds=\"$finish_eval\" 27083f6d0e1dSmrg $opt_dry_run || eval "$cmds" || func_append admincmds " 2709c3c9db83Smrg $cmds" 2710c3c9db83Smrg fi 2711c3c9db83Smrg done 2712c3c9db83Smrg fi 2713692f60a7Smrg 2714c3c9db83Smrg # Exit here if they wanted silent mode. 2715c3c9db83Smrg $opt_silent && exit $EXIT_SUCCESS 2716692f60a7Smrg 27173f6d0e1dSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 27183f6d0e1dSmrg echo "----------------------------------------------------------------------" 27193f6d0e1dSmrg echo "Libraries have been installed in:" 27203f6d0e1dSmrg for libdir in $libdirs; do 27213f6d0e1dSmrg $ECHO " $libdir" 27223f6d0e1dSmrg done 27233f6d0e1dSmrg echo 27243f6d0e1dSmrg echo "If you ever happen to want to link against installed libraries" 27253f6d0e1dSmrg echo "in a given directory, LIBDIR, you must either use libtool, and" 27263f6d0e1dSmrg echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 27273f6d0e1dSmrg echo "flag during linking and do at least one of the following:" 27283f6d0e1dSmrg if test -n "$shlibpath_var"; then 27293f6d0e1dSmrg echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 27303f6d0e1dSmrg echo " during execution" 27313f6d0e1dSmrg fi 27323f6d0e1dSmrg if test -n "$runpath_var"; then 27333f6d0e1dSmrg echo " - add LIBDIR to the \`$runpath_var' environment variable" 27343f6d0e1dSmrg echo " during linking" 27353f6d0e1dSmrg fi 27363f6d0e1dSmrg if test -n "$hardcode_libdir_flag_spec"; then 27373f6d0e1dSmrg libdir=LIBDIR 27383f6d0e1dSmrg eval flag=\"$hardcode_libdir_flag_spec\" 2739c3c9db83Smrg 27403f6d0e1dSmrg $ECHO " - use the \`$flag' linker flag" 27413f6d0e1dSmrg fi 27423f6d0e1dSmrg if test -n "$admincmds"; then 27433f6d0e1dSmrg $ECHO " - have your system administrator run these commands:$admincmds" 27443f6d0e1dSmrg fi 27453f6d0e1dSmrg if test -f /etc/ld.so.conf; then 27463f6d0e1dSmrg echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 27473f6d0e1dSmrg fi 27483f6d0e1dSmrg echo 2749c3c9db83Smrg 27503f6d0e1dSmrg echo "See any operating system documentation about shared libraries for" 27513f6d0e1dSmrg case $host in 27523f6d0e1dSmrg solaris2.[6789]|solaris2.1[0-9]) 27533f6d0e1dSmrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 27543f6d0e1dSmrg echo "pages." 27553f6d0e1dSmrg ;; 27563f6d0e1dSmrg *) 27573f6d0e1dSmrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 27583f6d0e1dSmrg ;; 27593f6d0e1dSmrg esac 27603f6d0e1dSmrg echo "----------------------------------------------------------------------" 27613f6d0e1dSmrg fi 2762c3c9db83Smrg exit $EXIT_SUCCESS 2763c3c9db83Smrg} 2764c3c9db83Smrg 27653f6d0e1dSmrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"} 2766c3c9db83Smrg 2767c3c9db83Smrg 2768c3c9db83Smrg# func_mode_install arg... 2769c3c9db83Smrgfunc_mode_install () 2770c3c9db83Smrg{ 2771c3c9db83Smrg $opt_debug 2772c3c9db83Smrg # There may be an optional sh(1) argument at the beginning of 2773c3c9db83Smrg # install_prog (especially on Windows NT). 2774c3c9db83Smrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 2775c3c9db83Smrg # Allow the use of GNU shtool's install command. 27763f6d0e1dSmrg case $nonopt in *shtool*) :;; *) false;; esac; then 2777c3c9db83Smrg # Aesthetically quote it. 2778c3c9db83Smrg func_quote_for_eval "$nonopt" 2779c3c9db83Smrg install_prog="$func_quote_for_eval_result " 2780c3c9db83Smrg arg=$1 2781c3c9db83Smrg shift 2782c3c9db83Smrg else 2783c3c9db83Smrg install_prog= 2784c3c9db83Smrg arg=$nonopt 2785c3c9db83Smrg fi 2786c3c9db83Smrg 2787c3c9db83Smrg # The real first argument should be the name of the installation program. 2788c3c9db83Smrg # Aesthetically quote it. 2789c3c9db83Smrg func_quote_for_eval "$arg" 27903f6d0e1dSmrg func_append install_prog "$func_quote_for_eval_result" 27913f6d0e1dSmrg install_shared_prog=$install_prog 27923f6d0e1dSmrg case " $install_prog " in 27933f6d0e1dSmrg *[\\\ /]cp\ *) install_cp=: ;; 27943f6d0e1dSmrg *) install_cp=false ;; 27953f6d0e1dSmrg esac 2796c3c9db83Smrg 2797c3c9db83Smrg # We need to accept at least all the BSD install flags. 2798c3c9db83Smrg dest= 2799c3c9db83Smrg files= 2800c3c9db83Smrg opts= 2801c3c9db83Smrg prev= 2802c3c9db83Smrg install_type= 2803c3c9db83Smrg isdir=no 2804c3c9db83Smrg stripme= 28053f6d0e1dSmrg no_mode=: 2806c3c9db83Smrg for arg 2807c3c9db83Smrg do 28083f6d0e1dSmrg arg2= 2809c3c9db83Smrg if test -n "$dest"; then 28103f6d0e1dSmrg func_append files " $dest" 2811c3c9db83Smrg dest=$arg 2812c3c9db83Smrg continue 2813c3c9db83Smrg fi 2814c3c9db83Smrg 2815c3c9db83Smrg case $arg in 2816c3c9db83Smrg -d) isdir=yes ;; 2817c3c9db83Smrg -f) 28183f6d0e1dSmrg if $install_cp; then :; else 28193f6d0e1dSmrg prev=$arg 28203f6d0e1dSmrg fi 2821c3c9db83Smrg ;; 2822c3c9db83Smrg -g | -m | -o) 2823c3c9db83Smrg prev=$arg 2824c3c9db83Smrg ;; 2825c3c9db83Smrg -s) 2826c3c9db83Smrg stripme=" -s" 2827c3c9db83Smrg continue 2828c3c9db83Smrg ;; 2829c3c9db83Smrg -*) 2830c3c9db83Smrg ;; 2831c3c9db83Smrg *) 2832c3c9db83Smrg # If the previous option needed an argument, then skip it. 2833c3c9db83Smrg if test -n "$prev"; then 28343f6d0e1dSmrg if test "x$prev" = x-m && test -n "$install_override_mode"; then 28353f6d0e1dSmrg arg2=$install_override_mode 28363f6d0e1dSmrg no_mode=false 28373f6d0e1dSmrg fi 28382e71ea71Smrg prev= 283985ee4c00Smrg else 2840c3c9db83Smrg dest=$arg 2841c3c9db83Smrg continue 2842692f60a7Smrg fi 28432e71ea71Smrg ;; 2844c3c9db83Smrg esac 2845692f60a7Smrg 2846c3c9db83Smrg # Aesthetically quote the argument. 2847c3c9db83Smrg func_quote_for_eval "$arg" 28483f6d0e1dSmrg func_append install_prog " $func_quote_for_eval_result" 28493f6d0e1dSmrg if test -n "$arg2"; then 28503f6d0e1dSmrg func_quote_for_eval "$arg2" 28513f6d0e1dSmrg fi 28523f6d0e1dSmrg func_append install_shared_prog " $func_quote_for_eval_result" 2853c3c9db83Smrg done 2854692f60a7Smrg 2855c3c9db83Smrg test -z "$install_prog" && \ 2856c3c9db83Smrg func_fatal_help "you must specify an install program" 2857692f60a7Smrg 2858c3c9db83Smrg test -n "$prev" && \ 2859c3c9db83Smrg func_fatal_help "the \`$prev' option requires an argument" 286085ee4c00Smrg 28613f6d0e1dSmrg if test -n "$install_override_mode" && $no_mode; then 28623f6d0e1dSmrg if $install_cp; then :; else 28633f6d0e1dSmrg func_quote_for_eval "$install_override_mode" 28643f6d0e1dSmrg func_append install_shared_prog " -m $func_quote_for_eval_result" 28653f6d0e1dSmrg fi 28663f6d0e1dSmrg fi 28673f6d0e1dSmrg 2868c3c9db83Smrg if test -z "$files"; then 2869c3c9db83Smrg if test -z "$dest"; then 2870c3c9db83Smrg func_fatal_help "no file or destination specified" 2871c3c9db83Smrg else 2872c3c9db83Smrg func_fatal_help "you must specify a destination" 2873c3c9db83Smrg fi 28742e71ea71Smrg fi 287585ee4c00Smrg 2876c3c9db83Smrg # Strip any trailing slash from the destination. 2877c3c9db83Smrg func_stripname '' '/' "$dest" 2878c3c9db83Smrg dest=$func_stripname_result 287985ee4c00Smrg 2880c3c9db83Smrg # Check to see that the destination is a directory. 2881c3c9db83Smrg test -d "$dest" && isdir=yes 2882c3c9db83Smrg if test "$isdir" = yes; then 2883c3c9db83Smrg destdir="$dest" 2884c3c9db83Smrg destname= 28852e71ea71Smrg else 2886c3c9db83Smrg func_dirname_and_basename "$dest" "" "." 2887c3c9db83Smrg destdir="$func_dirname_result" 2888c3c9db83Smrg destname="$func_basename_result" 288985ee4c00Smrg 2890c3c9db83Smrg # Not a directory, so check to see that there is only one file specified. 2891c3c9db83Smrg set dummy $files; shift 2892c3c9db83Smrg test "$#" -gt 1 && \ 2893c3c9db83Smrg func_fatal_help "\`$dest' is not a directory" 289485ee4c00Smrg fi 2895c3c9db83Smrg case $destdir in 2896c3c9db83Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 28972e71ea71Smrg *) 2898c3c9db83Smrg for file in $files; do 2899c3c9db83Smrg case $file in 2900c3c9db83Smrg *.lo) ;; 2901c3c9db83Smrg *) 2902c3c9db83Smrg func_fatal_help "\`$destdir' must be an absolute directory name" 2903c3c9db83Smrg ;; 2904c3c9db83Smrg esac 2905c3c9db83Smrg done 29062e71ea71Smrg ;; 29072e71ea71Smrg esac 2908692f60a7Smrg 2909c3c9db83Smrg # This variable tells wrapper scripts just to set variables rather 2910c3c9db83Smrg # than running their programs. 2911c3c9db83Smrg libtool_install_magic="$magic" 2912692f60a7Smrg 2913c3c9db83Smrg staticlibs= 2914c3c9db83Smrg future_libdirs= 2915c3c9db83Smrg current_libdirs= 2916c3c9db83Smrg for file in $files; do 2917692f60a7Smrg 2918c3c9db83Smrg # Do each installation. 2919c3c9db83Smrg case $file in 2920c3c9db83Smrg *.$libext) 2921c3c9db83Smrg # Do the static libraries later. 29223f6d0e1dSmrg func_append staticlibs " $file" 2923c3c9db83Smrg ;; 2924c3c9db83Smrg 2925c3c9db83Smrg *.la) 29263f6d0e1dSmrg func_resolve_sysroot "$file" 29273f6d0e1dSmrg file=$func_resolve_sysroot_result 29283f6d0e1dSmrg 2929c3c9db83Smrg # Check to see that this really is a libtool archive. 2930c3c9db83Smrg func_lalib_unsafe_p "$file" \ 2931c3c9db83Smrg || func_fatal_help "\`$file' is not a valid libtool archive" 2932c3c9db83Smrg 2933c3c9db83Smrg library_names= 2934c3c9db83Smrg old_library= 2935c3c9db83Smrg relink_command= 2936c3c9db83Smrg func_source "$file" 2937c3c9db83Smrg 2938c3c9db83Smrg # Add the libdir to current_libdirs if it is the destination. 2939c3c9db83Smrg if test "X$destdir" = "X$libdir"; then 2940c3c9db83Smrg case "$current_libdirs " in 2941c3c9db83Smrg *" $libdir "*) ;; 29423f6d0e1dSmrg *) func_append current_libdirs " $libdir" ;; 294385ee4c00Smrg esac 2944c3c9db83Smrg else 2945c3c9db83Smrg # Note the libdir as a future libdir. 2946c3c9db83Smrg case "$future_libdirs " in 2947c3c9db83Smrg *" $libdir "*) ;; 29483f6d0e1dSmrg *) func_append future_libdirs " $libdir" ;; 2949c3c9db83Smrg esac 2950c3c9db83Smrg fi 295185ee4c00Smrg 2952c3c9db83Smrg func_dirname "$file" "/" "" 2953c3c9db83Smrg dir="$func_dirname_result" 29543f6d0e1dSmrg func_append dir "$objdir" 2955c3c9db83Smrg 2956c3c9db83Smrg if test -n "$relink_command"; then 2957c3c9db83Smrg # Determine the prefix the user has applied to our future dir. 29583f6d0e1dSmrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 2959c3c9db83Smrg 2960c3c9db83Smrg # Don't allow the user to place us outside of our expected 2961c3c9db83Smrg # location b/c this prevents finding dependent libraries that 2962c3c9db83Smrg # are installed to the same prefix. 2963c3c9db83Smrg # At present, this check doesn't affect windows .dll's that 2964c3c9db83Smrg # are installed into $libdir/../bin (currently, that works fine) 2965c3c9db83Smrg # but it's something to keep an eye on. 2966c3c9db83Smrg test "$inst_prefix_dir" = "$destdir" && \ 2967c3c9db83Smrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 2968c3c9db83Smrg 2969c3c9db83Smrg if test -n "$inst_prefix_dir"; then 2970c3c9db83Smrg # Stick the inst_prefix_dir data into the link command. 29713f6d0e1dSmrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 2972c3c9db83Smrg else 29733f6d0e1dSmrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 2974c3c9db83Smrg fi 2975c3c9db83Smrg 2976c3c9db83Smrg func_warning "relinking \`$file'" 2977c3c9db83Smrg func_show_eval "$relink_command" \ 2978c3c9db83Smrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 2979c3c9db83Smrg fi 2980c3c9db83Smrg 2981c3c9db83Smrg # See the names of the shared library. 2982c3c9db83Smrg set dummy $library_names; shift 2983c3c9db83Smrg if test -n "$1"; then 2984c3c9db83Smrg realname="$1" 2985c3c9db83Smrg shift 2986c3c9db83Smrg 2987c3c9db83Smrg srcname="$realname" 2988c3c9db83Smrg test -n "$relink_command" && srcname="$realname"T 2989c3c9db83Smrg 2990c3c9db83Smrg # Install the shared library and build the symlinks. 29913f6d0e1dSmrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 2992c3c9db83Smrg 'exit $?' 2993c3c9db83Smrg tstripme="$stripme" 2994c3c9db83Smrg case $host_os in 2995c3c9db83Smrg cygwin* | mingw* | pw32* | cegcc*) 2996c3c9db83Smrg case $realname in 2997c3c9db83Smrg *.dll.a) 2998c3c9db83Smrg tstripme="" 2999c3c9db83Smrg ;; 3000c3c9db83Smrg esac 300185ee4c00Smrg ;; 300285ee4c00Smrg esac 3003c3c9db83Smrg if test -n "$tstripme" && test -n "$striplib"; then 3004c3c9db83Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 30052e71ea71Smrg fi 3006c3c9db83Smrg 3007c3c9db83Smrg if test "$#" -gt 0; then 3008c3c9db83Smrg # Delete the old symlinks, and create new ones. 3009c3c9db83Smrg # Try `ln -sf' first, because the `ln' binary might depend on 3010c3c9db83Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 3011c3c9db83Smrg # so we also need to try rm && ln -s. 3012c3c9db83Smrg for linkname 3013c3c9db83Smrg do 3014c3c9db83Smrg test "$linkname" != "$realname" \ 3015c3c9db83Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 30162e71ea71Smrg done 30172e71ea71Smrg fi 3018692f60a7Smrg 3019c3c9db83Smrg # Do each command in the postinstall commands. 3020c3c9db83Smrg lib="$destdir/$realname" 3021c3c9db83Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 30222e71ea71Smrg fi 3023692f60a7Smrg 3024c3c9db83Smrg # Install the pseudo-library for information purposes. 3025c3c9db83Smrg func_basename "$file" 3026c3c9db83Smrg name="$func_basename_result" 3027c3c9db83Smrg instname="$dir/$name"i 3028c3c9db83Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 3029692f60a7Smrg 3030c3c9db83Smrg # Maybe install the static library, too. 30313f6d0e1dSmrg test -n "$old_library" && func_append staticlibs " $dir/$old_library" 3032c3c9db83Smrg ;; 3033692f60a7Smrg 3034c3c9db83Smrg *.lo) 3035c3c9db83Smrg # Install (i.e. copy) a libtool object. 3036692f60a7Smrg 3037c3c9db83Smrg # Figure out destination file name, if it wasn't already specified. 3038c3c9db83Smrg if test -n "$destname"; then 3039c3c9db83Smrg destfile="$destdir/$destname" 3040c3c9db83Smrg else 3041c3c9db83Smrg func_basename "$file" 3042c3c9db83Smrg destfile="$func_basename_result" 3043c3c9db83Smrg destfile="$destdir/$destfile" 30442e71ea71Smrg fi 3045692f60a7Smrg 3046c3c9db83Smrg # Deduce the name of the destination old-style object file. 3047c3c9db83Smrg case $destfile in 3048c3c9db83Smrg *.lo) 3049c3c9db83Smrg func_lo2o "$destfile" 3050c3c9db83Smrg staticdest=$func_lo2o_result 3051c3c9db83Smrg ;; 3052c3c9db83Smrg *.$objext) 3053c3c9db83Smrg staticdest="$destfile" 3054c3c9db83Smrg destfile= 3055c3c9db83Smrg ;; 3056c3c9db83Smrg *) 3057c3c9db83Smrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 3058c3c9db83Smrg ;; 3059c3c9db83Smrg esac 3060692f60a7Smrg 3061c3c9db83Smrg # Install the libtool object if requested. 3062c3c9db83Smrg test -n "$destfile" && \ 3063c3c9db83Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 3064692f60a7Smrg 3065c3c9db83Smrg # Install the old object if enabled. 3066c3c9db83Smrg if test "$build_old_libs" = yes; then 3067c3c9db83Smrg # Deduce the name of the old-style object file. 3068c3c9db83Smrg func_lo2o "$file" 3069c3c9db83Smrg staticobj=$func_lo2o_result 3070c3c9db83Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 3071692f60a7Smrg fi 3072c3c9db83Smrg exit $EXIT_SUCCESS 3073c3c9db83Smrg ;; 3074692f60a7Smrg 3075c3c9db83Smrg *) 3076c3c9db83Smrg # Figure out destination file name, if it wasn't already specified. 3077c3c9db83Smrg if test -n "$destname"; then 3078c3c9db83Smrg destfile="$destdir/$destname" 3079c3c9db83Smrg else 3080c3c9db83Smrg func_basename "$file" 3081c3c9db83Smrg destfile="$func_basename_result" 3082c3c9db83Smrg destfile="$destdir/$destfile" 3083c3c9db83Smrg fi 3084692f60a7Smrg 3085c3c9db83Smrg # If the file is missing, and there is a .exe on the end, strip it 3086c3c9db83Smrg # because it is most likely a libtool script we actually want to 3087c3c9db83Smrg # install 3088c3c9db83Smrg stripped_ext="" 3089c3c9db83Smrg case $file in 3090c3c9db83Smrg *.exe) 3091c3c9db83Smrg if test ! -f "$file"; then 3092c3c9db83Smrg func_stripname '' '.exe' "$file" 3093c3c9db83Smrg file=$func_stripname_result 3094c3c9db83Smrg stripped_ext=".exe" 3095c3c9db83Smrg fi 3096c3c9db83Smrg ;; 3097c3c9db83Smrg esac 3098c3c9db83Smrg 3099c3c9db83Smrg # Do a test to see if this is really a libtool program. 3100c3c9db83Smrg case $host in 3101c3c9db83Smrg *cygwin* | *mingw*) 3102c3c9db83Smrg if func_ltwrapper_executable_p "$file"; then 3103c3c9db83Smrg func_ltwrapper_scriptname "$file" 3104c3c9db83Smrg wrapper=$func_ltwrapper_scriptname_result 3105c3c9db83Smrg else 3106c3c9db83Smrg func_stripname '' '.exe' "$file" 3107c3c9db83Smrg wrapper=$func_stripname_result 3108c3c9db83Smrg fi 3109c3c9db83Smrg ;; 31102e71ea71Smrg *) 3111c3c9db83Smrg wrapper=$file 3112c3c9db83Smrg ;; 3113c3c9db83Smrg esac 3114c3c9db83Smrg if func_ltwrapper_script_p "$wrapper"; then 3115c3c9db83Smrg notinst_deplibs= 3116c3c9db83Smrg relink_command= 3117c3c9db83Smrg 3118c3c9db83Smrg func_source "$wrapper" 3119c3c9db83Smrg 3120c3c9db83Smrg # Check the variables that should have been set. 3121c3c9db83Smrg test -z "$generated_by_libtool_version" && \ 3122c3c9db83Smrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 3123c3c9db83Smrg 3124c3c9db83Smrg finalize=yes 3125c3c9db83Smrg for lib in $notinst_deplibs; do 3126c3c9db83Smrg # Check to see that each library is installed. 3127c3c9db83Smrg libdir= 3128c3c9db83Smrg if test -f "$lib"; then 3129c3c9db83Smrg func_source "$lib" 3130c3c9db83Smrg fi 31313f6d0e1dSmrg libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test 3132c3c9db83Smrg if test -n "$libdir" && test ! -f "$libfile"; then 3133c3c9db83Smrg func_warning "\`$lib' has not been installed in \`$libdir'" 3134c3c9db83Smrg finalize=no 3135c3c9db83Smrg fi 3136c3c9db83Smrg done 3137c3c9db83Smrg 3138c3c9db83Smrg relink_command= 3139c3c9db83Smrg func_source "$wrapper" 3140c3c9db83Smrg 3141c3c9db83Smrg outputname= 3142c3c9db83Smrg if test "$fast_install" = no && test -n "$relink_command"; then 3143c3c9db83Smrg $opt_dry_run || { 3144c3c9db83Smrg if test "$finalize" = yes; then 3145c3c9db83Smrg tmpdir=`func_mktempdir` 3146c3c9db83Smrg func_basename "$file$stripped_ext" 3147c3c9db83Smrg file="$func_basename_result" 3148c3c9db83Smrg outputname="$tmpdir/$file" 3149c3c9db83Smrg # Replace the output file specification. 31503f6d0e1dSmrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 3151c3c9db83Smrg 3152c3c9db83Smrg $opt_silent || { 3153c3c9db83Smrg func_quote_for_expand "$relink_command" 3154c3c9db83Smrg eval "func_echo $func_quote_for_expand_result" 3155c3c9db83Smrg } 3156c3c9db83Smrg if eval "$relink_command"; then : 3157c3c9db83Smrg else 3158c3c9db83Smrg func_error "error: relink \`$file' with the above command before installing it" 3159c3c9db83Smrg $opt_dry_run || ${RM}r "$tmpdir" 3160c3c9db83Smrg continue 3161c3c9db83Smrg fi 3162c3c9db83Smrg file="$outputname" 3163c3c9db83Smrg else 3164c3c9db83Smrg func_warning "cannot relink \`$file'" 3165c3c9db83Smrg fi 3166c3c9db83Smrg } 3167c3c9db83Smrg else 3168c3c9db83Smrg # Install the binary that we compiled earlier. 31693f6d0e1dSmrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 31702e71ea71Smrg fi 3171c3c9db83Smrg fi 3172c3c9db83Smrg 3173c3c9db83Smrg # remove .exe since cygwin /usr/bin/install will append another 3174c3c9db83Smrg # one anyway 3175c3c9db83Smrg case $install_prog,$host in 3176c3c9db83Smrg */usr/bin/install*,*cygwin*) 3177c3c9db83Smrg case $file:$destfile in 3178c3c9db83Smrg *.exe:*.exe) 3179c3c9db83Smrg # this is ok 3180c3c9db83Smrg ;; 3181c3c9db83Smrg *.exe:*) 3182c3c9db83Smrg destfile=$destfile.exe 3183c3c9db83Smrg ;; 3184c3c9db83Smrg *:*.exe) 3185c3c9db83Smrg func_stripname '' '.exe' "$destfile" 3186c3c9db83Smrg destfile=$func_stripname_result 3187c3c9db83Smrg ;; 3188c3c9db83Smrg esac 31892e71ea71Smrg ;; 31902e71ea71Smrg esac 3191c3c9db83Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 3192c3c9db83Smrg $opt_dry_run || if test -n "$outputname"; then 3193c3c9db83Smrg ${RM}r "$tmpdir" 3194c3c9db83Smrg fi 3195c3c9db83Smrg ;; 3196c3c9db83Smrg esac 3197c3c9db83Smrg done 3198692f60a7Smrg 3199c3c9db83Smrg for file in $staticlibs; do 3200c3c9db83Smrg func_basename "$file" 3201c3c9db83Smrg name="$func_basename_result" 3202c3c9db83Smrg 3203c3c9db83Smrg # Set up the ranlib parameters. 3204c3c9db83Smrg oldlib="$destdir/$name" 32053f6d0e1dSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 32063f6d0e1dSmrg tool_oldlib=$func_to_tool_file_result 3207c3c9db83Smrg 3208c3c9db83Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 3209c3c9db83Smrg 3210c3c9db83Smrg if test -n "$stripme" && test -n "$old_striplib"; then 32113f6d0e1dSmrg func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 3212c3c9db83Smrg fi 3213c3c9db83Smrg 3214c3c9db83Smrg # Do each command in the postinstall commands. 3215c3c9db83Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 3216c3c9db83Smrg done 3217c3c9db83Smrg 3218c3c9db83Smrg test -n "$future_libdirs" && \ 3219c3c9db83Smrg func_warning "remember to run \`$progname --finish$future_libdirs'" 3220c3c9db83Smrg 3221c3c9db83Smrg if test -n "$current_libdirs"; then 3222c3c9db83Smrg # Maybe just do a dry run. 3223c3c9db83Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 3224c3c9db83Smrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 3225c3c9db83Smrg else 3226c3c9db83Smrg exit $EXIT_SUCCESS 3227c3c9db83Smrg fi 3228c3c9db83Smrg} 3229c3c9db83Smrg 32303f6d0e1dSmrgtest "$opt_mode" = install && func_mode_install ${1+"$@"} 3231c3c9db83Smrg 3232c3c9db83Smrg 3233c3c9db83Smrg# func_generate_dlsyms outputname originator pic_p 3234c3c9db83Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 3235c3c9db83Smrg# a dlpreopen symbol table. 3236c3c9db83Smrgfunc_generate_dlsyms () 3237c3c9db83Smrg{ 3238c3c9db83Smrg $opt_debug 3239c3c9db83Smrg my_outputname="$1" 3240c3c9db83Smrg my_originator="$2" 3241c3c9db83Smrg my_pic_p="${3-no}" 3242c3c9db83Smrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 3243c3c9db83Smrg my_dlsyms= 3244c3c9db83Smrg 3245c3c9db83Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 3246c3c9db83Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 3247c3c9db83Smrg my_dlsyms="${my_outputname}S.c" 3248c3c9db83Smrg else 3249c3c9db83Smrg func_error "not configured to extract global symbols from dlpreopened files" 3250c3c9db83Smrg fi 3251c3c9db83Smrg fi 3252c3c9db83Smrg 3253c3c9db83Smrg if test -n "$my_dlsyms"; then 3254c3c9db83Smrg case $my_dlsyms in 3255c3c9db83Smrg "") ;; 3256c3c9db83Smrg *.c) 3257c3c9db83Smrg # Discover the nlist of each of the dlfiles. 3258c3c9db83Smrg nlist="$output_objdir/${my_outputname}.nm" 3259c3c9db83Smrg 3260c3c9db83Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 3261c3c9db83Smrg 3262c3c9db83Smrg # Parse the name list into a source file. 3263c3c9db83Smrg func_verbose "creating $output_objdir/$my_dlsyms" 3264c3c9db83Smrg 3265c3c9db83Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 3266c3c9db83Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 3267c3c9db83Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 3268c3c9db83Smrg 3269c3c9db83Smrg#ifdef __cplusplus 3270c3c9db83Smrgextern \"C\" { 3271c3c9db83Smrg#endif 3272c3c9db83Smrg 32733f6d0e1dSmrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 32743f6d0e1dSmrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 32753f6d0e1dSmrg#endif 32763f6d0e1dSmrg 32773f6d0e1dSmrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 32783f6d0e1dSmrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) 32793f6d0e1dSmrg/* DATA imports from DLLs on WIN32 con't be const, because runtime 32803f6d0e1dSmrg relocations are performed -- see ld's documentation on pseudo-relocs. */ 32813f6d0e1dSmrg# define LT_DLSYM_CONST 32823f6d0e1dSmrg#elif defined(__osf__) 32833f6d0e1dSmrg/* This system does not cope well with relocations in const data. */ 32843f6d0e1dSmrg# define LT_DLSYM_CONST 32853f6d0e1dSmrg#else 32863f6d0e1dSmrg# define LT_DLSYM_CONST const 32873f6d0e1dSmrg#endif 32883f6d0e1dSmrg 3289c3c9db83Smrg/* External symbol declarations for the compiler. */\ 3290c3c9db83Smrg" 3291c3c9db83Smrg 3292c3c9db83Smrg if test "$dlself" = yes; then 3293c3c9db83Smrg func_verbose "generating symbol list for \`$output'" 3294c3c9db83Smrg 3295c3c9db83Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 3296c3c9db83Smrg 3297c3c9db83Smrg # Add our own program objects to the symbol list. 32983f6d0e1dSmrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 3299c3c9db83Smrg for progfile in $progfiles; do 33003f6d0e1dSmrg func_to_tool_file "$progfile" func_convert_file_msys_to_w32 33013f6d0e1dSmrg func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" 33023f6d0e1dSmrg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 3303c3c9db83Smrg done 3304c3c9db83Smrg 3305c3c9db83Smrg if test -n "$exclude_expsyms"; then 3306c3c9db83Smrg $opt_dry_run || { 3307c3c9db83Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 3308c3c9db83Smrg eval '$MV "$nlist"T "$nlist"' 3309c3c9db83Smrg } 33102e71ea71Smrg fi 3311c3c9db83Smrg 3312c3c9db83Smrg if test -n "$export_symbols_regex"; then 3313c3c9db83Smrg $opt_dry_run || { 3314c3c9db83Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 3315c3c9db83Smrg eval '$MV "$nlist"T "$nlist"' 3316c3c9db83Smrg } 3317c3c9db83Smrg fi 3318c3c9db83Smrg 3319c3c9db83Smrg # Prepare the list of exported symbols 3320c3c9db83Smrg if test -z "$export_symbols"; then 3321c3c9db83Smrg export_symbols="$output_objdir/$outputname.exp" 3322c3c9db83Smrg $opt_dry_run || { 3323c3c9db83Smrg $RM $export_symbols 3324c3c9db83Smrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 3325c3c9db83Smrg case $host in 3326c3c9db83Smrg *cygwin* | *mingw* | *cegcc* ) 3327c3c9db83Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3328c3c9db83Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 3329c3c9db83Smrg ;; 3330c3c9db83Smrg esac 3331c3c9db83Smrg } 33322e71ea71Smrg else 3333c3c9db83Smrg $opt_dry_run || { 3334c3c9db83Smrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 3335c3c9db83Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 3336c3c9db83Smrg eval '$MV "$nlist"T "$nlist"' 3337c3c9db83Smrg case $host in 33383f6d0e1dSmrg *cygwin* | *mingw* | *cegcc* ) 3339c3c9db83Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3340c3c9db83Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 3341c3c9db83Smrg ;; 3342c3c9db83Smrg esac 3343c3c9db83Smrg } 33442e71ea71Smrg fi 3345c3c9db83Smrg fi 3346692f60a7Smrg 3347c3c9db83Smrg for dlprefile in $dlprefiles; do 3348c3c9db83Smrg func_verbose "extracting global C symbols from \`$dlprefile'" 3349c3c9db83Smrg func_basename "$dlprefile" 3350c3c9db83Smrg name="$func_basename_result" 33513f6d0e1dSmrg case $host in 33523f6d0e1dSmrg *cygwin* | *mingw* | *cegcc* ) 33533f6d0e1dSmrg # if an import library, we need to obtain dlname 33543f6d0e1dSmrg if func_win32_import_lib_p "$dlprefile"; then 33553f6d0e1dSmrg func_tr_sh "$dlprefile" 33563f6d0e1dSmrg eval "curr_lafile=\$libfile_$func_tr_sh_result" 33573f6d0e1dSmrg dlprefile_dlbasename="" 33583f6d0e1dSmrg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 33593f6d0e1dSmrg # Use subshell, to avoid clobbering current variable values 33603f6d0e1dSmrg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 33613f6d0e1dSmrg if test -n "$dlprefile_dlname" ; then 33623f6d0e1dSmrg func_basename "$dlprefile_dlname" 33633f6d0e1dSmrg dlprefile_dlbasename="$func_basename_result" 33643f6d0e1dSmrg else 33653f6d0e1dSmrg # no lafile. user explicitly requested -dlpreopen <import library>. 33663f6d0e1dSmrg $sharedlib_from_linklib_cmd "$dlprefile" 33673f6d0e1dSmrg dlprefile_dlbasename=$sharedlib_from_linklib_result 33683f6d0e1dSmrg fi 33693f6d0e1dSmrg fi 33703f6d0e1dSmrg $opt_dry_run || { 33713f6d0e1dSmrg if test -n "$dlprefile_dlbasename" ; then 33723f6d0e1dSmrg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 33733f6d0e1dSmrg else 33743f6d0e1dSmrg func_warning "Could not compute DLL name from $name" 33753f6d0e1dSmrg eval '$ECHO ": $name " >> "$nlist"' 33763f6d0e1dSmrg fi 33773f6d0e1dSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 33783f6d0e1dSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 33793f6d0e1dSmrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 33803f6d0e1dSmrg } 33813f6d0e1dSmrg else # not an import lib 33823f6d0e1dSmrg $opt_dry_run || { 33833f6d0e1dSmrg eval '$ECHO ": $name " >> "$nlist"' 33843f6d0e1dSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 33853f6d0e1dSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 33863f6d0e1dSmrg } 33873f6d0e1dSmrg fi 33883f6d0e1dSmrg ;; 33893f6d0e1dSmrg *) 33903f6d0e1dSmrg $opt_dry_run || { 33913f6d0e1dSmrg eval '$ECHO ": $name " >> "$nlist"' 33923f6d0e1dSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 33933f6d0e1dSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 33943f6d0e1dSmrg } 33953f6d0e1dSmrg ;; 33963f6d0e1dSmrg esac 3397c3c9db83Smrg done 3398c3c9db83Smrg 3399c3c9db83Smrg $opt_dry_run || { 3400c3c9db83Smrg # Make sure we have at least an empty file. 3401c3c9db83Smrg test -f "$nlist" || : > "$nlist" 3402c3c9db83Smrg 3403c3c9db83Smrg if test -n "$exclude_expsyms"; then 3404c3c9db83Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 3405c3c9db83Smrg $MV "$nlist"T "$nlist" 34062e71ea71Smrg fi 3407c3c9db83Smrg 3408c3c9db83Smrg # Try sorting and uniquifying the output. 3409c3c9db83Smrg if $GREP -v "^: " < "$nlist" | 3410c3c9db83Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 3411c3c9db83Smrg sort -k 3 3412c3c9db83Smrg else 3413c3c9db83Smrg sort +2 3414c3c9db83Smrg fi | 3415c3c9db83Smrg uniq > "$nlist"S; then 3416c3c9db83Smrg : 34172e71ea71Smrg else 3418c3c9db83Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 34192e71ea71Smrg fi 3420692f60a7Smrg 3421c3c9db83Smrg if test -f "$nlist"S; then 3422c3c9db83Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 34232e71ea71Smrg else 34243f6d0e1dSmrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 34252e71ea71Smrg fi 3426692f60a7Smrg 34273f6d0e1dSmrg echo >> "$output_objdir/$my_dlsyms" "\ 3428692f60a7Smrg 3429c3c9db83Smrg/* The mapping between symbol names and symbols. */ 3430c3c9db83Smrgtypedef struct { 3431c3c9db83Smrg const char *name; 3432c3c9db83Smrg void *address; 3433c3c9db83Smrg} lt_dlsymlist; 34343f6d0e1dSmrgextern LT_DLSYM_CONST lt_dlsymlist 3435c3c9db83Smrglt_${my_prefix}_LTX_preloaded_symbols[]; 34363f6d0e1dSmrgLT_DLSYM_CONST lt_dlsymlist 3437c3c9db83Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 3438c3c9db83Smrg{\ 3439c3c9db83Smrg { \"$my_originator\", (void *) 0 }," 3440692f60a7Smrg 3441c3c9db83Smrg case $need_lib_prefix in 3442c3c9db83Smrg no) 3443c3c9db83Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 3444c3c9db83Smrg ;; 3445c3c9db83Smrg *) 3446c3c9db83Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 3447c3c9db83Smrg ;; 3448c3c9db83Smrg esac 34493f6d0e1dSmrg echo >> "$output_objdir/$my_dlsyms" "\ 3450c3c9db83Smrg {0, (void *) 0} 3451c3c9db83Smrg}; 3452692f60a7Smrg 3453c3c9db83Smrg/* This works around a problem in FreeBSD linker */ 3454c3c9db83Smrg#ifdef FREEBSD_WORKAROUND 3455c3c9db83Smrgstatic const void *lt_preloaded_setup() { 3456c3c9db83Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 3457c3c9db83Smrg} 3458c3c9db83Smrg#endif 3459c3c9db83Smrg 3460c3c9db83Smrg#ifdef __cplusplus 3461c3c9db83Smrg} 3462c3c9db83Smrg#endif\ 3463c3c9db83Smrg" 3464c3c9db83Smrg } # !$opt_dry_run 3465c3c9db83Smrg 3466c3c9db83Smrg pic_flag_for_symtable= 3467c3c9db83Smrg case "$compile_command " in 3468c3c9db83Smrg *" -static "*) ;; 3469c3c9db83Smrg *) 3470c3c9db83Smrg case $host in 3471c3c9db83Smrg # compiling the symbol table file with pic_flag works around 3472c3c9db83Smrg # a FreeBSD bug that causes programs to crash when -lm is 3473c3c9db83Smrg # linked before any other PIC object. But we must not use 3474c3c9db83Smrg # pic_flag when linking with -static. The problem exists in 3475c3c9db83Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 34763f6d0e1dSmrg *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 3477c3c9db83Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 3478c3c9db83Smrg *-*-hpux*) 3479c3c9db83Smrg pic_flag_for_symtable=" $pic_flag" ;; 3480c3c9db83Smrg *) 3481c3c9db83Smrg if test "X$my_pic_p" != Xno; then 3482c3c9db83Smrg pic_flag_for_symtable=" $pic_flag" 34832e71ea71Smrg fi 3484c3c9db83Smrg ;; 3485c3c9db83Smrg esac 3486c3c9db83Smrg ;; 3487c3c9db83Smrg esac 3488c3c9db83Smrg symtab_cflags= 3489c3c9db83Smrg for arg in $LTCFLAGS; do 3490c3c9db83Smrg case $arg in 3491c3c9db83Smrg -pie | -fpie | -fPIE) ;; 34923f6d0e1dSmrg *) func_append symtab_cflags " $arg" ;; 3493c3c9db83Smrg esac 3494c3c9db83Smrg done 3495692f60a7Smrg 3496c3c9db83Smrg # Now compile the dynamic symbol file. 3497c3c9db83Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 349885ee4c00Smrg 3499c3c9db83Smrg # Clean up the generated files. 3500c3c9db83Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 3501692f60a7Smrg 3502c3c9db83Smrg # Transform the symbol file into the correct name. 3503c3c9db83Smrg symfileobj="$output_objdir/${my_outputname}S.$objext" 3504c3c9db83Smrg case $host in 3505c3c9db83Smrg *cygwin* | *mingw* | *cegcc* ) 3506c3c9db83Smrg if test -f "$output_objdir/$my_outputname.def"; then 35073f6d0e1dSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 35083f6d0e1dSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 3509c3c9db83Smrg else 35103f6d0e1dSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 35113f6d0e1dSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 35122e71ea71Smrg fi 3513c3c9db83Smrg ;; 3514c3c9db83Smrg *) 35153f6d0e1dSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 35163f6d0e1dSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3517c3c9db83Smrg ;; 3518c3c9db83Smrg esac 3519c3c9db83Smrg ;; 3520c3c9db83Smrg *) 3521c3c9db83Smrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 3522c3c9db83Smrg ;; 3523c3c9db83Smrg esac 3524c3c9db83Smrg else 3525c3c9db83Smrg # We keep going just in case the user didn't refer to 3526c3c9db83Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 3527c3c9db83Smrg # really was required. 3528692f60a7Smrg 3529c3c9db83Smrg # Nullify the symbol file. 35303f6d0e1dSmrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 35313f6d0e1dSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 3532c3c9db83Smrg fi 3533c3c9db83Smrg} 353485ee4c00Smrg 3535c3c9db83Smrg# func_win32_libid arg 3536c3c9db83Smrg# return the library type of file 'arg' 3537c3c9db83Smrg# 3538c3c9db83Smrg# Need a lot of goo to handle *both* DLLs and import libs 3539c3c9db83Smrg# Has to be a shell function in order to 'eat' the argument 3540c3c9db83Smrg# that is supplied when $file_magic_command is called. 35413f6d0e1dSmrg# Despite the name, also deal with 64 bit binaries. 3542c3c9db83Smrgfunc_win32_libid () 3543c3c9db83Smrg{ 3544c3c9db83Smrg $opt_debug 3545c3c9db83Smrg win32_libid_type="unknown" 3546c3c9db83Smrg win32_fileres=`file -L $1 2>/dev/null` 3547c3c9db83Smrg case $win32_fileres in 3548c3c9db83Smrg *ar\ archive\ import\ library*) # definitely import 3549c3c9db83Smrg win32_libid_type="x86 archive import" 3550c3c9db83Smrg ;; 3551c3c9db83Smrg *ar\ archive*) # could be an import, or static 35523f6d0e1dSmrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 3553c3c9db83Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 35543f6d0e1dSmrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 35553f6d0e1dSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 35563f6d0e1dSmrg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 3557c3c9db83Smrg $SED -n -e ' 3558c3c9db83Smrg 1,100{ 3559c3c9db83Smrg / I /{ 3560c3c9db83Smrg s,.*,import, 3561c3c9db83Smrg p 3562c3c9db83Smrg q 3563c3c9db83Smrg } 3564c3c9db83Smrg }'` 3565c3c9db83Smrg case $win32_nmres in 3566c3c9db83Smrg import*) win32_libid_type="x86 archive import";; 3567c3c9db83Smrg *) win32_libid_type="x86 archive static";; 3568c3c9db83Smrg esac 3569c3c9db83Smrg fi 3570c3c9db83Smrg ;; 3571c3c9db83Smrg *DLL*) 3572c3c9db83Smrg win32_libid_type="x86 DLL" 3573c3c9db83Smrg ;; 3574c3c9db83Smrg *executable*) # but shell scripts are "executable" too... 3575c3c9db83Smrg case $win32_fileres in 3576c3c9db83Smrg *MS\ Windows\ PE\ Intel*) 3577c3c9db83Smrg win32_libid_type="x86 DLL" 3578c3c9db83Smrg ;; 3579c3c9db83Smrg esac 3580c3c9db83Smrg ;; 3581c3c9db83Smrg esac 3582c3c9db83Smrg $ECHO "$win32_libid_type" 3583c3c9db83Smrg} 358485ee4c00Smrg 35853f6d0e1dSmrg# func_cygming_dll_for_implib ARG 35863f6d0e1dSmrg# 35873f6d0e1dSmrg# Platform-specific function to extract the 35883f6d0e1dSmrg# name of the DLL associated with the specified 35893f6d0e1dSmrg# import library ARG. 35903f6d0e1dSmrg# Invoked by eval'ing the libtool variable 35913f6d0e1dSmrg# $sharedlib_from_linklib_cmd 35923f6d0e1dSmrg# Result is available in the variable 35933f6d0e1dSmrg# $sharedlib_from_linklib_result 35943f6d0e1dSmrgfunc_cygming_dll_for_implib () 35953f6d0e1dSmrg{ 35963f6d0e1dSmrg $opt_debug 35973f6d0e1dSmrg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 35983f6d0e1dSmrg} 35993f6d0e1dSmrg 36003f6d0e1dSmrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 36013f6d0e1dSmrg# 36023f6d0e1dSmrg# The is the core of a fallback implementation of a 36033f6d0e1dSmrg# platform-specific function to extract the name of the 36043f6d0e1dSmrg# DLL associated with the specified import library LIBNAME. 36053f6d0e1dSmrg# 36063f6d0e1dSmrg# SECTION_NAME is either .idata$6 or .idata$7, depending 36073f6d0e1dSmrg# on the platform and compiler that created the implib. 36083f6d0e1dSmrg# 36093f6d0e1dSmrg# Echos the name of the DLL associated with the 36103f6d0e1dSmrg# specified import library. 36113f6d0e1dSmrgfunc_cygming_dll_for_implib_fallback_core () 36123f6d0e1dSmrg{ 36133f6d0e1dSmrg $opt_debug 36143f6d0e1dSmrg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 36153f6d0e1dSmrg $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 36163f6d0e1dSmrg $SED '/^Contents of section '"$match_literal"':/{ 36173f6d0e1dSmrg # Place marker at beginning of archive member dllname section 36183f6d0e1dSmrg s/.*/====MARK====/ 36193f6d0e1dSmrg p 36203f6d0e1dSmrg d 36213f6d0e1dSmrg } 36223f6d0e1dSmrg # These lines can sometimes be longer than 43 characters, but 36233f6d0e1dSmrg # are always uninteresting 36243f6d0e1dSmrg /:[ ]*file format pe[i]\{,1\}-/d 36253f6d0e1dSmrg /^In archive [^:]*:/d 36263f6d0e1dSmrg # Ensure marker is printed 36273f6d0e1dSmrg /^====MARK====/p 36283f6d0e1dSmrg # Remove all lines with less than 43 characters 36293f6d0e1dSmrg /^.\{43\}/!d 36303f6d0e1dSmrg # From remaining lines, remove first 43 characters 36313f6d0e1dSmrg s/^.\{43\}//' | 36323f6d0e1dSmrg $SED -n ' 36333f6d0e1dSmrg # Join marker and all lines until next marker into a single line 36343f6d0e1dSmrg /^====MARK====/ b para 36353f6d0e1dSmrg H 36363f6d0e1dSmrg $ b para 36373f6d0e1dSmrg b 36383f6d0e1dSmrg :para 36393f6d0e1dSmrg x 36403f6d0e1dSmrg s/\n//g 36413f6d0e1dSmrg # Remove the marker 36423f6d0e1dSmrg s/^====MARK====// 36433f6d0e1dSmrg # Remove trailing dots and whitespace 36443f6d0e1dSmrg s/[\. \t]*$// 36453f6d0e1dSmrg # Print 36463f6d0e1dSmrg /./p' | 36473f6d0e1dSmrg # we now have a list, one entry per line, of the stringified 36483f6d0e1dSmrg # contents of the appropriate section of all members of the 36493f6d0e1dSmrg # archive which possess that section. Heuristic: eliminate 36503f6d0e1dSmrg # all those which have a first or second character that is 36513f6d0e1dSmrg # a '.' (that is, objdump's representation of an unprintable 36523f6d0e1dSmrg # character.) This should work for all archives with less than 36533f6d0e1dSmrg # 0x302f exports -- but will fail for DLLs whose name actually 36543f6d0e1dSmrg # begins with a literal '.' or a single character followed by 36553f6d0e1dSmrg # a '.'. 36563f6d0e1dSmrg # 36573f6d0e1dSmrg # Of those that remain, print the first one. 36583f6d0e1dSmrg $SED -e '/^\./d;/^.\./d;q' 36593f6d0e1dSmrg} 36603f6d0e1dSmrg 36613f6d0e1dSmrg# func_cygming_gnu_implib_p ARG 36623f6d0e1dSmrg# This predicate returns with zero status (TRUE) if 36633f6d0e1dSmrg# ARG is a GNU/binutils-style import library. Returns 36643f6d0e1dSmrg# with nonzero status (FALSE) otherwise. 36653f6d0e1dSmrgfunc_cygming_gnu_implib_p () 36663f6d0e1dSmrg{ 36673f6d0e1dSmrg $opt_debug 36683f6d0e1dSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 36693f6d0e1dSmrg 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)$'` 36703f6d0e1dSmrg test -n "$func_cygming_gnu_implib_tmp" 36713f6d0e1dSmrg} 36723f6d0e1dSmrg 36733f6d0e1dSmrg# func_cygming_ms_implib_p ARG 36743f6d0e1dSmrg# This predicate returns with zero status (TRUE) if 36753f6d0e1dSmrg# ARG is an MS-style import library. Returns 36763f6d0e1dSmrg# with nonzero status (FALSE) otherwise. 36773f6d0e1dSmrgfunc_cygming_ms_implib_p () 36783f6d0e1dSmrg{ 36793f6d0e1dSmrg $opt_debug 36803f6d0e1dSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 36813f6d0e1dSmrg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 36823f6d0e1dSmrg test -n "$func_cygming_ms_implib_tmp" 36833f6d0e1dSmrg} 36843f6d0e1dSmrg 36853f6d0e1dSmrg# func_cygming_dll_for_implib_fallback ARG 36863f6d0e1dSmrg# Platform-specific function to extract the 36873f6d0e1dSmrg# name of the DLL associated with the specified 36883f6d0e1dSmrg# import library ARG. 36893f6d0e1dSmrg# 36903f6d0e1dSmrg# This fallback implementation is for use when $DLLTOOL 36913f6d0e1dSmrg# does not support the --identify-strict option. 36923f6d0e1dSmrg# Invoked by eval'ing the libtool variable 36933f6d0e1dSmrg# $sharedlib_from_linklib_cmd 36943f6d0e1dSmrg# Result is available in the variable 36953f6d0e1dSmrg# $sharedlib_from_linklib_result 36963f6d0e1dSmrgfunc_cygming_dll_for_implib_fallback () 36973f6d0e1dSmrg{ 36983f6d0e1dSmrg $opt_debug 36993f6d0e1dSmrg if func_cygming_gnu_implib_p "$1" ; then 37003f6d0e1dSmrg # binutils import library 37013f6d0e1dSmrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 37023f6d0e1dSmrg elif func_cygming_ms_implib_p "$1" ; then 37033f6d0e1dSmrg # ms-generated import library 37043f6d0e1dSmrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 37053f6d0e1dSmrg else 37063f6d0e1dSmrg # unknown 37073f6d0e1dSmrg sharedlib_from_linklib_result="" 37083f6d0e1dSmrg fi 37093f6d0e1dSmrg} 371085ee4c00Smrg 371185ee4c00Smrg 3712c3c9db83Smrg# func_extract_an_archive dir oldlib 3713c3c9db83Smrgfunc_extract_an_archive () 3714c3c9db83Smrg{ 3715c3c9db83Smrg $opt_debug 3716c3c9db83Smrg f_ex_an_ar_dir="$1"; shift 3717c3c9db83Smrg f_ex_an_ar_oldlib="$1" 37183f6d0e1dSmrg if test "$lock_old_archive_extraction" = yes; then 37193f6d0e1dSmrg lockfile=$f_ex_an_ar_oldlib.lock 37203f6d0e1dSmrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 37213f6d0e1dSmrg func_echo "Waiting for $lockfile to be removed" 37223f6d0e1dSmrg sleep 2 37233f6d0e1dSmrg done 37243f6d0e1dSmrg fi 37253f6d0e1dSmrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 37263f6d0e1dSmrg 'stat=$?; rm -f "$lockfile"; exit $stat' 37273f6d0e1dSmrg if test "$lock_old_archive_extraction" = yes; then 37283f6d0e1dSmrg $opt_dry_run || rm -f "$lockfile" 37293f6d0e1dSmrg fi 3730c3c9db83Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 3731c3c9db83Smrg : 3732c3c9db83Smrg else 3733c3c9db83Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 3734c3c9db83Smrg fi 3735c3c9db83Smrg} 3736692f60a7Smrg 3737692f60a7Smrg 3738c3c9db83Smrg# func_extract_archives gentop oldlib ... 3739c3c9db83Smrgfunc_extract_archives () 3740c3c9db83Smrg{ 3741c3c9db83Smrg $opt_debug 3742c3c9db83Smrg my_gentop="$1"; shift 3743c3c9db83Smrg my_oldlibs=${1+"$@"} 3744c3c9db83Smrg my_oldobjs="" 3745c3c9db83Smrg my_xlib="" 3746c3c9db83Smrg my_xabs="" 3747c3c9db83Smrg my_xdir="" 3748692f60a7Smrg 3749c3c9db83Smrg for my_xlib in $my_oldlibs; do 3750c3c9db83Smrg # Extract the objects. 3751c3c9db83Smrg case $my_xlib in 3752c3c9db83Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 3753c3c9db83Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 3754c3c9db83Smrg esac 3755c3c9db83Smrg func_basename "$my_xlib" 3756c3c9db83Smrg my_xlib="$func_basename_result" 3757c3c9db83Smrg my_xlib_u=$my_xlib 3758c3c9db83Smrg while :; do 3759c3c9db83Smrg case " $extracted_archives " in 3760c3c9db83Smrg *" $my_xlib_u "*) 3761c3c9db83Smrg func_arith $extracted_serial + 1 3762c3c9db83Smrg extracted_serial=$func_arith_result 3763c3c9db83Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 3764c3c9db83Smrg *) break ;; 3765c3c9db83Smrg esac 3766c3c9db83Smrg done 3767c3c9db83Smrg extracted_archives="$extracted_archives $my_xlib_u" 3768c3c9db83Smrg my_xdir="$my_gentop/$my_xlib_u" 3769692f60a7Smrg 3770c3c9db83Smrg func_mkdir_p "$my_xdir" 377185ee4c00Smrg 3772c3c9db83Smrg case $host in 3773c3c9db83Smrg *-darwin*) 3774c3c9db83Smrg func_verbose "Extracting $my_xabs" 3775c3c9db83Smrg # Do not bother doing anything if just a dry run 3776c3c9db83Smrg $opt_dry_run || { 3777c3c9db83Smrg darwin_orig_dir=`pwd` 3778c3c9db83Smrg cd $my_xdir || exit $? 3779c3c9db83Smrg darwin_archive=$my_xabs 3780c3c9db83Smrg darwin_curdir=`pwd` 3781c3c9db83Smrg darwin_base_archive=`basename "$darwin_archive"` 3782c3c9db83Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 3783c3c9db83Smrg if test -n "$darwin_arches"; then 3784c3c9db83Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 3785c3c9db83Smrg darwin_arch= 3786c3c9db83Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 3787c3c9db83Smrg for darwin_arch in $darwin_arches ; do 3788c3c9db83Smrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3789c3c9db83Smrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 3790c3c9db83Smrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3791c3c9db83Smrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 3792c3c9db83Smrg cd "$darwin_curdir" 3793c3c9db83Smrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 3794c3c9db83Smrg done # $darwin_arches 3795c3c9db83Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 3796c3c9db83Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 3797c3c9db83Smrg darwin_file= 3798c3c9db83Smrg darwin_files= 3799c3c9db83Smrg for darwin_file in $darwin_filelist; do 38003f6d0e1dSmrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 3801c3c9db83Smrg $LIPO -create -output "$darwin_file" $darwin_files 3802c3c9db83Smrg done # $darwin_filelist 3803c3c9db83Smrg $RM -rf unfat-$$ 3804c3c9db83Smrg cd "$darwin_orig_dir" 38052e71ea71Smrg else 3806c3c9db83Smrg cd $darwin_orig_dir 3807c3c9db83Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 3808c3c9db83Smrg fi # $darwin_arches 3809c3c9db83Smrg } # !$opt_dry_run 3810c3c9db83Smrg ;; 3811c3c9db83Smrg *) 3812c3c9db83Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 3813c3c9db83Smrg ;; 3814c3c9db83Smrg esac 38153f6d0e1dSmrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 3816c3c9db83Smrg done 3817692f60a7Smrg 3818c3c9db83Smrg func_extract_archives_result="$my_oldobjs" 3819c3c9db83Smrg} 3820692f60a7Smrg 3821692f60a7Smrg 38223f6d0e1dSmrg# func_emit_wrapper [arg=no] 38233f6d0e1dSmrg# 38243f6d0e1dSmrg# Emit a libtool wrapper script on stdout. 38253f6d0e1dSmrg# Don't directly open a file because we may want to 38263f6d0e1dSmrg# incorporate the script contents within a cygwin/mingw 38273f6d0e1dSmrg# wrapper executable. Must ONLY be called from within 38283f6d0e1dSmrg# func_mode_link because it depends on a number of variables 38293f6d0e1dSmrg# set therein. 3830c3c9db83Smrg# 38313f6d0e1dSmrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 38323f6d0e1dSmrg# variable will take. If 'yes', then the emitted script 38333f6d0e1dSmrg# will assume that the directory in which it is stored is 38343f6d0e1dSmrg# the $objdir directory. This is a cygwin/mingw-specific 38353f6d0e1dSmrg# behavior. 38363f6d0e1dSmrgfunc_emit_wrapper () 3837c3c9db83Smrg{ 38383f6d0e1dSmrg func_emit_wrapper_arg1=${1-no} 38392e71ea71Smrg 3840c3c9db83Smrg $ECHO "\ 3841c3c9db83Smrg#! $SHELL 3842692f60a7Smrg 3843c3c9db83Smrg# $output - temporary wrapper script for $objdir/$outputname 3844c3c9db83Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 3845c3c9db83Smrg# 3846c3c9db83Smrg# The $output program cannot be directly executed until all the libtool 3847c3c9db83Smrg# libraries that it depends on are installed. 3848c3c9db83Smrg# 3849c3c9db83Smrg# This wrapper script should never be moved out of the build directory. 3850c3c9db83Smrg# If it is, it will not operate correctly. 3851692f60a7Smrg 3852c3c9db83Smrg# Sed substitution that helps us do robust quoting. It backslashifies 3853c3c9db83Smrg# metacharacters that are still active within double-quoted strings. 3854c3c9db83Smrgsed_quote_subst='$sed_quote_subst' 3855692f60a7Smrg 3856c3c9db83Smrg# Be Bourne compatible 3857c3c9db83Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 3858c3c9db83Smrg emulate sh 3859c3c9db83Smrg NULLCMD=: 3860c3c9db83Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 3861c3c9db83Smrg # is contrary to our usage. Disable this feature. 3862c3c9db83Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 3863c3c9db83Smrg setopt NO_GLOB_SUBST 3864c3c9db83Smrgelse 3865c3c9db83Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 3866c3c9db83Smrgfi 3867c3c9db83SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 3868c3c9db83SmrgDUALCASE=1; export DUALCASE # for MKS sh 3869692f60a7Smrg 3870c3c9db83Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 3871c3c9db83Smrg# if CDPATH is set. 3872c3c9db83Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 3873692f60a7Smrg 3874c3c9db83Smrgrelink_command=\"$relink_command\" 3875692f60a7Smrg 3876c3c9db83Smrg# This environment variable determines our operation mode. 3877c3c9db83Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 3878c3c9db83Smrg # install mode needs the following variables: 3879c3c9db83Smrg generated_by_libtool_version='$macro_version' 3880c3c9db83Smrg notinst_deplibs='$notinst_deplibs' 3881c3c9db83Smrgelse 3882c3c9db83Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 3883c3c9db83Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 38843f6d0e1dSmrg file=\"\$0\"" 38853f6d0e1dSmrg 38863f6d0e1dSmrg qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 38873f6d0e1dSmrg $ECHO "\ 38883f6d0e1dSmrg 38893f6d0e1dSmrg# A function that is used when there is no print builtin or printf. 38903f6d0e1dSmrgfunc_fallback_echo () 38913f6d0e1dSmrg{ 38923f6d0e1dSmrg eval 'cat <<_LTECHO_EOF 38933f6d0e1dSmrg\$1 38943f6d0e1dSmrg_LTECHO_EOF' 38953f6d0e1dSmrg} 38963f6d0e1dSmrg ECHO=\"$qECHO\" 38973f6d0e1dSmrg fi 38983f6d0e1dSmrg 38993f6d0e1dSmrg# Very basic option parsing. These options are (a) specific to 39003f6d0e1dSmrg# the libtool wrapper, (b) are identical between the wrapper 39013f6d0e1dSmrg# /script/ and the wrapper /executable/ which is used only on 39023f6d0e1dSmrg# windows platforms, and (c) all begin with the string "--lt-" 39033f6d0e1dSmrg# (application programs are unlikely to have options which match 39043f6d0e1dSmrg# this pattern). 39053f6d0e1dSmrg# 39063f6d0e1dSmrg# There are only two supported options: --lt-debug and 39073f6d0e1dSmrg# --lt-dump-script. There is, deliberately, no --lt-help. 39083f6d0e1dSmrg# 39093f6d0e1dSmrg# The first argument to this parsing function should be the 39103f6d0e1dSmrg# script's $0 value, followed by "$@". 39113f6d0e1dSmrglt_option_debug= 39123f6d0e1dSmrgfunc_parse_lt_options () 39133f6d0e1dSmrg{ 39143f6d0e1dSmrg lt_script_arg0=\$0 39153f6d0e1dSmrg shift 39163f6d0e1dSmrg for lt_opt 39173f6d0e1dSmrg do 39183f6d0e1dSmrg case \"\$lt_opt\" in 39193f6d0e1dSmrg --lt-debug) lt_option_debug=1 ;; 39203f6d0e1dSmrg --lt-dump-script) 39213f6d0e1dSmrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 39223f6d0e1dSmrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 39233f6d0e1dSmrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 39243f6d0e1dSmrg cat \"\$lt_dump_D/\$lt_dump_F\" 39253f6d0e1dSmrg exit 0 39263f6d0e1dSmrg ;; 39273f6d0e1dSmrg --lt-*) 39283f6d0e1dSmrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 39293f6d0e1dSmrg exit 1 39303f6d0e1dSmrg ;; 39313f6d0e1dSmrg esac 39323f6d0e1dSmrg done 39333f6d0e1dSmrg 39343f6d0e1dSmrg # Print the debug banner immediately: 39353f6d0e1dSmrg if test -n \"\$lt_option_debug\"; then 39363f6d0e1dSmrg echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 39373f6d0e1dSmrg fi 39383f6d0e1dSmrg} 39393f6d0e1dSmrg 39403f6d0e1dSmrg# Used when --lt-debug. Prints its arguments to stdout 39413f6d0e1dSmrg# (redirection is the responsibility of the caller) 39423f6d0e1dSmrgfunc_lt_dump_args () 39433f6d0e1dSmrg{ 39443f6d0e1dSmrg lt_dump_args_N=1; 39453f6d0e1dSmrg for lt_arg 39463f6d0e1dSmrg do 39473f6d0e1dSmrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" 39483f6d0e1dSmrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 39493f6d0e1dSmrg done 39503f6d0e1dSmrg} 39513f6d0e1dSmrg 39523f6d0e1dSmrg# Core function for launching the target application 39533f6d0e1dSmrgfunc_exec_program_core () 39543f6d0e1dSmrg{ 3955c3c9db83Smrg" 39563f6d0e1dSmrg case $host in 39573f6d0e1dSmrg # Backslashes separate directories on plain windows 39583f6d0e1dSmrg *-*-mingw | *-*-os2* | *-cegcc*) 39593f6d0e1dSmrg $ECHO "\ 39603f6d0e1dSmrg if test -n \"\$lt_option_debug\"; then 39613f6d0e1dSmrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 39623f6d0e1dSmrg func_lt_dump_args \${1+\"\$@\"} 1>&2 39633f6d0e1dSmrg fi 39643f6d0e1dSmrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 39653f6d0e1dSmrg" 39663f6d0e1dSmrg ;; 39673f6d0e1dSmrg 39683f6d0e1dSmrg *) 39693f6d0e1dSmrg $ECHO "\ 39703f6d0e1dSmrg if test -n \"\$lt_option_debug\"; then 39713f6d0e1dSmrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 39723f6d0e1dSmrg func_lt_dump_args \${1+\"\$@\"} 1>&2 39733f6d0e1dSmrg fi 39743f6d0e1dSmrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 39753f6d0e1dSmrg" 39763f6d0e1dSmrg ;; 39773f6d0e1dSmrg esac 39783f6d0e1dSmrg $ECHO "\ 39793f6d0e1dSmrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 39803f6d0e1dSmrg exit 1 39813f6d0e1dSmrg} 39823f6d0e1dSmrg 39833f6d0e1dSmrg# A function to encapsulate launching the target application 39843f6d0e1dSmrg# Strips options in the --lt-* namespace from \$@ and 39853f6d0e1dSmrg# launches target application with the remaining arguments. 39863f6d0e1dSmrgfunc_exec_program () 39873f6d0e1dSmrg{ 39883f6d0e1dSmrg case \" \$* \" in 39893f6d0e1dSmrg *\\ --lt-*) 39903f6d0e1dSmrg for lt_wr_arg 39913f6d0e1dSmrg do 39923f6d0e1dSmrg case \$lt_wr_arg in 39933f6d0e1dSmrg --lt-*) ;; 39943f6d0e1dSmrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 39953f6d0e1dSmrg esac 39963f6d0e1dSmrg shift 39973f6d0e1dSmrg done ;; 39983f6d0e1dSmrg esac 39993f6d0e1dSmrg func_exec_program_core \${1+\"\$@\"} 40003f6d0e1dSmrg} 40013f6d0e1dSmrg 40023f6d0e1dSmrg # Parse options 40033f6d0e1dSmrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 4004692f60a7Smrg 4005c3c9db83Smrg # Find the directory that this script lives in. 40063f6d0e1dSmrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 4007c3c9db83Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 4008692f60a7Smrg 4009c3c9db83Smrg # Follow symbolic links until we get to the real thisdir. 40103f6d0e1dSmrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 4011c3c9db83Smrg while test -n \"\$file\"; do 40123f6d0e1dSmrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 4013692f60a7Smrg 4014c3c9db83Smrg # If there was a directory component, then change thisdir. 4015c3c9db83Smrg if test \"x\$destdir\" != \"x\$file\"; then 4016c3c9db83Smrg case \"\$destdir\" in 4017c3c9db83Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 4018c3c9db83Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 40192e71ea71Smrg esac 4020c3c9db83Smrg fi 4021692f60a7Smrg 40223f6d0e1dSmrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 40233f6d0e1dSmrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 4024c3c9db83Smrg done 4025692f60a7Smrg 4026c3c9db83Smrg # Usually 'no', except on cygwin/mingw when embedded into 4027c3c9db83Smrg # the cwrapper. 40283f6d0e1dSmrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 4029c3c9db83Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 4030c3c9db83Smrg # special case for '.' 4031c3c9db83Smrg if test \"\$thisdir\" = \".\"; then 4032c3c9db83Smrg thisdir=\`pwd\` 4033c3c9db83Smrg fi 4034c3c9db83Smrg # remove .libs from thisdir 4035c3c9db83Smrg case \"\$thisdir\" in 40363f6d0e1dSmrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 4037c3c9db83Smrg $objdir ) thisdir=. ;; 4038c3c9db83Smrg esac 4039c3c9db83Smrg fi 4040c3c9db83Smrg 4041c3c9db83Smrg # Try to get the absolute directory name. 4042c3c9db83Smrg absdir=\`cd \"\$thisdir\" && pwd\` 4043c3c9db83Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 4044c3c9db83Smrg" 4045c3c9db83Smrg 4046c3c9db83Smrg if test "$fast_install" = yes; then 4047c3c9db83Smrg $ECHO "\ 4048c3c9db83Smrg program=lt-'$outputname'$exeext 4049c3c9db83Smrg progdir=\"\$thisdir/$objdir\" 4050c3c9db83Smrg 4051c3c9db83Smrg if test ! -f \"\$progdir/\$program\" || 4052c3c9db83Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 4053c3c9db83Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 4054c3c9db83Smrg 4055c3c9db83Smrg file=\"\$\$-\$program\" 4056c3c9db83Smrg 4057c3c9db83Smrg if test ! -d \"\$progdir\"; then 4058c3c9db83Smrg $MKDIR \"\$progdir\" 4059c3c9db83Smrg else 4060c3c9db83Smrg $RM \"\$progdir/\$file\" 4061c3c9db83Smrg fi" 4062c3c9db83Smrg 4063c3c9db83Smrg $ECHO "\ 4064c3c9db83Smrg 4065c3c9db83Smrg # relink executable if necessary 4066c3c9db83Smrg if test -n \"\$relink_command\"; then 4067c3c9db83Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 4068c3c9db83Smrg else 4069c3c9db83Smrg $ECHO \"\$relink_command_output\" >&2 4070c3c9db83Smrg $RM \"\$progdir/\$file\" 4071c3c9db83Smrg exit 1 40722e71ea71Smrg fi 4073c3c9db83Smrg fi 4074692f60a7Smrg 4075c3c9db83Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 4076c3c9db83Smrg { $RM \"\$progdir/\$program\"; 4077c3c9db83Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 4078c3c9db83Smrg $RM \"\$progdir/\$file\" 4079c3c9db83Smrg fi" 4080c3c9db83Smrg else 4081c3c9db83Smrg $ECHO "\ 4082c3c9db83Smrg program='$outputname' 4083c3c9db83Smrg progdir=\"\$thisdir/$objdir\" 4084c3c9db83Smrg" 40852e71ea71Smrg fi 4086692f60a7Smrg 4087c3c9db83Smrg $ECHO "\ 4088692f60a7Smrg 4089c3c9db83Smrg if test -f \"\$progdir/\$program\"; then" 4090692f60a7Smrg 40913f6d0e1dSmrg # fixup the dll searchpath if we need to. 40923f6d0e1dSmrg # 40933f6d0e1dSmrg # Fix the DLL searchpath if we need to. Do this before prepending 40943f6d0e1dSmrg # to shlibpath, because on Windows, both are PATH and uninstalled 40953f6d0e1dSmrg # libraries must come first. 40963f6d0e1dSmrg if test -n "$dllsearchpath"; then 40973f6d0e1dSmrg $ECHO "\ 40983f6d0e1dSmrg # Add the dll search path components to the executable PATH 40993f6d0e1dSmrg PATH=$dllsearchpath:\$PATH 41003f6d0e1dSmrg" 41013f6d0e1dSmrg fi 41023f6d0e1dSmrg 4103c3c9db83Smrg # Export our shlibpath_var if we have one. 4104c3c9db83Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4105c3c9db83Smrg $ECHO "\ 4106c3c9db83Smrg # Add our own library path to $shlibpath_var 4107c3c9db83Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 4108c3c9db83Smrg 4109c3c9db83Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 4110c3c9db83Smrg # The second colon is a workaround for a bug in BeOS R4 sed 41113f6d0e1dSmrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 4112692f60a7Smrg 4113c3c9db83Smrg export $shlibpath_var 4114c3c9db83Smrg" 41152e71ea71Smrg fi 4116692f60a7Smrg 4117c3c9db83Smrg $ECHO "\ 4118c3c9db83Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 4119c3c9db83Smrg # Run the actual program with our arguments. 41203f6d0e1dSmrg func_exec_program \${1+\"\$@\"} 4121c3c9db83Smrg fi 4122c3c9db83Smrg else 4123c3c9db83Smrg # The program doesn't exist. 4124c3c9db83Smrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 4125c3c9db83Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 41263f6d0e1dSmrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 4127c3c9db83Smrg exit 1 4128c3c9db83Smrg fi 4129c3c9db83Smrgfi\ 4130c3c9db83Smrg" 4131c3c9db83Smrg} 4132692f60a7Smrg 413385ee4c00Smrg 4134c3c9db83Smrg# func_emit_cwrapperexe_src 4135c3c9db83Smrg# emit the source code for a wrapper executable on stdout 4136c3c9db83Smrg# Must ONLY be called from within func_mode_link because 4137c3c9db83Smrg# it depends on a number of variable set therein. 4138c3c9db83Smrgfunc_emit_cwrapperexe_src () 4139c3c9db83Smrg{ 4140c3c9db83Smrg cat <<EOF 4141692f60a7Smrg 4142c3c9db83Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 4143c3c9db83Smrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 4144692f60a7Smrg 4145c3c9db83Smrg The $output program cannot be directly executed until all the libtool 4146c3c9db83Smrg libraries that it depends on are installed. 4147692f60a7Smrg 4148c3c9db83Smrg This wrapper executable should never be moved out of the build directory. 4149c3c9db83Smrg If it is, it will not operate correctly. 4150c3c9db83Smrg*/ 4151c3c9db83SmrgEOF 4152c3c9db83Smrg cat <<"EOF" 41533f6d0e1dSmrg#ifdef _MSC_VER 41543f6d0e1dSmrg# define _CRT_SECURE_NO_DEPRECATE 1 41553f6d0e1dSmrg#endif 4156c3c9db83Smrg#include <stdio.h> 4157c3c9db83Smrg#include <stdlib.h> 4158c3c9db83Smrg#ifdef _MSC_VER 4159c3c9db83Smrg# include <direct.h> 4160c3c9db83Smrg# include <process.h> 4161c3c9db83Smrg# include <io.h> 4162c3c9db83Smrg#else 4163c3c9db83Smrg# include <unistd.h> 4164c3c9db83Smrg# include <stdint.h> 4165c3c9db83Smrg# ifdef __CYGWIN__ 4166c3c9db83Smrg# include <io.h> 4167c3c9db83Smrg# endif 4168c3c9db83Smrg#endif 4169c3c9db83Smrg#include <malloc.h> 4170c3c9db83Smrg#include <stdarg.h> 4171c3c9db83Smrg#include <assert.h> 4172c3c9db83Smrg#include <string.h> 4173c3c9db83Smrg#include <ctype.h> 4174c3c9db83Smrg#include <errno.h> 4175c3c9db83Smrg#include <fcntl.h> 4176c3c9db83Smrg#include <sys/stat.h> 4177692f60a7Smrg 41783f6d0e1dSmrg/* declarations of non-ANSI functions */ 41793f6d0e1dSmrg#if defined(__MINGW32__) 41803f6d0e1dSmrg# ifdef __STRICT_ANSI__ 41813f6d0e1dSmrgint _putenv (const char *); 41823f6d0e1dSmrg# endif 41833f6d0e1dSmrg#elif defined(__CYGWIN__) 41843f6d0e1dSmrg# ifdef __STRICT_ANSI__ 41853f6d0e1dSmrgchar *realpath (const char *, char *); 41863f6d0e1dSmrgint putenv (char *); 41873f6d0e1dSmrgint setenv (const char *, const char *, int); 41883f6d0e1dSmrg# endif 41893f6d0e1dSmrg/* #elif defined (other platforms) ... */ 41903f6d0e1dSmrg#endif 41913f6d0e1dSmrg 41923f6d0e1dSmrg/* portability defines, excluding path handling macros */ 41933f6d0e1dSmrg#if defined(_MSC_VER) 41943f6d0e1dSmrg# define setmode _setmode 41953f6d0e1dSmrg# define stat _stat 41963f6d0e1dSmrg# define chmod _chmod 41973f6d0e1dSmrg# define getcwd _getcwd 41983f6d0e1dSmrg# define putenv _putenv 41993f6d0e1dSmrg# define S_IXUSR _S_IEXEC 42003f6d0e1dSmrg# ifndef _INTPTR_T_DEFINED 42013f6d0e1dSmrg# define _INTPTR_T_DEFINED 42023f6d0e1dSmrg# define intptr_t int 42033f6d0e1dSmrg# endif 42043f6d0e1dSmrg#elif defined(__MINGW32__) 42053f6d0e1dSmrg# define setmode _setmode 42063f6d0e1dSmrg# define stat _stat 42073f6d0e1dSmrg# define chmod _chmod 42083f6d0e1dSmrg# define getcwd _getcwd 42093f6d0e1dSmrg# define putenv _putenv 42103f6d0e1dSmrg#elif defined(__CYGWIN__) 42113f6d0e1dSmrg# define HAVE_SETENV 42123f6d0e1dSmrg# define FOPEN_WB "wb" 42133f6d0e1dSmrg/* #elif defined (other platforms) ... */ 42143f6d0e1dSmrg#endif 42153f6d0e1dSmrg 4216c3c9db83Smrg#if defined(PATH_MAX) 4217c3c9db83Smrg# define LT_PATHMAX PATH_MAX 4218c3c9db83Smrg#elif defined(MAXPATHLEN) 4219c3c9db83Smrg# define LT_PATHMAX MAXPATHLEN 4220c3c9db83Smrg#else 4221c3c9db83Smrg# define LT_PATHMAX 1024 4222c3c9db83Smrg#endif 4223692f60a7Smrg 4224c3c9db83Smrg#ifndef S_IXOTH 4225c3c9db83Smrg# define S_IXOTH 0 4226c3c9db83Smrg#endif 4227c3c9db83Smrg#ifndef S_IXGRP 4228c3c9db83Smrg# define S_IXGRP 0 4229c3c9db83Smrg#endif 4230692f60a7Smrg 42313f6d0e1dSmrg/* path handling portability macros */ 4232c3c9db83Smrg#ifndef DIR_SEPARATOR 4233c3c9db83Smrg# define DIR_SEPARATOR '/' 4234c3c9db83Smrg# define PATH_SEPARATOR ':' 4235c3c9db83Smrg#endif 4236692f60a7Smrg 4237c3c9db83Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 4238c3c9db83Smrg defined (__OS2__) 4239c3c9db83Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 4240c3c9db83Smrg# define FOPEN_WB "wb" 4241c3c9db83Smrg# ifndef DIR_SEPARATOR_2 4242c3c9db83Smrg# define DIR_SEPARATOR_2 '\\' 4243c3c9db83Smrg# endif 4244c3c9db83Smrg# ifndef PATH_SEPARATOR_2 4245c3c9db83Smrg# define PATH_SEPARATOR_2 ';' 4246c3c9db83Smrg# endif 4247c3c9db83Smrg#endif 4248692f60a7Smrg 4249c3c9db83Smrg#ifndef DIR_SEPARATOR_2 4250c3c9db83Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 4251c3c9db83Smrg#else /* DIR_SEPARATOR_2 */ 4252c3c9db83Smrg# define IS_DIR_SEPARATOR(ch) \ 4253c3c9db83Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 4254c3c9db83Smrg#endif /* DIR_SEPARATOR_2 */ 4255692f60a7Smrg 4256c3c9db83Smrg#ifndef PATH_SEPARATOR_2 4257c3c9db83Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 4258c3c9db83Smrg#else /* PATH_SEPARATOR_2 */ 4259c3c9db83Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 4260c3c9db83Smrg#endif /* PATH_SEPARATOR_2 */ 4261692f60a7Smrg 4262c3c9db83Smrg#ifndef FOPEN_WB 4263c3c9db83Smrg# define FOPEN_WB "w" 4264c3c9db83Smrg#endif 4265c3c9db83Smrg#ifndef _O_BINARY 4266c3c9db83Smrg# define _O_BINARY 0 4267c3c9db83Smrg#endif 4268692f60a7Smrg 4269c3c9db83Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 4270c3c9db83Smrg#define XFREE(stale) do { \ 4271c3c9db83Smrg if (stale) { free ((void *) stale); stale = 0; } \ 4272c3c9db83Smrg} while (0) 4273692f60a7Smrg 42743f6d0e1dSmrg#if defined(LT_DEBUGWRAPPER) 42753f6d0e1dSmrgstatic int lt_debug = 1; 4276c3c9db83Smrg#else 42773f6d0e1dSmrgstatic int lt_debug = 0; 4278c3c9db83Smrg#endif 4279692f60a7Smrg 42803f6d0e1dSmrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 4281692f60a7Smrg 4282c3c9db83Smrgvoid *xmalloc (size_t num); 4283c3c9db83Smrgchar *xstrdup (const char *string); 4284c3c9db83Smrgconst char *base_name (const char *name); 4285c3c9db83Smrgchar *find_executable (const char *wrapper); 4286c3c9db83Smrgchar *chase_symlinks (const char *pathspec); 4287c3c9db83Smrgint make_executable (const char *path); 4288c3c9db83Smrgint check_executable (const char *path); 4289c3c9db83Smrgchar *strendzap (char *str, const char *pat); 42903f6d0e1dSmrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 42913f6d0e1dSmrgvoid lt_fatal (const char *file, int line, const char *message, ...); 42923f6d0e1dSmrgstatic const char *nonnull (const char *s); 42933f6d0e1dSmrgstatic const char *nonempty (const char *s); 4294c3c9db83Smrgvoid lt_setenv (const char *name, const char *value); 4295c3c9db83Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 4296c3c9db83Smrgvoid lt_update_exe_path (const char *name, const char *value); 4297c3c9db83Smrgvoid lt_update_lib_path (const char *name, const char *value); 42983f6d0e1dSmrgchar **prepare_spawn (char **argv); 42993f6d0e1dSmrgvoid lt_dump_script (FILE *f); 4300c3c9db83SmrgEOF 4301c3c9db83Smrg 4302c3c9db83Smrg cat <<EOF 43033f6d0e1dSmrgvolatile const char * MAGIC_EXE = "$magic_exe"; 4304c3c9db83Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 4305c3c9db83SmrgEOF 4306692f60a7Smrg 4307c3c9db83Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 43083f6d0e1dSmrg func_to_host_path "$temp_rpath" 4309c3c9db83Smrg cat <<EOF 43103f6d0e1dSmrgconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 4311c3c9db83SmrgEOF 4312c3c9db83Smrg else 4313c3c9db83Smrg cat <<"EOF" 4314c3c9db83Smrgconst char * LIB_PATH_VALUE = ""; 4315c3c9db83SmrgEOF 43162e71ea71Smrg fi 4317692f60a7Smrg 4318c3c9db83Smrg if test -n "$dllsearchpath"; then 43193f6d0e1dSmrg func_to_host_path "$dllsearchpath:" 4320c3c9db83Smrg cat <<EOF 4321c3c9db83Smrgconst char * EXE_PATH_VARNAME = "PATH"; 43223f6d0e1dSmrgconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 43232e71ea71SmrgEOF 43242e71ea71Smrg else 4325c3c9db83Smrg cat <<"EOF" 4326c3c9db83Smrgconst char * EXE_PATH_VARNAME = ""; 4327c3c9db83Smrgconst char * EXE_PATH_VALUE = ""; 4328c3c9db83SmrgEOF 43292e71ea71Smrg fi 4330c3c9db83Smrg 4331c3c9db83Smrg if test "$fast_install" = yes; then 4332c3c9db83Smrg cat <<EOF 4333c3c9db83Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 4334c3c9db83SmrgEOF 43352e71ea71Smrg else 4336c3c9db83Smrg cat <<EOF 4337c3c9db83Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 4338c3c9db83SmrgEOF 43392e71ea71Smrg fi 4340692f60a7Smrg 4341692f60a7Smrg 4342c3c9db83Smrg cat <<"EOF" 4343692f60a7Smrg 4344c3c9db83Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 4345692f60a7Smrg 4346c3c9db83Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 4347c3c9db83Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 43483f6d0e1dSmrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 4349692f60a7Smrg 4350c3c9db83Smrgint 4351c3c9db83Smrgmain (int argc, char *argv[]) 4352c3c9db83Smrg{ 4353c3c9db83Smrg char **newargz; 4354c3c9db83Smrg int newargc; 4355c3c9db83Smrg char *tmp_pathspec; 4356c3c9db83Smrg char *actual_cwrapper_path; 4357c3c9db83Smrg char *actual_cwrapper_name; 4358c3c9db83Smrg char *target_name; 4359c3c9db83Smrg char *lt_argv_zero; 4360c3c9db83Smrg intptr_t rval = 127; 4361692f60a7Smrg 4362c3c9db83Smrg int i; 4363692f60a7Smrg 4364c3c9db83Smrg program_name = (char *) xstrdup (base_name (argv[0])); 43653f6d0e1dSmrg newargz = XMALLOC (char *, argc + 1); 4366692f60a7Smrg 43673f6d0e1dSmrg /* very simple arg parsing; don't want to rely on getopt 43683f6d0e1dSmrg * also, copy all non cwrapper options to newargz, except 43693f6d0e1dSmrg * argz[0], which is handled differently 43703f6d0e1dSmrg */ 43713f6d0e1dSmrg newargc=0; 4372c3c9db83Smrg for (i = 1; i < argc; i++) 4373c3c9db83Smrg { 4374c3c9db83Smrg if (strcmp (argv[i], dumpscript_opt) == 0) 4375c3c9db83Smrg { 4376c3c9db83SmrgEOF 4377c3c9db83Smrg case "$host" in 4378c3c9db83Smrg *mingw* | *cygwin* ) 4379c3c9db83Smrg # make stdout use "unix" line endings 4380c3c9db83Smrg echo " setmode(1,_O_BINARY);" 4381c3c9db83Smrg ;; 4382c3c9db83Smrg esac 4383692f60a7Smrg 4384c3c9db83Smrg cat <<"EOF" 43853f6d0e1dSmrg lt_dump_script (stdout); 4386c3c9db83Smrg return 0; 4387c3c9db83Smrg } 43883f6d0e1dSmrg if (strcmp (argv[i], debug_opt) == 0) 43893f6d0e1dSmrg { 43903f6d0e1dSmrg lt_debug = 1; 43913f6d0e1dSmrg continue; 43923f6d0e1dSmrg } 43933f6d0e1dSmrg if (strcmp (argv[i], ltwrapper_option_prefix) == 0) 43943f6d0e1dSmrg { 43953f6d0e1dSmrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 43963f6d0e1dSmrg namespace, but it is not one of the ones we know about and 43973f6d0e1dSmrg have already dealt with, above (inluding dump-script), then 43983f6d0e1dSmrg report an error. Otherwise, targets might begin to believe 43993f6d0e1dSmrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 44003f6d0e1dSmrg namespace. The first time any user complains about this, we'll 44013f6d0e1dSmrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 44023f6d0e1dSmrg or a configure.ac-settable value. 44033f6d0e1dSmrg */ 44043f6d0e1dSmrg lt_fatal (__FILE__, __LINE__, 44053f6d0e1dSmrg "unrecognized %s option: '%s'", 44063f6d0e1dSmrg ltwrapper_option_prefix, argv[i]); 44073f6d0e1dSmrg } 44083f6d0e1dSmrg /* otherwise ... */ 44093f6d0e1dSmrg newargz[++newargc] = xstrdup (argv[i]); 4410c3c9db83Smrg } 44113f6d0e1dSmrg newargz[++newargc] = NULL; 44123f6d0e1dSmrg 44133f6d0e1dSmrgEOF 44143f6d0e1dSmrg cat <<EOF 44153f6d0e1dSmrg /* The GNU banner must be the first non-error debug message */ 44163f6d0e1dSmrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); 44173f6d0e1dSmrgEOF 44183f6d0e1dSmrg cat <<"EOF" 44193f6d0e1dSmrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 44203f6d0e1dSmrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 4421692f60a7Smrg 4422c3c9db83Smrg tmp_pathspec = find_executable (argv[0]); 4423c3c9db83Smrg if (tmp_pathspec == NULL) 44243f6d0e1dSmrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 44253f6d0e1dSmrg lt_debugprintf (__FILE__, __LINE__, 44263f6d0e1dSmrg "(main) found exe (before symlink chase) at: %s\n", 44273f6d0e1dSmrg tmp_pathspec); 4428c3c9db83Smrg 4429c3c9db83Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 44303f6d0e1dSmrg lt_debugprintf (__FILE__, __LINE__, 44313f6d0e1dSmrg "(main) found exe (after symlink chase) at: %s\n", 44323f6d0e1dSmrg actual_cwrapper_path); 4433c3c9db83Smrg XFREE (tmp_pathspec); 4434c3c9db83Smrg 44353f6d0e1dSmrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 4436c3c9db83Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 4437c3c9db83Smrg 4438c3c9db83Smrg /* wrapper name transforms */ 4439c3c9db83Smrg strendzap (actual_cwrapper_name, ".exe"); 4440c3c9db83Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 4441c3c9db83Smrg XFREE (actual_cwrapper_name); 4442c3c9db83Smrg actual_cwrapper_name = tmp_pathspec; 4443c3c9db83Smrg tmp_pathspec = 0; 4444c3c9db83Smrg 4445c3c9db83Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 4446c3c9db83Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 4447c3c9db83Smrg strendzap (target_name, ".exe"); 4448c3c9db83Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 4449c3c9db83Smrg XFREE (target_name); 4450c3c9db83Smrg target_name = tmp_pathspec; 4451c3c9db83Smrg tmp_pathspec = 0; 4452c3c9db83Smrg 44533f6d0e1dSmrg lt_debugprintf (__FILE__, __LINE__, 44543f6d0e1dSmrg "(main) libtool target name: %s\n", 44553f6d0e1dSmrg target_name); 4456c3c9db83SmrgEOF 4457692f60a7Smrg 4458c3c9db83Smrg cat <<EOF 4459c3c9db83Smrg newargz[0] = 4460c3c9db83Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 4461c3c9db83Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 4462c3c9db83Smrg strcpy (newargz[0], actual_cwrapper_path); 4463c3c9db83Smrg strcat (newargz[0], "$objdir"); 4464c3c9db83Smrg strcat (newargz[0], "/"); 4465c3c9db83SmrgEOF 4466692f60a7Smrg 4467c3c9db83Smrg cat <<"EOF" 4468c3c9db83Smrg /* stop here, and copy so we don't have to do this twice */ 4469c3c9db83Smrg tmp_pathspec = xstrdup (newargz[0]); 4470692f60a7Smrg 4471c3c9db83Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 4472c3c9db83Smrg strcat (newargz[0], actual_cwrapper_name); 4473692f60a7Smrg 4474c3c9db83Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 4475c3c9db83Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 4476c3c9db83Smrg XFREE (tmp_pathspec); 4477c3c9db83Smrg tmp_pathspec = NULL; 4478c3c9db83SmrgEOF 4479692f60a7Smrg 4480c3c9db83Smrg case $host_os in 4481c3c9db83Smrg mingw*) 4482c3c9db83Smrg cat <<"EOF" 4483c3c9db83Smrg { 4484c3c9db83Smrg char* p; 4485c3c9db83Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 4486c3c9db83Smrg { 4487c3c9db83Smrg *p = '/'; 4488c3c9db83Smrg } 4489c3c9db83Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 4490c3c9db83Smrg { 4491c3c9db83Smrg *p = '/'; 4492c3c9db83Smrg } 4493c3c9db83Smrg } 4494c3c9db83SmrgEOF 4495c3c9db83Smrg ;; 4496c3c9db83Smrg esac 4497692f60a7Smrg 4498c3c9db83Smrg cat <<"EOF" 4499c3c9db83Smrg XFREE (target_name); 4500c3c9db83Smrg XFREE (actual_cwrapper_path); 4501c3c9db83Smrg XFREE (actual_cwrapper_name); 4502692f60a7Smrg 4503c3c9db83Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 4504c3c9db83Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 45053f6d0e1dSmrg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 45063f6d0e1dSmrg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 45073f6d0e1dSmrg because on Windows, both *_VARNAMEs are PATH but uninstalled 45083f6d0e1dSmrg libraries must come first. */ 4509c3c9db83Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 45103f6d0e1dSmrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 4511692f60a7Smrg 45123f6d0e1dSmrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 45133f6d0e1dSmrg nonnull (lt_argv_zero)); 4514c3c9db83Smrg for (i = 0; i < newargc; i++) 4515c3c9db83Smrg { 45163f6d0e1dSmrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 45173f6d0e1dSmrg i, nonnull (newargz[i])); 4518c3c9db83Smrg } 4519692f60a7Smrg 4520c3c9db83SmrgEOF 4521692f60a7Smrg 4522c3c9db83Smrg case $host_os in 4523c3c9db83Smrg mingw*) 4524c3c9db83Smrg cat <<"EOF" 4525c3c9db83Smrg /* execv doesn't actually work on mingw as expected on unix */ 45263f6d0e1dSmrg newargz = prepare_spawn (newargz); 4527c3c9db83Smrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 4528c3c9db83Smrg if (rval == -1) 4529c3c9db83Smrg { 4530c3c9db83Smrg /* failed to start process */ 45313f6d0e1dSmrg lt_debugprintf (__FILE__, __LINE__, 45323f6d0e1dSmrg "(main) failed to launch target \"%s\": %s\n", 45333f6d0e1dSmrg lt_argv_zero, nonnull (strerror (errno))); 4534c3c9db83Smrg return 127; 4535c3c9db83Smrg } 4536c3c9db83Smrg return rval; 4537c3c9db83SmrgEOF 4538c3c9db83Smrg ;; 4539c3c9db83Smrg *) 4540c3c9db83Smrg cat <<"EOF" 4541c3c9db83Smrg execv (lt_argv_zero, newargz); 4542c3c9db83Smrg return rval; /* =127, but avoids unused variable warning */ 4543c3c9db83SmrgEOF 4544c3c9db83Smrg ;; 4545c3c9db83Smrg esac 4546692f60a7Smrg 4547c3c9db83Smrg cat <<"EOF" 4548c3c9db83Smrg} 4549692f60a7Smrg 4550c3c9db83Smrgvoid * 4551c3c9db83Smrgxmalloc (size_t num) 4552c3c9db83Smrg{ 4553c3c9db83Smrg void *p = (void *) malloc (num); 4554c3c9db83Smrg if (!p) 45553f6d0e1dSmrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 4556692f60a7Smrg 4557c3c9db83Smrg return p; 4558c3c9db83Smrg} 4559692f60a7Smrg 4560c3c9db83Smrgchar * 4561c3c9db83Smrgxstrdup (const char *string) 4562c3c9db83Smrg{ 4563c3c9db83Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 4564c3c9db83Smrg string) : NULL; 4565c3c9db83Smrg} 4566692f60a7Smrg 4567c3c9db83Smrgconst char * 4568c3c9db83Smrgbase_name (const char *name) 4569c3c9db83Smrg{ 4570c3c9db83Smrg const char *base; 45712e71ea71Smrg 4572c3c9db83Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4573c3c9db83Smrg /* Skip over the disk name in MSDOS pathnames. */ 4574c3c9db83Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 4575c3c9db83Smrg name += 2; 4576c3c9db83Smrg#endif 45772e71ea71Smrg 4578c3c9db83Smrg for (base = name; *name; name++) 4579c3c9db83Smrg if (IS_DIR_SEPARATOR (*name)) 4580c3c9db83Smrg base = name + 1; 4581c3c9db83Smrg return base; 4582c3c9db83Smrg} 45832e71ea71Smrg 4584c3c9db83Smrgint 4585c3c9db83Smrgcheck_executable (const char *path) 4586c3c9db83Smrg{ 4587c3c9db83Smrg struct stat st; 45882e71ea71Smrg 45893f6d0e1dSmrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 45903f6d0e1dSmrg nonempty (path)); 4591c3c9db83Smrg if ((!path) || (!*path)) 4592c3c9db83Smrg return 0; 45932e71ea71Smrg 4594c3c9db83Smrg if ((stat (path, &st) >= 0) 4595c3c9db83Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 4596c3c9db83Smrg return 1; 4597c3c9db83Smrg else 4598c3c9db83Smrg return 0; 4599c3c9db83Smrg} 4600692f60a7Smrg 4601c3c9db83Smrgint 4602c3c9db83Smrgmake_executable (const char *path) 4603c3c9db83Smrg{ 4604c3c9db83Smrg int rval = 0; 4605c3c9db83Smrg struct stat st; 4606692f60a7Smrg 46073f6d0e1dSmrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 46083f6d0e1dSmrg nonempty (path)); 4609c3c9db83Smrg if ((!path) || (!*path)) 4610c3c9db83Smrg return 0; 461185ee4c00Smrg 4612c3c9db83Smrg if (stat (path, &st) >= 0) 4613c3c9db83Smrg { 4614c3c9db83Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 4615c3c9db83Smrg } 4616c3c9db83Smrg return rval; 4617c3c9db83Smrg} 46182e71ea71Smrg 4619c3c9db83Smrg/* Searches for the full path of the wrapper. Returns 4620c3c9db83Smrg newly allocated full path name if found, NULL otherwise 4621c3c9db83Smrg Does not chase symlinks, even on platforms that support them. 4622c3c9db83Smrg*/ 4623c3c9db83Smrgchar * 4624c3c9db83Smrgfind_executable (const char *wrapper) 4625c3c9db83Smrg{ 4626c3c9db83Smrg int has_slash = 0; 4627c3c9db83Smrg const char *p; 4628c3c9db83Smrg const char *p_next; 4629c3c9db83Smrg /* static buffer for getcwd */ 4630c3c9db83Smrg char tmp[LT_PATHMAX + 1]; 4631c3c9db83Smrg int tmp_len; 4632c3c9db83Smrg char *concat_name; 46332e71ea71Smrg 46343f6d0e1dSmrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 46353f6d0e1dSmrg nonempty (wrapper)); 46362e71ea71Smrg 4637c3c9db83Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 4638c3c9db83Smrg return NULL; 46392e71ea71Smrg 4640c3c9db83Smrg /* Absolute path? */ 4641c3c9db83Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4642c3c9db83Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 4643c3c9db83Smrg { 4644c3c9db83Smrg concat_name = xstrdup (wrapper); 4645c3c9db83Smrg if (check_executable (concat_name)) 4646c3c9db83Smrg return concat_name; 4647c3c9db83Smrg XFREE (concat_name); 4648c3c9db83Smrg } 4649c3c9db83Smrg else 4650c3c9db83Smrg { 4651c3c9db83Smrg#endif 4652c3c9db83Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 4653c3c9db83Smrg { 4654c3c9db83Smrg concat_name = xstrdup (wrapper); 4655c3c9db83Smrg if (check_executable (concat_name)) 4656c3c9db83Smrg return concat_name; 4657c3c9db83Smrg XFREE (concat_name); 4658c3c9db83Smrg } 4659c3c9db83Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4660c3c9db83Smrg } 4661c3c9db83Smrg#endif 4662692f60a7Smrg 4663c3c9db83Smrg for (p = wrapper; *p; p++) 4664c3c9db83Smrg if (*p == '/') 4665c3c9db83Smrg { 4666c3c9db83Smrg has_slash = 1; 4667c3c9db83Smrg break; 4668c3c9db83Smrg } 4669c3c9db83Smrg if (!has_slash) 4670c3c9db83Smrg { 4671c3c9db83Smrg /* no slashes; search PATH */ 4672c3c9db83Smrg const char *path = getenv ("PATH"); 4673c3c9db83Smrg if (path != NULL) 4674c3c9db83Smrg { 4675c3c9db83Smrg for (p = path; *p; p = p_next) 4676c3c9db83Smrg { 4677c3c9db83Smrg const char *q; 4678c3c9db83Smrg size_t p_len; 4679c3c9db83Smrg for (q = p; *q; q++) 4680c3c9db83Smrg if (IS_PATH_SEPARATOR (*q)) 4681c3c9db83Smrg break; 4682c3c9db83Smrg p_len = q - p; 4683c3c9db83Smrg p_next = (*q == '\0' ? q : q + 1); 4684c3c9db83Smrg if (p_len == 0) 4685c3c9db83Smrg { 4686c3c9db83Smrg /* empty path: current directory */ 4687c3c9db83Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 46883f6d0e1dSmrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 46893f6d0e1dSmrg nonnull (strerror (errno))); 4690c3c9db83Smrg tmp_len = strlen (tmp); 4691c3c9db83Smrg concat_name = 4692c3c9db83Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4693c3c9db83Smrg memcpy (concat_name, tmp, tmp_len); 4694c3c9db83Smrg concat_name[tmp_len] = '/'; 4695c3c9db83Smrg strcpy (concat_name + tmp_len + 1, wrapper); 4696c3c9db83Smrg } 4697c3c9db83Smrg else 4698c3c9db83Smrg { 4699c3c9db83Smrg concat_name = 4700c3c9db83Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 4701c3c9db83Smrg memcpy (concat_name, p, p_len); 4702c3c9db83Smrg concat_name[p_len] = '/'; 4703c3c9db83Smrg strcpy (concat_name + p_len + 1, wrapper); 4704c3c9db83Smrg } 4705c3c9db83Smrg if (check_executable (concat_name)) 4706c3c9db83Smrg return concat_name; 4707c3c9db83Smrg XFREE (concat_name); 4708c3c9db83Smrg } 4709c3c9db83Smrg } 4710c3c9db83Smrg /* not found in PATH; assume curdir */ 4711c3c9db83Smrg } 4712c3c9db83Smrg /* Relative path | not found in path: prepend cwd */ 4713c3c9db83Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 47143f6d0e1dSmrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 47153f6d0e1dSmrg nonnull (strerror (errno))); 4716c3c9db83Smrg tmp_len = strlen (tmp); 4717c3c9db83Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4718c3c9db83Smrg memcpy (concat_name, tmp, tmp_len); 4719c3c9db83Smrg concat_name[tmp_len] = '/'; 4720c3c9db83Smrg strcpy (concat_name + tmp_len + 1, wrapper); 4721692f60a7Smrg 4722c3c9db83Smrg if (check_executable (concat_name)) 4723c3c9db83Smrg return concat_name; 4724c3c9db83Smrg XFREE (concat_name); 4725c3c9db83Smrg return NULL; 4726c3c9db83Smrg} 4727692f60a7Smrg 4728c3c9db83Smrgchar * 4729c3c9db83Smrgchase_symlinks (const char *pathspec) 4730c3c9db83Smrg{ 4731c3c9db83Smrg#ifndef S_ISLNK 4732c3c9db83Smrg return xstrdup (pathspec); 4733c3c9db83Smrg#else 4734c3c9db83Smrg char buf[LT_PATHMAX]; 4735c3c9db83Smrg struct stat s; 4736c3c9db83Smrg char *tmp_pathspec = xstrdup (pathspec); 4737c3c9db83Smrg char *p; 4738c3c9db83Smrg int has_symlinks = 0; 4739c3c9db83Smrg while (strlen (tmp_pathspec) && !has_symlinks) 4740c3c9db83Smrg { 47413f6d0e1dSmrg lt_debugprintf (__FILE__, __LINE__, 47423f6d0e1dSmrg "checking path component for symlinks: %s\n", 47433f6d0e1dSmrg tmp_pathspec); 4744c3c9db83Smrg if (lstat (tmp_pathspec, &s) == 0) 4745c3c9db83Smrg { 4746c3c9db83Smrg if (S_ISLNK (s.st_mode) != 0) 4747c3c9db83Smrg { 4748c3c9db83Smrg has_symlinks = 1; 4749c3c9db83Smrg break; 4750c3c9db83Smrg } 4751692f60a7Smrg 4752c3c9db83Smrg /* search backwards for last DIR_SEPARATOR */ 4753c3c9db83Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 4754c3c9db83Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4755c3c9db83Smrg p--; 4756c3c9db83Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4757c3c9db83Smrg { 4758c3c9db83Smrg /* no more DIR_SEPARATORS left */ 4759c3c9db83Smrg break; 4760c3c9db83Smrg } 4761c3c9db83Smrg *p = '\0'; 4762c3c9db83Smrg } 4763c3c9db83Smrg else 4764c3c9db83Smrg { 47653f6d0e1dSmrg lt_fatal (__FILE__, __LINE__, 47663f6d0e1dSmrg "error accessing file \"%s\": %s", 47673f6d0e1dSmrg tmp_pathspec, nonnull (strerror (errno))); 4768c3c9db83Smrg } 4769c3c9db83Smrg } 4770c3c9db83Smrg XFREE (tmp_pathspec); 4771692f60a7Smrg 4772c3c9db83Smrg if (!has_symlinks) 4773c3c9db83Smrg { 4774c3c9db83Smrg return xstrdup (pathspec); 4775c3c9db83Smrg } 4776692f60a7Smrg 4777c3c9db83Smrg tmp_pathspec = realpath (pathspec, buf); 4778c3c9db83Smrg if (tmp_pathspec == 0) 4779c3c9db83Smrg { 47803f6d0e1dSmrg lt_fatal (__FILE__, __LINE__, 47813f6d0e1dSmrg "could not follow symlinks for %s", pathspec); 4782c3c9db83Smrg } 4783c3c9db83Smrg return xstrdup (tmp_pathspec); 4784c3c9db83Smrg#endif 4785c3c9db83Smrg} 4786692f60a7Smrg 4787c3c9db83Smrgchar * 4788c3c9db83Smrgstrendzap (char *str, const char *pat) 4789c3c9db83Smrg{ 4790c3c9db83Smrg size_t len, patlen; 4791692f60a7Smrg 4792c3c9db83Smrg assert (str != NULL); 4793c3c9db83Smrg assert (pat != NULL); 4794692f60a7Smrg 4795c3c9db83Smrg len = strlen (str); 4796c3c9db83Smrg patlen = strlen (pat); 4797692f60a7Smrg 4798c3c9db83Smrg if (patlen <= len) 4799c3c9db83Smrg { 4800c3c9db83Smrg str += len - patlen; 4801c3c9db83Smrg if (strcmp (str, pat) == 0) 4802c3c9db83Smrg *str = '\0'; 4803c3c9db83Smrg } 4804c3c9db83Smrg return str; 4805c3c9db83Smrg} 4806692f60a7Smrg 48073f6d0e1dSmrgvoid 48083f6d0e1dSmrglt_debugprintf (const char *file, int line, const char *fmt, ...) 48093f6d0e1dSmrg{ 48103f6d0e1dSmrg va_list args; 48113f6d0e1dSmrg if (lt_debug) 48123f6d0e1dSmrg { 48133f6d0e1dSmrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 48143f6d0e1dSmrg va_start (args, fmt); 48153f6d0e1dSmrg (void) vfprintf (stderr, fmt, args); 48163f6d0e1dSmrg va_end (args); 48173f6d0e1dSmrg } 48183f6d0e1dSmrg} 48193f6d0e1dSmrg 4820c3c9db83Smrgstatic void 48213f6d0e1dSmrglt_error_core (int exit_status, const char *file, 48223f6d0e1dSmrg int line, const char *mode, 4823c3c9db83Smrg const char *message, va_list ap) 4824c3c9db83Smrg{ 48253f6d0e1dSmrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 4826c3c9db83Smrg vfprintf (stderr, message, ap); 4827c3c9db83Smrg fprintf (stderr, ".\n"); 4828692f60a7Smrg 4829c3c9db83Smrg if (exit_status >= 0) 4830c3c9db83Smrg exit (exit_status); 4831c3c9db83Smrg} 4832692f60a7Smrg 4833c3c9db83Smrgvoid 48343f6d0e1dSmrglt_fatal (const char *file, int line, const char *message, ...) 4835c3c9db83Smrg{ 4836c3c9db83Smrg va_list ap; 4837c3c9db83Smrg va_start (ap, message); 48383f6d0e1dSmrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 4839c3c9db83Smrg va_end (ap); 4840c3c9db83Smrg} 4841692f60a7Smrg 48423f6d0e1dSmrgstatic const char * 48433f6d0e1dSmrgnonnull (const char *s) 48443f6d0e1dSmrg{ 48453f6d0e1dSmrg return s ? s : "(null)"; 48463f6d0e1dSmrg} 48473f6d0e1dSmrg 48483f6d0e1dSmrgstatic const char * 48493f6d0e1dSmrgnonempty (const char *s) 48503f6d0e1dSmrg{ 48513f6d0e1dSmrg return (s && !*s) ? "(empty)" : nonnull (s); 48523f6d0e1dSmrg} 48533f6d0e1dSmrg 4854c3c9db83Smrgvoid 4855c3c9db83Smrglt_setenv (const char *name, const char *value) 4856c3c9db83Smrg{ 48573f6d0e1dSmrg lt_debugprintf (__FILE__, __LINE__, 48583f6d0e1dSmrg "(lt_setenv) setting '%s' to '%s'\n", 48593f6d0e1dSmrg nonnull (name), nonnull (value)); 4860c3c9db83Smrg { 4861c3c9db83Smrg#ifdef HAVE_SETENV 4862c3c9db83Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 4863c3c9db83Smrg char *str = xstrdup (value); 4864c3c9db83Smrg setenv (name, str, 1); 4865c3c9db83Smrg#else 4866c3c9db83Smrg int len = strlen (name) + 1 + strlen (value) + 1; 4867c3c9db83Smrg char *str = XMALLOC (char, len); 4868c3c9db83Smrg sprintf (str, "%s=%s", name, value); 4869c3c9db83Smrg if (putenv (str) != EXIT_SUCCESS) 4870c3c9db83Smrg { 4871c3c9db83Smrg XFREE (str); 4872c3c9db83Smrg } 4873c3c9db83Smrg#endif 4874c3c9db83Smrg } 4875c3c9db83Smrg} 4876692f60a7Smrg 4877c3c9db83Smrgchar * 4878c3c9db83Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 4879c3c9db83Smrg{ 4880c3c9db83Smrg char *new_value; 4881c3c9db83Smrg if (orig_value && *orig_value) 4882c3c9db83Smrg { 4883c3c9db83Smrg int orig_value_len = strlen (orig_value); 4884c3c9db83Smrg int add_len = strlen (add); 4885c3c9db83Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 4886c3c9db83Smrg if (to_end) 4887c3c9db83Smrg { 4888c3c9db83Smrg strcpy (new_value, orig_value); 4889c3c9db83Smrg strcpy (new_value + orig_value_len, add); 4890c3c9db83Smrg } 4891c3c9db83Smrg else 4892c3c9db83Smrg { 4893c3c9db83Smrg strcpy (new_value, add); 4894c3c9db83Smrg strcpy (new_value + add_len, orig_value); 4895c3c9db83Smrg } 4896c3c9db83Smrg } 4897c3c9db83Smrg else 4898c3c9db83Smrg { 4899c3c9db83Smrg new_value = xstrdup (add); 4900c3c9db83Smrg } 4901c3c9db83Smrg return new_value; 4902c3c9db83Smrg} 4903692f60a7Smrg 4904c3c9db83Smrgvoid 4905c3c9db83Smrglt_update_exe_path (const char *name, const char *value) 4906c3c9db83Smrg{ 49073f6d0e1dSmrg lt_debugprintf (__FILE__, __LINE__, 49083f6d0e1dSmrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 49093f6d0e1dSmrg nonnull (name), nonnull (value)); 4910692f60a7Smrg 4911c3c9db83Smrg if (name && *name && value && *value) 4912c3c9db83Smrg { 4913c3c9db83Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 4914c3c9db83Smrg /* some systems can't cope with a ':'-terminated path #' */ 4915c3c9db83Smrg int len = strlen (new_value); 4916c3c9db83Smrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 4917c3c9db83Smrg { 4918c3c9db83Smrg new_value[len-1] = '\0'; 4919c3c9db83Smrg } 4920c3c9db83Smrg lt_setenv (name, new_value); 4921c3c9db83Smrg XFREE (new_value); 4922c3c9db83Smrg } 4923c3c9db83Smrg} 4924692f60a7Smrg 4925c3c9db83Smrgvoid 4926c3c9db83Smrglt_update_lib_path (const char *name, const char *value) 4927c3c9db83Smrg{ 49283f6d0e1dSmrg lt_debugprintf (__FILE__, __LINE__, 49293f6d0e1dSmrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 49303f6d0e1dSmrg nonnull (name), nonnull (value)); 4931692f60a7Smrg 4932c3c9db83Smrg if (name && *name && value && *value) 4933c3c9db83Smrg { 4934c3c9db83Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 4935c3c9db83Smrg lt_setenv (name, new_value); 4936c3c9db83Smrg XFREE (new_value); 4937c3c9db83Smrg } 4938c3c9db83Smrg} 4939692f60a7Smrg 49403f6d0e1dSmrgEOF 49413f6d0e1dSmrg case $host_os in 49423f6d0e1dSmrg mingw*) 49433f6d0e1dSmrg cat <<"EOF" 49443f6d0e1dSmrg 49453f6d0e1dSmrg/* Prepares an argument vector before calling spawn(). 49463f6d0e1dSmrg Note that spawn() does not by itself call the command interpreter 49473f6d0e1dSmrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 49483f6d0e1dSmrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 49493f6d0e1dSmrg GetVersionEx(&v); 49503f6d0e1dSmrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 49513f6d0e1dSmrg }) ? "cmd.exe" : "command.com"). 49523f6d0e1dSmrg Instead it simply concatenates the arguments, separated by ' ', and calls 49533f6d0e1dSmrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 49543f6d0e1dSmrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 49553f6d0e1dSmrg special way: 49563f6d0e1dSmrg - Space and tab are interpreted as delimiters. They are not treated as 49573f6d0e1dSmrg delimiters if they are surrounded by double quotes: "...". 49583f6d0e1dSmrg - Unescaped double quotes are removed from the input. Their only effect is 49593f6d0e1dSmrg that within double quotes, space and tab are treated like normal 49603f6d0e1dSmrg characters. 49613f6d0e1dSmrg - Backslashes not followed by double quotes are not special. 49623f6d0e1dSmrg - But 2*n+1 backslashes followed by a double quote become 49633f6d0e1dSmrg n backslashes followed by a double quote (n >= 0): 49643f6d0e1dSmrg \" -> " 49653f6d0e1dSmrg \\\" -> \" 49663f6d0e1dSmrg \\\\\" -> \\" 49673f6d0e1dSmrg */ 49683f6d0e1dSmrg#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" 49693f6d0e1dSmrg#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" 49703f6d0e1dSmrgchar ** 49713f6d0e1dSmrgprepare_spawn (char **argv) 49723f6d0e1dSmrg{ 49733f6d0e1dSmrg size_t argc; 49743f6d0e1dSmrg char **new_argv; 49753f6d0e1dSmrg size_t i; 49763f6d0e1dSmrg 49773f6d0e1dSmrg /* Count number of arguments. */ 49783f6d0e1dSmrg for (argc = 0; argv[argc] != NULL; argc++) 49793f6d0e1dSmrg ; 49803f6d0e1dSmrg 49813f6d0e1dSmrg /* Allocate new argument vector. */ 49823f6d0e1dSmrg new_argv = XMALLOC (char *, argc + 1); 49833f6d0e1dSmrg 49843f6d0e1dSmrg /* Put quoted arguments into the new argument vector. */ 49853f6d0e1dSmrg for (i = 0; i < argc; i++) 49863f6d0e1dSmrg { 49873f6d0e1dSmrg const char *string = argv[i]; 49883f6d0e1dSmrg 49893f6d0e1dSmrg if (string[0] == '\0') 49903f6d0e1dSmrg new_argv[i] = xstrdup ("\"\""); 49913f6d0e1dSmrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 49923f6d0e1dSmrg { 49933f6d0e1dSmrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 49943f6d0e1dSmrg size_t length; 49953f6d0e1dSmrg unsigned int backslashes; 49963f6d0e1dSmrg const char *s; 49973f6d0e1dSmrg char *quoted_string; 49983f6d0e1dSmrg char *p; 49993f6d0e1dSmrg 50003f6d0e1dSmrg length = 0; 50013f6d0e1dSmrg backslashes = 0; 50023f6d0e1dSmrg if (quote_around) 50033f6d0e1dSmrg length++; 50043f6d0e1dSmrg for (s = string; *s != '\0'; s++) 50053f6d0e1dSmrg { 50063f6d0e1dSmrg char c = *s; 50073f6d0e1dSmrg if (c == '"') 50083f6d0e1dSmrg length += backslashes + 1; 50093f6d0e1dSmrg length++; 50103f6d0e1dSmrg if (c == '\\') 50113f6d0e1dSmrg backslashes++; 50123f6d0e1dSmrg else 50133f6d0e1dSmrg backslashes = 0; 50143f6d0e1dSmrg } 50153f6d0e1dSmrg if (quote_around) 50163f6d0e1dSmrg length += backslashes + 1; 50173f6d0e1dSmrg 50183f6d0e1dSmrg quoted_string = XMALLOC (char, length + 1); 50193f6d0e1dSmrg 50203f6d0e1dSmrg p = quoted_string; 50213f6d0e1dSmrg backslashes = 0; 50223f6d0e1dSmrg if (quote_around) 50233f6d0e1dSmrg *p++ = '"'; 50243f6d0e1dSmrg for (s = string; *s != '\0'; s++) 50253f6d0e1dSmrg { 50263f6d0e1dSmrg char c = *s; 50273f6d0e1dSmrg if (c == '"') 50283f6d0e1dSmrg { 50293f6d0e1dSmrg unsigned int j; 50303f6d0e1dSmrg for (j = backslashes + 1; j > 0; j--) 50313f6d0e1dSmrg *p++ = '\\'; 50323f6d0e1dSmrg } 50333f6d0e1dSmrg *p++ = c; 50343f6d0e1dSmrg if (c == '\\') 50353f6d0e1dSmrg backslashes++; 50363f6d0e1dSmrg else 50373f6d0e1dSmrg backslashes = 0; 50383f6d0e1dSmrg } 50393f6d0e1dSmrg if (quote_around) 50403f6d0e1dSmrg { 50413f6d0e1dSmrg unsigned int j; 50423f6d0e1dSmrg for (j = backslashes; j > 0; j--) 50433f6d0e1dSmrg *p++ = '\\'; 50443f6d0e1dSmrg *p++ = '"'; 50453f6d0e1dSmrg } 50463f6d0e1dSmrg *p = '\0'; 50473f6d0e1dSmrg 50483f6d0e1dSmrg new_argv[i] = quoted_string; 50493f6d0e1dSmrg } 50503f6d0e1dSmrg else 50513f6d0e1dSmrg new_argv[i] = (char *) string; 50523f6d0e1dSmrg } 50533f6d0e1dSmrg new_argv[argc] = NULL; 50543f6d0e1dSmrg 50553f6d0e1dSmrg return new_argv; 50563f6d0e1dSmrg} 50573f6d0e1dSmrgEOF 50583f6d0e1dSmrg ;; 50593f6d0e1dSmrg esac 5060692f60a7Smrg 50613f6d0e1dSmrg cat <<"EOF" 50623f6d0e1dSmrgvoid lt_dump_script (FILE* f) 50633f6d0e1dSmrg{ 50643f6d0e1dSmrgEOF 50653f6d0e1dSmrg func_emit_wrapper yes | 50663f6d0e1dSmrg $SED -n -e ' 50673f6d0e1dSmrgs/^\(.\{79\}\)\(..*\)/\1\ 50683f6d0e1dSmrg\2/ 50693f6d0e1dSmrgh 50703f6d0e1dSmrgs/\([\\"]\)/\\\1/g 50713f6d0e1dSmrgs/$/\\n/ 50723f6d0e1dSmrgs/\([^\n]*\).*/ fputs ("\1", f);/p 50733f6d0e1dSmrgg 50743f6d0e1dSmrgD' 50753f6d0e1dSmrg cat <<"EOF" 50763f6d0e1dSmrg} 5077c3c9db83SmrgEOF 5078c3c9db83Smrg} 5079c3c9db83Smrg# end: func_emit_cwrapperexe_src 5080692f60a7Smrg 50813f6d0e1dSmrg# func_win32_import_lib_p ARG 50823f6d0e1dSmrg# True if ARG is an import lib, as indicated by $file_magic_cmd 50833f6d0e1dSmrgfunc_win32_import_lib_p () 50843f6d0e1dSmrg{ 50853f6d0e1dSmrg $opt_debug 50863f6d0e1dSmrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 50873f6d0e1dSmrg *import*) : ;; 50883f6d0e1dSmrg *) false ;; 50893f6d0e1dSmrg esac 50903f6d0e1dSmrg} 50913f6d0e1dSmrg 5092c3c9db83Smrg# func_mode_link arg... 5093c3c9db83Smrgfunc_mode_link () 5094c3c9db83Smrg{ 5095c3c9db83Smrg $opt_debug 5096c3c9db83Smrg case $host in 5097c3c9db83Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 5098c3c9db83Smrg # It is impossible to link a dll without this setting, and 5099c3c9db83Smrg # we shouldn't force the makefile maintainer to figure out 5100c3c9db83Smrg # which system we are compiling for in order to pass an extra 5101c3c9db83Smrg # flag for every libtool invocation. 5102c3c9db83Smrg # allow_undefined=no 5103692f60a7Smrg 5104c3c9db83Smrg # FIXME: Unfortunately, there are problems with the above when trying 5105c3c9db83Smrg # to make a dll which has undefined symbols, in which case not 5106c3c9db83Smrg # even a static library is built. For now, we need to specify 5107c3c9db83Smrg # -no-undefined on the libtool link line when we can be certain 5108c3c9db83Smrg # that all symbols are satisfied, otherwise we get a static library. 5109c3c9db83Smrg allow_undefined=yes 5110c3c9db83Smrg ;; 5111c3c9db83Smrg *) 5112c3c9db83Smrg allow_undefined=yes 5113c3c9db83Smrg ;; 5114c3c9db83Smrg esac 5115c3c9db83Smrg libtool_args=$nonopt 5116c3c9db83Smrg base_compile="$nonopt $@" 5117c3c9db83Smrg compile_command=$nonopt 5118c3c9db83Smrg finalize_command=$nonopt 5119692f60a7Smrg 5120c3c9db83Smrg compile_rpath= 5121c3c9db83Smrg finalize_rpath= 5122c3c9db83Smrg compile_shlibpath= 5123c3c9db83Smrg finalize_shlibpath= 5124c3c9db83Smrg convenience= 5125c3c9db83Smrg old_convenience= 5126c3c9db83Smrg deplibs= 5127c3c9db83Smrg old_deplibs= 5128c3c9db83Smrg compiler_flags= 5129c3c9db83Smrg linker_flags= 5130c3c9db83Smrg dllsearchpath= 5131c3c9db83Smrg lib_search_path=`pwd` 5132c3c9db83Smrg inst_prefix_dir= 5133c3c9db83Smrg new_inherited_linker_flags= 5134692f60a7Smrg 5135c3c9db83Smrg avoid_version=no 51363f6d0e1dSmrg bindir= 5137c3c9db83Smrg dlfiles= 5138c3c9db83Smrg dlprefiles= 5139c3c9db83Smrg dlself=no 5140c3c9db83Smrg export_dynamic=no 5141c3c9db83Smrg export_symbols= 5142c3c9db83Smrg export_symbols_regex= 5143c3c9db83Smrg generated= 5144c3c9db83Smrg libobjs= 5145c3c9db83Smrg ltlibs= 5146c3c9db83Smrg module=no 5147c3c9db83Smrg no_install=no 5148c3c9db83Smrg objs= 5149c3c9db83Smrg non_pic_objects= 5150c3c9db83Smrg precious_files_regex= 5151c3c9db83Smrg prefer_static_libs=no 5152c3c9db83Smrg preload=no 5153c3c9db83Smrg prev= 5154c3c9db83Smrg prevarg= 5155c3c9db83Smrg release= 5156c3c9db83Smrg rpath= 5157c3c9db83Smrg xrpath= 5158c3c9db83Smrg perm_rpath= 5159c3c9db83Smrg temp_rpath= 5160c3c9db83Smrg thread_safe=no 5161c3c9db83Smrg vinfo= 5162c3c9db83Smrg vinfo_number=no 5163c3c9db83Smrg weak_libs= 5164c3c9db83Smrg single_module="${wl}-single_module" 5165c3c9db83Smrg func_infer_tag $base_compile 5166c3c9db83Smrg 5167c3c9db83Smrg # We need to know -static, to get the right output filenames. 5168c3c9db83Smrg for arg 5169c3c9db83Smrg do 5170c3c9db83Smrg case $arg in 5171c3c9db83Smrg -shared) 5172c3c9db83Smrg test "$build_libtool_libs" != yes && \ 5173c3c9db83Smrg func_fatal_configuration "can not build a shared library" 5174c3c9db83Smrg build_old_libs=no 5175c3c9db83Smrg break 5176c3c9db83Smrg ;; 5177c3c9db83Smrg -all-static | -static | -static-libtool-libs) 5178c3c9db83Smrg case $arg in 5179c3c9db83Smrg -all-static) 5180c3c9db83Smrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 5181c3c9db83Smrg func_warning "complete static linking is impossible in this configuration" 5182c3c9db83Smrg fi 5183c3c9db83Smrg if test -n "$link_static_flag"; then 5184c3c9db83Smrg dlopen_self=$dlopen_self_static 5185c3c9db83Smrg fi 5186c3c9db83Smrg prefer_static_libs=yes 5187c3c9db83Smrg ;; 5188c3c9db83Smrg -static) 5189c3c9db83Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 5190c3c9db83Smrg dlopen_self=$dlopen_self_static 5191c3c9db83Smrg fi 5192c3c9db83Smrg prefer_static_libs=built 5193c3c9db83Smrg ;; 5194c3c9db83Smrg -static-libtool-libs) 5195c3c9db83Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 5196c3c9db83Smrg dlopen_self=$dlopen_self_static 51972e71ea71Smrg fi 5198c3c9db83Smrg prefer_static_libs=yes 5199c3c9db83Smrg ;; 5200c3c9db83Smrg esac 5201c3c9db83Smrg build_libtool_libs=no 5202c3c9db83Smrg build_old_libs=yes 5203c3c9db83Smrg break 5204c3c9db83Smrg ;; 5205c3c9db83Smrg esac 5206c3c9db83Smrg done 5207692f60a7Smrg 5208c3c9db83Smrg # See if our shared archives depend on static archives. 5209c3c9db83Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 5210692f60a7Smrg 5211c3c9db83Smrg # Go through the arguments, transforming them on the way. 5212c3c9db83Smrg while test "$#" -gt 0; do 5213c3c9db83Smrg arg="$1" 5214c3c9db83Smrg shift 5215c3c9db83Smrg func_quote_for_eval "$arg" 5216c3c9db83Smrg qarg=$func_quote_for_eval_unquoted_result 5217c3c9db83Smrg func_append libtool_args " $func_quote_for_eval_result" 5218692f60a7Smrg 5219c3c9db83Smrg # If the previous option needs an argument, assign it. 5220c3c9db83Smrg if test -n "$prev"; then 5221c3c9db83Smrg case $prev in 5222c3c9db83Smrg output) 5223c3c9db83Smrg func_append compile_command " @OUTPUT@" 5224c3c9db83Smrg func_append finalize_command " @OUTPUT@" 5225c3c9db83Smrg ;; 5226c3c9db83Smrg esac 5227692f60a7Smrg 5228c3c9db83Smrg case $prev in 52293f6d0e1dSmrg bindir) 52303f6d0e1dSmrg bindir="$arg" 52313f6d0e1dSmrg prev= 52323f6d0e1dSmrg continue 52333f6d0e1dSmrg ;; 5234c3c9db83Smrg dlfiles|dlprefiles) 5235c3c9db83Smrg if test "$preload" = no; then 5236c3c9db83Smrg # Add the symbol object into the linking commands. 5237c3c9db83Smrg func_append compile_command " @SYMFILE@" 5238c3c9db83Smrg func_append finalize_command " @SYMFILE@" 5239c3c9db83Smrg preload=yes 5240c3c9db83Smrg fi 5241c3c9db83Smrg case $arg in 5242c3c9db83Smrg *.la | *.lo) ;; # We handle these cases below. 5243c3c9db83Smrg force) 5244c3c9db83Smrg if test "$dlself" = no; then 5245c3c9db83Smrg dlself=needless 5246c3c9db83Smrg export_dynamic=yes 5247c3c9db83Smrg fi 5248c3c9db83Smrg prev= 5249c3c9db83Smrg continue 5250c3c9db83Smrg ;; 5251c3c9db83Smrg self) 5252c3c9db83Smrg if test "$prev" = dlprefiles; then 5253c3c9db83Smrg dlself=yes 5254c3c9db83Smrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 5255c3c9db83Smrg dlself=yes 52562e71ea71Smrg else 5257c3c9db83Smrg dlself=needless 5258c3c9db83Smrg export_dynamic=yes 52592e71ea71Smrg fi 5260c3c9db83Smrg prev= 5261c3c9db83Smrg continue 5262c3c9db83Smrg ;; 5263c3c9db83Smrg *) 5264c3c9db83Smrg if test "$prev" = dlfiles; then 52653f6d0e1dSmrg func_append dlfiles " $arg" 52662e71ea71Smrg else 52673f6d0e1dSmrg func_append dlprefiles " $arg" 52682e71ea71Smrg fi 5269c3c9db83Smrg prev= 5270c3c9db83Smrg continue 5271c3c9db83Smrg ;; 5272c3c9db83Smrg esac 5273c3c9db83Smrg ;; 5274c3c9db83Smrg expsyms) 5275c3c9db83Smrg export_symbols="$arg" 5276c3c9db83Smrg test -f "$arg" \ 5277c3c9db83Smrg || func_fatal_error "symbol file \`$arg' does not exist" 5278c3c9db83Smrg prev= 5279c3c9db83Smrg continue 5280c3c9db83Smrg ;; 5281c3c9db83Smrg expsyms_regex) 5282c3c9db83Smrg export_symbols_regex="$arg" 5283c3c9db83Smrg prev= 5284c3c9db83Smrg continue 5285c3c9db83Smrg ;; 5286c3c9db83Smrg framework) 52872e71ea71Smrg case $host in 5288c3c9db83Smrg *-*-darwin*) 5289c3c9db83Smrg case "$deplibs " in 5290c3c9db83Smrg *" $qarg.ltframework "*) ;; 52913f6d0e1dSmrg *) func_append deplibs " $qarg.ltframework" # this is fixed later 5292c3c9db83Smrg ;; 5293c3c9db83Smrg esac 5294c3c9db83Smrg ;; 52952e71ea71Smrg esac 5296c3c9db83Smrg prev= 5297c3c9db83Smrg continue 52982e71ea71Smrg ;; 5299c3c9db83Smrg inst_prefix) 5300c3c9db83Smrg inst_prefix_dir="$arg" 5301c3c9db83Smrg prev= 5302c3c9db83Smrg continue 53032e71ea71Smrg ;; 5304c3c9db83Smrg objectlist) 5305c3c9db83Smrg if test -f "$arg"; then 5306c3c9db83Smrg save_arg=$arg 5307c3c9db83Smrg moreargs= 5308c3c9db83Smrg for fil in `cat "$save_arg"` 5309c3c9db83Smrg do 53103f6d0e1dSmrg# func_append moreargs " $fil" 5311c3c9db83Smrg arg=$fil 5312c3c9db83Smrg # A libtool-controlled object. 5313692f60a7Smrg 5314c3c9db83Smrg # Check to see that this really is a libtool object. 5315c3c9db83Smrg if func_lalib_unsafe_p "$arg"; then 5316c3c9db83Smrg pic_object= 5317c3c9db83Smrg non_pic_object= 531885ee4c00Smrg 5319c3c9db83Smrg # Read the .lo file 5320c3c9db83Smrg func_source "$arg" 532185ee4c00Smrg 5322c3c9db83Smrg if test -z "$pic_object" || 5323c3c9db83Smrg test -z "$non_pic_object" || 5324c3c9db83Smrg test "$pic_object" = none && 5325c3c9db83Smrg test "$non_pic_object" = none; then 5326c3c9db83Smrg func_fatal_error "cannot find name of object for \`$arg'" 5327c3c9db83Smrg fi 532885ee4c00Smrg 5329c3c9db83Smrg # Extract subdirectory from the argument. 5330c3c9db83Smrg func_dirname "$arg" "/" "" 5331c3c9db83Smrg xdir="$func_dirname_result" 533285ee4c00Smrg 5333c3c9db83Smrg if test "$pic_object" != none; then 5334c3c9db83Smrg # Prepend the subdirectory the object is found in. 5335c3c9db83Smrg pic_object="$xdir$pic_object" 533685ee4c00Smrg 5337c3c9db83Smrg if test "$prev" = dlfiles; then 5338c3c9db83Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 53393f6d0e1dSmrg func_append dlfiles " $pic_object" 5340c3c9db83Smrg prev= 5341c3c9db83Smrg continue 5342c3c9db83Smrg else 5343c3c9db83Smrg # If libtool objects are unsupported, then we need to preload. 5344c3c9db83Smrg prev=dlprefiles 5345c3c9db83Smrg fi 5346c3c9db83Smrg fi 534785ee4c00Smrg 5348c3c9db83Smrg # CHECK ME: I think I busted this. -Ossama 5349c3c9db83Smrg if test "$prev" = dlprefiles; then 5350c3c9db83Smrg # Preload the old-style object. 53513f6d0e1dSmrg func_append dlprefiles " $pic_object" 5352c3c9db83Smrg prev= 5353c3c9db83Smrg fi 535485ee4c00Smrg 5355c3c9db83Smrg # A PIC object. 5356c3c9db83Smrg func_append libobjs " $pic_object" 5357c3c9db83Smrg arg="$pic_object" 5358c3c9db83Smrg fi 535985ee4c00Smrg 5360c3c9db83Smrg # Non-PIC object. 5361c3c9db83Smrg if test "$non_pic_object" != none; then 5362c3c9db83Smrg # Prepend the subdirectory the object is found in. 5363c3c9db83Smrg non_pic_object="$xdir$non_pic_object" 536485ee4c00Smrg 5365c3c9db83Smrg # A standard non-PIC object 5366c3c9db83Smrg func_append non_pic_objects " $non_pic_object" 5367c3c9db83Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 5368c3c9db83Smrg arg="$non_pic_object" 5369c3c9db83Smrg fi 5370c3c9db83Smrg else 5371c3c9db83Smrg # If the PIC object exists, use it instead. 5372c3c9db83Smrg # $xdir was prepended to $pic_object above. 5373c3c9db83Smrg non_pic_object="$pic_object" 5374c3c9db83Smrg func_append non_pic_objects " $non_pic_object" 5375c3c9db83Smrg fi 5376c3c9db83Smrg else 5377c3c9db83Smrg # Only an error if not doing a dry-run. 5378c3c9db83Smrg if $opt_dry_run; then 5379c3c9db83Smrg # Extract subdirectory from the argument. 5380c3c9db83Smrg func_dirname "$arg" "/" "" 5381c3c9db83Smrg xdir="$func_dirname_result" 5382c3c9db83Smrg 5383c3c9db83Smrg func_lo2o "$arg" 5384c3c9db83Smrg pic_object=$xdir$objdir/$func_lo2o_result 5385c3c9db83Smrg non_pic_object=$xdir$func_lo2o_result 5386c3c9db83Smrg func_append libobjs " $pic_object" 5387c3c9db83Smrg func_append non_pic_objects " $non_pic_object" 5388c3c9db83Smrg else 5389c3c9db83Smrg func_fatal_error "\`$arg' is not a valid libtool object" 5390c3c9db83Smrg fi 5391c3c9db83Smrg fi 5392c3c9db83Smrg done 53932e71ea71Smrg else 5394c3c9db83Smrg func_fatal_error "link input file \`$arg' does not exist" 53952e71ea71Smrg fi 5396c3c9db83Smrg arg=$save_arg 5397c3c9db83Smrg prev= 5398c3c9db83Smrg continue 5399c3c9db83Smrg ;; 5400c3c9db83Smrg precious_regex) 5401c3c9db83Smrg precious_files_regex="$arg" 5402c3c9db83Smrg prev= 5403c3c9db83Smrg continue 5404c3c9db83Smrg ;; 5405c3c9db83Smrg release) 5406c3c9db83Smrg release="-$arg" 5407c3c9db83Smrg prev= 5408c3c9db83Smrg continue 5409c3c9db83Smrg ;; 5410c3c9db83Smrg rpath | xrpath) 5411c3c9db83Smrg # We need an absolute path. 5412c3c9db83Smrg case $arg in 5413c3c9db83Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5414c3c9db83Smrg *) 5415c3c9db83Smrg func_fatal_error "only absolute run-paths are allowed" 5416c3c9db83Smrg ;; 5417c3c9db83Smrg esac 5418c3c9db83Smrg if test "$prev" = rpath; then 5419c3c9db83Smrg case "$rpath " in 5420c3c9db83Smrg *" $arg "*) ;; 54213f6d0e1dSmrg *) func_append rpath " $arg" ;; 5422c3c9db83Smrg esac 54232e71ea71Smrg else 5424c3c9db83Smrg case "$xrpath " in 5425c3c9db83Smrg *" $arg "*) ;; 54263f6d0e1dSmrg *) func_append xrpath " $arg" ;; 5427c3c9db83Smrg esac 54282e71ea71Smrg fi 5429c3c9db83Smrg prev= 5430c3c9db83Smrg continue 5431c3c9db83Smrg ;; 5432c3c9db83Smrg shrext) 5433c3c9db83Smrg shrext_cmds="$arg" 5434c3c9db83Smrg prev= 5435c3c9db83Smrg continue 5436c3c9db83Smrg ;; 5437c3c9db83Smrg weak) 54383f6d0e1dSmrg func_append weak_libs " $arg" 5439c3c9db83Smrg prev= 5440c3c9db83Smrg continue 5441c3c9db83Smrg ;; 5442c3c9db83Smrg xcclinker) 54433f6d0e1dSmrg func_append linker_flags " $qarg" 54443f6d0e1dSmrg func_append compiler_flags " $qarg" 5445c3c9db83Smrg prev= 5446c3c9db83Smrg func_append compile_command " $qarg" 5447c3c9db83Smrg func_append finalize_command " $qarg" 5448c3c9db83Smrg continue 5449c3c9db83Smrg ;; 5450c3c9db83Smrg xcompiler) 54513f6d0e1dSmrg func_append compiler_flags " $qarg" 5452c3c9db83Smrg prev= 5453c3c9db83Smrg func_append compile_command " $qarg" 5454c3c9db83Smrg func_append finalize_command " $qarg" 5455c3c9db83Smrg continue 5456c3c9db83Smrg ;; 5457c3c9db83Smrg xlinker) 54583f6d0e1dSmrg func_append linker_flags " $qarg" 54593f6d0e1dSmrg func_append compiler_flags " $wl$qarg" 5460c3c9db83Smrg prev= 5461c3c9db83Smrg func_append compile_command " $wl$qarg" 5462c3c9db83Smrg func_append finalize_command " $wl$qarg" 5463c3c9db83Smrg continue 5464c3c9db83Smrg ;; 5465c3c9db83Smrg *) 5466c3c9db83Smrg eval "$prev=\"\$arg\"" 5467c3c9db83Smrg prev= 5468c3c9db83Smrg continue 5469c3c9db83Smrg ;; 547085ee4c00Smrg esac 5471c3c9db83Smrg fi # test -n "$prev" 547285ee4c00Smrg 5473c3c9db83Smrg prevarg="$arg" 547485ee4c00Smrg 5475c3c9db83Smrg case $arg in 5476c3c9db83Smrg -all-static) 5477c3c9db83Smrg if test -n "$link_static_flag"; then 5478c3c9db83Smrg # See comment for -static flag below, for more details. 5479c3c9db83Smrg func_append compile_command " $link_static_flag" 5480c3c9db83Smrg func_append finalize_command " $link_static_flag" 5481c3c9db83Smrg fi 5482c3c9db83Smrg continue 5483c3c9db83Smrg ;; 548485ee4c00Smrg 5485c3c9db83Smrg -allow-undefined) 5486c3c9db83Smrg # FIXME: remove this flag sometime in the future. 5487c3c9db83Smrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 5488c3c9db83Smrg ;; 548985ee4c00Smrg 5490c3c9db83Smrg -avoid-version) 5491c3c9db83Smrg avoid_version=yes 5492c3c9db83Smrg continue 5493c3c9db83Smrg ;; 549485ee4c00Smrg 54953f6d0e1dSmrg -bindir) 54963f6d0e1dSmrg prev=bindir 54973f6d0e1dSmrg continue 54983f6d0e1dSmrg ;; 54993f6d0e1dSmrg 5500c3c9db83Smrg -dlopen) 5501c3c9db83Smrg prev=dlfiles 5502c3c9db83Smrg continue 5503c3c9db83Smrg ;; 550485ee4c00Smrg 5505c3c9db83Smrg -dlpreopen) 5506c3c9db83Smrg prev=dlprefiles 5507c3c9db83Smrg continue 5508c3c9db83Smrg ;; 550985ee4c00Smrg 5510c3c9db83Smrg -export-dynamic) 5511c3c9db83Smrg export_dynamic=yes 5512c3c9db83Smrg continue 5513c3c9db83Smrg ;; 551485ee4c00Smrg 5515c3c9db83Smrg -export-symbols | -export-symbols-regex) 5516c3c9db83Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 5517c3c9db83Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 5518c3c9db83Smrg fi 5519c3c9db83Smrg if test "X$arg" = "X-export-symbols"; then 5520c3c9db83Smrg prev=expsyms 5521c3c9db83Smrg else 5522c3c9db83Smrg prev=expsyms_regex 5523c3c9db83Smrg fi 5524c3c9db83Smrg continue 5525c3c9db83Smrg ;; 552685ee4c00Smrg 5527c3c9db83Smrg -framework) 5528c3c9db83Smrg prev=framework 5529c3c9db83Smrg continue 5530c3c9db83Smrg ;; 553185ee4c00Smrg 5532c3c9db83Smrg -inst-prefix-dir) 5533c3c9db83Smrg prev=inst_prefix 5534c3c9db83Smrg continue 5535c3c9db83Smrg ;; 553685ee4c00Smrg 5537c3c9db83Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 5538c3c9db83Smrg # so, if we see these flags be careful not to treat them like -L 5539c3c9db83Smrg -L[A-Z][A-Z]*:*) 5540c3c9db83Smrg case $with_gcc/$host in 5541c3c9db83Smrg no/*-*-irix* | /*-*-irix*) 5542c3c9db83Smrg func_append compile_command " $arg" 5543c3c9db83Smrg func_append finalize_command " $arg" 5544c3c9db83Smrg ;; 5545c3c9db83Smrg esac 5546c3c9db83Smrg continue 5547c3c9db83Smrg ;; 554885ee4c00Smrg 5549c3c9db83Smrg -L*) 55503f6d0e1dSmrg func_stripname "-L" '' "$arg" 55513f6d0e1dSmrg if test -z "$func_stripname_result"; then 5552c3c9db83Smrg if test "$#" -gt 0; then 5553c3c9db83Smrg func_fatal_error "require no space between \`-L' and \`$1'" 5554c3c9db83Smrg else 5555c3c9db83Smrg func_fatal_error "need path for \`-L' option" 5556c3c9db83Smrg fi 5557c3c9db83Smrg fi 55583f6d0e1dSmrg func_resolve_sysroot "$func_stripname_result" 55593f6d0e1dSmrg dir=$func_resolve_sysroot_result 5560c3c9db83Smrg # We need an absolute path. 5561c3c9db83Smrg case $dir in 5562c3c9db83Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5563c3c9db83Smrg *) 5564c3c9db83Smrg absdir=`cd "$dir" && pwd` 5565c3c9db83Smrg test -z "$absdir" && \ 5566c3c9db83Smrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 5567c3c9db83Smrg dir="$absdir" 5568c3c9db83Smrg ;; 5569c3c9db83Smrg esac 5570c3c9db83Smrg case "$deplibs " in 55713f6d0e1dSmrg *" -L$dir "* | *" $arg "*) 55723f6d0e1dSmrg # Will only happen for absolute or sysroot arguments 55733f6d0e1dSmrg ;; 5574c3c9db83Smrg *) 55753f6d0e1dSmrg # Preserve sysroot, but never include relative directories 55763f6d0e1dSmrg case $dir in 55773f6d0e1dSmrg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 55783f6d0e1dSmrg *) func_append deplibs " -L$dir" ;; 55793f6d0e1dSmrg esac 55803f6d0e1dSmrg func_append lib_search_path " $dir" 5581c3c9db83Smrg ;; 5582c3c9db83Smrg esac 5583c3c9db83Smrg case $host in 5584c3c9db83Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 55853f6d0e1dSmrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 5586c3c9db83Smrg case :$dllsearchpath: in 5587c3c9db83Smrg *":$dir:"*) ;; 5588c3c9db83Smrg ::) dllsearchpath=$dir;; 55893f6d0e1dSmrg *) func_append dllsearchpath ":$dir";; 5590c3c9db83Smrg esac 5591c3c9db83Smrg case :$dllsearchpath: in 5592c3c9db83Smrg *":$testbindir:"*) ;; 5593c3c9db83Smrg ::) dllsearchpath=$testbindir;; 55943f6d0e1dSmrg *) func_append dllsearchpath ":$testbindir";; 5595c3c9db83Smrg esac 5596c3c9db83Smrg ;; 5597c3c9db83Smrg esac 5598c3c9db83Smrg continue 5599c3c9db83Smrg ;; 560085ee4c00Smrg 5601c3c9db83Smrg -l*) 5602c3c9db83Smrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 5603c3c9db83Smrg case $host in 56043f6d0e1dSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 5605c3c9db83Smrg # These systems don't actually have a C or math library (as such) 5606c3c9db83Smrg continue 5607c3c9db83Smrg ;; 5608c3c9db83Smrg *-*-os2*) 5609c3c9db83Smrg # These systems don't actually have a C library (as such) 5610c3c9db83Smrg test "X$arg" = "X-lc" && continue 5611c3c9db83Smrg ;; 5612c3c9db83Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5613c3c9db83Smrg # Do not include libc due to us having libc/libc_r. 5614c3c9db83Smrg test "X$arg" = "X-lc" && continue 5615c3c9db83Smrg ;; 5616c3c9db83Smrg *-*-rhapsody* | *-*-darwin1.[012]) 5617c3c9db83Smrg # Rhapsody C and math libraries are in the System framework 56183f6d0e1dSmrg func_append deplibs " System.ltframework" 5619c3c9db83Smrg continue 5620c3c9db83Smrg ;; 5621c3c9db83Smrg *-*-sco3.2v5* | *-*-sco5v6*) 5622c3c9db83Smrg # Causes problems with __ctype 5623c3c9db83Smrg test "X$arg" = "X-lc" && continue 5624c3c9db83Smrg ;; 5625c3c9db83Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 5626c3c9db83Smrg # Compiler inserts libc in the correct place for threads to work 5627c3c9db83Smrg test "X$arg" = "X-lc" && continue 5628c3c9db83Smrg ;; 5629c3c9db83Smrg esac 5630c3c9db83Smrg elif test "X$arg" = "X-lc_r"; then 5631c3c9db83Smrg case $host in 5632c3c9db83Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5633c3c9db83Smrg # Do not include libc_r directly, use -pthread flag. 5634c3c9db83Smrg continue 5635c3c9db83Smrg ;; 5636c3c9db83Smrg esac 5637c3c9db83Smrg fi 56383f6d0e1dSmrg func_append deplibs " $arg" 5639c3c9db83Smrg continue 5640c3c9db83Smrg ;; 564185ee4c00Smrg 5642c3c9db83Smrg -module) 5643c3c9db83Smrg module=yes 5644c3c9db83Smrg continue 5645c3c9db83Smrg ;; 564685ee4c00Smrg 5647c3c9db83Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 5648c3c9db83Smrg # classes, name mangling, and exception handling. 5649c3c9db83Smrg # Darwin uses the -arch flag to determine output architecture. 56503f6d0e1dSmrg -model|-arch|-isysroot|--sysroot) 56513f6d0e1dSmrg func_append compiler_flags " $arg" 5652c3c9db83Smrg func_append compile_command " $arg" 5653c3c9db83Smrg func_append finalize_command " $arg" 5654c3c9db83Smrg prev=xcompiler 5655c3c9db83Smrg continue 5656c3c9db83Smrg ;; 565785ee4c00Smrg 56583f6d0e1dSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 56593f6d0e1dSmrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 56603f6d0e1dSmrg func_append compiler_flags " $arg" 5661c3c9db83Smrg func_append compile_command " $arg" 5662c3c9db83Smrg func_append finalize_command " $arg" 5663c3c9db83Smrg case "$new_inherited_linker_flags " in 5664c3c9db83Smrg *" $arg "*) ;; 56653f6d0e1dSmrg * ) func_append new_inherited_linker_flags " $arg" ;; 5666c3c9db83Smrg esac 5667c3c9db83Smrg continue 5668c3c9db83Smrg ;; 566985ee4c00Smrg 5670c3c9db83Smrg -multi_module) 5671c3c9db83Smrg single_module="${wl}-multi_module" 5672c3c9db83Smrg continue 5673c3c9db83Smrg ;; 567485ee4c00Smrg 5675c3c9db83Smrg -no-fast-install) 5676c3c9db83Smrg fast_install=no 5677c3c9db83Smrg continue 5678c3c9db83Smrg ;; 567985ee4c00Smrg 5680c3c9db83Smrg -no-install) 5681c3c9db83Smrg case $host in 5682c3c9db83Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 5683c3c9db83Smrg # The PATH hackery in wrapper scripts is required on Windows 5684c3c9db83Smrg # and Darwin in order for the loader to find any dlls it needs. 5685c3c9db83Smrg func_warning "\`-no-install' is ignored for $host" 5686c3c9db83Smrg func_warning "assuming \`-no-fast-install' instead" 5687c3c9db83Smrg fast_install=no 5688c3c9db83Smrg ;; 5689c3c9db83Smrg *) no_install=yes ;; 5690c3c9db83Smrg esac 5691c3c9db83Smrg continue 5692c3c9db83Smrg ;; 569385ee4c00Smrg 5694c3c9db83Smrg -no-undefined) 5695c3c9db83Smrg allow_undefined=no 5696c3c9db83Smrg continue 5697c3c9db83Smrg ;; 569885ee4c00Smrg 5699c3c9db83Smrg -objectlist) 5700c3c9db83Smrg prev=objectlist 5701c3c9db83Smrg continue 5702c3c9db83Smrg ;; 570385ee4c00Smrg 5704c3c9db83Smrg -o) prev=output ;; 570585ee4c00Smrg 5706c3c9db83Smrg -precious-files-regex) 5707c3c9db83Smrg prev=precious_regex 5708c3c9db83Smrg continue 5709c3c9db83Smrg ;; 571085ee4c00Smrg 5711c3c9db83Smrg -release) 5712c3c9db83Smrg prev=release 5713c3c9db83Smrg continue 5714c3c9db83Smrg ;; 571585ee4c00Smrg 5716c3c9db83Smrg -rpath) 5717c3c9db83Smrg prev=rpath 5718c3c9db83Smrg continue 5719c3c9db83Smrg ;; 572085ee4c00Smrg 5721c3c9db83Smrg -R) 5722c3c9db83Smrg prev=xrpath 5723c3c9db83Smrg continue 5724c3c9db83Smrg ;; 572585ee4c00Smrg 5726c3c9db83Smrg -R*) 5727c3c9db83Smrg func_stripname '-R' '' "$arg" 5728c3c9db83Smrg dir=$func_stripname_result 5729c3c9db83Smrg # We need an absolute path. 5730c3c9db83Smrg case $dir in 5731c3c9db83Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 57323f6d0e1dSmrg =*) 57333f6d0e1dSmrg func_stripname '=' '' "$dir" 57343f6d0e1dSmrg dir=$lt_sysroot$func_stripname_result 57353f6d0e1dSmrg ;; 5736c3c9db83Smrg *) 5737c3c9db83Smrg func_fatal_error "only absolute run-paths are allowed" 5738c3c9db83Smrg ;; 5739c3c9db83Smrg esac 5740c3c9db83Smrg case "$xrpath " in 5741c3c9db83Smrg *" $dir "*) ;; 57423f6d0e1dSmrg *) func_append xrpath " $dir" ;; 5743c3c9db83Smrg esac 5744c3c9db83Smrg continue 5745c3c9db83Smrg ;; 574685ee4c00Smrg 5747c3c9db83Smrg -shared) 5748c3c9db83Smrg # The effects of -shared are defined in a previous loop. 5749c3c9db83Smrg continue 5750c3c9db83Smrg ;; 575185ee4c00Smrg 5752c3c9db83Smrg -shrext) 5753c3c9db83Smrg prev=shrext 5754c3c9db83Smrg continue 5755c3c9db83Smrg ;; 575685ee4c00Smrg 5757c3c9db83Smrg -static | -static-libtool-libs) 5758c3c9db83Smrg # The effects of -static are defined in a previous loop. 5759c3c9db83Smrg # We used to do the same as -all-static on platforms that 5760c3c9db83Smrg # didn't have a PIC flag, but the assumption that the effects 5761c3c9db83Smrg # would be equivalent was wrong. It would break on at least 5762c3c9db83Smrg # Digital Unix and AIX. 5763c3c9db83Smrg continue 5764c3c9db83Smrg ;; 576585ee4c00Smrg 5766c3c9db83Smrg -thread-safe) 5767c3c9db83Smrg thread_safe=yes 5768c3c9db83Smrg continue 5769c3c9db83Smrg ;; 577085ee4c00Smrg 5771c3c9db83Smrg -version-info) 5772c3c9db83Smrg prev=vinfo 5773c3c9db83Smrg continue 5774c3c9db83Smrg ;; 577585ee4c00Smrg 5776c3c9db83Smrg -version-number) 5777c3c9db83Smrg prev=vinfo 5778c3c9db83Smrg vinfo_number=yes 5779c3c9db83Smrg continue 5780c3c9db83Smrg ;; 578185ee4c00Smrg 5782c3c9db83Smrg -weak) 5783c3c9db83Smrg prev=weak 5784c3c9db83Smrg continue 5785c3c9db83Smrg ;; 5786692f60a7Smrg 5787c3c9db83Smrg -Wc,*) 5788c3c9db83Smrg func_stripname '-Wc,' '' "$arg" 5789c3c9db83Smrg args=$func_stripname_result 5790c3c9db83Smrg arg= 5791c3c9db83Smrg save_ifs="$IFS"; IFS=',' 5792c3c9db83Smrg for flag in $args; do 5793c3c9db83Smrg IFS="$save_ifs" 5794c3c9db83Smrg func_quote_for_eval "$flag" 57953f6d0e1dSmrg func_append arg " $func_quote_for_eval_result" 57963f6d0e1dSmrg func_append compiler_flags " $func_quote_for_eval_result" 5797c3c9db83Smrg done 5798c3c9db83Smrg IFS="$save_ifs" 5799c3c9db83Smrg func_stripname ' ' '' "$arg" 5800c3c9db83Smrg arg=$func_stripname_result 5801c3c9db83Smrg ;; 58022e71ea71Smrg 5803c3c9db83Smrg -Wl,*) 5804c3c9db83Smrg func_stripname '-Wl,' '' "$arg" 5805c3c9db83Smrg args=$func_stripname_result 5806c3c9db83Smrg arg= 5807c3c9db83Smrg save_ifs="$IFS"; IFS=',' 5808c3c9db83Smrg for flag in $args; do 5809c3c9db83Smrg IFS="$save_ifs" 5810c3c9db83Smrg func_quote_for_eval "$flag" 58113f6d0e1dSmrg func_append arg " $wl$func_quote_for_eval_result" 58123f6d0e1dSmrg func_append compiler_flags " $wl$func_quote_for_eval_result" 58133f6d0e1dSmrg func_append linker_flags " $func_quote_for_eval_result" 5814c3c9db83Smrg done 5815c3c9db83Smrg IFS="$save_ifs" 5816c3c9db83Smrg func_stripname ' ' '' "$arg" 5817c3c9db83Smrg arg=$func_stripname_result 5818c3c9db83Smrg ;; 58192e71ea71Smrg 5820c3c9db83Smrg -Xcompiler) 5821c3c9db83Smrg prev=xcompiler 5822c3c9db83Smrg continue 5823c3c9db83Smrg ;; 58242e71ea71Smrg 5825c3c9db83Smrg -Xlinker) 5826c3c9db83Smrg prev=xlinker 5827c3c9db83Smrg continue 5828c3c9db83Smrg ;; 58292e71ea71Smrg 5830c3c9db83Smrg -XCClinker) 5831c3c9db83Smrg prev=xcclinker 5832c3c9db83Smrg continue 5833c3c9db83Smrg ;; 58342e71ea71Smrg 5835c3c9db83Smrg # -msg_* for osf cc 5836c3c9db83Smrg -msg_*) 5837c3c9db83Smrg func_quote_for_eval "$arg" 5838c3c9db83Smrg arg="$func_quote_for_eval_result" 5839c3c9db83Smrg ;; 58402e71ea71Smrg 58413f6d0e1dSmrg # Flags to be passed through unchanged, with rationale: 58423f6d0e1dSmrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 58433f6d0e1dSmrg # -r[0-9][0-9]* specify processor for the SGI compiler 58443f6d0e1dSmrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 58453f6d0e1dSmrg # +DA*, +DD* enable 64-bit mode for the HP compiler 58463f6d0e1dSmrg # -q* compiler args for the IBM compiler 58473f6d0e1dSmrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 58483f6d0e1dSmrg # -F/path path to uninstalled frameworks, gcc on darwin 58493f6d0e1dSmrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 58503f6d0e1dSmrg # @file GCC response files 58513f6d0e1dSmrg # -tp=* Portland pgcc target processor selection 58523f6d0e1dSmrg # --sysroot=* for sysroot support 58533f6d0e1dSmrg # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 5854c3c9db83Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 58553f6d0e1dSmrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 58563f6d0e1dSmrg -O*|-flto*|-fwhopr*|-fuse-linker-plugin) 5857c3c9db83Smrg func_quote_for_eval "$arg" 5858c3c9db83Smrg arg="$func_quote_for_eval_result" 5859c3c9db83Smrg func_append compile_command " $arg" 5860c3c9db83Smrg func_append finalize_command " $arg" 58613f6d0e1dSmrg func_append compiler_flags " $arg" 5862c3c9db83Smrg continue 5863c3c9db83Smrg ;; 58642e71ea71Smrg 5865c3c9db83Smrg # Some other compiler flag. 5866c3c9db83Smrg -* | +*) 5867c3c9db83Smrg func_quote_for_eval "$arg" 5868c3c9db83Smrg arg="$func_quote_for_eval_result" 5869c3c9db83Smrg ;; 58702e71ea71Smrg 5871c3c9db83Smrg *.$objext) 5872c3c9db83Smrg # A standard object. 58733f6d0e1dSmrg func_append objs " $arg" 5874c3c9db83Smrg ;; 58752e71ea71Smrg 5876c3c9db83Smrg *.lo) 5877c3c9db83Smrg # A libtool-controlled object. 58782e71ea71Smrg 5879c3c9db83Smrg # Check to see that this really is a libtool object. 5880c3c9db83Smrg if func_lalib_unsafe_p "$arg"; then 5881c3c9db83Smrg pic_object= 5882c3c9db83Smrg non_pic_object= 58832e71ea71Smrg 5884c3c9db83Smrg # Read the .lo file 5885c3c9db83Smrg func_source "$arg" 58862e71ea71Smrg 5887c3c9db83Smrg if test -z "$pic_object" || 5888c3c9db83Smrg test -z "$non_pic_object" || 5889c3c9db83Smrg test "$pic_object" = none && 5890c3c9db83Smrg test "$non_pic_object" = none; then 5891c3c9db83Smrg func_fatal_error "cannot find name of object for \`$arg'" 5892c3c9db83Smrg fi 58932e71ea71Smrg 5894c3c9db83Smrg # Extract subdirectory from the argument. 5895c3c9db83Smrg func_dirname "$arg" "/" "" 5896c3c9db83Smrg xdir="$func_dirname_result" 58972e71ea71Smrg 5898c3c9db83Smrg if test "$pic_object" != none; then 5899c3c9db83Smrg # Prepend the subdirectory the object is found in. 5900c3c9db83Smrg pic_object="$xdir$pic_object" 59012e71ea71Smrg 5902c3c9db83Smrg if test "$prev" = dlfiles; then 5903c3c9db83Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 59043f6d0e1dSmrg func_append dlfiles " $pic_object" 5905c3c9db83Smrg prev= 5906c3c9db83Smrg continue 5907c3c9db83Smrg else 5908c3c9db83Smrg # If libtool objects are unsupported, then we need to preload. 5909c3c9db83Smrg prev=dlprefiles 5910c3c9db83Smrg fi 5911c3c9db83Smrg fi 59122e71ea71Smrg 5913c3c9db83Smrg # CHECK ME: I think I busted this. -Ossama 5914c3c9db83Smrg if test "$prev" = dlprefiles; then 5915c3c9db83Smrg # Preload the old-style object. 59163f6d0e1dSmrg func_append dlprefiles " $pic_object" 5917c3c9db83Smrg prev= 5918c3c9db83Smrg fi 5919692f60a7Smrg 5920c3c9db83Smrg # A PIC object. 5921c3c9db83Smrg func_append libobjs " $pic_object" 5922c3c9db83Smrg arg="$pic_object" 5923c3c9db83Smrg fi 5924692f60a7Smrg 5925c3c9db83Smrg # Non-PIC object. 5926c3c9db83Smrg if test "$non_pic_object" != none; then 5927c3c9db83Smrg # Prepend the subdirectory the object is found in. 5928c3c9db83Smrg non_pic_object="$xdir$non_pic_object" 5929692f60a7Smrg 5930c3c9db83Smrg # A standard non-PIC object 5931c3c9db83Smrg func_append non_pic_objects " $non_pic_object" 5932c3c9db83Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 5933c3c9db83Smrg arg="$non_pic_object" 5934c3c9db83Smrg fi 5935c3c9db83Smrg else 5936c3c9db83Smrg # If the PIC object exists, use it instead. 5937c3c9db83Smrg # $xdir was prepended to $pic_object above. 5938c3c9db83Smrg non_pic_object="$pic_object" 5939c3c9db83Smrg func_append non_pic_objects " $non_pic_object" 5940c3c9db83Smrg fi 5941c3c9db83Smrg else 5942c3c9db83Smrg # Only an error if not doing a dry-run. 5943c3c9db83Smrg if $opt_dry_run; then 5944c3c9db83Smrg # Extract subdirectory from the argument. 5945c3c9db83Smrg func_dirname "$arg" "/" "" 5946c3c9db83Smrg xdir="$func_dirname_result" 5947c3c9db83Smrg 5948c3c9db83Smrg func_lo2o "$arg" 5949c3c9db83Smrg pic_object=$xdir$objdir/$func_lo2o_result 5950c3c9db83Smrg non_pic_object=$xdir$func_lo2o_result 5951c3c9db83Smrg func_append libobjs " $pic_object" 5952c3c9db83Smrg func_append non_pic_objects " $non_pic_object" 5953c3c9db83Smrg else 5954c3c9db83Smrg func_fatal_error "\`$arg' is not a valid libtool object" 5955c3c9db83Smrg fi 5956c3c9db83Smrg fi 5957c3c9db83Smrg ;; 5958692f60a7Smrg 5959c3c9db83Smrg *.$libext) 5960c3c9db83Smrg # An archive. 59613f6d0e1dSmrg func_append deplibs " $arg" 59623f6d0e1dSmrg func_append old_deplibs " $arg" 5963c3c9db83Smrg continue 5964c3c9db83Smrg ;; 5965c3c9db83Smrg 5966c3c9db83Smrg *.la) 5967c3c9db83Smrg # A libtool-controlled library. 5968c3c9db83Smrg 59693f6d0e1dSmrg func_resolve_sysroot "$arg" 5970c3c9db83Smrg if test "$prev" = dlfiles; then 5971c3c9db83Smrg # This library was specified with -dlopen. 59723f6d0e1dSmrg func_append dlfiles " $func_resolve_sysroot_result" 5973c3c9db83Smrg prev= 5974c3c9db83Smrg elif test "$prev" = dlprefiles; then 5975c3c9db83Smrg # The library was specified with -dlpreopen. 59763f6d0e1dSmrg func_append dlprefiles " $func_resolve_sysroot_result" 5977c3c9db83Smrg prev= 5978c3c9db83Smrg else 59793f6d0e1dSmrg func_append deplibs " $func_resolve_sysroot_result" 5980c3c9db83Smrg fi 5981c3c9db83Smrg continue 5982c3c9db83Smrg ;; 5983c3c9db83Smrg 5984c3c9db83Smrg # Some other compiler argument. 5985c3c9db83Smrg *) 5986c3c9db83Smrg # Unknown arguments in both finalize_command and compile_command need 5987c3c9db83Smrg # to be aesthetically quoted because they are evaled later. 5988c3c9db83Smrg func_quote_for_eval "$arg" 5989c3c9db83Smrg arg="$func_quote_for_eval_result" 5990c3c9db83Smrg ;; 5991c3c9db83Smrg esac # arg 5992c3c9db83Smrg 5993c3c9db83Smrg # Now actually substitute the argument into the commands. 5994c3c9db83Smrg if test -n "$arg"; then 5995c3c9db83Smrg func_append compile_command " $arg" 5996c3c9db83Smrg func_append finalize_command " $arg" 5997c3c9db83Smrg fi 5998c3c9db83Smrg done # argument parsing loop 5999c3c9db83Smrg 6000c3c9db83Smrg test -n "$prev" && \ 6001c3c9db83Smrg func_fatal_help "the \`$prevarg' option requires an argument" 6002c3c9db83Smrg 6003c3c9db83Smrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 6004c3c9db83Smrg eval arg=\"$export_dynamic_flag_spec\" 6005c3c9db83Smrg func_append compile_command " $arg" 6006c3c9db83Smrg func_append finalize_command " $arg" 6007c3c9db83Smrg fi 6008c3c9db83Smrg 6009c3c9db83Smrg oldlibs= 6010c3c9db83Smrg # calculate the name of the file, without its directory 6011c3c9db83Smrg func_basename "$output" 6012c3c9db83Smrg outputname="$func_basename_result" 6013c3c9db83Smrg libobjs_save="$libobjs" 6014c3c9db83Smrg 6015c3c9db83Smrg if test -n "$shlibpath_var"; then 6016c3c9db83Smrg # get the directories listed in $shlibpath_var 60173f6d0e1dSmrg eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` 6018c3c9db83Smrg else 6019c3c9db83Smrg shlib_search_path= 6020c3c9db83Smrg fi 6021c3c9db83Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 6022c3c9db83Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 6023c3c9db83Smrg 6024c3c9db83Smrg func_dirname "$output" "/" "" 6025c3c9db83Smrg output_objdir="$func_dirname_result$objdir" 60263f6d0e1dSmrg func_to_tool_file "$output_objdir/" 60273f6d0e1dSmrg tool_output_objdir=$func_to_tool_file_result 6028c3c9db83Smrg # Create the object directory. 6029c3c9db83Smrg func_mkdir_p "$output_objdir" 6030c3c9db83Smrg 6031c3c9db83Smrg # Determine the type of output 6032c3c9db83Smrg case $output in 6033c3c9db83Smrg "") 6034c3c9db83Smrg func_fatal_help "you must specify an output file" 6035c3c9db83Smrg ;; 6036c3c9db83Smrg *.$libext) linkmode=oldlib ;; 6037c3c9db83Smrg *.lo | *.$objext) linkmode=obj ;; 6038c3c9db83Smrg *.la) linkmode=lib ;; 6039c3c9db83Smrg *) linkmode=prog ;; # Anything else should be a program. 6040c3c9db83Smrg esac 6041c3c9db83Smrg 6042c3c9db83Smrg specialdeplibs= 6043c3c9db83Smrg 6044c3c9db83Smrg libs= 6045c3c9db83Smrg # Find all interdependent deplibs by searching for libraries 6046c3c9db83Smrg # that are linked more than once (e.g. -la -lb -la) 6047c3c9db83Smrg for deplib in $deplibs; do 60483f6d0e1dSmrg if $opt_preserve_dup_deps ; then 6049c3c9db83Smrg case "$libs " in 60503f6d0e1dSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6051c3c9db83Smrg esac 6052c3c9db83Smrg fi 60533f6d0e1dSmrg func_append libs " $deplib" 6054c3c9db83Smrg done 6055c3c9db83Smrg 6056c3c9db83Smrg if test "$linkmode" = lib; then 6057c3c9db83Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 6058c3c9db83Smrg 6059c3c9db83Smrg # Compute libraries that are listed more than once in $predeps 6060c3c9db83Smrg # $postdeps and mark them as special (i.e., whose duplicates are 6061c3c9db83Smrg # not to be eliminated). 6062c3c9db83Smrg pre_post_deps= 6063c3c9db83Smrg if $opt_duplicate_compiler_generated_deps; then 6064c3c9db83Smrg for pre_post_dep in $predeps $postdeps; do 6065c3c9db83Smrg case "$pre_post_deps " in 60663f6d0e1dSmrg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 6067c3c9db83Smrg esac 60683f6d0e1dSmrg func_append pre_post_deps " $pre_post_dep" 6069c3c9db83Smrg done 6070c3c9db83Smrg fi 6071c3c9db83Smrg pre_post_deps= 6072c3c9db83Smrg fi 6073c3c9db83Smrg 6074c3c9db83Smrg deplibs= 6075c3c9db83Smrg newdependency_libs= 6076c3c9db83Smrg newlib_search_path= 6077c3c9db83Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 6078c3c9db83Smrg notinst_deplibs= # not-installed libtool libraries 6079c3c9db83Smrg notinst_path= # paths that contain not-installed libtool libraries 6080c3c9db83Smrg 6081c3c9db83Smrg case $linkmode in 6082c3c9db83Smrg lib) 6083c3c9db83Smrg passes="conv dlpreopen link" 6084c3c9db83Smrg for file in $dlfiles $dlprefiles; do 6085c3c9db83Smrg case $file in 6086c3c9db83Smrg *.la) ;; 6087c3c9db83Smrg *) 6088c3c9db83Smrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 6089c3c9db83Smrg ;; 6090c3c9db83Smrg esac 6091c3c9db83Smrg done 6092c3c9db83Smrg ;; 6093c3c9db83Smrg prog) 6094c3c9db83Smrg compile_deplibs= 6095c3c9db83Smrg finalize_deplibs= 6096c3c9db83Smrg alldeplibs=no 6097c3c9db83Smrg newdlfiles= 6098c3c9db83Smrg newdlprefiles= 6099c3c9db83Smrg passes="conv scan dlopen dlpreopen link" 6100c3c9db83Smrg ;; 6101c3c9db83Smrg *) passes="conv" 6102c3c9db83Smrg ;; 6103c3c9db83Smrg esac 6104c3c9db83Smrg 6105c3c9db83Smrg for pass in $passes; do 6106c3c9db83Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 6107c3c9db83Smrg # so that -L comes before libs that need it for instance... 6108c3c9db83Smrg if test "$linkmode,$pass" = "lib,link"; then 6109c3c9db83Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 6110c3c9db83Smrg ## order, and fix it there properly 6111c3c9db83Smrg tmp_deplibs= 6112c3c9db83Smrg for deplib in $deplibs; do 6113c3c9db83Smrg tmp_deplibs="$deplib $tmp_deplibs" 6114c3c9db83Smrg done 6115c3c9db83Smrg deplibs="$tmp_deplibs" 6116c3c9db83Smrg fi 6117c3c9db83Smrg 6118c3c9db83Smrg if test "$linkmode,$pass" = "lib,link" || 6119c3c9db83Smrg test "$linkmode,$pass" = "prog,scan"; then 6120c3c9db83Smrg libs="$deplibs" 6121c3c9db83Smrg deplibs= 6122c3c9db83Smrg fi 6123c3c9db83Smrg if test "$linkmode" = prog; then 6124c3c9db83Smrg case $pass in 6125c3c9db83Smrg dlopen) libs="$dlfiles" ;; 6126c3c9db83Smrg dlpreopen) libs="$dlprefiles" ;; 6127c3c9db83Smrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 6128c3c9db83Smrg esac 6129c3c9db83Smrg fi 6130c3c9db83Smrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 6131c3c9db83Smrg # Collect and forward deplibs of preopened libtool libs 6132c3c9db83Smrg for lib in $dlprefiles; do 6133c3c9db83Smrg # Ignore non-libtool-libs 6134c3c9db83Smrg dependency_libs= 61353f6d0e1dSmrg func_resolve_sysroot "$lib" 6136c3c9db83Smrg case $lib in 61373f6d0e1dSmrg *.la) func_source "$func_resolve_sysroot_result" ;; 6138c3c9db83Smrg esac 6139c3c9db83Smrg 6140c3c9db83Smrg # Collect preopened libtool deplibs, except any this library 6141c3c9db83Smrg # has declared as weak libs 6142c3c9db83Smrg for deplib in $dependency_libs; do 61433f6d0e1dSmrg func_basename "$deplib" 61443f6d0e1dSmrg deplib_base=$func_basename_result 6145c3c9db83Smrg case " $weak_libs " in 6146c3c9db83Smrg *" $deplib_base "*) ;; 61473f6d0e1dSmrg *) func_append deplibs " $deplib" ;; 6148c3c9db83Smrg esac 6149c3c9db83Smrg done 6150c3c9db83Smrg done 6151c3c9db83Smrg libs="$dlprefiles" 6152c3c9db83Smrg fi 6153c3c9db83Smrg if test "$pass" = dlopen; then 6154c3c9db83Smrg # Collect dlpreopened libraries 6155c3c9db83Smrg save_deplibs="$deplibs" 6156c3c9db83Smrg deplibs= 6157c3c9db83Smrg fi 6158c3c9db83Smrg 6159c3c9db83Smrg for deplib in $libs; do 6160c3c9db83Smrg lib= 6161c3c9db83Smrg found=no 6162c3c9db83Smrg case $deplib in 61633f6d0e1dSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 61643f6d0e1dSmrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 6165c3c9db83Smrg if test "$linkmode,$pass" = "prog,link"; then 6166c3c9db83Smrg compile_deplibs="$deplib $compile_deplibs" 6167c3c9db83Smrg finalize_deplibs="$deplib $finalize_deplibs" 6168c3c9db83Smrg else 61693f6d0e1dSmrg func_append compiler_flags " $deplib" 6170c3c9db83Smrg if test "$linkmode" = lib ; then 6171c3c9db83Smrg case "$new_inherited_linker_flags " in 6172c3c9db83Smrg *" $deplib "*) ;; 61733f6d0e1dSmrg * ) func_append new_inherited_linker_flags " $deplib" ;; 6174c3c9db83Smrg esac 6175c3c9db83Smrg fi 6176c3c9db83Smrg fi 6177c3c9db83Smrg continue 6178c3c9db83Smrg ;; 6179c3c9db83Smrg -l*) 6180c3c9db83Smrg if test "$linkmode" != lib && test "$linkmode" != prog; then 6181c3c9db83Smrg func_warning "\`-l' is ignored for archives/objects" 6182c3c9db83Smrg continue 6183c3c9db83Smrg fi 6184c3c9db83Smrg func_stripname '-l' '' "$deplib" 6185c3c9db83Smrg name=$func_stripname_result 6186c3c9db83Smrg if test "$linkmode" = lib; then 6187c3c9db83Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 6188c3c9db83Smrg else 6189c3c9db83Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 6190c3c9db83Smrg fi 6191c3c9db83Smrg for searchdir in $searchdirs; do 6192c3c9db83Smrg for search_ext in .la $std_shrext .so .a; do 6193c3c9db83Smrg # Search the libtool library 6194c3c9db83Smrg lib="$searchdir/lib${name}${search_ext}" 6195c3c9db83Smrg if test -f "$lib"; then 6196c3c9db83Smrg if test "$search_ext" = ".la"; then 6197c3c9db83Smrg found=yes 6198c3c9db83Smrg else 6199c3c9db83Smrg found=no 6200c3c9db83Smrg fi 6201c3c9db83Smrg break 2 6202c3c9db83Smrg fi 6203c3c9db83Smrg done 6204c3c9db83Smrg done 6205c3c9db83Smrg if test "$found" != yes; then 6206c3c9db83Smrg # deplib doesn't seem to be a libtool library 6207c3c9db83Smrg if test "$linkmode,$pass" = "prog,link"; then 6208c3c9db83Smrg compile_deplibs="$deplib $compile_deplibs" 6209c3c9db83Smrg finalize_deplibs="$deplib $finalize_deplibs" 6210c3c9db83Smrg else 6211c3c9db83Smrg deplibs="$deplib $deplibs" 6212c3c9db83Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6213c3c9db83Smrg fi 6214c3c9db83Smrg continue 6215c3c9db83Smrg else # deplib is a libtool library 6216c3c9db83Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 6217c3c9db83Smrg # We need to do some special things here, and not later. 6218c3c9db83Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6219c3c9db83Smrg case " $predeps $postdeps " in 6220c3c9db83Smrg *" $deplib "*) 6221c3c9db83Smrg if func_lalib_p "$lib"; then 6222c3c9db83Smrg library_names= 6223c3c9db83Smrg old_library= 6224c3c9db83Smrg func_source "$lib" 6225c3c9db83Smrg for l in $old_library $library_names; do 6226c3c9db83Smrg ll="$l" 6227c3c9db83Smrg done 6228c3c9db83Smrg if test "X$ll" = "X$old_library" ; then # only static version available 6229c3c9db83Smrg found=no 6230c3c9db83Smrg func_dirname "$lib" "" "." 6231c3c9db83Smrg ladir="$func_dirname_result" 6232c3c9db83Smrg lib=$ladir/$old_library 6233c3c9db83Smrg if test "$linkmode,$pass" = "prog,link"; then 6234c3c9db83Smrg compile_deplibs="$deplib $compile_deplibs" 6235c3c9db83Smrg finalize_deplibs="$deplib $finalize_deplibs" 6236c3c9db83Smrg else 6237c3c9db83Smrg deplibs="$deplib $deplibs" 6238c3c9db83Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6239c3c9db83Smrg fi 6240c3c9db83Smrg continue 6241c3c9db83Smrg fi 6242c3c9db83Smrg fi 6243c3c9db83Smrg ;; 6244c3c9db83Smrg *) ;; 6245c3c9db83Smrg esac 6246c3c9db83Smrg fi 6247c3c9db83Smrg fi 6248c3c9db83Smrg ;; # -l 6249c3c9db83Smrg *.ltframework) 6250c3c9db83Smrg if test "$linkmode,$pass" = "prog,link"; then 6251c3c9db83Smrg compile_deplibs="$deplib $compile_deplibs" 6252c3c9db83Smrg finalize_deplibs="$deplib $finalize_deplibs" 6253c3c9db83Smrg else 6254c3c9db83Smrg deplibs="$deplib $deplibs" 6255c3c9db83Smrg if test "$linkmode" = lib ; then 6256c3c9db83Smrg case "$new_inherited_linker_flags " in 6257c3c9db83Smrg *" $deplib "*) ;; 62583f6d0e1dSmrg * ) func_append new_inherited_linker_flags " $deplib" ;; 6259c3c9db83Smrg esac 6260c3c9db83Smrg fi 6261c3c9db83Smrg fi 6262c3c9db83Smrg continue 6263c3c9db83Smrg ;; 6264c3c9db83Smrg -L*) 6265c3c9db83Smrg case $linkmode in 6266c3c9db83Smrg lib) 6267c3c9db83Smrg deplibs="$deplib $deplibs" 6268c3c9db83Smrg test "$pass" = conv && continue 6269c3c9db83Smrg newdependency_libs="$deplib $newdependency_libs" 6270c3c9db83Smrg func_stripname '-L' '' "$deplib" 62713f6d0e1dSmrg func_resolve_sysroot "$func_stripname_result" 62723f6d0e1dSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 6273c3c9db83Smrg ;; 6274c3c9db83Smrg prog) 6275c3c9db83Smrg if test "$pass" = conv; then 6276c3c9db83Smrg deplibs="$deplib $deplibs" 6277c3c9db83Smrg continue 6278c3c9db83Smrg fi 6279c3c9db83Smrg if test "$pass" = scan; then 6280c3c9db83Smrg deplibs="$deplib $deplibs" 6281c3c9db83Smrg else 6282c3c9db83Smrg compile_deplibs="$deplib $compile_deplibs" 6283c3c9db83Smrg finalize_deplibs="$deplib $finalize_deplibs" 6284c3c9db83Smrg fi 6285c3c9db83Smrg func_stripname '-L' '' "$deplib" 62863f6d0e1dSmrg func_resolve_sysroot "$func_stripname_result" 62873f6d0e1dSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 6288c3c9db83Smrg ;; 6289c3c9db83Smrg *) 6290c3c9db83Smrg func_warning "\`-L' is ignored for archives/objects" 6291c3c9db83Smrg ;; 6292c3c9db83Smrg esac # linkmode 6293c3c9db83Smrg continue 6294c3c9db83Smrg ;; # -L 6295c3c9db83Smrg -R*) 6296c3c9db83Smrg if test "$pass" = link; then 6297c3c9db83Smrg func_stripname '-R' '' "$deplib" 62983f6d0e1dSmrg func_resolve_sysroot "$func_stripname_result" 62993f6d0e1dSmrg dir=$func_resolve_sysroot_result 6300c3c9db83Smrg # Make sure the xrpath contains only unique directories. 6301c3c9db83Smrg case "$xrpath " in 6302c3c9db83Smrg *" $dir "*) ;; 63033f6d0e1dSmrg *) func_append xrpath " $dir" ;; 6304c3c9db83Smrg esac 6305c3c9db83Smrg fi 6306c3c9db83Smrg deplibs="$deplib $deplibs" 6307c3c9db83Smrg continue 6308c3c9db83Smrg ;; 63093f6d0e1dSmrg *.la) 63103f6d0e1dSmrg func_resolve_sysroot "$deplib" 63113f6d0e1dSmrg lib=$func_resolve_sysroot_result 63123f6d0e1dSmrg ;; 6313c3c9db83Smrg *.$libext) 6314c3c9db83Smrg if test "$pass" = conv; then 6315c3c9db83Smrg deplibs="$deplib $deplibs" 6316c3c9db83Smrg continue 6317c3c9db83Smrg fi 6318c3c9db83Smrg case $linkmode in 6319c3c9db83Smrg lib) 6320c3c9db83Smrg # Linking convenience modules into shared libraries is allowed, 6321c3c9db83Smrg # but linking other static libraries is non-portable. 6322c3c9db83Smrg case " $dlpreconveniencelibs " in 6323c3c9db83Smrg *" $deplib "*) ;; 6324c3c9db83Smrg *) 6325c3c9db83Smrg valid_a_lib=no 6326c3c9db83Smrg case $deplibs_check_method in 6327c3c9db83Smrg match_pattern*) 6328c3c9db83Smrg set dummy $deplibs_check_method; shift 6329c3c9db83Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 63303f6d0e1dSmrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 6331c3c9db83Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 6332c3c9db83Smrg valid_a_lib=yes 6333c3c9db83Smrg fi 6334c3c9db83Smrg ;; 6335c3c9db83Smrg pass_all) 6336c3c9db83Smrg valid_a_lib=yes 6337c3c9db83Smrg ;; 6338c3c9db83Smrg esac 6339c3c9db83Smrg if test "$valid_a_lib" != yes; then 63403f6d0e1dSmrg echo 6341c3c9db83Smrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 63423f6d0e1dSmrg echo "*** I have the capability to make that library automatically link in when" 63433f6d0e1dSmrg echo "*** you link to this library. But I can only do this if you have a" 63443f6d0e1dSmrg echo "*** shared version of the library, which you do not appear to have" 63453f6d0e1dSmrg echo "*** because the file extensions .$libext of this argument makes me believe" 63463f6d0e1dSmrg echo "*** that it is just a static archive that I should not use here." 6347c3c9db83Smrg else 63483f6d0e1dSmrg echo 6349c3c9db83Smrg $ECHO "*** Warning: Linking the shared library $output against the" 6350c3c9db83Smrg $ECHO "*** static library $deplib is not portable!" 6351c3c9db83Smrg deplibs="$deplib $deplibs" 6352c3c9db83Smrg fi 6353c3c9db83Smrg ;; 6354c3c9db83Smrg esac 6355c3c9db83Smrg continue 6356c3c9db83Smrg ;; 6357c3c9db83Smrg prog) 6358c3c9db83Smrg if test "$pass" != link; then 6359c3c9db83Smrg deplibs="$deplib $deplibs" 6360c3c9db83Smrg else 6361c3c9db83Smrg compile_deplibs="$deplib $compile_deplibs" 6362c3c9db83Smrg finalize_deplibs="$deplib $finalize_deplibs" 6363c3c9db83Smrg fi 6364c3c9db83Smrg continue 6365c3c9db83Smrg ;; 6366c3c9db83Smrg esac # linkmode 6367c3c9db83Smrg ;; # *.$libext 6368c3c9db83Smrg *.lo | *.$objext) 6369c3c9db83Smrg if test "$pass" = conv; then 6370c3c9db83Smrg deplibs="$deplib $deplibs" 6371c3c9db83Smrg elif test "$linkmode" = prog; then 6372c3c9db83Smrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 6373c3c9db83Smrg # If there is no dlopen support or we're linking statically, 6374c3c9db83Smrg # we need to preload. 63753f6d0e1dSmrg func_append newdlprefiles " $deplib" 6376c3c9db83Smrg compile_deplibs="$deplib $compile_deplibs" 6377c3c9db83Smrg finalize_deplibs="$deplib $finalize_deplibs" 6378c3c9db83Smrg else 63793f6d0e1dSmrg func_append newdlfiles " $deplib" 6380c3c9db83Smrg fi 6381c3c9db83Smrg fi 6382c3c9db83Smrg continue 6383c3c9db83Smrg ;; 6384c3c9db83Smrg %DEPLIBS%) 6385c3c9db83Smrg alldeplibs=yes 6386c3c9db83Smrg continue 6387c3c9db83Smrg ;; 6388c3c9db83Smrg esac # case $deplib 6389c3c9db83Smrg 6390c3c9db83Smrg if test "$found" = yes || test -f "$lib"; then : 6391c3c9db83Smrg else 6392c3c9db83Smrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 6393c3c9db83Smrg fi 6394c3c9db83Smrg 6395c3c9db83Smrg # Check to see that this really is a libtool archive. 6396c3c9db83Smrg func_lalib_unsafe_p "$lib" \ 6397c3c9db83Smrg || func_fatal_error "\`$lib' is not a valid libtool archive" 6398c3c9db83Smrg 6399c3c9db83Smrg func_dirname "$lib" "" "." 6400c3c9db83Smrg ladir="$func_dirname_result" 6401c3c9db83Smrg 6402c3c9db83Smrg dlname= 6403c3c9db83Smrg dlopen= 6404c3c9db83Smrg dlpreopen= 6405c3c9db83Smrg libdir= 6406c3c9db83Smrg library_names= 6407c3c9db83Smrg old_library= 6408c3c9db83Smrg inherited_linker_flags= 6409c3c9db83Smrg # If the library was installed with an old release of libtool, 6410c3c9db83Smrg # it will not redefine variables installed, or shouldnotlink 6411c3c9db83Smrg installed=yes 6412c3c9db83Smrg shouldnotlink=no 6413c3c9db83Smrg avoidtemprpath= 6414c3c9db83Smrg 6415c3c9db83Smrg 6416c3c9db83Smrg # Read the .la file 6417c3c9db83Smrg func_source "$lib" 6418c3c9db83Smrg 6419c3c9db83Smrg # Convert "-framework foo" to "foo.ltframework" 6420c3c9db83Smrg if test -n "$inherited_linker_flags"; then 64213f6d0e1dSmrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 6422c3c9db83Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 6423c3c9db83Smrg case " $new_inherited_linker_flags " in 6424c3c9db83Smrg *" $tmp_inherited_linker_flag "*) ;; 64253f6d0e1dSmrg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 6426c3c9db83Smrg esac 6427c3c9db83Smrg done 6428c3c9db83Smrg fi 64293f6d0e1dSmrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 6430c3c9db83Smrg if test "$linkmode,$pass" = "lib,link" || 6431c3c9db83Smrg test "$linkmode,$pass" = "prog,scan" || 6432c3c9db83Smrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 64333f6d0e1dSmrg test -n "$dlopen" && func_append dlfiles " $dlopen" 64343f6d0e1dSmrg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 6435c3c9db83Smrg fi 6436c3c9db83Smrg 6437c3c9db83Smrg if test "$pass" = conv; then 6438c3c9db83Smrg # Only check for convenience libraries 6439c3c9db83Smrg deplibs="$lib $deplibs" 6440c3c9db83Smrg if test -z "$libdir"; then 6441c3c9db83Smrg if test -z "$old_library"; then 6442c3c9db83Smrg func_fatal_error "cannot find name of link library for \`$lib'" 6443c3c9db83Smrg fi 6444c3c9db83Smrg # It is a libtool convenience library, so add in its objects. 64453f6d0e1dSmrg func_append convenience " $ladir/$objdir/$old_library" 64463f6d0e1dSmrg func_append old_convenience " $ladir/$objdir/$old_library" 6447c3c9db83Smrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 6448c3c9db83Smrg func_fatal_error "\`$lib' is not a convenience library" 6449c3c9db83Smrg fi 6450c3c9db83Smrg tmp_libs= 6451c3c9db83Smrg for deplib in $dependency_libs; do 6452c3c9db83Smrg deplibs="$deplib $deplibs" 64533f6d0e1dSmrg if $opt_preserve_dup_deps ; then 6454c3c9db83Smrg case "$tmp_libs " in 64553f6d0e1dSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6456c3c9db83Smrg esac 6457c3c9db83Smrg fi 64583f6d0e1dSmrg func_append tmp_libs " $deplib" 6459c3c9db83Smrg done 6460c3c9db83Smrg continue 6461c3c9db83Smrg fi # $pass = conv 6462c3c9db83Smrg 6463c3c9db83Smrg 6464c3c9db83Smrg # Get the name of the library we link against. 6465c3c9db83Smrg linklib= 64663f6d0e1dSmrg if test -n "$old_library" && 64673f6d0e1dSmrg { test "$prefer_static_libs" = yes || 64683f6d0e1dSmrg test "$prefer_static_libs,$installed" = "built,no"; }; then 64693f6d0e1dSmrg linklib=$old_library 64703f6d0e1dSmrg else 64713f6d0e1dSmrg for l in $old_library $library_names; do 64723f6d0e1dSmrg linklib="$l" 64733f6d0e1dSmrg done 64743f6d0e1dSmrg fi 6475c3c9db83Smrg if test -z "$linklib"; then 6476c3c9db83Smrg func_fatal_error "cannot find name of link library for \`$lib'" 6477c3c9db83Smrg fi 6478c3c9db83Smrg 6479c3c9db83Smrg # This library was specified with -dlopen. 6480c3c9db83Smrg if test "$pass" = dlopen; then 6481c3c9db83Smrg if test -z "$libdir"; then 6482c3c9db83Smrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 6483c3c9db83Smrg fi 6484c3c9db83Smrg if test -z "$dlname" || 6485c3c9db83Smrg test "$dlopen_support" != yes || 6486c3c9db83Smrg test "$build_libtool_libs" = no; then 6487c3c9db83Smrg # If there is no dlname, no dlopen support or we're linking 6488c3c9db83Smrg # statically, we need to preload. We also need to preload any 6489c3c9db83Smrg # dependent libraries so libltdl's deplib preloader doesn't 6490c3c9db83Smrg # bomb out in the load deplibs phase. 64913f6d0e1dSmrg func_append dlprefiles " $lib $dependency_libs" 6492c3c9db83Smrg else 64933f6d0e1dSmrg func_append newdlfiles " $lib" 6494c3c9db83Smrg fi 6495c3c9db83Smrg continue 6496c3c9db83Smrg fi # $pass = dlopen 6497c3c9db83Smrg 6498c3c9db83Smrg # We need an absolute path. 6499c3c9db83Smrg case $ladir in 6500c3c9db83Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 6501c3c9db83Smrg *) 6502c3c9db83Smrg abs_ladir=`cd "$ladir" && pwd` 6503c3c9db83Smrg if test -z "$abs_ladir"; then 6504c3c9db83Smrg func_warning "cannot determine absolute directory name of \`$ladir'" 6505c3c9db83Smrg func_warning "passing it literally to the linker, although it might fail" 6506c3c9db83Smrg abs_ladir="$ladir" 6507c3c9db83Smrg fi 6508c3c9db83Smrg ;; 6509c3c9db83Smrg esac 6510c3c9db83Smrg func_basename "$lib" 6511c3c9db83Smrg laname="$func_basename_result" 6512c3c9db83Smrg 6513c3c9db83Smrg # Find the relevant object directory and library name. 6514c3c9db83Smrg if test "X$installed" = Xyes; then 65153f6d0e1dSmrg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6516c3c9db83Smrg func_warning "library \`$lib' was moved." 6517c3c9db83Smrg dir="$ladir" 6518c3c9db83Smrg absdir="$abs_ladir" 6519c3c9db83Smrg libdir="$abs_ladir" 6520c3c9db83Smrg else 65213f6d0e1dSmrg dir="$lt_sysroot$libdir" 65223f6d0e1dSmrg absdir="$lt_sysroot$libdir" 6523c3c9db83Smrg fi 6524c3c9db83Smrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 6525c3c9db83Smrg else 6526c3c9db83Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6527c3c9db83Smrg dir="$ladir" 6528c3c9db83Smrg absdir="$abs_ladir" 6529c3c9db83Smrg # Remove this search path later 65303f6d0e1dSmrg func_append notinst_path " $abs_ladir" 6531c3c9db83Smrg else 6532c3c9db83Smrg dir="$ladir/$objdir" 6533c3c9db83Smrg absdir="$abs_ladir/$objdir" 6534c3c9db83Smrg # Remove this search path later 65353f6d0e1dSmrg func_append notinst_path " $abs_ladir" 6536c3c9db83Smrg fi 6537c3c9db83Smrg fi # $installed = yes 6538c3c9db83Smrg func_stripname 'lib' '.la' "$laname" 6539c3c9db83Smrg name=$func_stripname_result 6540c3c9db83Smrg 6541c3c9db83Smrg # This library was specified with -dlpreopen. 6542c3c9db83Smrg if test "$pass" = dlpreopen; then 6543c3c9db83Smrg if test -z "$libdir" && test "$linkmode" = prog; then 6544c3c9db83Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 6545c3c9db83Smrg fi 65463f6d0e1dSmrg case "$host" in 65473f6d0e1dSmrg # special handling for platforms with PE-DLLs. 65483f6d0e1dSmrg *cygwin* | *mingw* | *cegcc* ) 65493f6d0e1dSmrg # Linker will automatically link against shared library if both 65503f6d0e1dSmrg # static and shared are present. Therefore, ensure we extract 65513f6d0e1dSmrg # symbols from the import library if a shared library is present 65523f6d0e1dSmrg # (otherwise, the dlopen module name will be incorrect). We do 65533f6d0e1dSmrg # this by putting the import library name into $newdlprefiles. 65543f6d0e1dSmrg # We recover the dlopen module name by 'saving' the la file 65553f6d0e1dSmrg # name in a special purpose variable, and (later) extracting the 65563f6d0e1dSmrg # dlname from the la file. 65573f6d0e1dSmrg if test -n "$dlname"; then 65583f6d0e1dSmrg func_tr_sh "$dir/$linklib" 65593f6d0e1dSmrg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 65603f6d0e1dSmrg func_append newdlprefiles " $dir/$linklib" 65613f6d0e1dSmrg else 65623f6d0e1dSmrg func_append newdlprefiles " $dir/$old_library" 65633f6d0e1dSmrg # Keep a list of preopened convenience libraries to check 65643f6d0e1dSmrg # that they are being used correctly in the link pass. 65653f6d0e1dSmrg test -z "$libdir" && \ 65663f6d0e1dSmrg func_append dlpreconveniencelibs " $dir/$old_library" 65673f6d0e1dSmrg fi 65683f6d0e1dSmrg ;; 65693f6d0e1dSmrg * ) 65703f6d0e1dSmrg # Prefer using a static library (so that no silly _DYNAMIC symbols 65713f6d0e1dSmrg # are required to link). 65723f6d0e1dSmrg if test -n "$old_library"; then 65733f6d0e1dSmrg func_append newdlprefiles " $dir/$old_library" 65743f6d0e1dSmrg # Keep a list of preopened convenience libraries to check 65753f6d0e1dSmrg # that they are being used correctly in the link pass. 65763f6d0e1dSmrg test -z "$libdir" && \ 65773f6d0e1dSmrg func_append dlpreconveniencelibs " $dir/$old_library" 65783f6d0e1dSmrg # Otherwise, use the dlname, so that lt_dlopen finds it. 65793f6d0e1dSmrg elif test -n "$dlname"; then 65803f6d0e1dSmrg func_append newdlprefiles " $dir/$dlname" 65813f6d0e1dSmrg else 65823f6d0e1dSmrg func_append newdlprefiles " $dir/$linklib" 65833f6d0e1dSmrg fi 65843f6d0e1dSmrg ;; 65853f6d0e1dSmrg esac 6586c3c9db83Smrg fi # $pass = dlpreopen 6587c3c9db83Smrg 6588c3c9db83Smrg if test -z "$libdir"; then 6589c3c9db83Smrg # Link the convenience library 6590c3c9db83Smrg if test "$linkmode" = lib; then 6591c3c9db83Smrg deplibs="$dir/$old_library $deplibs" 6592c3c9db83Smrg elif test "$linkmode,$pass" = "prog,link"; then 6593c3c9db83Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 6594c3c9db83Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 6595c3c9db83Smrg else 6596c3c9db83Smrg deplibs="$lib $deplibs" # used for prog,scan pass 6597c3c9db83Smrg fi 6598c3c9db83Smrg continue 6599c3c9db83Smrg fi 6600c3c9db83Smrg 6601c3c9db83Smrg 6602c3c9db83Smrg if test "$linkmode" = prog && test "$pass" != link; then 66033f6d0e1dSmrg func_append newlib_search_path " $ladir" 6604c3c9db83Smrg deplibs="$lib $deplibs" 6605c3c9db83Smrg 6606c3c9db83Smrg linkalldeplibs=no 6607c3c9db83Smrg if test "$link_all_deplibs" != no || test -z "$library_names" || 6608c3c9db83Smrg test "$build_libtool_libs" = no; then 6609c3c9db83Smrg linkalldeplibs=yes 6610c3c9db83Smrg fi 6611c3c9db83Smrg 6612c3c9db83Smrg tmp_libs= 6613c3c9db83Smrg for deplib in $dependency_libs; do 6614c3c9db83Smrg case $deplib in 6615c3c9db83Smrg -L*) func_stripname '-L' '' "$deplib" 66163f6d0e1dSmrg func_resolve_sysroot "$func_stripname_result" 66173f6d0e1dSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 6618c3c9db83Smrg ;; 6619c3c9db83Smrg esac 6620c3c9db83Smrg # Need to link against all dependency_libs? 6621c3c9db83Smrg if test "$linkalldeplibs" = yes; then 6622c3c9db83Smrg deplibs="$deplib $deplibs" 6623c3c9db83Smrg else 6624c3c9db83Smrg # Need to hardcode shared library paths 6625c3c9db83Smrg # or/and link against static libraries 6626c3c9db83Smrg newdependency_libs="$deplib $newdependency_libs" 6627c3c9db83Smrg fi 66283f6d0e1dSmrg if $opt_preserve_dup_deps ; then 6629c3c9db83Smrg case "$tmp_libs " in 66303f6d0e1dSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6631c3c9db83Smrg esac 6632c3c9db83Smrg fi 66333f6d0e1dSmrg func_append tmp_libs " $deplib" 6634c3c9db83Smrg done # for deplib 6635c3c9db83Smrg continue 6636c3c9db83Smrg fi # $linkmode = prog... 6637c3c9db83Smrg 6638c3c9db83Smrg if test "$linkmode,$pass" = "prog,link"; then 6639c3c9db83Smrg if test -n "$library_names" && 6640c3c9db83Smrg { { test "$prefer_static_libs" = no || 6641c3c9db83Smrg test "$prefer_static_libs,$installed" = "built,yes"; } || 6642c3c9db83Smrg test -z "$old_library"; }; then 6643c3c9db83Smrg # We need to hardcode the library path 6644c3c9db83Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 6645c3c9db83Smrg # Make sure the rpath contains only unique directories. 6646c3c9db83Smrg case "$temp_rpath:" in 6647c3c9db83Smrg *"$absdir:"*) ;; 66483f6d0e1dSmrg *) func_append temp_rpath "$absdir:" ;; 6649c3c9db83Smrg esac 6650c3c9db83Smrg fi 6651c3c9db83Smrg 6652c3c9db83Smrg # Hardcode the library path. 6653c3c9db83Smrg # Skip directories that are in the system default run-time 6654c3c9db83Smrg # search path. 6655c3c9db83Smrg case " $sys_lib_dlsearch_path " in 6656c3c9db83Smrg *" $absdir "*) ;; 6657c3c9db83Smrg *) 6658c3c9db83Smrg case "$compile_rpath " in 6659c3c9db83Smrg *" $absdir "*) ;; 66603f6d0e1dSmrg *) func_append compile_rpath " $absdir" ;; 6661c3c9db83Smrg esac 6662c3c9db83Smrg ;; 6663c3c9db83Smrg esac 6664c3c9db83Smrg case " $sys_lib_dlsearch_path " in 6665c3c9db83Smrg *" $libdir "*) ;; 6666c3c9db83Smrg *) 6667c3c9db83Smrg case "$finalize_rpath " in 6668c3c9db83Smrg *" $libdir "*) ;; 66693f6d0e1dSmrg *) func_append finalize_rpath " $libdir" ;; 6670c3c9db83Smrg esac 6671c3c9db83Smrg ;; 6672c3c9db83Smrg esac 6673c3c9db83Smrg fi # $linkmode,$pass = prog,link... 6674c3c9db83Smrg 6675c3c9db83Smrg if test "$alldeplibs" = yes && 6676c3c9db83Smrg { test "$deplibs_check_method" = pass_all || 6677c3c9db83Smrg { test "$build_libtool_libs" = yes && 6678c3c9db83Smrg test -n "$library_names"; }; }; then 6679c3c9db83Smrg # We only need to search for static libraries 6680c3c9db83Smrg continue 6681c3c9db83Smrg fi 6682c3c9db83Smrg fi 6683c3c9db83Smrg 6684c3c9db83Smrg link_static=no # Whether the deplib will be linked statically 6685c3c9db83Smrg use_static_libs=$prefer_static_libs 6686c3c9db83Smrg if test "$use_static_libs" = built && test "$installed" = yes; then 6687c3c9db83Smrg use_static_libs=no 6688c3c9db83Smrg fi 6689c3c9db83Smrg if test -n "$library_names" && 6690c3c9db83Smrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 6691c3c9db83Smrg case $host in 6692c3c9db83Smrg *cygwin* | *mingw* | *cegcc*) 6693c3c9db83Smrg # No point in relinking DLLs because paths are not encoded 66943f6d0e1dSmrg func_append notinst_deplibs " $lib" 6695c3c9db83Smrg need_relink=no 6696c3c9db83Smrg ;; 6697c3c9db83Smrg *) 6698c3c9db83Smrg if test "$installed" = no; then 66993f6d0e1dSmrg func_append notinst_deplibs " $lib" 6700c3c9db83Smrg need_relink=yes 6701c3c9db83Smrg fi 6702c3c9db83Smrg ;; 6703c3c9db83Smrg esac 6704c3c9db83Smrg # This is a shared library 6705c3c9db83Smrg 6706c3c9db83Smrg # Warn about portability, can't link against -module's on some 6707c3c9db83Smrg # systems (darwin). Don't bleat about dlopened modules though! 6708c3c9db83Smrg dlopenmodule="" 6709c3c9db83Smrg for dlpremoduletest in $dlprefiles; do 6710c3c9db83Smrg if test "X$dlpremoduletest" = "X$lib"; then 6711c3c9db83Smrg dlopenmodule="$dlpremoduletest" 6712c3c9db83Smrg break 6713c3c9db83Smrg fi 6714c3c9db83Smrg done 6715c3c9db83Smrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 67163f6d0e1dSmrg echo 6717c3c9db83Smrg if test "$linkmode" = prog; then 6718c3c9db83Smrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 6719c3c9db83Smrg else 6720c3c9db83Smrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 6721c3c9db83Smrg fi 6722c3c9db83Smrg $ECHO "*** $linklib is not portable!" 6723c3c9db83Smrg fi 6724c3c9db83Smrg if test "$linkmode" = lib && 6725c3c9db83Smrg test "$hardcode_into_libs" = yes; then 6726c3c9db83Smrg # Hardcode the library path. 6727c3c9db83Smrg # Skip directories that are in the system default run-time 6728c3c9db83Smrg # search path. 6729c3c9db83Smrg case " $sys_lib_dlsearch_path " in 6730c3c9db83Smrg *" $absdir "*) ;; 6731c3c9db83Smrg *) 6732c3c9db83Smrg case "$compile_rpath " in 6733c3c9db83Smrg *" $absdir "*) ;; 67343f6d0e1dSmrg *) func_append compile_rpath " $absdir" ;; 6735c3c9db83Smrg esac 6736c3c9db83Smrg ;; 6737c3c9db83Smrg esac 6738c3c9db83Smrg case " $sys_lib_dlsearch_path " in 6739c3c9db83Smrg *" $libdir "*) ;; 6740c3c9db83Smrg *) 6741c3c9db83Smrg case "$finalize_rpath " in 6742c3c9db83Smrg *" $libdir "*) ;; 67433f6d0e1dSmrg *) func_append finalize_rpath " $libdir" ;; 6744c3c9db83Smrg esac 6745c3c9db83Smrg ;; 6746c3c9db83Smrg esac 6747c3c9db83Smrg fi 6748c3c9db83Smrg 6749c3c9db83Smrg if test -n "$old_archive_from_expsyms_cmds"; then 6750c3c9db83Smrg # figure out the soname 6751c3c9db83Smrg set dummy $library_names 6752c3c9db83Smrg shift 6753c3c9db83Smrg realname="$1" 6754c3c9db83Smrg shift 6755c3c9db83Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 6756c3c9db83Smrg # use dlname if we got it. it's perfectly good, no? 6757c3c9db83Smrg if test -n "$dlname"; then 6758c3c9db83Smrg soname="$dlname" 6759c3c9db83Smrg elif test -n "$soname_spec"; then 6760c3c9db83Smrg # bleh windows 6761c3c9db83Smrg case $host in 6762c3c9db83Smrg *cygwin* | mingw* | *cegcc*) 6763c3c9db83Smrg func_arith $current - $age 6764c3c9db83Smrg major=$func_arith_result 6765c3c9db83Smrg versuffix="-$major" 6766c3c9db83Smrg ;; 6767c3c9db83Smrg esac 6768c3c9db83Smrg eval soname=\"$soname_spec\" 6769c3c9db83Smrg else 6770c3c9db83Smrg soname="$realname" 6771c3c9db83Smrg fi 6772c3c9db83Smrg 6773c3c9db83Smrg # Make a new name for the extract_expsyms_cmds to use 6774c3c9db83Smrg soroot="$soname" 6775c3c9db83Smrg func_basename "$soroot" 6776c3c9db83Smrg soname="$func_basename_result" 6777c3c9db83Smrg func_stripname 'lib' '.dll' "$soname" 6778c3c9db83Smrg newlib=libimp-$func_stripname_result.a 6779c3c9db83Smrg 6780c3c9db83Smrg # If the library has no export list, then create one now 6781c3c9db83Smrg if test -f "$output_objdir/$soname-def"; then : 6782c3c9db83Smrg else 6783c3c9db83Smrg func_verbose "extracting exported symbol list from \`$soname'" 6784c3c9db83Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 6785c3c9db83Smrg fi 6786c3c9db83Smrg 6787c3c9db83Smrg # Create $newlib 6788c3c9db83Smrg if test -f "$output_objdir/$newlib"; then :; else 6789c3c9db83Smrg func_verbose "generating import library for \`$soname'" 6790c3c9db83Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 6791c3c9db83Smrg fi 6792c3c9db83Smrg # make sure the library variables are pointing to the new library 6793c3c9db83Smrg dir=$output_objdir 6794c3c9db83Smrg linklib=$newlib 6795c3c9db83Smrg fi # test -n "$old_archive_from_expsyms_cmds" 6796c3c9db83Smrg 67973f6d0e1dSmrg if test "$linkmode" = prog || test "$opt_mode" != relink; then 6798c3c9db83Smrg add_shlibpath= 6799c3c9db83Smrg add_dir= 6800c3c9db83Smrg add= 6801c3c9db83Smrg lib_linked=yes 6802c3c9db83Smrg case $hardcode_action in 6803c3c9db83Smrg immediate | unsupported) 6804c3c9db83Smrg if test "$hardcode_direct" = no; then 6805c3c9db83Smrg add="$dir/$linklib" 6806c3c9db83Smrg case $host in 6807c3c9db83Smrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 6808c3c9db83Smrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 6809c3c9db83Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 6810c3c9db83Smrg *-*-unixware7*) add_dir="-L$dir" ;; 6811c3c9db83Smrg *-*-darwin* ) 6812c3c9db83Smrg # if the lib is a (non-dlopened) module then we can not 6813c3c9db83Smrg # link against it, someone is ignoring the earlier warnings 6814c3c9db83Smrg if /usr/bin/file -L $add 2> /dev/null | 6815c3c9db83Smrg $GREP ": [^:]* bundle" >/dev/null ; then 6816c3c9db83Smrg if test "X$dlopenmodule" != "X$lib"; then 6817c3c9db83Smrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 6818c3c9db83Smrg if test -z "$old_library" ; then 68193f6d0e1dSmrg echo 68203f6d0e1dSmrg echo "*** And there doesn't seem to be a static archive available" 68213f6d0e1dSmrg echo "*** The link will probably fail, sorry" 6822c3c9db83Smrg else 6823c3c9db83Smrg add="$dir/$old_library" 6824c3c9db83Smrg fi 6825c3c9db83Smrg elif test -n "$old_library"; then 6826c3c9db83Smrg add="$dir/$old_library" 6827c3c9db83Smrg fi 6828c3c9db83Smrg fi 6829c3c9db83Smrg esac 6830c3c9db83Smrg elif test "$hardcode_minus_L" = no; then 6831c3c9db83Smrg case $host in 6832c3c9db83Smrg *-*-sunos*) add_shlibpath="$dir" ;; 6833c3c9db83Smrg esac 6834c3c9db83Smrg add_dir="-L$dir" 6835c3c9db83Smrg add="-l$name" 6836c3c9db83Smrg elif test "$hardcode_shlibpath_var" = no; then 6837c3c9db83Smrg add_shlibpath="$dir" 6838c3c9db83Smrg add="-l$name" 6839c3c9db83Smrg else 6840c3c9db83Smrg lib_linked=no 6841c3c9db83Smrg fi 6842c3c9db83Smrg ;; 6843c3c9db83Smrg relink) 6844c3c9db83Smrg if test "$hardcode_direct" = yes && 6845c3c9db83Smrg test "$hardcode_direct_absolute" = no; then 6846c3c9db83Smrg add="$dir/$linklib" 6847c3c9db83Smrg elif test "$hardcode_minus_L" = yes; then 68483f6d0e1dSmrg add_dir="-L$absdir" 6849c3c9db83Smrg # Try looking first in the location we're being installed to. 6850c3c9db83Smrg if test -n "$inst_prefix_dir"; then 6851c3c9db83Smrg case $libdir in 6852c3c9db83Smrg [\\/]*) 68533f6d0e1dSmrg func_append add_dir " -L$inst_prefix_dir$libdir" 6854c3c9db83Smrg ;; 6855c3c9db83Smrg esac 6856c3c9db83Smrg fi 6857c3c9db83Smrg add="-l$name" 6858c3c9db83Smrg elif test "$hardcode_shlibpath_var" = yes; then 6859c3c9db83Smrg add_shlibpath="$dir" 6860c3c9db83Smrg add="-l$name" 6861c3c9db83Smrg else 6862c3c9db83Smrg lib_linked=no 6863c3c9db83Smrg fi 6864c3c9db83Smrg ;; 6865c3c9db83Smrg *) lib_linked=no ;; 6866c3c9db83Smrg esac 6867c3c9db83Smrg 6868c3c9db83Smrg if test "$lib_linked" != yes; then 6869c3c9db83Smrg func_fatal_configuration "unsupported hardcode properties" 6870c3c9db83Smrg fi 6871c3c9db83Smrg 6872c3c9db83Smrg if test -n "$add_shlibpath"; then 6873c3c9db83Smrg case :$compile_shlibpath: in 6874c3c9db83Smrg *":$add_shlibpath:"*) ;; 68753f6d0e1dSmrg *) func_append compile_shlibpath "$add_shlibpath:" ;; 6876c3c9db83Smrg esac 6877c3c9db83Smrg fi 6878c3c9db83Smrg if test "$linkmode" = prog; then 6879c3c9db83Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 6880c3c9db83Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 6881c3c9db83Smrg else 6882c3c9db83Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6883c3c9db83Smrg test -n "$add" && deplibs="$add $deplibs" 6884c3c9db83Smrg if test "$hardcode_direct" != yes && 6885c3c9db83Smrg test "$hardcode_minus_L" != yes && 6886c3c9db83Smrg test "$hardcode_shlibpath_var" = yes; then 6887c3c9db83Smrg case :$finalize_shlibpath: in 6888c3c9db83Smrg *":$libdir:"*) ;; 68893f6d0e1dSmrg *) func_append finalize_shlibpath "$libdir:" ;; 6890c3c9db83Smrg esac 6891c3c9db83Smrg fi 6892c3c9db83Smrg fi 6893c3c9db83Smrg fi 6894c3c9db83Smrg 68953f6d0e1dSmrg if test "$linkmode" = prog || test "$opt_mode" = relink; then 6896c3c9db83Smrg add_shlibpath= 6897c3c9db83Smrg add_dir= 6898c3c9db83Smrg add= 6899c3c9db83Smrg # Finalize command for both is simple: just hardcode it. 6900c3c9db83Smrg if test "$hardcode_direct" = yes && 6901c3c9db83Smrg test "$hardcode_direct_absolute" = no; then 6902c3c9db83Smrg add="$libdir/$linklib" 6903c3c9db83Smrg elif test "$hardcode_minus_L" = yes; then 6904c3c9db83Smrg add_dir="-L$libdir" 6905c3c9db83Smrg add="-l$name" 6906c3c9db83Smrg elif test "$hardcode_shlibpath_var" = yes; then 6907c3c9db83Smrg case :$finalize_shlibpath: in 6908c3c9db83Smrg *":$libdir:"*) ;; 69093f6d0e1dSmrg *) func_append finalize_shlibpath "$libdir:" ;; 6910c3c9db83Smrg esac 6911c3c9db83Smrg add="-l$name" 6912c3c9db83Smrg elif test "$hardcode_automatic" = yes; then 6913c3c9db83Smrg if test -n "$inst_prefix_dir" && 6914c3c9db83Smrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 6915c3c9db83Smrg add="$inst_prefix_dir$libdir/$linklib" 6916c3c9db83Smrg else 6917c3c9db83Smrg add="$libdir/$linklib" 6918c3c9db83Smrg fi 6919c3c9db83Smrg else 6920c3c9db83Smrg # We cannot seem to hardcode it, guess we'll fake it. 6921c3c9db83Smrg add_dir="-L$libdir" 6922c3c9db83Smrg # Try looking first in the location we're being installed to. 6923c3c9db83Smrg if test -n "$inst_prefix_dir"; then 6924c3c9db83Smrg case $libdir in 6925c3c9db83Smrg [\\/]*) 69263f6d0e1dSmrg func_append add_dir " -L$inst_prefix_dir$libdir" 6927c3c9db83Smrg ;; 6928c3c9db83Smrg esac 6929c3c9db83Smrg fi 6930c3c9db83Smrg add="-l$name" 6931c3c9db83Smrg fi 6932c3c9db83Smrg 6933c3c9db83Smrg if test "$linkmode" = prog; then 6934c3c9db83Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 6935c3c9db83Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 6936c3c9db83Smrg else 6937c3c9db83Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6938c3c9db83Smrg test -n "$add" && deplibs="$add $deplibs" 6939c3c9db83Smrg fi 6940c3c9db83Smrg fi 6941c3c9db83Smrg elif test "$linkmode" = prog; then 6942c3c9db83Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 6943c3c9db83Smrg # is not unsupported. This is valid on all known static and 6944c3c9db83Smrg # shared platforms. 6945c3c9db83Smrg if test "$hardcode_direct" != unsupported; then 6946c3c9db83Smrg test -n "$old_library" && linklib="$old_library" 6947c3c9db83Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 6948c3c9db83Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 6949c3c9db83Smrg else 6950c3c9db83Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 6951c3c9db83Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 6952c3c9db83Smrg fi 6953c3c9db83Smrg elif test "$build_libtool_libs" = yes; then 6954c3c9db83Smrg # Not a shared library 6955c3c9db83Smrg if test "$deplibs_check_method" != pass_all; then 6956c3c9db83Smrg # We're trying link a shared library against a static one 6957c3c9db83Smrg # but the system doesn't support it. 6958c3c9db83Smrg 6959c3c9db83Smrg # Just print a warning and add the library to dependency_libs so 6960c3c9db83Smrg # that the program can be linked against the static library. 69613f6d0e1dSmrg echo 6962c3c9db83Smrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 69633f6d0e1dSmrg echo "*** I have the capability to make that library automatically link in when" 69643f6d0e1dSmrg echo "*** you link to this library. But I can only do this if you have a" 69653f6d0e1dSmrg echo "*** shared version of the library, which you do not appear to have." 6966c3c9db83Smrg if test "$module" = yes; then 69673f6d0e1dSmrg echo "*** But as you try to build a module library, libtool will still create " 69683f6d0e1dSmrg echo "*** a static module, that should work as long as the dlopening application" 69693f6d0e1dSmrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 6970c3c9db83Smrg if test -z "$global_symbol_pipe"; then 69713f6d0e1dSmrg echo 69723f6d0e1dSmrg echo "*** However, this would only work if libtool was able to extract symbol" 69733f6d0e1dSmrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 69743f6d0e1dSmrg echo "*** not find such a program. So, this module is probably useless." 69753f6d0e1dSmrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 6976c3c9db83Smrg fi 6977c3c9db83Smrg if test "$build_old_libs" = no; then 6978c3c9db83Smrg build_libtool_libs=module 6979c3c9db83Smrg build_old_libs=yes 6980c3c9db83Smrg else 6981c3c9db83Smrg build_libtool_libs=no 6982c3c9db83Smrg fi 6983c3c9db83Smrg fi 6984c3c9db83Smrg else 6985c3c9db83Smrg deplibs="$dir/$old_library $deplibs" 6986c3c9db83Smrg link_static=yes 6987c3c9db83Smrg fi 6988c3c9db83Smrg fi # link shared/static library? 6989c3c9db83Smrg 6990c3c9db83Smrg if test "$linkmode" = lib; then 6991c3c9db83Smrg if test -n "$dependency_libs" && 6992c3c9db83Smrg { test "$hardcode_into_libs" != yes || 6993c3c9db83Smrg test "$build_old_libs" = yes || 6994c3c9db83Smrg test "$link_static" = yes; }; then 6995c3c9db83Smrg # Extract -R from dependency_libs 6996c3c9db83Smrg temp_deplibs= 6997c3c9db83Smrg for libdir in $dependency_libs; do 6998c3c9db83Smrg case $libdir in 6999c3c9db83Smrg -R*) func_stripname '-R' '' "$libdir" 7000c3c9db83Smrg temp_xrpath=$func_stripname_result 7001c3c9db83Smrg case " $xrpath " in 7002c3c9db83Smrg *" $temp_xrpath "*) ;; 70033f6d0e1dSmrg *) func_append xrpath " $temp_xrpath";; 7004c3c9db83Smrg esac;; 70053f6d0e1dSmrg *) func_append temp_deplibs " $libdir";; 7006c3c9db83Smrg esac 7007c3c9db83Smrg done 7008c3c9db83Smrg dependency_libs="$temp_deplibs" 7009c3c9db83Smrg fi 7010c3c9db83Smrg 70113f6d0e1dSmrg func_append newlib_search_path " $absdir" 7012c3c9db83Smrg # Link against this library 7013c3c9db83Smrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 7014c3c9db83Smrg # ... and its dependency_libs 7015c3c9db83Smrg tmp_libs= 7016c3c9db83Smrg for deplib in $dependency_libs; do 7017c3c9db83Smrg newdependency_libs="$deplib $newdependency_libs" 70183f6d0e1dSmrg case $deplib in 70193f6d0e1dSmrg -L*) func_stripname '-L' '' "$deplib" 70203f6d0e1dSmrg func_resolve_sysroot "$func_stripname_result";; 70213f6d0e1dSmrg *) func_resolve_sysroot "$deplib" ;; 70223f6d0e1dSmrg esac 70233f6d0e1dSmrg if $opt_preserve_dup_deps ; then 7024c3c9db83Smrg case "$tmp_libs " in 70253f6d0e1dSmrg *" $func_resolve_sysroot_result "*) 70263f6d0e1dSmrg func_append specialdeplibs " $func_resolve_sysroot_result" ;; 7027c3c9db83Smrg esac 7028c3c9db83Smrg fi 70293f6d0e1dSmrg func_append tmp_libs " $func_resolve_sysroot_result" 7030c3c9db83Smrg done 7031c3c9db83Smrg 7032c3c9db83Smrg if test "$link_all_deplibs" != no; then 7033c3c9db83Smrg # Add the search paths of all dependency libraries 7034c3c9db83Smrg for deplib in $dependency_libs; do 70353f6d0e1dSmrg path= 7036c3c9db83Smrg case $deplib in 7037c3c9db83Smrg -L*) path="$deplib" ;; 7038c3c9db83Smrg *.la) 70393f6d0e1dSmrg func_resolve_sysroot "$deplib" 70403f6d0e1dSmrg deplib=$func_resolve_sysroot_result 7041c3c9db83Smrg func_dirname "$deplib" "" "." 70423f6d0e1dSmrg dir=$func_dirname_result 7043c3c9db83Smrg # We need an absolute path. 7044c3c9db83Smrg case $dir in 7045c3c9db83Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 7046c3c9db83Smrg *) 7047c3c9db83Smrg absdir=`cd "$dir" && pwd` 7048c3c9db83Smrg if test -z "$absdir"; then 7049c3c9db83Smrg func_warning "cannot determine absolute directory name of \`$dir'" 7050c3c9db83Smrg absdir="$dir" 7051c3c9db83Smrg fi 7052c3c9db83Smrg ;; 7053c3c9db83Smrg esac 7054c3c9db83Smrg if $GREP "^installed=no" $deplib > /dev/null; then 7055c3c9db83Smrg case $host in 7056c3c9db83Smrg *-*-darwin*) 7057c3c9db83Smrg depdepl= 7058c3c9db83Smrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 7059c3c9db83Smrg if test -n "$deplibrary_names" ; then 7060c3c9db83Smrg for tmp in $deplibrary_names ; do 7061c3c9db83Smrg depdepl=$tmp 7062c3c9db83Smrg done 7063c3c9db83Smrg if test -f "$absdir/$objdir/$depdepl" ; then 7064c3c9db83Smrg depdepl="$absdir/$objdir/$depdepl" 7065c3c9db83Smrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7066c3c9db83Smrg if test -z "$darwin_install_name"; then 7067c3c9db83Smrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7068c3c9db83Smrg fi 70693f6d0e1dSmrg func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 70703f6d0e1dSmrg func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" 7071c3c9db83Smrg path= 7072c3c9db83Smrg fi 7073c3c9db83Smrg fi 7074c3c9db83Smrg ;; 7075c3c9db83Smrg *) 7076c3c9db83Smrg path="-L$absdir/$objdir" 7077c3c9db83Smrg ;; 7078c3c9db83Smrg esac 7079c3c9db83Smrg else 7080c3c9db83Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 7081c3c9db83Smrg test -z "$libdir" && \ 7082c3c9db83Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 7083c3c9db83Smrg test "$absdir" != "$libdir" && \ 7084c3c9db83Smrg func_warning "\`$deplib' seems to be moved" 7085c3c9db83Smrg 7086c3c9db83Smrg path="-L$absdir" 7087c3c9db83Smrg fi 7088c3c9db83Smrg ;; 7089c3c9db83Smrg esac 7090c3c9db83Smrg case " $deplibs " in 7091c3c9db83Smrg *" $path "*) ;; 7092c3c9db83Smrg *) deplibs="$path $deplibs" ;; 7093c3c9db83Smrg esac 7094c3c9db83Smrg done 7095c3c9db83Smrg fi # link_all_deplibs != no 7096c3c9db83Smrg fi # linkmode = lib 7097c3c9db83Smrg done # for deplib in $libs 7098c3c9db83Smrg if test "$pass" = link; then 7099c3c9db83Smrg if test "$linkmode" = "prog"; then 7100c3c9db83Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 7101c3c9db83Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 7102c3c9db83Smrg else 71033f6d0e1dSmrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7104c3c9db83Smrg fi 7105c3c9db83Smrg fi 7106c3c9db83Smrg dependency_libs="$newdependency_libs" 7107c3c9db83Smrg if test "$pass" = dlpreopen; then 7108c3c9db83Smrg # Link the dlpreopened libraries before other libraries 7109c3c9db83Smrg for deplib in $save_deplibs; do 7110c3c9db83Smrg deplibs="$deplib $deplibs" 7111c3c9db83Smrg done 7112c3c9db83Smrg fi 7113c3c9db83Smrg if test "$pass" != dlopen; then 7114c3c9db83Smrg if test "$pass" != conv; then 7115c3c9db83Smrg # Make sure lib_search_path contains only unique directories. 7116c3c9db83Smrg lib_search_path= 7117c3c9db83Smrg for dir in $newlib_search_path; do 7118c3c9db83Smrg case "$lib_search_path " in 7119c3c9db83Smrg *" $dir "*) ;; 71203f6d0e1dSmrg *) func_append lib_search_path " $dir" ;; 7121c3c9db83Smrg esac 7122c3c9db83Smrg done 7123c3c9db83Smrg newlib_search_path= 7124c3c9db83Smrg fi 7125c3c9db83Smrg 7126c3c9db83Smrg if test "$linkmode,$pass" != "prog,link"; then 7127c3c9db83Smrg vars="deplibs" 7128c3c9db83Smrg else 7129c3c9db83Smrg vars="compile_deplibs finalize_deplibs" 7130c3c9db83Smrg fi 7131c3c9db83Smrg for var in $vars dependency_libs; do 7132c3c9db83Smrg # Add libraries to $var in reverse order 7133c3c9db83Smrg eval tmp_libs=\"\$$var\" 7134c3c9db83Smrg new_libs= 7135c3c9db83Smrg for deplib in $tmp_libs; do 7136c3c9db83Smrg # FIXME: Pedantically, this is the right thing to do, so 7137c3c9db83Smrg # that some nasty dependency loop isn't accidentally 7138c3c9db83Smrg # broken: 7139c3c9db83Smrg #new_libs="$deplib $new_libs" 7140c3c9db83Smrg # Pragmatically, this seems to cause very few problems in 7141c3c9db83Smrg # practice: 7142c3c9db83Smrg case $deplib in 7143c3c9db83Smrg -L*) new_libs="$deplib $new_libs" ;; 7144c3c9db83Smrg -R*) ;; 7145c3c9db83Smrg *) 7146c3c9db83Smrg # And here is the reason: when a library appears more 7147c3c9db83Smrg # than once as an explicit dependence of a library, or 7148c3c9db83Smrg # is implicitly linked in more than once by the 7149c3c9db83Smrg # compiler, it is considered special, and multiple 7150c3c9db83Smrg # occurrences thereof are not removed. Compare this 7151c3c9db83Smrg # with having the same library being listed as a 7152c3c9db83Smrg # dependency of multiple other libraries: in this case, 7153c3c9db83Smrg # we know (pedantically, we assume) the library does not 7154c3c9db83Smrg # need to be listed more than once, so we keep only the 7155c3c9db83Smrg # last copy. This is not always right, but it is rare 7156c3c9db83Smrg # enough that we require users that really mean to play 7157c3c9db83Smrg # such unportable linking tricks to link the library 7158c3c9db83Smrg # using -Wl,-lname, so that libtool does not consider it 7159c3c9db83Smrg # for duplicate removal. 7160c3c9db83Smrg case " $specialdeplibs " in 7161c3c9db83Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 7162c3c9db83Smrg *) 7163c3c9db83Smrg case " $new_libs " in 7164c3c9db83Smrg *" $deplib "*) ;; 7165c3c9db83Smrg *) new_libs="$deplib $new_libs" ;; 7166c3c9db83Smrg esac 7167c3c9db83Smrg ;; 7168c3c9db83Smrg esac 7169c3c9db83Smrg ;; 7170c3c9db83Smrg esac 7171c3c9db83Smrg done 7172c3c9db83Smrg tmp_libs= 7173c3c9db83Smrg for deplib in $new_libs; do 7174c3c9db83Smrg case $deplib in 7175c3c9db83Smrg -L*) 7176c3c9db83Smrg case " $tmp_libs " in 7177c3c9db83Smrg *" $deplib "*) ;; 71783f6d0e1dSmrg *) func_append tmp_libs " $deplib" ;; 7179c3c9db83Smrg esac 7180c3c9db83Smrg ;; 71813f6d0e1dSmrg *) func_append tmp_libs " $deplib" ;; 7182c3c9db83Smrg esac 7183c3c9db83Smrg done 7184c3c9db83Smrg eval $var=\"$tmp_libs\" 7185c3c9db83Smrg done # for var 7186c3c9db83Smrg fi 7187c3c9db83Smrg # Last step: remove runtime libs from dependency_libs 7188c3c9db83Smrg # (they stay in deplibs) 7189c3c9db83Smrg tmp_libs= 7190c3c9db83Smrg for i in $dependency_libs ; do 7191c3c9db83Smrg case " $predeps $postdeps $compiler_lib_search_path " in 7192c3c9db83Smrg *" $i "*) 7193c3c9db83Smrg i="" 7194c3c9db83Smrg ;; 7195c3c9db83Smrg esac 7196c3c9db83Smrg if test -n "$i" ; then 71973f6d0e1dSmrg func_append tmp_libs " $i" 7198c3c9db83Smrg fi 7199c3c9db83Smrg done 7200c3c9db83Smrg dependency_libs=$tmp_libs 7201c3c9db83Smrg done # for pass 7202c3c9db83Smrg if test "$linkmode" = prog; then 7203c3c9db83Smrg dlfiles="$newdlfiles" 7204c3c9db83Smrg fi 7205c3c9db83Smrg if test "$linkmode" = prog || test "$linkmode" = lib; then 7206c3c9db83Smrg dlprefiles="$newdlprefiles" 7207c3c9db83Smrg fi 7208c3c9db83Smrg 7209c3c9db83Smrg case $linkmode in 7210c3c9db83Smrg oldlib) 7211c3c9db83Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 7212c3c9db83Smrg func_warning "\`-dlopen' is ignored for archives" 7213c3c9db83Smrg fi 7214c3c9db83Smrg 7215c3c9db83Smrg case " $deplibs" in 7216c3c9db83Smrg *\ -l* | *\ -L*) 7217c3c9db83Smrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 7218c3c9db83Smrg esac 7219c3c9db83Smrg 7220c3c9db83Smrg test -n "$rpath" && \ 7221c3c9db83Smrg func_warning "\`-rpath' is ignored for archives" 7222c3c9db83Smrg 7223c3c9db83Smrg test -n "$xrpath" && \ 7224c3c9db83Smrg func_warning "\`-R' is ignored for archives" 7225c3c9db83Smrg 7226c3c9db83Smrg test -n "$vinfo" && \ 7227c3c9db83Smrg func_warning "\`-version-info/-version-number' is ignored for archives" 7228c3c9db83Smrg 7229c3c9db83Smrg test -n "$release" && \ 7230c3c9db83Smrg func_warning "\`-release' is ignored for archives" 7231c3c9db83Smrg 7232c3c9db83Smrg test -n "$export_symbols$export_symbols_regex" && \ 7233c3c9db83Smrg func_warning "\`-export-symbols' is ignored for archives" 7234c3c9db83Smrg 7235c3c9db83Smrg # Now set the variables for building old libraries. 7236c3c9db83Smrg build_libtool_libs=no 7237c3c9db83Smrg oldlibs="$output" 72383f6d0e1dSmrg func_append objs "$old_deplibs" 7239c3c9db83Smrg ;; 7240c3c9db83Smrg 7241c3c9db83Smrg lib) 7242c3c9db83Smrg # Make sure we only generate libraries of the form `libNAME.la'. 7243c3c9db83Smrg case $outputname in 7244c3c9db83Smrg lib*) 7245c3c9db83Smrg func_stripname 'lib' '.la' "$outputname" 7246c3c9db83Smrg name=$func_stripname_result 7247c3c9db83Smrg eval shared_ext=\"$shrext_cmds\" 7248c3c9db83Smrg eval libname=\"$libname_spec\" 7249c3c9db83Smrg ;; 7250c3c9db83Smrg *) 7251c3c9db83Smrg test "$module" = no && \ 7252c3c9db83Smrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 7253c3c9db83Smrg 7254c3c9db83Smrg if test "$need_lib_prefix" != no; then 7255c3c9db83Smrg # Add the "lib" prefix for modules if required 7256c3c9db83Smrg func_stripname '' '.la' "$outputname" 7257c3c9db83Smrg name=$func_stripname_result 7258c3c9db83Smrg eval shared_ext=\"$shrext_cmds\" 7259c3c9db83Smrg eval libname=\"$libname_spec\" 7260c3c9db83Smrg else 7261c3c9db83Smrg func_stripname '' '.la' "$outputname" 7262c3c9db83Smrg libname=$func_stripname_result 7263c3c9db83Smrg fi 7264c3c9db83Smrg ;; 7265c3c9db83Smrg esac 7266c3c9db83Smrg 7267c3c9db83Smrg if test -n "$objs"; then 7268c3c9db83Smrg if test "$deplibs_check_method" != pass_all; then 7269c3c9db83Smrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 7270c3c9db83Smrg else 72713f6d0e1dSmrg echo 7272c3c9db83Smrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 7273c3c9db83Smrg $ECHO "*** objects $objs is not portable!" 72743f6d0e1dSmrg func_append libobjs " $objs" 7275c3c9db83Smrg fi 7276c3c9db83Smrg fi 7277c3c9db83Smrg 7278c3c9db83Smrg test "$dlself" != no && \ 7279c3c9db83Smrg func_warning "\`-dlopen self' is ignored for libtool libraries" 7280c3c9db83Smrg 7281c3c9db83Smrg set dummy $rpath 7282c3c9db83Smrg shift 7283c3c9db83Smrg test "$#" -gt 1 && \ 7284c3c9db83Smrg func_warning "ignoring multiple \`-rpath's for a libtool library" 7285c3c9db83Smrg 7286c3c9db83Smrg install_libdir="$1" 7287c3c9db83Smrg 7288c3c9db83Smrg oldlibs= 7289c3c9db83Smrg if test -z "$rpath"; then 7290c3c9db83Smrg if test "$build_libtool_libs" = yes; then 7291c3c9db83Smrg # Building a libtool convenience library. 7292c3c9db83Smrg # Some compilers have problems with a `.al' extension so 7293c3c9db83Smrg # convenience libraries should have the same extension an 7294c3c9db83Smrg # archive normally would. 7295c3c9db83Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 7296c3c9db83Smrg build_libtool_libs=convenience 7297c3c9db83Smrg build_old_libs=yes 7298c3c9db83Smrg fi 7299c3c9db83Smrg 7300c3c9db83Smrg test -n "$vinfo" && \ 7301c3c9db83Smrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 7302c3c9db83Smrg 7303c3c9db83Smrg test -n "$release" && \ 7304c3c9db83Smrg func_warning "\`-release' is ignored for convenience libraries" 7305c3c9db83Smrg else 7306c3c9db83Smrg 7307c3c9db83Smrg # Parse the version information argument. 7308c3c9db83Smrg save_ifs="$IFS"; IFS=':' 7309c3c9db83Smrg set dummy $vinfo 0 0 0 7310c3c9db83Smrg shift 7311c3c9db83Smrg IFS="$save_ifs" 7312c3c9db83Smrg 7313c3c9db83Smrg test -n "$7" && \ 7314c3c9db83Smrg func_fatal_help "too many parameters to \`-version-info'" 7315c3c9db83Smrg 7316c3c9db83Smrg # convert absolute version numbers to libtool ages 7317c3c9db83Smrg # this retains compatibility with .la files and attempts 7318c3c9db83Smrg # to make the code below a bit more comprehensible 7319c3c9db83Smrg 7320c3c9db83Smrg case $vinfo_number in 7321c3c9db83Smrg yes) 7322c3c9db83Smrg number_major="$1" 7323c3c9db83Smrg number_minor="$2" 7324c3c9db83Smrg number_revision="$3" 7325c3c9db83Smrg # 7326c3c9db83Smrg # There are really only two kinds -- those that 7327c3c9db83Smrg # use the current revision as the major version 7328c3c9db83Smrg # and those that subtract age and use age as 7329c3c9db83Smrg # a minor version. But, then there is irix 7330c3c9db83Smrg # which has an extra 1 added just for fun 7331c3c9db83Smrg # 7332c3c9db83Smrg case $version_type in 73333f6d0e1dSmrg # correct linux to gnu/linux during the next big refactor 7334c3c9db83Smrg darwin|linux|osf|windows|none) 7335c3c9db83Smrg func_arith $number_major + $number_minor 7336c3c9db83Smrg current=$func_arith_result 7337c3c9db83Smrg age="$number_minor" 7338c3c9db83Smrg revision="$number_revision" 7339c3c9db83Smrg ;; 73403f6d0e1dSmrg freebsd-aout|freebsd-elf|qnx|sunos) 7341c3c9db83Smrg current="$number_major" 7342c3c9db83Smrg revision="$number_minor" 7343c3c9db83Smrg age="0" 7344c3c9db83Smrg ;; 7345c3c9db83Smrg irix|nonstopux) 7346c3c9db83Smrg func_arith $number_major + $number_minor 7347c3c9db83Smrg current=$func_arith_result 7348c3c9db83Smrg age="$number_minor" 7349c3c9db83Smrg revision="$number_minor" 7350c3c9db83Smrg lt_irix_increment=no 7351c3c9db83Smrg ;; 7352c3c9db83Smrg esac 7353c3c9db83Smrg ;; 7354c3c9db83Smrg no) 7355c3c9db83Smrg current="$1" 7356c3c9db83Smrg revision="$2" 7357c3c9db83Smrg age="$3" 7358c3c9db83Smrg ;; 7359c3c9db83Smrg esac 7360c3c9db83Smrg 7361c3c9db83Smrg # Check that each of the things are valid numbers. 7362c3c9db83Smrg case $current in 7363c3c9db83Smrg 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]) ;; 7364c3c9db83Smrg *) 7365c3c9db83Smrg func_error "CURRENT \`$current' must be a nonnegative integer" 7366c3c9db83Smrg func_fatal_error "\`$vinfo' is not valid version information" 7367c3c9db83Smrg ;; 7368c3c9db83Smrg esac 7369c3c9db83Smrg 7370c3c9db83Smrg case $revision in 7371c3c9db83Smrg 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]) ;; 7372c3c9db83Smrg *) 7373c3c9db83Smrg func_error "REVISION \`$revision' must be a nonnegative integer" 7374c3c9db83Smrg func_fatal_error "\`$vinfo' is not valid version information" 7375c3c9db83Smrg ;; 7376c3c9db83Smrg esac 7377c3c9db83Smrg 7378c3c9db83Smrg case $age in 7379c3c9db83Smrg 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]) ;; 7380c3c9db83Smrg *) 7381c3c9db83Smrg func_error "AGE \`$age' must be a nonnegative integer" 7382c3c9db83Smrg func_fatal_error "\`$vinfo' is not valid version information" 7383c3c9db83Smrg ;; 7384c3c9db83Smrg esac 7385c3c9db83Smrg 7386c3c9db83Smrg if test "$age" -gt "$current"; then 7387c3c9db83Smrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 7388c3c9db83Smrg func_fatal_error "\`$vinfo' is not valid version information" 7389c3c9db83Smrg fi 7390c3c9db83Smrg 7391c3c9db83Smrg # Calculate the version variables. 7392c3c9db83Smrg major= 7393c3c9db83Smrg versuffix= 7394c3c9db83Smrg verstring= 7395c3c9db83Smrg case $version_type in 7396c3c9db83Smrg none) ;; 7397c3c9db83Smrg 7398c3c9db83Smrg darwin) 7399c3c9db83Smrg # Like Linux, but with the current version available in 7400c3c9db83Smrg # verstring for coding it into the library header 7401c3c9db83Smrg func_arith $current - $age 7402c3c9db83Smrg major=.$func_arith_result 7403c3c9db83Smrg versuffix="$major.$age.$revision" 7404c3c9db83Smrg # Darwin ld doesn't like 0 for these options... 7405c3c9db83Smrg func_arith $current + 1 7406c3c9db83Smrg minor_current=$func_arith_result 7407c3c9db83Smrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 7408c3c9db83Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 7409c3c9db83Smrg ;; 7410c3c9db83Smrg 7411c3c9db83Smrg freebsd-aout) 7412c3c9db83Smrg major=".$current" 7413c3c9db83Smrg versuffix=".$current.$revision"; 7414c3c9db83Smrg ;; 7415c3c9db83Smrg 7416c3c9db83Smrg freebsd-elf) 7417c3c9db83Smrg major=".$current" 7418c3c9db83Smrg versuffix=".$current" 7419c3c9db83Smrg ;; 7420c3c9db83Smrg 7421c3c9db83Smrg irix | nonstopux) 7422c3c9db83Smrg if test "X$lt_irix_increment" = "Xno"; then 7423c3c9db83Smrg func_arith $current - $age 7424c3c9db83Smrg else 7425c3c9db83Smrg func_arith $current - $age + 1 7426c3c9db83Smrg fi 7427c3c9db83Smrg major=$func_arith_result 7428c3c9db83Smrg 7429c3c9db83Smrg case $version_type in 7430c3c9db83Smrg nonstopux) verstring_prefix=nonstopux ;; 7431c3c9db83Smrg *) verstring_prefix=sgi ;; 7432c3c9db83Smrg esac 7433c3c9db83Smrg verstring="$verstring_prefix$major.$revision" 7434c3c9db83Smrg 7435c3c9db83Smrg # Add in all the interfaces that we are compatible with. 7436c3c9db83Smrg loop=$revision 7437c3c9db83Smrg while test "$loop" -ne 0; do 7438c3c9db83Smrg func_arith $revision - $loop 7439c3c9db83Smrg iface=$func_arith_result 7440c3c9db83Smrg func_arith $loop - 1 7441c3c9db83Smrg loop=$func_arith_result 7442c3c9db83Smrg verstring="$verstring_prefix$major.$iface:$verstring" 7443c3c9db83Smrg done 7444c3c9db83Smrg 7445c3c9db83Smrg # Before this point, $major must not contain `.'. 7446c3c9db83Smrg major=.$major 7447c3c9db83Smrg versuffix="$major.$revision" 7448c3c9db83Smrg ;; 7449c3c9db83Smrg 74503f6d0e1dSmrg linux) # correct to gnu/linux during the next big refactor 7451c3c9db83Smrg func_arith $current - $age 7452c3c9db83Smrg major=.$func_arith_result 7453c3c9db83Smrg versuffix="$major.$age.$revision" 7454c3c9db83Smrg ;; 7455c3c9db83Smrg 7456c3c9db83Smrg osf) 7457c3c9db83Smrg func_arith $current - $age 7458c3c9db83Smrg major=.$func_arith_result 7459c3c9db83Smrg versuffix=".$current.$age.$revision" 7460c3c9db83Smrg verstring="$current.$age.$revision" 7461c3c9db83Smrg 7462c3c9db83Smrg # Add in all the interfaces that we are compatible with. 7463c3c9db83Smrg loop=$age 7464c3c9db83Smrg while test "$loop" -ne 0; do 7465c3c9db83Smrg func_arith $current - $loop 7466c3c9db83Smrg iface=$func_arith_result 7467c3c9db83Smrg func_arith $loop - 1 7468c3c9db83Smrg loop=$func_arith_result 7469c3c9db83Smrg verstring="$verstring:${iface}.0" 7470c3c9db83Smrg done 7471c3c9db83Smrg 7472c3c9db83Smrg # Make executables depend on our current version. 74733f6d0e1dSmrg func_append verstring ":${current}.0" 7474c3c9db83Smrg ;; 7475c3c9db83Smrg 7476c3c9db83Smrg qnx) 7477c3c9db83Smrg major=".$current" 7478c3c9db83Smrg versuffix=".$current" 7479c3c9db83Smrg ;; 7480c3c9db83Smrg 7481c3c9db83Smrg sunos) 7482c3c9db83Smrg major=".$current" 7483c3c9db83Smrg versuffix=".$current.$revision" 7484c3c9db83Smrg ;; 7485c3c9db83Smrg 7486c3c9db83Smrg windows) 7487c3c9db83Smrg # Use '-' rather than '.', since we only want one 7488c3c9db83Smrg # extension on DOS 8.3 filesystems. 7489c3c9db83Smrg func_arith $current - $age 7490c3c9db83Smrg major=$func_arith_result 7491c3c9db83Smrg versuffix="-$major" 7492c3c9db83Smrg ;; 7493c3c9db83Smrg 7494c3c9db83Smrg *) 7495c3c9db83Smrg func_fatal_configuration "unknown library version type \`$version_type'" 7496c3c9db83Smrg ;; 7497c3c9db83Smrg esac 7498c3c9db83Smrg 7499c3c9db83Smrg # Clear the version info if we defaulted, and they specified a release. 7500c3c9db83Smrg if test -z "$vinfo" && test -n "$release"; then 7501c3c9db83Smrg major= 7502c3c9db83Smrg case $version_type in 7503c3c9db83Smrg darwin) 7504c3c9db83Smrg # we can't check for "0.0" in archive_cmds due to quoting 7505c3c9db83Smrg # problems, so we reset it completely 7506c3c9db83Smrg verstring= 7507c3c9db83Smrg ;; 7508c3c9db83Smrg *) 7509c3c9db83Smrg verstring="0.0" 7510c3c9db83Smrg ;; 7511c3c9db83Smrg esac 7512c3c9db83Smrg if test "$need_version" = no; then 7513c3c9db83Smrg versuffix= 7514c3c9db83Smrg else 7515c3c9db83Smrg versuffix=".0.0" 7516c3c9db83Smrg fi 7517c3c9db83Smrg fi 7518c3c9db83Smrg 7519c3c9db83Smrg # Remove version info from name if versioning should be avoided 7520c3c9db83Smrg if test "$avoid_version" = yes && test "$need_version" = no; then 7521c3c9db83Smrg major= 7522c3c9db83Smrg versuffix= 7523c3c9db83Smrg verstring="" 7524c3c9db83Smrg fi 7525c3c9db83Smrg 7526c3c9db83Smrg # Check to see if the archive will have undefined symbols. 7527c3c9db83Smrg if test "$allow_undefined" = yes; then 7528c3c9db83Smrg if test "$allow_undefined_flag" = unsupported; then 7529c3c9db83Smrg func_warning "undefined symbols not allowed in $host shared libraries" 7530c3c9db83Smrg build_libtool_libs=no 7531c3c9db83Smrg build_old_libs=yes 7532c3c9db83Smrg fi 7533c3c9db83Smrg else 7534c3c9db83Smrg # Don't allow undefined symbols. 7535c3c9db83Smrg allow_undefined_flag="$no_undefined_flag" 7536c3c9db83Smrg fi 7537c3c9db83Smrg 7538c3c9db83Smrg fi 7539c3c9db83Smrg 7540c3c9db83Smrg func_generate_dlsyms "$libname" "$libname" "yes" 75413f6d0e1dSmrg func_append libobjs " $symfileobj" 7542c3c9db83Smrg test "X$libobjs" = "X " && libobjs= 7543c3c9db83Smrg 75443f6d0e1dSmrg if test "$opt_mode" != relink; then 7545c3c9db83Smrg # Remove our outputs, but don't remove object files since they 7546c3c9db83Smrg # may have been created when compiling PIC objects. 7547c3c9db83Smrg removelist= 7548c3c9db83Smrg tempremovelist=`$ECHO "$output_objdir/*"` 7549c3c9db83Smrg for p in $tempremovelist; do 7550c3c9db83Smrg case $p in 7551c3c9db83Smrg *.$objext | *.gcno) 7552c3c9db83Smrg ;; 7553c3c9db83Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 7554c3c9db83Smrg if test "X$precious_files_regex" != "X"; then 7555c3c9db83Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 7556c3c9db83Smrg then 7557c3c9db83Smrg continue 7558c3c9db83Smrg fi 7559c3c9db83Smrg fi 75603f6d0e1dSmrg func_append removelist " $p" 7561c3c9db83Smrg ;; 7562c3c9db83Smrg *) ;; 7563c3c9db83Smrg esac 7564c3c9db83Smrg done 7565c3c9db83Smrg test -n "$removelist" && \ 7566c3c9db83Smrg func_show_eval "${RM}r \$removelist" 7567c3c9db83Smrg fi 7568c3c9db83Smrg 7569c3c9db83Smrg # Now set the variables for building old libraries. 7570c3c9db83Smrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 75713f6d0e1dSmrg func_append oldlibs " $output_objdir/$libname.$libext" 7572c3c9db83Smrg 7573c3c9db83Smrg # Transform .lo files to .o files. 75743f6d0e1dSmrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` 7575c3c9db83Smrg fi 7576c3c9db83Smrg 7577c3c9db83Smrg # Eliminate all temporary directories. 7578c3c9db83Smrg #for path in $notinst_path; do 75793f6d0e1dSmrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 75803f6d0e1dSmrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 75813f6d0e1dSmrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 7582c3c9db83Smrg #done 7583c3c9db83Smrg 7584c3c9db83Smrg if test -n "$xrpath"; then 7585c3c9db83Smrg # If the user specified any rpath flags, then add them. 7586c3c9db83Smrg temp_xrpath= 7587c3c9db83Smrg for libdir in $xrpath; do 75883f6d0e1dSmrg func_replace_sysroot "$libdir" 75893f6d0e1dSmrg func_append temp_xrpath " -R$func_replace_sysroot_result" 7590c3c9db83Smrg case "$finalize_rpath " in 7591c3c9db83Smrg *" $libdir "*) ;; 75923f6d0e1dSmrg *) func_append finalize_rpath " $libdir" ;; 7593c3c9db83Smrg esac 7594c3c9db83Smrg done 7595c3c9db83Smrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 7596c3c9db83Smrg dependency_libs="$temp_xrpath $dependency_libs" 7597c3c9db83Smrg fi 7598c3c9db83Smrg fi 7599c3c9db83Smrg 7600c3c9db83Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 7601c3c9db83Smrg old_dlfiles="$dlfiles" 7602c3c9db83Smrg dlfiles= 7603c3c9db83Smrg for lib in $old_dlfiles; do 7604c3c9db83Smrg case " $dlprefiles $dlfiles " in 7605c3c9db83Smrg *" $lib "*) ;; 76063f6d0e1dSmrg *) func_append dlfiles " $lib" ;; 7607c3c9db83Smrg esac 7608c3c9db83Smrg done 7609c3c9db83Smrg 7610c3c9db83Smrg # Make sure dlprefiles contains only unique files 7611c3c9db83Smrg old_dlprefiles="$dlprefiles" 7612c3c9db83Smrg dlprefiles= 7613c3c9db83Smrg for lib in $old_dlprefiles; do 7614c3c9db83Smrg case "$dlprefiles " in 7615c3c9db83Smrg *" $lib "*) ;; 76163f6d0e1dSmrg *) func_append dlprefiles " $lib" ;; 7617c3c9db83Smrg esac 7618c3c9db83Smrg done 7619c3c9db83Smrg 7620c3c9db83Smrg if test "$build_libtool_libs" = yes; then 7621c3c9db83Smrg if test -n "$rpath"; then 7622c3c9db83Smrg case $host in 76233f6d0e1dSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 7624c3c9db83Smrg # these systems don't actually have a c library (as such)! 7625c3c9db83Smrg ;; 7626c3c9db83Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7627c3c9db83Smrg # Rhapsody C library is in the System framework 76283f6d0e1dSmrg func_append deplibs " System.ltframework" 7629c3c9db83Smrg ;; 7630c3c9db83Smrg *-*-netbsd*) 7631c3c9db83Smrg # Don't link with libc until the a.out ld.so is fixed. 7632c3c9db83Smrg ;; 7633c3c9db83Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 7634c3c9db83Smrg # Do not include libc due to us having libc/libc_r. 7635c3c9db83Smrg ;; 7636c3c9db83Smrg *-*-sco3.2v5* | *-*-sco5v6*) 7637c3c9db83Smrg # Causes problems with __ctype 7638c3c9db83Smrg ;; 7639c3c9db83Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7640c3c9db83Smrg # Compiler inserts libc in the correct place for threads to work 7641c3c9db83Smrg ;; 7642c3c9db83Smrg *) 7643c3c9db83Smrg # Add libc to deplibs on all other systems if necessary. 7644c3c9db83Smrg if test "$build_libtool_need_lc" = "yes"; then 76453f6d0e1dSmrg func_append deplibs " -lc" 7646c3c9db83Smrg fi 7647c3c9db83Smrg ;; 7648c3c9db83Smrg esac 7649c3c9db83Smrg fi 7650c3c9db83Smrg 7651c3c9db83Smrg # Transform deplibs into only deplibs that can be linked in shared. 7652c3c9db83Smrg name_save=$name 7653c3c9db83Smrg libname_save=$libname 7654c3c9db83Smrg release_save=$release 7655c3c9db83Smrg versuffix_save=$versuffix 7656c3c9db83Smrg major_save=$major 7657c3c9db83Smrg # I'm not sure if I'm treating the release correctly. I think 7658c3c9db83Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 7659c3c9db83Smrg # add it in twice. Is that correct? 7660c3c9db83Smrg release="" 7661c3c9db83Smrg versuffix="" 7662c3c9db83Smrg major="" 7663c3c9db83Smrg newdeplibs= 7664c3c9db83Smrg droppeddeps=no 7665c3c9db83Smrg case $deplibs_check_method in 7666c3c9db83Smrg pass_all) 7667c3c9db83Smrg # Don't check for shared/static. Everything works. 7668c3c9db83Smrg # This might be a little naive. We might want to check 7669c3c9db83Smrg # whether the library exists or not. But this is on 7670c3c9db83Smrg # osf3 & osf4 and I'm not really sure... Just 7671c3c9db83Smrg # implementing what was already the behavior. 7672c3c9db83Smrg newdeplibs=$deplibs 7673c3c9db83Smrg ;; 7674c3c9db83Smrg test_compile) 7675c3c9db83Smrg # This code stresses the "libraries are programs" paradigm to its 7676c3c9db83Smrg # limits. Maybe even breaks it. We compile a program, linking it 7677c3c9db83Smrg # against the deplibs as a proxy for the library. Then we can check 7678c3c9db83Smrg # whether they linked in statically or dynamically with ldd. 7679c3c9db83Smrg $opt_dry_run || $RM conftest.c 7680c3c9db83Smrg cat > conftest.c <<EOF 7681c3c9db83Smrg int main() { return 0; } 7682c3c9db83SmrgEOF 7683c3c9db83Smrg $opt_dry_run || $RM conftest 7684c3c9db83Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 7685c3c9db83Smrg ldd_output=`ldd conftest` 7686c3c9db83Smrg for i in $deplibs; do 7687c3c9db83Smrg case $i in 7688c3c9db83Smrg -l*) 7689c3c9db83Smrg func_stripname -l '' "$i" 7690c3c9db83Smrg name=$func_stripname_result 7691c3c9db83Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7692c3c9db83Smrg case " $predeps $postdeps " in 7693c3c9db83Smrg *" $i "*) 76943f6d0e1dSmrg func_append newdeplibs " $i" 7695c3c9db83Smrg i="" 7696c3c9db83Smrg ;; 7697c3c9db83Smrg esac 7698c3c9db83Smrg fi 7699c3c9db83Smrg if test -n "$i" ; then 7700c3c9db83Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7701c3c9db83Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7702c3c9db83Smrg set dummy $deplib_matches; shift 7703c3c9db83Smrg deplib_match=$1 7704c3c9db83Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 77053f6d0e1dSmrg func_append newdeplibs " $i" 7706c3c9db83Smrg else 7707c3c9db83Smrg droppeddeps=yes 77083f6d0e1dSmrg echo 7709c3c9db83Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 77103f6d0e1dSmrg echo "*** I have the capability to make that library automatically link in when" 77113f6d0e1dSmrg echo "*** you link to this library. But I can only do this if you have a" 77123f6d0e1dSmrg echo "*** shared version of the library, which I believe you do not have" 77133f6d0e1dSmrg echo "*** because a test_compile did reveal that the linker did not use it for" 77143f6d0e1dSmrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 7715c3c9db83Smrg fi 7716c3c9db83Smrg fi 7717c3c9db83Smrg ;; 7718c3c9db83Smrg *) 77193f6d0e1dSmrg func_append newdeplibs " $i" 7720c3c9db83Smrg ;; 7721c3c9db83Smrg esac 7722c3c9db83Smrg done 7723c3c9db83Smrg else 7724c3c9db83Smrg # Error occurred in the first compile. Let's try to salvage 7725c3c9db83Smrg # the situation: Compile a separate program for each library. 7726c3c9db83Smrg for i in $deplibs; do 7727c3c9db83Smrg case $i in 7728c3c9db83Smrg -l*) 7729c3c9db83Smrg func_stripname -l '' "$i" 7730c3c9db83Smrg name=$func_stripname_result 7731c3c9db83Smrg $opt_dry_run || $RM conftest 7732c3c9db83Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 7733c3c9db83Smrg ldd_output=`ldd conftest` 7734c3c9db83Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7735c3c9db83Smrg case " $predeps $postdeps " in 7736c3c9db83Smrg *" $i "*) 77373f6d0e1dSmrg func_append newdeplibs " $i" 7738c3c9db83Smrg i="" 7739c3c9db83Smrg ;; 7740c3c9db83Smrg esac 7741c3c9db83Smrg fi 7742c3c9db83Smrg if test -n "$i" ; then 7743c3c9db83Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7744c3c9db83Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7745c3c9db83Smrg set dummy $deplib_matches; shift 7746c3c9db83Smrg deplib_match=$1 7747c3c9db83Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 77483f6d0e1dSmrg func_append newdeplibs " $i" 7749c3c9db83Smrg else 7750c3c9db83Smrg droppeddeps=yes 77513f6d0e1dSmrg echo 7752c3c9db83Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 77533f6d0e1dSmrg echo "*** I have the capability to make that library automatically link in when" 77543f6d0e1dSmrg echo "*** you link to this library. But I can only do this if you have a" 77553f6d0e1dSmrg echo "*** shared version of the library, which you do not appear to have" 77563f6d0e1dSmrg echo "*** because a test_compile did reveal that the linker did not use this one" 77573f6d0e1dSmrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 7758c3c9db83Smrg fi 7759c3c9db83Smrg fi 7760c3c9db83Smrg else 7761c3c9db83Smrg droppeddeps=yes 77623f6d0e1dSmrg echo 7763c3c9db83Smrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 77643f6d0e1dSmrg echo "*** make it link in! You will probably need to install it or some" 77653f6d0e1dSmrg echo "*** library that it depends on before this library will be fully" 77663f6d0e1dSmrg echo "*** functional. Installing it before continuing would be even better." 7767c3c9db83Smrg fi 7768c3c9db83Smrg ;; 7769c3c9db83Smrg *) 77703f6d0e1dSmrg func_append newdeplibs " $i" 7771c3c9db83Smrg ;; 7772c3c9db83Smrg esac 7773c3c9db83Smrg done 7774c3c9db83Smrg fi 7775c3c9db83Smrg ;; 7776c3c9db83Smrg file_magic*) 7777c3c9db83Smrg set dummy $deplibs_check_method; shift 7778c3c9db83Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7779c3c9db83Smrg for a_deplib in $deplibs; do 7780c3c9db83Smrg case $a_deplib in 7781c3c9db83Smrg -l*) 7782c3c9db83Smrg func_stripname -l '' "$a_deplib" 7783c3c9db83Smrg name=$func_stripname_result 7784c3c9db83Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7785c3c9db83Smrg case " $predeps $postdeps " in 7786c3c9db83Smrg *" $a_deplib "*) 77873f6d0e1dSmrg func_append newdeplibs " $a_deplib" 7788c3c9db83Smrg a_deplib="" 7789c3c9db83Smrg ;; 7790c3c9db83Smrg esac 7791c3c9db83Smrg fi 7792c3c9db83Smrg if test -n "$a_deplib" ; then 7793c3c9db83Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 77943f6d0e1dSmrg if test -n "$file_magic_glob"; then 77953f6d0e1dSmrg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 77963f6d0e1dSmrg else 77973f6d0e1dSmrg libnameglob=$libname 77983f6d0e1dSmrg fi 77993f6d0e1dSmrg test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` 7800c3c9db83Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 78013f6d0e1dSmrg if test "$want_nocaseglob" = yes; then 78023f6d0e1dSmrg shopt -s nocaseglob 78033f6d0e1dSmrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 78043f6d0e1dSmrg $nocaseglob 78053f6d0e1dSmrg else 78063f6d0e1dSmrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 78073f6d0e1dSmrg fi 7808c3c9db83Smrg for potent_lib in $potential_libs; do 7809c3c9db83Smrg # Follow soft links. 7810c3c9db83Smrg if ls -lLd "$potent_lib" 2>/dev/null | 7811c3c9db83Smrg $GREP " -> " >/dev/null; then 7812c3c9db83Smrg continue 7813c3c9db83Smrg fi 7814c3c9db83Smrg # The statement above tries to avoid entering an 7815c3c9db83Smrg # endless loop below, in case of cyclic links. 7816c3c9db83Smrg # We might still enter an endless loop, since a link 7817c3c9db83Smrg # loop can be closed while we follow links, 7818c3c9db83Smrg # but so what? 7819c3c9db83Smrg potlib="$potent_lib" 7820c3c9db83Smrg while test -h "$potlib" 2>/dev/null; do 7821c3c9db83Smrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 7822c3c9db83Smrg case $potliblink in 7823c3c9db83Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 78243f6d0e1dSmrg *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; 7825c3c9db83Smrg esac 7826c3c9db83Smrg done 7827c3c9db83Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 7828c3c9db83Smrg $SED -e 10q | 7829c3c9db83Smrg $EGREP "$file_magic_regex" > /dev/null; then 78303f6d0e1dSmrg func_append newdeplibs " $a_deplib" 7831c3c9db83Smrg a_deplib="" 7832c3c9db83Smrg break 2 7833c3c9db83Smrg fi 7834c3c9db83Smrg done 7835c3c9db83Smrg done 7836c3c9db83Smrg fi 7837c3c9db83Smrg if test -n "$a_deplib" ; then 7838c3c9db83Smrg droppeddeps=yes 78393f6d0e1dSmrg echo 7840c3c9db83Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 78413f6d0e1dSmrg echo "*** I have the capability to make that library automatically link in when" 78423f6d0e1dSmrg echo "*** you link to this library. But I can only do this if you have a" 78433f6d0e1dSmrg echo "*** shared version of the library, which you do not appear to have" 78443f6d0e1dSmrg echo "*** because I did check the linker path looking for a file starting" 7845c3c9db83Smrg if test -z "$potlib" ; then 7846c3c9db83Smrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 7847c3c9db83Smrg else 7848c3c9db83Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7849c3c9db83Smrg $ECHO "*** using a file magic. Last file checked: $potlib" 7850c3c9db83Smrg fi 7851c3c9db83Smrg fi 7852c3c9db83Smrg ;; 7853c3c9db83Smrg *) 7854c3c9db83Smrg # Add a -L argument. 78553f6d0e1dSmrg func_append newdeplibs " $a_deplib" 7856c3c9db83Smrg ;; 7857c3c9db83Smrg esac 7858c3c9db83Smrg done # Gone through all deplibs. 7859c3c9db83Smrg ;; 7860c3c9db83Smrg match_pattern*) 7861c3c9db83Smrg set dummy $deplibs_check_method; shift 7862c3c9db83Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7863c3c9db83Smrg for a_deplib in $deplibs; do 7864c3c9db83Smrg case $a_deplib in 7865c3c9db83Smrg -l*) 7866c3c9db83Smrg func_stripname -l '' "$a_deplib" 7867c3c9db83Smrg name=$func_stripname_result 7868c3c9db83Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7869c3c9db83Smrg case " $predeps $postdeps " in 7870c3c9db83Smrg *" $a_deplib "*) 78713f6d0e1dSmrg func_append newdeplibs " $a_deplib" 7872c3c9db83Smrg a_deplib="" 7873c3c9db83Smrg ;; 7874c3c9db83Smrg esac 7875c3c9db83Smrg fi 7876c3c9db83Smrg if test -n "$a_deplib" ; then 7877c3c9db83Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7878c3c9db83Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7879c3c9db83Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 7880c3c9db83Smrg for potent_lib in $potential_libs; do 7881c3c9db83Smrg potlib="$potent_lib" # see symlink-check above in file_magic test 78823f6d0e1dSmrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 7883c3c9db83Smrg $EGREP "$match_pattern_regex" > /dev/null; then 78843f6d0e1dSmrg func_append newdeplibs " $a_deplib" 7885c3c9db83Smrg a_deplib="" 7886c3c9db83Smrg break 2 7887c3c9db83Smrg fi 7888c3c9db83Smrg done 7889c3c9db83Smrg done 7890c3c9db83Smrg fi 7891c3c9db83Smrg if test -n "$a_deplib" ; then 7892c3c9db83Smrg droppeddeps=yes 78933f6d0e1dSmrg echo 7894c3c9db83Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 78953f6d0e1dSmrg echo "*** I have the capability to make that library automatically link in when" 78963f6d0e1dSmrg echo "*** you link to this library. But I can only do this if you have a" 78973f6d0e1dSmrg echo "*** shared version of the library, which you do not appear to have" 78983f6d0e1dSmrg echo "*** because I did check the linker path looking for a file starting" 7899c3c9db83Smrg if test -z "$potlib" ; then 7900c3c9db83Smrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 7901c3c9db83Smrg else 7902c3c9db83Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7903c3c9db83Smrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 7904c3c9db83Smrg fi 7905c3c9db83Smrg fi 7906c3c9db83Smrg ;; 7907c3c9db83Smrg *) 7908c3c9db83Smrg # Add a -L argument. 79093f6d0e1dSmrg func_append newdeplibs " $a_deplib" 7910c3c9db83Smrg ;; 7911c3c9db83Smrg esac 7912c3c9db83Smrg done # Gone through all deplibs. 7913c3c9db83Smrg ;; 7914c3c9db83Smrg none | unknown | *) 7915c3c9db83Smrg newdeplibs="" 79163f6d0e1dSmrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 7917c3c9db83Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7918c3c9db83Smrg for i in $predeps $postdeps ; do 7919c3c9db83Smrg # can't use Xsed below, because $i might contain '/' 79203f6d0e1dSmrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` 7921c3c9db83Smrg done 7922c3c9db83Smrg fi 79233f6d0e1dSmrg case $tmp_deplibs in 79243f6d0e1dSmrg *[!\ \ ]*) 79253f6d0e1dSmrg echo 7926c3c9db83Smrg if test "X$deplibs_check_method" = "Xnone"; then 79273f6d0e1dSmrg echo "*** Warning: inter-library dependencies are not supported in this platform." 7928c3c9db83Smrg else 79293f6d0e1dSmrg echo "*** Warning: inter-library dependencies are not known to be supported." 7930c3c9db83Smrg fi 79313f6d0e1dSmrg echo "*** All declared inter-library dependencies are being dropped." 7932c3c9db83Smrg droppeddeps=yes 79333f6d0e1dSmrg ;; 79343f6d0e1dSmrg esac 7935c3c9db83Smrg ;; 7936c3c9db83Smrg esac 7937c3c9db83Smrg versuffix=$versuffix_save 7938c3c9db83Smrg major=$major_save 7939c3c9db83Smrg release=$release_save 7940c3c9db83Smrg libname=$libname_save 7941c3c9db83Smrg name=$name_save 7942c3c9db83Smrg 7943c3c9db83Smrg case $host in 7944c3c9db83Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7945c3c9db83Smrg # On Rhapsody replace the C library with the System framework 79463f6d0e1dSmrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 7947c3c9db83Smrg ;; 7948c3c9db83Smrg esac 7949c3c9db83Smrg 7950c3c9db83Smrg if test "$droppeddeps" = yes; then 7951c3c9db83Smrg if test "$module" = yes; then 79523f6d0e1dSmrg echo 79533f6d0e1dSmrg echo "*** Warning: libtool could not satisfy all declared inter-library" 7954c3c9db83Smrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 79553f6d0e1dSmrg echo "*** a static module, that should work as long as the dlopening" 79563f6d0e1dSmrg echo "*** application is linked with the -dlopen flag." 7957c3c9db83Smrg if test -z "$global_symbol_pipe"; then 79583f6d0e1dSmrg echo 79593f6d0e1dSmrg echo "*** However, this would only work if libtool was able to extract symbol" 79603f6d0e1dSmrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 79613f6d0e1dSmrg echo "*** not find such a program. So, this module is probably useless." 79623f6d0e1dSmrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 7963c3c9db83Smrg fi 7964c3c9db83Smrg if test "$build_old_libs" = no; then 7965c3c9db83Smrg oldlibs="$output_objdir/$libname.$libext" 7966c3c9db83Smrg build_libtool_libs=module 7967c3c9db83Smrg build_old_libs=yes 7968c3c9db83Smrg else 7969c3c9db83Smrg build_libtool_libs=no 7970c3c9db83Smrg fi 7971c3c9db83Smrg else 79723f6d0e1dSmrg echo "*** The inter-library dependencies that have been dropped here will be" 79733f6d0e1dSmrg echo "*** automatically added whenever a program is linked with this library" 79743f6d0e1dSmrg echo "*** or is declared to -dlopen it." 7975c3c9db83Smrg 7976c3c9db83Smrg if test "$allow_undefined" = no; then 79773f6d0e1dSmrg echo 79783f6d0e1dSmrg echo "*** Since this library must not contain undefined symbols," 79793f6d0e1dSmrg echo "*** because either the platform does not support them or" 79803f6d0e1dSmrg echo "*** it was explicitly requested with -no-undefined," 79813f6d0e1dSmrg echo "*** libtool will only create a static version of it." 7982c3c9db83Smrg if test "$build_old_libs" = no; then 7983c3c9db83Smrg oldlibs="$output_objdir/$libname.$libext" 7984c3c9db83Smrg build_libtool_libs=module 7985c3c9db83Smrg build_old_libs=yes 7986c3c9db83Smrg else 7987c3c9db83Smrg build_libtool_libs=no 7988c3c9db83Smrg fi 7989c3c9db83Smrg fi 7990c3c9db83Smrg fi 7991c3c9db83Smrg fi 7992c3c9db83Smrg # Done checking deplibs! 7993c3c9db83Smrg deplibs=$newdeplibs 7994c3c9db83Smrg fi 7995c3c9db83Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 7996c3c9db83Smrg case $host in 7997c3c9db83Smrg *-*-darwin*) 79983f6d0e1dSmrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 79993f6d0e1dSmrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 80003f6d0e1dSmrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8001c3c9db83Smrg ;; 8002c3c9db83Smrg esac 8003c3c9db83Smrg 8004c3c9db83Smrg # move library search paths that coincide with paths to not yet 8005c3c9db83Smrg # installed libraries to the beginning of the library search list 8006c3c9db83Smrg new_libs= 8007c3c9db83Smrg for path in $notinst_path; do 8008c3c9db83Smrg case " $new_libs " in 8009c3c9db83Smrg *" -L$path/$objdir "*) ;; 8010c3c9db83Smrg *) 8011c3c9db83Smrg case " $deplibs " in 8012c3c9db83Smrg *" -L$path/$objdir "*) 80133f6d0e1dSmrg func_append new_libs " -L$path/$objdir" ;; 8014c3c9db83Smrg esac 8015c3c9db83Smrg ;; 8016c3c9db83Smrg esac 8017c3c9db83Smrg done 8018c3c9db83Smrg for deplib in $deplibs; do 8019c3c9db83Smrg case $deplib in 8020c3c9db83Smrg -L*) 8021c3c9db83Smrg case " $new_libs " in 8022c3c9db83Smrg *" $deplib "*) ;; 80233f6d0e1dSmrg *) func_append new_libs " $deplib" ;; 8024c3c9db83Smrg esac 8025c3c9db83Smrg ;; 80263f6d0e1dSmrg *) func_append new_libs " $deplib" ;; 8027c3c9db83Smrg esac 8028c3c9db83Smrg done 8029c3c9db83Smrg deplibs="$new_libs" 8030c3c9db83Smrg 8031c3c9db83Smrg # All the library-specific variables (install_libdir is set above). 8032c3c9db83Smrg library_names= 8033c3c9db83Smrg old_library= 8034c3c9db83Smrg dlname= 8035c3c9db83Smrg 8036c3c9db83Smrg # Test again, we may have decided not to build it any more 8037c3c9db83Smrg if test "$build_libtool_libs" = yes; then 80383f6d0e1dSmrg # Remove ${wl} instances when linking with ld. 80393f6d0e1dSmrg # FIXME: should test the right _cmds variable. 80403f6d0e1dSmrg case $archive_cmds in 80413f6d0e1dSmrg *\$LD\ *) wl= ;; 80423f6d0e1dSmrg esac 8043c3c9db83Smrg if test "$hardcode_into_libs" = yes; then 8044c3c9db83Smrg # Hardcode the library paths 8045c3c9db83Smrg hardcode_libdirs= 8046c3c9db83Smrg dep_rpath= 8047c3c9db83Smrg rpath="$finalize_rpath" 80483f6d0e1dSmrg test "$opt_mode" != relink && rpath="$compile_rpath$rpath" 8049c3c9db83Smrg for libdir in $rpath; do 8050c3c9db83Smrg if test -n "$hardcode_libdir_flag_spec"; then 8051c3c9db83Smrg if test -n "$hardcode_libdir_separator"; then 80523f6d0e1dSmrg func_replace_sysroot "$libdir" 80533f6d0e1dSmrg libdir=$func_replace_sysroot_result 8054c3c9db83Smrg if test -z "$hardcode_libdirs"; then 8055c3c9db83Smrg hardcode_libdirs="$libdir" 8056c3c9db83Smrg else 8057c3c9db83Smrg # Just accumulate the unique libdirs. 8058c3c9db83Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8059c3c9db83Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8060c3c9db83Smrg ;; 8061c3c9db83Smrg *) 80623f6d0e1dSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8063c3c9db83Smrg ;; 8064c3c9db83Smrg esac 8065c3c9db83Smrg fi 8066c3c9db83Smrg else 8067c3c9db83Smrg eval flag=\"$hardcode_libdir_flag_spec\" 80683f6d0e1dSmrg func_append dep_rpath " $flag" 8069c3c9db83Smrg fi 8070c3c9db83Smrg elif test -n "$runpath_var"; then 8071c3c9db83Smrg case "$perm_rpath " in 8072c3c9db83Smrg *" $libdir "*) ;; 80733f6d0e1dSmrg *) func_append perm_rpath " $libdir" ;; 8074c3c9db83Smrg esac 8075c3c9db83Smrg fi 8076c3c9db83Smrg done 8077c3c9db83Smrg # Substitute the hardcoded libdirs into the rpath. 8078c3c9db83Smrg if test -n "$hardcode_libdir_separator" && 8079c3c9db83Smrg test -n "$hardcode_libdirs"; then 8080c3c9db83Smrg libdir="$hardcode_libdirs" 80813f6d0e1dSmrg eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 8082c3c9db83Smrg fi 8083c3c9db83Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 8084c3c9db83Smrg # We should set the runpath_var. 8085c3c9db83Smrg rpath= 8086c3c9db83Smrg for dir in $perm_rpath; do 80873f6d0e1dSmrg func_append rpath "$dir:" 8088c3c9db83Smrg done 8089c3c9db83Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 8090c3c9db83Smrg fi 8091c3c9db83Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 8092c3c9db83Smrg fi 8093692f60a7Smrg 8094c3c9db83Smrg shlibpath="$finalize_shlibpath" 80953f6d0e1dSmrg test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 8096c3c9db83Smrg if test -n "$shlibpath"; then 8097c3c9db83Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 8098c3c9db83Smrg fi 8099692f60a7Smrg 8100c3c9db83Smrg # Get the real and link names of the library. 8101c3c9db83Smrg eval shared_ext=\"$shrext_cmds\" 8102c3c9db83Smrg eval library_names=\"$library_names_spec\" 8103c3c9db83Smrg set dummy $library_names 8104c3c9db83Smrg shift 8105c3c9db83Smrg realname="$1" 8106c3c9db83Smrg shift 8107692f60a7Smrg 8108c3c9db83Smrg if test -n "$soname_spec"; then 8109c3c9db83Smrg eval soname=\"$soname_spec\" 8110c3c9db83Smrg else 8111c3c9db83Smrg soname="$realname" 8112c3c9db83Smrg fi 8113c3c9db83Smrg if test -z "$dlname"; then 8114c3c9db83Smrg dlname=$soname 8115c3c9db83Smrg fi 8116692f60a7Smrg 8117c3c9db83Smrg lib="$output_objdir/$realname" 8118c3c9db83Smrg linknames= 8119c3c9db83Smrg for link 8120c3c9db83Smrg do 81213f6d0e1dSmrg func_append linknames " $link" 8122c3c9db83Smrg done 8123692f60a7Smrg 8124c3c9db83Smrg # Use standard objects if they are pic 81253f6d0e1dSmrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 8126c3c9db83Smrg test "X$libobjs" = "X " && libobjs= 8127692f60a7Smrg 8128c3c9db83Smrg delfiles= 8129c3c9db83Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 8130c3c9db83Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 8131c3c9db83Smrg export_symbols="$output_objdir/$libname.uexp" 81323f6d0e1dSmrg func_append delfiles " $export_symbols" 8133c3c9db83Smrg fi 8134692f60a7Smrg 8135c3c9db83Smrg orig_export_symbols= 8136c3c9db83Smrg case $host_os in 8137c3c9db83Smrg cygwin* | mingw* | cegcc*) 8138c3c9db83Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 8139c3c9db83Smrg # exporting using user supplied symfile 8140c3c9db83Smrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 8141c3c9db83Smrg # and it's NOT already a .def file. Must figure out 8142c3c9db83Smrg # which of the given symbols are data symbols and tag 8143c3c9db83Smrg # them as such. So, trigger use of export_symbols_cmds. 8144c3c9db83Smrg # export_symbols gets reassigned inside the "prepare 8145c3c9db83Smrg # the list of exported symbols" if statement, so the 8146c3c9db83Smrg # include_expsyms logic still works. 8147c3c9db83Smrg orig_export_symbols="$export_symbols" 8148c3c9db83Smrg export_symbols= 8149c3c9db83Smrg always_export_symbols=yes 8150c3c9db83Smrg fi 8151c3c9db83Smrg fi 8152c3c9db83Smrg ;; 8153c3c9db83Smrg esac 8154692f60a7Smrg 8155c3c9db83Smrg # Prepare the list of exported symbols 8156c3c9db83Smrg if test -z "$export_symbols"; then 8157c3c9db83Smrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 8158c3c9db83Smrg func_verbose "generating symbol list for \`$libname.la'" 8159c3c9db83Smrg export_symbols="$output_objdir/$libname.exp" 8160c3c9db83Smrg $opt_dry_run || $RM $export_symbols 8161c3c9db83Smrg cmds=$export_symbols_cmds 8162c3c9db83Smrg save_ifs="$IFS"; IFS='~' 81633f6d0e1dSmrg for cmd1 in $cmds; do 8164c3c9db83Smrg IFS="$save_ifs" 81653f6d0e1dSmrg # Take the normal branch if the nm_file_list_spec branch 81663f6d0e1dSmrg # doesn't work or if tool conversion is not needed. 81673f6d0e1dSmrg case $nm_file_list_spec~$to_tool_file_cmd in 81683f6d0e1dSmrg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 81693f6d0e1dSmrg try_normal_branch=yes 81703f6d0e1dSmrg eval cmd=\"$cmd1\" 81713f6d0e1dSmrg func_len " $cmd" 81723f6d0e1dSmrg len=$func_len_result 81733f6d0e1dSmrg ;; 81743f6d0e1dSmrg *) 81753f6d0e1dSmrg try_normal_branch=no 81763f6d0e1dSmrg ;; 81773f6d0e1dSmrg esac 81783f6d0e1dSmrg if test "$try_normal_branch" = yes \ 81793f6d0e1dSmrg && { test "$len" -lt "$max_cmd_len" \ 81803f6d0e1dSmrg || test "$max_cmd_len" -le -1; } 81813f6d0e1dSmrg then 81823f6d0e1dSmrg func_show_eval "$cmd" 'exit $?' 81833f6d0e1dSmrg skipped_export=false 81843f6d0e1dSmrg elif test -n "$nm_file_list_spec"; then 81853f6d0e1dSmrg func_basename "$output" 81863f6d0e1dSmrg output_la=$func_basename_result 81873f6d0e1dSmrg save_libobjs=$libobjs 81883f6d0e1dSmrg save_output=$output 81893f6d0e1dSmrg output=${output_objdir}/${output_la}.nm 81903f6d0e1dSmrg func_to_tool_file "$output" 81913f6d0e1dSmrg libobjs=$nm_file_list_spec$func_to_tool_file_result 81923f6d0e1dSmrg func_append delfiles " $output" 81933f6d0e1dSmrg func_verbose "creating $NM input file list: $output" 81943f6d0e1dSmrg for obj in $save_libobjs; do 81953f6d0e1dSmrg func_to_tool_file "$obj" 81963f6d0e1dSmrg $ECHO "$func_to_tool_file_result" 81973f6d0e1dSmrg done > "$output" 81983f6d0e1dSmrg eval cmd=\"$cmd1\" 8199c3c9db83Smrg func_show_eval "$cmd" 'exit $?' 82003f6d0e1dSmrg output=$save_output 82013f6d0e1dSmrg libobjs=$save_libobjs 8202c3c9db83Smrg skipped_export=false 8203c3c9db83Smrg else 8204c3c9db83Smrg # The command line is too long to execute in one step. 8205c3c9db83Smrg func_verbose "using reloadable object file for export list..." 8206c3c9db83Smrg skipped_export=: 8207c3c9db83Smrg # Break out early, otherwise skipped_export may be 8208c3c9db83Smrg # set to false by a later but shorter cmd. 8209c3c9db83Smrg break 8210c3c9db83Smrg fi 8211c3c9db83Smrg done 8212c3c9db83Smrg IFS="$save_ifs" 8213c3c9db83Smrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 8214c3c9db83Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8215c3c9db83Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8216c3c9db83Smrg fi 8217c3c9db83Smrg fi 8218692f60a7Smrg fi 8219692f60a7Smrg 8220c3c9db83Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 8221c3c9db83Smrg tmp_export_symbols="$export_symbols" 8222c3c9db83Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 82233f6d0e1dSmrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8224c3c9db83Smrg fi 8225692f60a7Smrg 8226c3c9db83Smrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 8227c3c9db83Smrg # The given exports_symbols file has to be filtered, so filter it. 8228c3c9db83Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8229c3c9db83Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 8230c3c9db83Smrg # 's' commands which not all seds can handle. GNU sed should be fine 8231c3c9db83Smrg # though. Also, the filter scales superlinearly with the number of 8232c3c9db83Smrg # global variables. join(1) would be nice here, but unfortunately 8233c3c9db83Smrg # isn't a blessed tool. 8234c3c9db83Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 82353f6d0e1dSmrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8236c3c9db83Smrg export_symbols=$output_objdir/$libname.def 8237c3c9db83Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8238c3c9db83Smrg fi 8239692f60a7Smrg 8240c3c9db83Smrg tmp_deplibs= 8241c3c9db83Smrg for test_deplib in $deplibs; do 8242c3c9db83Smrg case " $convenience " in 8243c3c9db83Smrg *" $test_deplib "*) ;; 8244c3c9db83Smrg *) 82453f6d0e1dSmrg func_append tmp_deplibs " $test_deplib" 8246c3c9db83Smrg ;; 8247c3c9db83Smrg esac 8248c3c9db83Smrg done 8249c3c9db83Smrg deplibs="$tmp_deplibs" 8250692f60a7Smrg 8251c3c9db83Smrg if test -n "$convenience"; then 8252c3c9db83Smrg if test -n "$whole_archive_flag_spec" && 8253c3c9db83Smrg test "$compiler_needs_object" = yes && 8254c3c9db83Smrg test -z "$libobjs"; then 8255c3c9db83Smrg # extract the archives, so we have objects to list. 8256c3c9db83Smrg # TODO: could optimize this to just extract one archive. 8257c3c9db83Smrg whole_archive_flag_spec= 8258c3c9db83Smrg fi 8259c3c9db83Smrg if test -n "$whole_archive_flag_spec"; then 8260c3c9db83Smrg save_libobjs=$libobjs 8261c3c9db83Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8262c3c9db83Smrg test "X$libobjs" = "X " && libobjs= 8263c3c9db83Smrg else 8264c3c9db83Smrg gentop="$output_objdir/${outputname}x" 82653f6d0e1dSmrg func_append generated " $gentop" 8266692f60a7Smrg 8267c3c9db83Smrg func_extract_archives $gentop $convenience 82683f6d0e1dSmrg func_append libobjs " $func_extract_archives_result" 8269c3c9db83Smrg test "X$libobjs" = "X " && libobjs= 8270c3c9db83Smrg fi 82712e71ea71Smrg fi 8272692f60a7Smrg 8273c3c9db83Smrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 8274c3c9db83Smrg eval flag=\"$thread_safe_flag_spec\" 82753f6d0e1dSmrg func_append linker_flags " $flag" 82762e71ea71Smrg fi 827785ee4c00Smrg 8278c3c9db83Smrg # Make a backup of the uninstalled library when relinking 82793f6d0e1dSmrg if test "$opt_mode" = relink; then 8280c3c9db83Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 8281c3c9db83Smrg fi 8282692f60a7Smrg 8283c3c9db83Smrg # Do each of the archive commands. 8284c3c9db83Smrg if test "$module" = yes && test -n "$module_cmds" ; then 8285c3c9db83Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8286c3c9db83Smrg eval test_cmds=\"$module_expsym_cmds\" 8287c3c9db83Smrg cmds=$module_expsym_cmds 8288c3c9db83Smrg else 8289c3c9db83Smrg eval test_cmds=\"$module_cmds\" 8290c3c9db83Smrg cmds=$module_cmds 8291c3c9db83Smrg fi 82922e71ea71Smrg else 8293c3c9db83Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8294c3c9db83Smrg eval test_cmds=\"$archive_expsym_cmds\" 8295c3c9db83Smrg cmds=$archive_expsym_cmds 8296c3c9db83Smrg else 8297c3c9db83Smrg eval test_cmds=\"$archive_cmds\" 8298c3c9db83Smrg cmds=$archive_cmds 8299c3c9db83Smrg fi 83002e71ea71Smrg fi 8301692f60a7Smrg 8302c3c9db83Smrg if test "X$skipped_export" != "X:" && 8303c3c9db83Smrg func_len " $test_cmds" && 8304c3c9db83Smrg len=$func_len_result && 8305c3c9db83Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 8306c3c9db83Smrg : 8307c3c9db83Smrg else 8308c3c9db83Smrg # The command line is too long to link in one step, link piecewise 8309c3c9db83Smrg # or, if using GNU ld and skipped_export is not :, use a linker 8310c3c9db83Smrg # script. 8311692f60a7Smrg 8312c3c9db83Smrg # Save the value of $output and $libobjs because we want to 8313c3c9db83Smrg # use them later. If we have whole_archive_flag_spec, we 8314c3c9db83Smrg # want to use save_libobjs as it was before 8315c3c9db83Smrg # whole_archive_flag_spec was expanded, because we can't 8316c3c9db83Smrg # assume the linker understands whole_archive_flag_spec. 8317c3c9db83Smrg # This may have to be revisited, in case too many 8318c3c9db83Smrg # convenience libraries get linked in and end up exceeding 8319c3c9db83Smrg # the spec. 8320c3c9db83Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 8321c3c9db83Smrg save_libobjs=$libobjs 8322c3c9db83Smrg fi 8323c3c9db83Smrg save_output=$output 83243f6d0e1dSmrg func_basename "$output" 83253f6d0e1dSmrg output_la=$func_basename_result 8326692f60a7Smrg 8327c3c9db83Smrg # Clear the reloadable object creation command queue and 8328c3c9db83Smrg # initialize k to one. 8329c3c9db83Smrg test_cmds= 8330c3c9db83Smrg concat_cmds= 8331c3c9db83Smrg objlist= 8332c3c9db83Smrg last_robj= 8333c3c9db83Smrg k=1 8334c3c9db83Smrg 8335c3c9db83Smrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 8336c3c9db83Smrg output=${output_objdir}/${output_la}.lnkscript 8337c3c9db83Smrg func_verbose "creating GNU ld script: $output" 83383f6d0e1dSmrg echo 'INPUT (' > $output 8339c3c9db83Smrg for obj in $save_libobjs 83402e71ea71Smrg do 83413f6d0e1dSmrg func_to_tool_file "$obj" 83423f6d0e1dSmrg $ECHO "$func_to_tool_file_result" >> $output 8343c3c9db83Smrg done 83443f6d0e1dSmrg echo ')' >> $output 83453f6d0e1dSmrg func_append delfiles " $output" 83463f6d0e1dSmrg func_to_tool_file "$output" 83473f6d0e1dSmrg output=$func_to_tool_file_result 8348c3c9db83Smrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 8349c3c9db83Smrg output=${output_objdir}/${output_la}.lnk 8350c3c9db83Smrg func_verbose "creating linker input file list: $output" 8351c3c9db83Smrg : > $output 8352c3c9db83Smrg set x $save_libobjs 8353c3c9db83Smrg shift 8354c3c9db83Smrg firstobj= 8355c3c9db83Smrg if test "$compiler_needs_object" = yes; then 8356c3c9db83Smrg firstobj="$1 " 8357c3c9db83Smrg shift 8358c3c9db83Smrg fi 8359c3c9db83Smrg for obj 8360c3c9db83Smrg do 83613f6d0e1dSmrg func_to_tool_file "$obj" 83623f6d0e1dSmrg $ECHO "$func_to_tool_file_result" >> $output 8363c3c9db83Smrg done 83643f6d0e1dSmrg func_append delfiles " $output" 83653f6d0e1dSmrg func_to_tool_file "$output" 83663f6d0e1dSmrg output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 8367c3c9db83Smrg else 8368c3c9db83Smrg if test -n "$save_libobjs"; then 8369c3c9db83Smrg func_verbose "creating reloadable object files..." 8370c3c9db83Smrg output=$output_objdir/$output_la-${k}.$objext 8371c3c9db83Smrg eval test_cmds=\"$reload_cmds\" 8372c3c9db83Smrg func_len " $test_cmds" 8373c3c9db83Smrg len0=$func_len_result 8374c3c9db83Smrg len=$len0 8375c3c9db83Smrg 8376c3c9db83Smrg # Loop over the list of objects to be linked. 8377c3c9db83Smrg for obj in $save_libobjs 8378c3c9db83Smrg do 8379c3c9db83Smrg func_len " $obj" 8380c3c9db83Smrg func_arith $len + $func_len_result 8381c3c9db83Smrg len=$func_arith_result 8382c3c9db83Smrg if test "X$objlist" = X || 8383c3c9db83Smrg test "$len" -lt "$max_cmd_len"; then 8384c3c9db83Smrg func_append objlist " $obj" 8385c3c9db83Smrg else 8386c3c9db83Smrg # The command $test_cmds is almost too long, add a 8387c3c9db83Smrg # command to the queue. 8388c3c9db83Smrg if test "$k" -eq 1 ; then 8389c3c9db83Smrg # The first file doesn't have a previous command to add. 83903f6d0e1dSmrg reload_objs=$objlist 83913f6d0e1dSmrg eval concat_cmds=\"$reload_cmds\" 8392c3c9db83Smrg else 8393c3c9db83Smrg # All subsequent reloadable object files will link in 8394c3c9db83Smrg # the last one created. 83953f6d0e1dSmrg reload_objs="$objlist $last_robj" 83963f6d0e1dSmrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 8397c3c9db83Smrg fi 8398c3c9db83Smrg last_robj=$output_objdir/$output_la-${k}.$objext 8399c3c9db83Smrg func_arith $k + 1 8400c3c9db83Smrg k=$func_arith_result 8401c3c9db83Smrg output=$output_objdir/$output_la-${k}.$objext 84023f6d0e1dSmrg objlist=" $obj" 8403c3c9db83Smrg func_len " $last_robj" 8404c3c9db83Smrg func_arith $len0 + $func_len_result 8405c3c9db83Smrg len=$func_arith_result 8406c3c9db83Smrg fi 8407c3c9db83Smrg done 8408c3c9db83Smrg # Handle the remaining objects by creating one last 8409c3c9db83Smrg # reloadable object file. All subsequent reloadable object 8410c3c9db83Smrg # files will link in the last one created. 8411c3c9db83Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 84123f6d0e1dSmrg reload_objs="$objlist $last_robj" 84133f6d0e1dSmrg eval concat_cmds=\"\${concat_cmds}$reload_cmds\" 8414c3c9db83Smrg if test -n "$last_robj"; then 8415c3c9db83Smrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 8416c3c9db83Smrg fi 84173f6d0e1dSmrg func_append delfiles " $output" 8418692f60a7Smrg 8419c3c9db83Smrg else 8420c3c9db83Smrg output= 8421c3c9db83Smrg fi 8422692f60a7Smrg 8423c3c9db83Smrg if ${skipped_export-false}; then 8424c3c9db83Smrg func_verbose "generating symbol list for \`$libname.la'" 8425c3c9db83Smrg export_symbols="$output_objdir/$libname.exp" 8426c3c9db83Smrg $opt_dry_run || $RM $export_symbols 8427c3c9db83Smrg libobjs=$output 8428c3c9db83Smrg # Append the command to create the export file. 8429c3c9db83Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8430c3c9db83Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 8431c3c9db83Smrg if test -n "$last_robj"; then 8432c3c9db83Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 8433c3c9db83Smrg fi 843485ee4c00Smrg fi 8435692f60a7Smrg 8436c3c9db83Smrg test -n "$save_libobjs" && 8437c3c9db83Smrg func_verbose "creating a temporary reloadable object file: $output" 8438692f60a7Smrg 8439c3c9db83Smrg # Loop through the commands generated above and execute them. 8440c3c9db83Smrg save_ifs="$IFS"; IFS='~' 8441c3c9db83Smrg for cmd in $concat_cmds; do 8442c3c9db83Smrg IFS="$save_ifs" 8443c3c9db83Smrg $opt_silent || { 8444c3c9db83Smrg func_quote_for_expand "$cmd" 8445c3c9db83Smrg eval "func_echo $func_quote_for_expand_result" 8446c3c9db83Smrg } 8447c3c9db83Smrg $opt_dry_run || eval "$cmd" || { 8448c3c9db83Smrg lt_exit=$? 8449c3c9db83Smrg 8450c3c9db83Smrg # Restore the uninstalled library and exit 84513f6d0e1dSmrg if test "$opt_mode" = relink; then 8452c3c9db83Smrg ( cd "$output_objdir" && \ 8453c3c9db83Smrg $RM "${realname}T" && \ 8454c3c9db83Smrg $MV "${realname}U" "$realname" ) 8455c3c9db83Smrg fi 8456692f60a7Smrg 8457c3c9db83Smrg exit $lt_exit 8458c3c9db83Smrg } 8459c3c9db83Smrg done 8460c3c9db83Smrg IFS="$save_ifs" 84612e71ea71Smrg 8462c3c9db83Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 8463c3c9db83Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8464c3c9db83Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8465692f60a7Smrg fi 8466692f60a7Smrg fi 8467692f60a7Smrg 8468c3c9db83Smrg if ${skipped_export-false}; then 8469c3c9db83Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 8470c3c9db83Smrg tmp_export_symbols="$export_symbols" 8471c3c9db83Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 84723f6d0e1dSmrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8473c3c9db83Smrg fi 847485ee4c00Smrg 8475c3c9db83Smrg if test -n "$orig_export_symbols"; then 8476c3c9db83Smrg # The given exports_symbols file has to be filtered, so filter it. 8477c3c9db83Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8478c3c9db83Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 8479c3c9db83Smrg # 's' commands which not all seds can handle. GNU sed should be fine 8480c3c9db83Smrg # though. Also, the filter scales superlinearly with the number of 8481c3c9db83Smrg # global variables. join(1) would be nice here, but unfortunately 8482c3c9db83Smrg # isn't a blessed tool. 8483c3c9db83Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 84843f6d0e1dSmrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8485c3c9db83Smrg export_symbols=$output_objdir/$libname.def 8486c3c9db83Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8487c3c9db83Smrg fi 8488c3c9db83Smrg fi 8489692f60a7Smrg 8490c3c9db83Smrg libobjs=$output 8491c3c9db83Smrg # Restore the value of output. 8492c3c9db83Smrg output=$save_output 8493692f60a7Smrg 8494c3c9db83Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 8495c3c9db83Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8496c3c9db83Smrg test "X$libobjs" = "X " && libobjs= 8497c3c9db83Smrg fi 8498c3c9db83Smrg # Expand the library linking commands again to reset the 8499c3c9db83Smrg # value of $libobjs for piecewise linking. 8500692f60a7Smrg 8501c3c9db83Smrg # Do each of the archive commands. 8502c3c9db83Smrg if test "$module" = yes && test -n "$module_cmds" ; then 8503c3c9db83Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8504c3c9db83Smrg cmds=$module_expsym_cmds 8505c3c9db83Smrg else 8506c3c9db83Smrg cmds=$module_cmds 85072e71ea71Smrg fi 85082e71ea71Smrg else 8509c3c9db83Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8510c3c9db83Smrg cmds=$archive_expsym_cmds 8511c3c9db83Smrg else 8512c3c9db83Smrg cmds=$archive_cmds 8513c3c9db83Smrg fi 85142e71ea71Smrg fi 8515c3c9db83Smrg fi 8516692f60a7Smrg 8517c3c9db83Smrg if test -n "$delfiles"; then 8518c3c9db83Smrg # Append the command to remove temporary files to $cmds. 8519c3c9db83Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 8520c3c9db83Smrg fi 8521692f60a7Smrg 8522c3c9db83Smrg # Add any objects from preloaded convenience libraries 8523c3c9db83Smrg if test -n "$dlprefiles"; then 8524c3c9db83Smrg gentop="$output_objdir/${outputname}x" 85253f6d0e1dSmrg func_append generated " $gentop" 8526692f60a7Smrg 8527c3c9db83Smrg func_extract_archives $gentop $dlprefiles 85283f6d0e1dSmrg func_append libobjs " $func_extract_archives_result" 8529c3c9db83Smrg test "X$libobjs" = "X " && libobjs= 8530c3c9db83Smrg fi 8531692f60a7Smrg 8532c3c9db83Smrg save_ifs="$IFS"; IFS='~' 8533c3c9db83Smrg for cmd in $cmds; do 8534c3c9db83Smrg IFS="$save_ifs" 8535c3c9db83Smrg eval cmd=\"$cmd\" 8536c3c9db83Smrg $opt_silent || { 8537c3c9db83Smrg func_quote_for_expand "$cmd" 8538c3c9db83Smrg eval "func_echo $func_quote_for_expand_result" 8539c3c9db83Smrg } 8540c3c9db83Smrg $opt_dry_run || eval "$cmd" || { 8541c3c9db83Smrg lt_exit=$? 854285ee4c00Smrg 8543c3c9db83Smrg # Restore the uninstalled library and exit 85443f6d0e1dSmrg if test "$opt_mode" = relink; then 8545c3c9db83Smrg ( cd "$output_objdir" && \ 8546c3c9db83Smrg $RM "${realname}T" && \ 8547c3c9db83Smrg $MV "${realname}U" "$realname" ) 8548c3c9db83Smrg fi 854985ee4c00Smrg 8550c3c9db83Smrg exit $lt_exit 8551c3c9db83Smrg } 8552c3c9db83Smrg done 8553c3c9db83Smrg IFS="$save_ifs" 855485ee4c00Smrg 8555c3c9db83Smrg # Restore the uninstalled library and exit 85563f6d0e1dSmrg if test "$opt_mode" = relink; then 8557c3c9db83Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 855885ee4c00Smrg 8559c3c9db83Smrg if test -n "$convenience"; then 8560c3c9db83Smrg if test -z "$whole_archive_flag_spec"; then 8561c3c9db83Smrg func_show_eval '${RM}r "$gentop"' 8562c3c9db83Smrg fi 8563c3c9db83Smrg fi 856485ee4c00Smrg 8565c3c9db83Smrg exit $EXIT_SUCCESS 8566c3c9db83Smrg fi 8567c3c9db83Smrg 8568c3c9db83Smrg # Create links to the real library. 8569c3c9db83Smrg for linkname in $linknames; do 8570c3c9db83Smrg if test "$realname" != "$linkname"; then 8571c3c9db83Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 85722e71ea71Smrg fi 85732e71ea71Smrg done 857485ee4c00Smrg 8575c3c9db83Smrg # If -module or -export-dynamic was specified, set the dlname. 8576c3c9db83Smrg if test "$module" = yes || test "$export_dynamic" = yes; then 8577c3c9db83Smrg # On all known operating systems, these are identical. 8578c3c9db83Smrg dlname="$soname" 8579c3c9db83Smrg fi 8580c3c9db83Smrg fi 8581692f60a7Smrg ;; 8582692f60a7Smrg 8583c3c9db83Smrg obj) 8584c3c9db83Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 8585c3c9db83Smrg func_warning "\`-dlopen' is ignored for objects" 8586c3c9db83Smrg fi 85872e71ea71Smrg 8588c3c9db83Smrg case " $deplibs" in 8589c3c9db83Smrg *\ -l* | *\ -L*) 8590c3c9db83Smrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 859185ee4c00Smrg esac 8592692f60a7Smrg 8593c3c9db83Smrg test -n "$rpath" && \ 8594c3c9db83Smrg func_warning "\`-rpath' is ignored for objects" 8595c3c9db83Smrg 8596c3c9db83Smrg test -n "$xrpath" && \ 8597c3c9db83Smrg func_warning "\`-R' is ignored for objects" 8598692f60a7Smrg 8599c3c9db83Smrg test -n "$vinfo" && \ 8600c3c9db83Smrg func_warning "\`-version-info' is ignored for objects" 860185ee4c00Smrg 8602c3c9db83Smrg test -n "$release" && \ 8603c3c9db83Smrg func_warning "\`-release' is ignored for objects" 8604c3c9db83Smrg 8605c3c9db83Smrg case $output in 8606c3c9db83Smrg *.lo) 8607c3c9db83Smrg test -n "$objs$old_deplibs" && \ 8608c3c9db83Smrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 8609c3c9db83Smrg 8610c3c9db83Smrg libobj=$output 8611c3c9db83Smrg func_lo2o "$libobj" 8612c3c9db83Smrg obj=$func_lo2o_result 86132e71ea71Smrg ;; 86142e71ea71Smrg *) 8615c3c9db83Smrg libobj= 8616c3c9db83Smrg obj="$output" 8617692f60a7Smrg ;; 861885ee4c00Smrg esac 8619692f60a7Smrg 8620c3c9db83Smrg # Delete the old objects. 8621c3c9db83Smrg $opt_dry_run || $RM $obj $libobj 8622692f60a7Smrg 8623c3c9db83Smrg # Objects from convenience libraries. This assumes 8624c3c9db83Smrg # single-version convenience libraries. Whenever we create 8625c3c9db83Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 8626c3c9db83Smrg # the extraction. 8627c3c9db83Smrg reload_conv_objs= 8628c3c9db83Smrg gentop= 8629c3c9db83Smrg # reload_cmds runs $LD directly, so let us get rid of 8630c3c9db83Smrg # -Wl from whole_archive_flag_spec and hope we can get by with 8631c3c9db83Smrg # turning comma into space.. 8632c3c9db83Smrg wl= 8633692f60a7Smrg 8634c3c9db83Smrg if test -n "$convenience"; then 8635c3c9db83Smrg if test -n "$whole_archive_flag_spec"; then 8636c3c9db83Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 86373f6d0e1dSmrg reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 8638c3c9db83Smrg else 8639c3c9db83Smrg gentop="$output_objdir/${obj}x" 86403f6d0e1dSmrg func_append generated " $gentop" 86412e71ea71Smrg 8642c3c9db83Smrg func_extract_archives $gentop $convenience 8643c3c9db83Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 8644c3c9db83Smrg fi 86452e71ea71Smrg fi 86462e71ea71Smrg 86473f6d0e1dSmrg # If we're not building shared, we need to use non_pic_objs 86483f6d0e1dSmrg test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" 86493f6d0e1dSmrg 8650c3c9db83Smrg # Create the old-style object. 86513f6d0e1dSmrg reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 86522e71ea71Smrg 8653c3c9db83Smrg output="$obj" 8654c3c9db83Smrg func_execute_cmds "$reload_cmds" 'exit $?' 86552e71ea71Smrg 8656c3c9db83Smrg # Exit if we aren't doing a library object file. 8657c3c9db83Smrg if test -z "$libobj"; then 8658c3c9db83Smrg if test -n "$gentop"; then 8659c3c9db83Smrg func_show_eval '${RM}r "$gentop"' 8660c3c9db83Smrg fi 8661c3c9db83Smrg 8662c3c9db83Smrg exit $EXIT_SUCCESS 86632e71ea71Smrg fi 8664c3c9db83Smrg 8665c3c9db83Smrg if test "$build_libtool_libs" != yes; then 8666c3c9db83Smrg if test -n "$gentop"; then 8667c3c9db83Smrg func_show_eval '${RM}r "$gentop"' 8668c3c9db83Smrg fi 8669c3c9db83Smrg 8670c3c9db83Smrg # Create an invalid libtool object if no PIC, so that we don't 8671c3c9db83Smrg # accidentally link it into a program. 8672c3c9db83Smrg # $show "echo timestamp > $libobj" 8673c3c9db83Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 8674c3c9db83Smrg exit $EXIT_SUCCESS 8675c3c9db83Smrg fi 8676c3c9db83Smrg 8677c3c9db83Smrg if test -n "$pic_flag" || test "$pic_mode" != default; then 8678c3c9db83Smrg # Only do commands if we really have different PIC objects. 8679c3c9db83Smrg reload_objs="$libobjs $reload_conv_objs" 8680c3c9db83Smrg output="$libobj" 8681c3c9db83Smrg func_execute_cmds "$reload_cmds" 'exit $?' 8682c3c9db83Smrg fi 8683c3c9db83Smrg 8684c3c9db83Smrg if test -n "$gentop"; then 8685c3c9db83Smrg func_show_eval '${RM}r "$gentop"' 8686c3c9db83Smrg fi 8687c3c9db83Smrg 8688c3c9db83Smrg exit $EXIT_SUCCESS 86892e71ea71Smrg ;; 8690692f60a7Smrg 8691c3c9db83Smrg prog) 8692c3c9db83Smrg case $host in 8693c3c9db83Smrg *cygwin*) func_stripname '' '.exe' "$output" 8694c3c9db83Smrg output=$func_stripname_result.exe;; 8695c3c9db83Smrg esac 8696c3c9db83Smrg test -n "$vinfo" && \ 8697c3c9db83Smrg func_warning "\`-version-info' is ignored for programs" 8698692f60a7Smrg 8699c3c9db83Smrg test -n "$release" && \ 8700c3c9db83Smrg func_warning "\`-release' is ignored for programs" 8701692f60a7Smrg 8702c3c9db83Smrg test "$preload" = yes \ 8703c3c9db83Smrg && test "$dlopen_support" = unknown \ 8704c3c9db83Smrg && test "$dlopen_self" = unknown \ 8705c3c9db83Smrg && test "$dlopen_self_static" = unknown && \ 8706c3c9db83Smrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 8707c3c9db83Smrg 8708c3c9db83Smrg case $host in 8709c3c9db83Smrg *-*-rhapsody* | *-*-darwin1.[012]) 8710c3c9db83Smrg # On Rhapsody replace the C library is the System framework 87113f6d0e1dSmrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 87123f6d0e1dSmrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 87132e71ea71Smrg ;; 8714c3c9db83Smrg esac 87152e71ea71Smrg 8716c3c9db83Smrg case $host in 8717c3c9db83Smrg *-*-darwin*) 8718c3c9db83Smrg # Don't allow lazy linking, it breaks C++ global constructors 8719c3c9db83Smrg # But is supposedly fixed on 10.4 or later (yay!). 8720c3c9db83Smrg if test "$tagname" = CXX ; then 8721c3c9db83Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 8722c3c9db83Smrg 10.[0123]) 87233f6d0e1dSmrg func_append compile_command " ${wl}-bind_at_load" 87243f6d0e1dSmrg func_append finalize_command " ${wl}-bind_at_load" 8725c3c9db83Smrg ;; 8726c3c9db83Smrg esac 87272e71ea71Smrg fi 8728c3c9db83Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 87293f6d0e1dSmrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 87303f6d0e1dSmrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8731c3c9db83Smrg ;; 8732c3c9db83Smrg esac 87332e71ea71Smrg 87342e71ea71Smrg 8735c3c9db83Smrg # move library search paths that coincide with paths to not yet 8736c3c9db83Smrg # installed libraries to the beginning of the library search list 8737c3c9db83Smrg new_libs= 8738c3c9db83Smrg for path in $notinst_path; do 8739c3c9db83Smrg case " $new_libs " in 8740c3c9db83Smrg *" -L$path/$objdir "*) ;; 8741c3c9db83Smrg *) 8742c3c9db83Smrg case " $compile_deplibs " in 8743c3c9db83Smrg *" -L$path/$objdir "*) 87443f6d0e1dSmrg func_append new_libs " -L$path/$objdir" ;; 874585ee4c00Smrg esac 8746c3c9db83Smrg ;; 8747c3c9db83Smrg esac 8748c3c9db83Smrg done 8749c3c9db83Smrg for deplib in $compile_deplibs; do 8750c3c9db83Smrg case $deplib in 8751c3c9db83Smrg -L*) 8752c3c9db83Smrg case " $new_libs " in 8753c3c9db83Smrg *" $deplib "*) ;; 87543f6d0e1dSmrg *) func_append new_libs " $deplib" ;; 875585ee4c00Smrg esac 8756c3c9db83Smrg ;; 87573f6d0e1dSmrg *) func_append new_libs " $deplib" ;; 8758c3c9db83Smrg esac 8759c3c9db83Smrg done 8760c3c9db83Smrg compile_deplibs="$new_libs" 8761692f60a7Smrg 87622e71ea71Smrg 87633f6d0e1dSmrg func_append compile_command " $compile_deplibs" 87643f6d0e1dSmrg func_append finalize_command " $finalize_deplibs" 87652e71ea71Smrg 8766c3c9db83Smrg if test -n "$rpath$xrpath"; then 8767c3c9db83Smrg # If the user specified any rpath flags, then add them. 8768c3c9db83Smrg for libdir in $rpath $xrpath; do 8769c3c9db83Smrg # This is the magic to use -rpath. 8770c3c9db83Smrg case "$finalize_rpath " in 8771c3c9db83Smrg *" $libdir "*) ;; 87723f6d0e1dSmrg *) func_append finalize_rpath " $libdir" ;; 8773c3c9db83Smrg esac 8774c3c9db83Smrg done 8775c3c9db83Smrg fi 87762e71ea71Smrg 8777c3c9db83Smrg # Now hardcode the library paths 8778c3c9db83Smrg rpath= 8779c3c9db83Smrg hardcode_libdirs= 8780c3c9db83Smrg for libdir in $compile_rpath $finalize_rpath; do 8781c3c9db83Smrg if test -n "$hardcode_libdir_flag_spec"; then 8782c3c9db83Smrg if test -n "$hardcode_libdir_separator"; then 8783c3c9db83Smrg if test -z "$hardcode_libdirs"; then 8784c3c9db83Smrg hardcode_libdirs="$libdir" 8785c3c9db83Smrg else 8786c3c9db83Smrg # Just accumulate the unique libdirs. 8787c3c9db83Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8788c3c9db83Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8789c3c9db83Smrg ;; 8790c3c9db83Smrg *) 87913f6d0e1dSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8792c3c9db83Smrg ;; 8793c3c9db83Smrg esac 8794c3c9db83Smrg fi 87952e71ea71Smrg else 8796c3c9db83Smrg eval flag=\"$hardcode_libdir_flag_spec\" 87973f6d0e1dSmrg func_append rpath " $flag" 87982e71ea71Smrg fi 8799c3c9db83Smrg elif test -n "$runpath_var"; then 8800c3c9db83Smrg case "$perm_rpath " in 8801c3c9db83Smrg *" $libdir "*) ;; 88023f6d0e1dSmrg *) func_append perm_rpath " $libdir" ;; 8803c3c9db83Smrg esac 8804c3c9db83Smrg fi 8805c3c9db83Smrg case $host in 8806c3c9db83Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 8807c3c9db83Smrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 8808c3c9db83Smrg case :$dllsearchpath: in 8809c3c9db83Smrg *":$libdir:"*) ;; 8810c3c9db83Smrg ::) dllsearchpath=$libdir;; 88113f6d0e1dSmrg *) func_append dllsearchpath ":$libdir";; 8812c3c9db83Smrg esac 8813c3c9db83Smrg case :$dllsearchpath: in 8814c3c9db83Smrg *":$testbindir:"*) ;; 8815c3c9db83Smrg ::) dllsearchpath=$testbindir;; 88163f6d0e1dSmrg *) func_append dllsearchpath ":$testbindir";; 8817c3c9db83Smrg esac 8818c3c9db83Smrg ;; 8819c3c9db83Smrg esac 8820c3c9db83Smrg done 8821c3c9db83Smrg # Substitute the hardcoded libdirs into the rpath. 8822c3c9db83Smrg if test -n "$hardcode_libdir_separator" && 8823c3c9db83Smrg test -n "$hardcode_libdirs"; then 8824c3c9db83Smrg libdir="$hardcode_libdirs" 8825c3c9db83Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 8826c3c9db83Smrg fi 8827c3c9db83Smrg compile_rpath="$rpath" 88282e71ea71Smrg 8829c3c9db83Smrg rpath= 8830c3c9db83Smrg hardcode_libdirs= 8831c3c9db83Smrg for libdir in $finalize_rpath; do 8832c3c9db83Smrg if test -n "$hardcode_libdir_flag_spec"; then 8833c3c9db83Smrg if test -n "$hardcode_libdir_separator"; then 8834c3c9db83Smrg if test -z "$hardcode_libdirs"; then 8835c3c9db83Smrg hardcode_libdirs="$libdir" 8836c3c9db83Smrg else 8837c3c9db83Smrg # Just accumulate the unique libdirs. 8838c3c9db83Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8839c3c9db83Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8840c3c9db83Smrg ;; 8841c3c9db83Smrg *) 88423f6d0e1dSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8843c3c9db83Smrg ;; 8844c3c9db83Smrg esac 8845c3c9db83Smrg fi 8846692f60a7Smrg else 8847c3c9db83Smrg eval flag=\"$hardcode_libdir_flag_spec\" 88483f6d0e1dSmrg func_append rpath " $flag" 8849692f60a7Smrg fi 8850c3c9db83Smrg elif test -n "$runpath_var"; then 8851c3c9db83Smrg case "$finalize_perm_rpath " in 8852c3c9db83Smrg *" $libdir "*) ;; 88533f6d0e1dSmrg *) func_append finalize_perm_rpath " $libdir" ;; 8854c3c9db83Smrg esac 8855692f60a7Smrg fi 8856c3c9db83Smrg done 8857c3c9db83Smrg # Substitute the hardcoded libdirs into the rpath. 8858c3c9db83Smrg if test -n "$hardcode_libdir_separator" && 8859c3c9db83Smrg test -n "$hardcode_libdirs"; then 8860c3c9db83Smrg libdir="$hardcode_libdirs" 8861c3c9db83Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 8862c3c9db83Smrg fi 8863c3c9db83Smrg finalize_rpath="$rpath" 8864692f60a7Smrg 8865c3c9db83Smrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 8866c3c9db83Smrg # Transform all the library objects into standard objects. 88673f6d0e1dSmrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 88683f6d0e1dSmrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 8869c3c9db83Smrg fi 8870692f60a7Smrg 8871c3c9db83Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 8872692f60a7Smrg 8873c3c9db83Smrg # template prelinking step 8874c3c9db83Smrg if test -n "$prelink_cmds"; then 8875c3c9db83Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 8876c3c9db83Smrg fi 8877692f60a7Smrg 8878c3c9db83Smrg wrappers_required=yes 8879c3c9db83Smrg case $host in 88803f6d0e1dSmrg *cegcc* | *mingw32ce*) 88813f6d0e1dSmrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 88823f6d0e1dSmrg wrappers_required=no 88833f6d0e1dSmrg ;; 8884c3c9db83Smrg *cygwin* | *mingw* ) 8885c3c9db83Smrg if test "$build_libtool_libs" != yes; then 8886c3c9db83Smrg wrappers_required=no 8887c3c9db83Smrg fi 8888c3c9db83Smrg ;; 8889c3c9db83Smrg *) 8890c3c9db83Smrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 8891c3c9db83Smrg wrappers_required=no 8892c3c9db83Smrg fi 8893c3c9db83Smrg ;; 8894c3c9db83Smrg esac 8895c3c9db83Smrg if test "$wrappers_required" = no; then 8896c3c9db83Smrg # Replace the output file specification. 88973f6d0e1dSmrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8898c3c9db83Smrg link_command="$compile_command$compile_rpath" 8899692f60a7Smrg 8900c3c9db83Smrg # We have no uninstalled library dependencies, so finalize right now. 8901c3c9db83Smrg exit_status=0 8902c3c9db83Smrg func_show_eval "$link_command" 'exit_status=$?' 8903692f60a7Smrg 89043f6d0e1dSmrg if test -n "$postlink_cmds"; then 89053f6d0e1dSmrg func_to_tool_file "$output" 89063f6d0e1dSmrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 89073f6d0e1dSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 89083f6d0e1dSmrg fi 89093f6d0e1dSmrg 8910c3c9db83Smrg # Delete the generated files. 8911c3c9db83Smrg if test -f "$output_objdir/${outputname}S.${objext}"; then 8912c3c9db83Smrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 8913692f60a7Smrg fi 8914692f60a7Smrg 8915c3c9db83Smrg exit $exit_status 8916c3c9db83Smrg fi 8917692f60a7Smrg 8918c3c9db83Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 8919c3c9db83Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 8920c3c9db83Smrg fi 8921c3c9db83Smrg if test -n "$finalize_shlibpath"; then 8922c3c9db83Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 8923c3c9db83Smrg fi 89242e71ea71Smrg 8925c3c9db83Smrg compile_var= 8926c3c9db83Smrg finalize_var= 8927c3c9db83Smrg if test -n "$runpath_var"; then 8928c3c9db83Smrg if test -n "$perm_rpath"; then 8929c3c9db83Smrg # We should set the runpath_var. 8930c3c9db83Smrg rpath= 8931c3c9db83Smrg for dir in $perm_rpath; do 89323f6d0e1dSmrg func_append rpath "$dir:" 8933c3c9db83Smrg done 8934c3c9db83Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 8935692f60a7Smrg fi 8936c3c9db83Smrg if test -n "$finalize_perm_rpath"; then 8937c3c9db83Smrg # We should set the runpath_var. 8938c3c9db83Smrg rpath= 8939c3c9db83Smrg for dir in $finalize_perm_rpath; do 89403f6d0e1dSmrg func_append rpath "$dir:" 8941c3c9db83Smrg done 8942c3c9db83Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 8943692f60a7Smrg fi 8944c3c9db83Smrg fi 8945692f60a7Smrg 8946c3c9db83Smrg if test "$no_install" = yes; then 8947c3c9db83Smrg # We don't need to create a wrapper script. 8948c3c9db83Smrg link_command="$compile_var$compile_command$compile_rpath" 8949c3c9db83Smrg # Replace the output file specification. 89503f6d0e1dSmrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8951c3c9db83Smrg # Delete the old output file. 8952c3c9db83Smrg $opt_dry_run || $RM $output 8953c3c9db83Smrg # Link the executable and exit 8954c3c9db83Smrg func_show_eval "$link_command" 'exit $?' 89553f6d0e1dSmrg 89563f6d0e1dSmrg if test -n "$postlink_cmds"; then 89573f6d0e1dSmrg func_to_tool_file "$output" 89583f6d0e1dSmrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 89593f6d0e1dSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 89603f6d0e1dSmrg fi 89613f6d0e1dSmrg 89622e71ea71Smrg exit $EXIT_SUCCESS 8963c3c9db83Smrg fi 896485ee4c00Smrg 8965c3c9db83Smrg if test "$hardcode_action" = relink; then 8966c3c9db83Smrg # Fast installation is not supported 8967c3c9db83Smrg link_command="$compile_var$compile_command$compile_rpath" 8968c3c9db83Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 8969c3c9db83Smrg 8970c3c9db83Smrg func_warning "this platform does not like uninstalled shared libraries" 8971c3c9db83Smrg func_warning "\`$output' will be relinked during installation" 8972c3c9db83Smrg else 8973c3c9db83Smrg if test "$fast_install" != no; then 8974c3c9db83Smrg link_command="$finalize_var$compile_command$finalize_rpath" 8975c3c9db83Smrg if test "$fast_install" = yes; then 89763f6d0e1dSmrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 8977c3c9db83Smrg else 8978c3c9db83Smrg # fast_install is set to needless 8979c3c9db83Smrg relink_command= 8980c3c9db83Smrg fi 8981692f60a7Smrg else 8982c3c9db83Smrg link_command="$compile_var$compile_command$compile_rpath" 8983c3c9db83Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 8984692f60a7Smrg fi 8985c3c9db83Smrg fi 8986692f60a7Smrg 8987c3c9db83Smrg # Replace the output file specification. 89883f6d0e1dSmrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 8989692f60a7Smrg 8990c3c9db83Smrg # Delete the old output files. 8991c3c9db83Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 8992692f60a7Smrg 8993c3c9db83Smrg func_show_eval "$link_command" 'exit $?' 89942e71ea71Smrg 89953f6d0e1dSmrg if test -n "$postlink_cmds"; then 89963f6d0e1dSmrg func_to_tool_file "$output_objdir/$outputname" 89973f6d0e1dSmrg 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'` 89983f6d0e1dSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 89993f6d0e1dSmrg fi 90003f6d0e1dSmrg 9001c3c9db83Smrg # Now create the wrapper script. 9002c3c9db83Smrg func_verbose "creating $output" 90032e71ea71Smrg 9004c3c9db83Smrg # Quote the relink command for shipping. 9005c3c9db83Smrg if test -n "$relink_command"; then 9006c3c9db83Smrg # Preserve any variables that may affect compiler behavior 9007c3c9db83Smrg for var in $variables_saved_for_relink; do 9008c3c9db83Smrg if eval test -z \"\${$var+set}\"; then 9009c3c9db83Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9010c3c9db83Smrg elif eval var_value=\$$var; test -z "$var_value"; then 9011c3c9db83Smrg relink_command="$var=; export $var; $relink_command" 9012692f60a7Smrg else 9013c3c9db83Smrg func_quote_for_eval "$var_value" 9014c3c9db83Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9015692f60a7Smrg fi 9016c3c9db83Smrg done 9017c3c9db83Smrg relink_command="(cd `pwd`; $relink_command)" 90183f6d0e1dSmrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9019c3c9db83Smrg fi 9020c3c9db83Smrg 9021c3c9db83Smrg # Only actually do things if not in dry run mode. 9022c3c9db83Smrg $opt_dry_run || { 9023c3c9db83Smrg # win32 will think the script is a binary if it has 9024c3c9db83Smrg # a .exe suffix, so we strip it off here. 9025c3c9db83Smrg case $output in 9026c3c9db83Smrg *.exe) func_stripname '' '.exe' "$output" 9027c3c9db83Smrg output=$func_stripname_result ;; 9028c3c9db83Smrg esac 9029c3c9db83Smrg # test for cygwin because mv fails w/o .exe extensions 9030c3c9db83Smrg case $host in 9031c3c9db83Smrg *cygwin*) 9032c3c9db83Smrg exeext=.exe 9033c3c9db83Smrg func_stripname '' '.exe' "$outputname" 9034c3c9db83Smrg outputname=$func_stripname_result ;; 9035c3c9db83Smrg *) exeext= ;; 9036692f60a7Smrg esac 9037c3c9db83Smrg case $host in 9038c3c9db83Smrg *cygwin* | *mingw* ) 9039c3c9db83Smrg func_dirname_and_basename "$output" "" "." 9040c3c9db83Smrg output_name=$func_basename_result 9041c3c9db83Smrg output_path=$func_dirname_result 9042c3c9db83Smrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 9043c3c9db83Smrg cwrapper="$output_path/$output_name.exe" 9044c3c9db83Smrg $RM $cwrappersource $cwrapper 9045c3c9db83Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 9046c3c9db83Smrg 9047c3c9db83Smrg func_emit_cwrapperexe_src > $cwrappersource 9048c3c9db83Smrg 9049c3c9db83Smrg # The wrapper executable is built using the $host compiler, 9050c3c9db83Smrg # because it contains $host paths and files. If cross- 9051c3c9db83Smrg # compiling, it, like the target executable, must be 9052c3c9db83Smrg # executed on the $host or under an emulation environment. 9053c3c9db83Smrg $opt_dry_run || { 9054c3c9db83Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 9055c3c9db83Smrg $STRIP $cwrapper 9056c3c9db83Smrg } 9057692f60a7Smrg 9058c3c9db83Smrg # Now, create the wrapper script for func_source use: 9059c3c9db83Smrg func_ltwrapper_scriptname $cwrapper 9060c3c9db83Smrg $RM $func_ltwrapper_scriptname_result 9061c3c9db83Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 9062c3c9db83Smrg $opt_dry_run || { 9063c3c9db83Smrg # note: this script will not be executed, so do not chmod. 9064c3c9db83Smrg if test "x$build" = "x$host" ; then 9065c3c9db83Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 9066c3c9db83Smrg else 9067c3c9db83Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 9068c3c9db83Smrg fi 9069c3c9db83Smrg } 9070c3c9db83Smrg ;; 9071c3c9db83Smrg * ) 9072c3c9db83Smrg $RM $output 9073c3c9db83Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 9074692f60a7Smrg 9075c3c9db83Smrg func_emit_wrapper no > $output 9076c3c9db83Smrg chmod +x $output 9077c3c9db83Smrg ;; 9078c3c9db83Smrg esac 9079c3c9db83Smrg } 9080c3c9db83Smrg exit $EXIT_SUCCESS 9081c3c9db83Smrg ;; 9082c3c9db83Smrg esac 9083692f60a7Smrg 9084c3c9db83Smrg # See if we need to build an old-fashioned archive. 9085c3c9db83Smrg for oldlib in $oldlibs; do 9086692f60a7Smrg 9087c3c9db83Smrg if test "$build_libtool_libs" = convenience; then 9088c3c9db83Smrg oldobjs="$libobjs_save $symfileobj" 9089c3c9db83Smrg addlibs="$convenience" 9090c3c9db83Smrg build_libtool_libs=no 9091c3c9db83Smrg else 9092c3c9db83Smrg if test "$build_libtool_libs" = module; then 9093c3c9db83Smrg oldobjs="$libobjs_save" 9094c3c9db83Smrg build_libtool_libs=no 9095c3c9db83Smrg else 9096c3c9db83Smrg oldobjs="$old_deplibs $non_pic_objects" 9097c3c9db83Smrg if test "$preload" = yes && test -f "$symfileobj"; then 90983f6d0e1dSmrg func_append oldobjs " $symfileobj" 9099c3c9db83Smrg fi 9100c3c9db83Smrg fi 9101c3c9db83Smrg addlibs="$old_convenience" 9102692f60a7Smrg fi 9103692f60a7Smrg 9104c3c9db83Smrg if test -n "$addlibs"; then 9105c3c9db83Smrg gentop="$output_objdir/${outputname}x" 91063f6d0e1dSmrg func_append generated " $gentop" 9107692f60a7Smrg 9108c3c9db83Smrg func_extract_archives $gentop $addlibs 91093f6d0e1dSmrg func_append oldobjs " $func_extract_archives_result" 9110c3c9db83Smrg fi 9111692f60a7Smrg 9112c3c9db83Smrg # Do each command in the archive commands. 9113c3c9db83Smrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 9114c3c9db83Smrg cmds=$old_archive_from_new_cmds 9115c3c9db83Smrg else 9116692f60a7Smrg 9117c3c9db83Smrg # Add any objects from preloaded convenience libraries 9118c3c9db83Smrg if test -n "$dlprefiles"; then 9119c3c9db83Smrg gentop="$output_objdir/${outputname}x" 91203f6d0e1dSmrg func_append generated " $gentop" 9121692f60a7Smrg 9122c3c9db83Smrg func_extract_archives $gentop $dlprefiles 91233f6d0e1dSmrg func_append oldobjs " $func_extract_archives_result" 9124c3c9db83Smrg fi 9125692f60a7Smrg 9126c3c9db83Smrg # POSIX demands no paths to be encoded in archives. We have 9127c3c9db83Smrg # to avoid creating archives with duplicate basenames if we 9128c3c9db83Smrg # might have to extract them afterwards, e.g., when creating a 9129c3c9db83Smrg # static archive out of a convenience library, or when linking 9130c3c9db83Smrg # the entirety of a libtool archive into another (currently 9131c3c9db83Smrg # not supported by libtool). 9132c3c9db83Smrg if (for obj in $oldobjs 9133c3c9db83Smrg do 9134c3c9db83Smrg func_basename "$obj" 9135c3c9db83Smrg $ECHO "$func_basename_result" 9136c3c9db83Smrg done | sort | sort -uc >/dev/null 2>&1); then 9137c3c9db83Smrg : 9138c3c9db83Smrg else 91393f6d0e1dSmrg echo "copying selected object files to avoid basename conflicts..." 9140c3c9db83Smrg gentop="$output_objdir/${outputname}x" 91413f6d0e1dSmrg func_append generated " $gentop" 9142c3c9db83Smrg func_mkdir_p "$gentop" 9143c3c9db83Smrg save_oldobjs=$oldobjs 9144c3c9db83Smrg oldobjs= 9145c3c9db83Smrg counter=1 9146c3c9db83Smrg for obj in $save_oldobjs 9147c3c9db83Smrg do 9148c3c9db83Smrg func_basename "$obj" 9149c3c9db83Smrg objbase="$func_basename_result" 9150c3c9db83Smrg case " $oldobjs " in 9151c3c9db83Smrg " ") oldobjs=$obj ;; 9152c3c9db83Smrg *[\ /]"$objbase "*) 9153c3c9db83Smrg while :; do 9154c3c9db83Smrg # Make sure we don't pick an alternate name that also 9155c3c9db83Smrg # overlaps. 9156c3c9db83Smrg newobj=lt$counter-$objbase 9157c3c9db83Smrg func_arith $counter + 1 9158c3c9db83Smrg counter=$func_arith_result 9159c3c9db83Smrg case " $oldobjs " in 9160c3c9db83Smrg *[\ /]"$newobj "*) ;; 9161c3c9db83Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 9162c3c9db83Smrg esac 9163c3c9db83Smrg done 9164c3c9db83Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 91653f6d0e1dSmrg func_append oldobjs " $gentop/$newobj" 9166c3c9db83Smrg ;; 91673f6d0e1dSmrg *) func_append oldobjs " $obj" ;; 9168c3c9db83Smrg esac 9169692f60a7Smrg done 917085ee4c00Smrg fi 91713f6d0e1dSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 91723f6d0e1dSmrg tool_oldlib=$func_to_tool_file_result 9173c3c9db83Smrg eval cmds=\"$old_archive_cmds\" 91742e71ea71Smrg 9175c3c9db83Smrg func_len " $cmds" 9176c3c9db83Smrg len=$func_len_result 9177c3c9db83Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 9178c3c9db83Smrg cmds=$old_archive_cmds 91793f6d0e1dSmrg elif test -n "$archiver_list_spec"; then 91803f6d0e1dSmrg func_verbose "using command file archive linking..." 91813f6d0e1dSmrg for obj in $oldobjs 91823f6d0e1dSmrg do 91833f6d0e1dSmrg func_to_tool_file "$obj" 91843f6d0e1dSmrg $ECHO "$func_to_tool_file_result" 91853f6d0e1dSmrg done > $output_objdir/$libname.libcmd 91863f6d0e1dSmrg func_to_tool_file "$output_objdir/$libname.libcmd" 91873f6d0e1dSmrg oldobjs=" $archiver_list_spec$func_to_tool_file_result" 91883f6d0e1dSmrg cmds=$old_archive_cmds 9189c3c9db83Smrg else 9190c3c9db83Smrg # the command line is too long to link in one step, link in parts 9191c3c9db83Smrg func_verbose "using piecewise archive linking..." 9192c3c9db83Smrg save_RANLIB=$RANLIB 9193c3c9db83Smrg RANLIB=: 9194c3c9db83Smrg objlist= 9195c3c9db83Smrg concat_cmds= 9196c3c9db83Smrg save_oldobjs=$oldobjs 9197c3c9db83Smrg oldobjs= 9198c3c9db83Smrg # Is there a better way of finding the last object in the list? 9199c3c9db83Smrg for obj in $save_oldobjs 9200c3c9db83Smrg do 9201c3c9db83Smrg last_oldobj=$obj 9202c3c9db83Smrg done 9203c3c9db83Smrg eval test_cmds=\"$old_archive_cmds\" 9204c3c9db83Smrg func_len " $test_cmds" 9205c3c9db83Smrg len0=$func_len_result 9206c3c9db83Smrg len=$len0 9207c3c9db83Smrg for obj in $save_oldobjs 9208c3c9db83Smrg do 9209c3c9db83Smrg func_len " $obj" 9210c3c9db83Smrg func_arith $len + $func_len_result 9211c3c9db83Smrg len=$func_arith_result 9212c3c9db83Smrg func_append objlist " $obj" 9213c3c9db83Smrg if test "$len" -lt "$max_cmd_len"; then 9214c3c9db83Smrg : 9215c3c9db83Smrg else 9216c3c9db83Smrg # the above command should be used before it gets too long 9217c3c9db83Smrg oldobjs=$objlist 9218c3c9db83Smrg if test "$obj" = "$last_oldobj" ; then 9219c3c9db83Smrg RANLIB=$save_RANLIB 9220c3c9db83Smrg fi 9221c3c9db83Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9222c3c9db83Smrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 9223c3c9db83Smrg objlist= 9224c3c9db83Smrg len=$len0 9225c3c9db83Smrg fi 9226c3c9db83Smrg done 9227c3c9db83Smrg RANLIB=$save_RANLIB 9228c3c9db83Smrg oldobjs=$objlist 9229c3c9db83Smrg if test "X$oldobjs" = "X" ; then 9230c3c9db83Smrg eval cmds=\"\$concat_cmds\" 9231c3c9db83Smrg else 9232c3c9db83Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 9233c3c9db83Smrg fi 9234c3c9db83Smrg fi 9235c3c9db83Smrg fi 9236c3c9db83Smrg func_execute_cmds "$cmds" 'exit $?' 9237692f60a7Smrg done 9238692f60a7Smrg 9239c3c9db83Smrg test -n "$generated" && \ 9240c3c9db83Smrg func_show_eval "${RM}r$generated" 9241692f60a7Smrg 9242c3c9db83Smrg # Now create the libtool archive. 9243c3c9db83Smrg case $output in 9244c3c9db83Smrg *.la) 9245c3c9db83Smrg old_library= 9246c3c9db83Smrg test "$build_old_libs" = yes && old_library="$libname.$libext" 9247c3c9db83Smrg func_verbose "creating $output" 924885ee4c00Smrg 9249c3c9db83Smrg # Preserve any variables that may affect compiler behavior 9250c3c9db83Smrg for var in $variables_saved_for_relink; do 9251c3c9db83Smrg if eval test -z \"\${$var+set}\"; then 9252c3c9db83Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9253c3c9db83Smrg elif eval var_value=\$$var; test -z "$var_value"; then 9254c3c9db83Smrg relink_command="$var=; export $var; $relink_command" 92552e71ea71Smrg else 9256c3c9db83Smrg func_quote_for_eval "$var_value" 9257c3c9db83Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 92582e71ea71Smrg fi 9259c3c9db83Smrg done 9260c3c9db83Smrg # Quote the link command for shipping. 9261c3c9db83Smrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 92623f6d0e1dSmrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9263c3c9db83Smrg if test "$hardcode_automatic" = yes ; then 9264c3c9db83Smrg relink_command= 9265c3c9db83Smrg fi 9266692f60a7Smrg 9267c3c9db83Smrg # Only create the output if not a dry run. 9268c3c9db83Smrg $opt_dry_run || { 9269c3c9db83Smrg for installed in no yes; do 9270c3c9db83Smrg if test "$installed" = yes; then 9271c3c9db83Smrg if test -z "$install_libdir"; then 9272c3c9db83Smrg break 9273c3c9db83Smrg fi 9274c3c9db83Smrg output="$output_objdir/$outputname"i 9275c3c9db83Smrg # Replace all uninstalled libtool libraries with the installed ones 9276c3c9db83Smrg newdependency_libs= 9277c3c9db83Smrg for deplib in $dependency_libs; do 9278c3c9db83Smrg case $deplib in 9279c3c9db83Smrg *.la) 9280c3c9db83Smrg func_basename "$deplib" 9281c3c9db83Smrg name="$func_basename_result" 92823f6d0e1dSmrg func_resolve_sysroot "$deplib" 92833f6d0e1dSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 9284c3c9db83Smrg test -z "$libdir" && \ 9285c3c9db83Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 92863f6d0e1dSmrg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 92873f6d0e1dSmrg ;; 92883f6d0e1dSmrg -L*) 92893f6d0e1dSmrg func_stripname -L '' "$deplib" 92903f6d0e1dSmrg func_replace_sysroot "$func_stripname_result" 92913f6d0e1dSmrg func_append newdependency_libs " -L$func_replace_sysroot_result" 9292c3c9db83Smrg ;; 92933f6d0e1dSmrg -R*) 92943f6d0e1dSmrg func_stripname -R '' "$deplib" 92953f6d0e1dSmrg func_replace_sysroot "$func_stripname_result" 92963f6d0e1dSmrg func_append newdependency_libs " -R$func_replace_sysroot_result" 92973f6d0e1dSmrg ;; 92983f6d0e1dSmrg *) func_append newdependency_libs " $deplib" ;; 9299c3c9db83Smrg esac 9300c3c9db83Smrg done 9301c3c9db83Smrg dependency_libs="$newdependency_libs" 9302c3c9db83Smrg newdlfiles= 9303c3c9db83Smrg 9304c3c9db83Smrg for lib in $dlfiles; do 9305c3c9db83Smrg case $lib in 9306c3c9db83Smrg *.la) 9307c3c9db83Smrg func_basename "$lib" 9308c3c9db83Smrg name="$func_basename_result" 9309c3c9db83Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9310c3c9db83Smrg test -z "$libdir" && \ 9311c3c9db83Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 93123f6d0e1dSmrg func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 9313c3c9db83Smrg ;; 93143f6d0e1dSmrg *) func_append newdlfiles " $lib" ;; 9315c3c9db83Smrg esac 9316c3c9db83Smrg done 9317c3c9db83Smrg dlfiles="$newdlfiles" 9318c3c9db83Smrg newdlprefiles= 9319c3c9db83Smrg for lib in $dlprefiles; do 9320c3c9db83Smrg case $lib in 9321c3c9db83Smrg *.la) 9322c3c9db83Smrg # Only pass preopened files to the pseudo-archive (for 9323c3c9db83Smrg # eventual linking with the app. that links it) if we 9324c3c9db83Smrg # didn't already link the preopened objects directly into 9325c3c9db83Smrg # the library: 9326c3c9db83Smrg func_basename "$lib" 9327c3c9db83Smrg name="$func_basename_result" 9328c3c9db83Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9329c3c9db83Smrg test -z "$libdir" && \ 9330c3c9db83Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 93313f6d0e1dSmrg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 9332c3c9db83Smrg ;; 9333c3c9db83Smrg esac 9334c3c9db83Smrg done 9335c3c9db83Smrg dlprefiles="$newdlprefiles" 9336c3c9db83Smrg else 9337c3c9db83Smrg newdlfiles= 9338c3c9db83Smrg for lib in $dlfiles; do 9339c3c9db83Smrg case $lib in 9340c3c9db83Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9341c3c9db83Smrg *) abs=`pwd`"/$lib" ;; 9342c3c9db83Smrg esac 93433f6d0e1dSmrg func_append newdlfiles " $abs" 9344c3c9db83Smrg done 9345c3c9db83Smrg dlfiles="$newdlfiles" 9346c3c9db83Smrg newdlprefiles= 9347c3c9db83Smrg for lib in $dlprefiles; do 9348c3c9db83Smrg case $lib in 9349c3c9db83Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9350c3c9db83Smrg *) abs=`pwd`"/$lib" ;; 9351c3c9db83Smrg esac 93523f6d0e1dSmrg func_append newdlprefiles " $abs" 9353c3c9db83Smrg done 9354c3c9db83Smrg dlprefiles="$newdlprefiles" 9355c3c9db83Smrg fi 9356c3c9db83Smrg $RM $output 9357c3c9db83Smrg # place dlname in correct position for cygwin 93583f6d0e1dSmrg # In fact, it would be nice if we could use this code for all target 93593f6d0e1dSmrg # systems that can't hard-code library paths into their executables 93603f6d0e1dSmrg # and that have no shared library path variable independent of PATH, 93613f6d0e1dSmrg # but it turns out we can't easily determine that from inspecting 93623f6d0e1dSmrg # libtool variables, so we have to hard-code the OSs to which it 93633f6d0e1dSmrg # applies here; at the moment, that means platforms that use the PE 93643f6d0e1dSmrg # object format with DLL files. See the long comment at the top of 93653f6d0e1dSmrg # tests/bindir.at for full details. 9366c3c9db83Smrg tdlname=$dlname 9367c3c9db83Smrg case $host,$output,$installed,$module,$dlname in 93683f6d0e1dSmrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 93693f6d0e1dSmrg # If a -bindir argument was supplied, place the dll there. 93703f6d0e1dSmrg if test "x$bindir" != x ; 93713f6d0e1dSmrg then 93723f6d0e1dSmrg func_relative_path "$install_libdir" "$bindir" 93733f6d0e1dSmrg tdlname=$func_relative_path_result$dlname 93743f6d0e1dSmrg else 93753f6d0e1dSmrg # Otherwise fall back on heuristic. 93763f6d0e1dSmrg tdlname=../bin/$dlname 93773f6d0e1dSmrg fi 93783f6d0e1dSmrg ;; 9379c3c9db83Smrg esac 9380c3c9db83Smrg $ECHO > $output "\ 9381c3c9db83Smrg# $outputname - a libtool library file 9382c3c9db83Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 9383c3c9db83Smrg# 9384c3c9db83Smrg# Please DO NOT delete this file! 9385c3c9db83Smrg# It is necessary for linking the library. 9386692f60a7Smrg 9387c3c9db83Smrg# The name that we can dlopen(3). 9388c3c9db83Smrgdlname='$tdlname' 9389692f60a7Smrg 9390c3c9db83Smrg# Names of this library. 9391c3c9db83Smrglibrary_names='$library_names' 9392692f60a7Smrg 9393c3c9db83Smrg# The name of the static archive. 9394c3c9db83Smrgold_library='$old_library' 9395692f60a7Smrg 9396c3c9db83Smrg# Linker flags that can not go in dependency_libs. 9397c3c9db83Smrginherited_linker_flags='$new_inherited_linker_flags' 9398692f60a7Smrg 9399c3c9db83Smrg# Libraries that this one depends upon. 9400c3c9db83Smrgdependency_libs='$dependency_libs' 9401692f60a7Smrg 9402c3c9db83Smrg# Names of additional weak libraries provided by this library 9403c3c9db83Smrgweak_library_names='$weak_libs' 9404692f60a7Smrg 9405c3c9db83Smrg# Version information for $libname. 9406c3c9db83Smrgcurrent=$current 9407c3c9db83Smrgage=$age 9408c3c9db83Smrgrevision=$revision 9409692f60a7Smrg 9410c3c9db83Smrg# Is this an already installed library? 9411c3c9db83Smrginstalled=$installed 9412692f60a7Smrg 9413c3c9db83Smrg# Should we warn about portability when linking against -modules? 9414c3c9db83Smrgshouldnotlink=$module 9415692f60a7Smrg 9416c3c9db83Smrg# Files to dlopen/dlpreopen 9417c3c9db83Smrgdlopen='$dlfiles' 9418c3c9db83Smrgdlpreopen='$dlprefiles' 9419692f60a7Smrg 9420c3c9db83Smrg# Directory that this library needs to be installed in: 9421c3c9db83Smrglibdir='$install_libdir'" 9422c3c9db83Smrg if test "$installed" = no && test "$need_relink" = yes; then 9423c3c9db83Smrg $ECHO >> $output "\ 9424c3c9db83Smrgrelink_command=\"$relink_command\"" 9425c3c9db83Smrg fi 9426c3c9db83Smrg done 9427c3c9db83Smrg } 9428692f60a7Smrg 9429c3c9db83Smrg # Do a symbolic link so that the libtool archive can be found in 9430c3c9db83Smrg # LD_LIBRARY_PATH before the program is installed. 9431c3c9db83Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 9432c3c9db83Smrg ;; 9433c3c9db83Smrg esac 9434c3c9db83Smrg exit $EXIT_SUCCESS 9435c3c9db83Smrg} 94362e71ea71Smrg 94373f6d0e1dSmrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } && 9438c3c9db83Smrg func_mode_link ${1+"$@"} 9439692f60a7Smrg 9440692f60a7Smrg 9441c3c9db83Smrg# func_mode_uninstall arg... 9442c3c9db83Smrgfunc_mode_uninstall () 9443c3c9db83Smrg{ 9444c3c9db83Smrg $opt_debug 9445c3c9db83Smrg RM="$nonopt" 9446692f60a7Smrg files= 9447692f60a7Smrg rmforce= 9448692f60a7Smrg exit_status=0 9449692f60a7Smrg 9450692f60a7Smrg # This variable tells wrapper scripts just to set variables rather 9451692f60a7Smrg # than running their programs. 9452692f60a7Smrg libtool_install_magic="$magic" 9453692f60a7Smrg 9454692f60a7Smrg for arg 9455692f60a7Smrg do 9456692f60a7Smrg case $arg in 94573f6d0e1dSmrg -f) func_append RM " $arg"; rmforce=yes ;; 94583f6d0e1dSmrg -*) func_append RM " $arg" ;; 94593f6d0e1dSmrg *) func_append files " $arg" ;; 9460692f60a7Smrg esac 9461692f60a7Smrg done 9462692f60a7Smrg 9463c3c9db83Smrg test -z "$RM" && \ 9464c3c9db83Smrg func_fatal_help "you must specify an RM program" 9465692f60a7Smrg 9466692f60a7Smrg rmdirs= 9467692f60a7Smrg 9468692f60a7Smrg for file in $files; do 9469c3c9db83Smrg func_dirname "$file" "" "." 9470c3c9db83Smrg dir="$func_dirname_result" 9471c3c9db83Smrg if test "X$dir" = X.; then 94723f6d0e1dSmrg odir="$objdir" 9473692f60a7Smrg else 94743f6d0e1dSmrg odir="$dir/$objdir" 9475692f60a7Smrg fi 9476c3c9db83Smrg func_basename "$file" 9477c3c9db83Smrg name="$func_basename_result" 94783f6d0e1dSmrg test "$opt_mode" = uninstall && odir="$dir" 9479692f60a7Smrg 94803f6d0e1dSmrg # Remember odir for removal later, being careful to avoid duplicates 94813f6d0e1dSmrg if test "$opt_mode" = clean; then 9482692f60a7Smrg case " $rmdirs " in 94833f6d0e1dSmrg *" $odir "*) ;; 94843f6d0e1dSmrg *) func_append rmdirs " $odir" ;; 9485692f60a7Smrg esac 9486692f60a7Smrg fi 9487692f60a7Smrg 9488692f60a7Smrg # Don't error if the file doesn't exist and rm -f was used. 9489c3c9db83Smrg if { test -L "$file"; } >/dev/null 2>&1 || 9490c3c9db83Smrg { test -h "$file"; } >/dev/null 2>&1 || 9491c3c9db83Smrg test -f "$file"; then 9492692f60a7Smrg : 9493692f60a7Smrg elif test -d "$file"; then 9494692f60a7Smrg exit_status=1 9495692f60a7Smrg continue 9496692f60a7Smrg elif test "$rmforce" = yes; then 9497692f60a7Smrg continue 9498692f60a7Smrg fi 9499692f60a7Smrg 9500692f60a7Smrg rmfiles="$file" 9501692f60a7Smrg 9502692f60a7Smrg case $name in 9503692f60a7Smrg *.la) 9504692f60a7Smrg # Possibly a libtool archive, so verify it. 9505c3c9db83Smrg if func_lalib_p "$file"; then 9506c3c9db83Smrg func_source $dir/$name 9507692f60a7Smrg 9508692f60a7Smrg # Delete the libtool libraries and symlinks. 9509692f60a7Smrg for n in $library_names; do 95103f6d0e1dSmrg func_append rmfiles " $odir/$n" 9511692f60a7Smrg done 95123f6d0e1dSmrg test -n "$old_library" && func_append rmfiles " $odir/$old_library" 9513692f60a7Smrg 95143f6d0e1dSmrg case "$opt_mode" in 9515692f60a7Smrg clean) 95163f6d0e1dSmrg case " $library_names " in 9517692f60a7Smrg *" $dlname "*) ;; 95183f6d0e1dSmrg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 9519692f60a7Smrg esac 95203f6d0e1dSmrg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 9521692f60a7Smrg ;; 9522692f60a7Smrg uninstall) 9523692f60a7Smrg if test -n "$library_names"; then 9524692f60a7Smrg # Do each command in the postuninstall commands. 9525c3c9db83Smrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9526692f60a7Smrg fi 9527692f60a7Smrg 9528692f60a7Smrg if test -n "$old_library"; then 9529692f60a7Smrg # Do each command in the old_postuninstall commands. 9530c3c9db83Smrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9531692f60a7Smrg fi 9532692f60a7Smrg # FIXME: should reinstall the best remaining shared library. 9533692f60a7Smrg ;; 9534692f60a7Smrg esac 9535692f60a7Smrg fi 9536692f60a7Smrg ;; 9537692f60a7Smrg 9538692f60a7Smrg *.lo) 9539692f60a7Smrg # Possibly a libtool object, so verify it. 9540c3c9db83Smrg if func_lalib_p "$file"; then 9541692f60a7Smrg 9542692f60a7Smrg # Read the .lo file 9543c3c9db83Smrg func_source $dir/$name 9544692f60a7Smrg 9545692f60a7Smrg # Add PIC object to the list of files to remove. 9546c3c9db83Smrg if test -n "$pic_object" && 9547c3c9db83Smrg test "$pic_object" != none; then 95483f6d0e1dSmrg func_append rmfiles " $dir/$pic_object" 9549692f60a7Smrg fi 9550692f60a7Smrg 9551692f60a7Smrg # Add non-PIC object to the list of files to remove. 9552c3c9db83Smrg if test -n "$non_pic_object" && 9553c3c9db83Smrg test "$non_pic_object" != none; then 95543f6d0e1dSmrg func_append rmfiles " $dir/$non_pic_object" 9555692f60a7Smrg fi 9556692f60a7Smrg fi 9557692f60a7Smrg ;; 9558692f60a7Smrg 9559692f60a7Smrg *) 95603f6d0e1dSmrg if test "$opt_mode" = clean ; then 9561692f60a7Smrg noexename=$name 9562692f60a7Smrg case $file in 9563692f60a7Smrg *.exe) 9564c3c9db83Smrg func_stripname '' '.exe' "$file" 9565c3c9db83Smrg file=$func_stripname_result 9566c3c9db83Smrg func_stripname '' '.exe' "$name" 9567c3c9db83Smrg noexename=$func_stripname_result 9568692f60a7Smrg # $file with .exe has already been added to rmfiles, 9569692f60a7Smrg # add $file without .exe 95703f6d0e1dSmrg func_append rmfiles " $file" 9571692f60a7Smrg ;; 9572692f60a7Smrg esac 9573692f60a7Smrg # Do a test to see if this is a libtool program. 9574c3c9db83Smrg if func_ltwrapper_p "$file"; then 9575c3c9db83Smrg if func_ltwrapper_executable_p "$file"; then 9576c3c9db83Smrg func_ltwrapper_scriptname "$file" 9577c3c9db83Smrg relink_command= 9578c3c9db83Smrg func_source $func_ltwrapper_scriptname_result 95793f6d0e1dSmrg func_append rmfiles " $func_ltwrapper_scriptname_result" 9580c3c9db83Smrg else 9581c3c9db83Smrg relink_command= 9582c3c9db83Smrg func_source $dir/$noexename 9583c3c9db83Smrg fi 9584692f60a7Smrg 9585692f60a7Smrg # note $name still contains .exe if it was in $file originally 9586692f60a7Smrg # as does the version of $file that was added into $rmfiles 95873f6d0e1dSmrg func_append rmfiles " $odir/$name $odir/${name}S.${objext}" 9588692f60a7Smrg if test "$fast_install" = yes && test -n "$relink_command"; then 95893f6d0e1dSmrg func_append rmfiles " $odir/lt-$name" 9590692f60a7Smrg fi 9591692f60a7Smrg if test "X$noexename" != "X$name" ; then 95923f6d0e1dSmrg func_append rmfiles " $odir/lt-${noexename}.c" 9593692f60a7Smrg fi 9594692f60a7Smrg fi 9595692f60a7Smrg fi 9596692f60a7Smrg ;; 9597692f60a7Smrg esac 9598c3c9db83Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 9599692f60a7Smrg done 9600692f60a7Smrg 9601692f60a7Smrg # Try to remove the ${objdir}s in the directories where we deleted files 9602692f60a7Smrg for dir in $rmdirs; do 9603692f60a7Smrg if test -d "$dir"; then 9604c3c9db83Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 9605692f60a7Smrg fi 9606692f60a7Smrg done 9607692f60a7Smrg 9608692f60a7Smrg exit $exit_status 9609c3c9db83Smrg} 9610692f60a7Smrg 96113f6d0e1dSmrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && 9612c3c9db83Smrg func_mode_uninstall ${1+"$@"} 961385ee4c00Smrg 96143f6d0e1dSmrgtest -z "$opt_mode" && { 9615c3c9db83Smrg help="$generic_help" 9616c3c9db83Smrg func_fatal_help "you must specify a MODE" 9617c3c9db83Smrg} 9618c3c9db83Smrg 9619c3c9db83Smrgtest -z "$exec_cmd" && \ 96203f6d0e1dSmrg func_fatal_help "invalid operation mode \`$opt_mode'" 9621692f60a7Smrg 9622692f60a7Smrgif test -n "$exec_cmd"; then 9623c3c9db83Smrg eval exec "$exec_cmd" 9624692f60a7Smrg exit $EXIT_FAILURE 9625692f60a7Smrgfi 9626692f60a7Smrg 9627c3c9db83Smrgexit $exit_status 9628692f60a7Smrg 9629692f60a7Smrg 9630692f60a7Smrg# The TAGs below are defined such that we never get into a situation 9631692f60a7Smrg# in which we disable both kinds of libraries. Given conflicting 9632692f60a7Smrg# choices, we go for a static library, that is the most portable, 9633692f60a7Smrg# since we can't tell whether shared libraries were disabled because 9634692f60a7Smrg# the user asked for that or because the platform doesn't support 9635692f60a7Smrg# them. This is particularly important on AIX, because we don't 9636692f60a7Smrg# support having both static and shared libraries enabled at the same 9637692f60a7Smrg# time on that platform, so we default to a shared-only configuration. 9638692f60a7Smrg# If a disable-shared tag is given, we'll fallback to a static-only 9639692f60a7Smrg# configuration. But we'll never go from static-only to shared-only. 9640692f60a7Smrg 9641692f60a7Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 9642c3c9db83Smrgbuild_libtool_libs=no 9643c3c9db83Smrgbuild_old_libs=yes 9644692f60a7Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 9645692f60a7Smrg 9646692f60a7Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 9647c3c9db83Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 9648692f60a7Smrg# ### END LIBTOOL TAG CONFIG: disable-static 9649692f60a7Smrg 9650692f60a7Smrg# Local Variables: 9651692f60a7Smrg# mode:shell-script 9652692f60a7Smrg# sh-indentation:2 9653692f60a7Smrg# End: 9654c3c9db83Smrg# vi:sw=2 9655c3c9db83Smrg 9656