1*ae771770SStanislav Sedov 2*ae771770SStanislav Sedov# libtool (GNU libtool) 2.4 3*ae771770SStanislav Sedov# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 4*ae771770SStanislav Sedov 5*ae771770SStanislav Sedov# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 6*ae771770SStanislav Sedov# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. 7*ae771770SStanislav Sedov# This is free software; see the source for copying conditions. There is NO 8*ae771770SStanislav Sedov# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 9*ae771770SStanislav Sedov 10*ae771770SStanislav Sedov# GNU Libtool is free software; you can redistribute it and/or modify 11b528cefcSMark Murray# it under the terms of the GNU General Public License as published by 12b528cefcSMark Murray# the Free Software Foundation; either version 2 of the License, or 13b528cefcSMark Murray# (at your option) any later version. 14b528cefcSMark Murray# 15*ae771770SStanislav Sedov# As a special exception to the GNU General Public License, 16*ae771770SStanislav Sedov# if you distribute this file as part of a program or library that 17*ae771770SStanislav Sedov# is built using GNU Libtool, you may include this file under the 18*ae771770SStanislav Sedov# same distribution terms that you use for the rest of that program. 19*ae771770SStanislav Sedov# 20*ae771770SStanislav Sedov# GNU Libtool is distributed in the hope that it will be useful, but 21b528cefcSMark Murray# WITHOUT ANY WARRANTY; without even the implied warranty of 22b528cefcSMark Murray# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 23b528cefcSMark Murray# General Public License for more details. 24b528cefcSMark Murray# 25b528cefcSMark Murray# You should have received a copy of the GNU General Public License 26*ae771770SStanislav Sedov# along with GNU Libtool; see the file COPYING. If not, a copy 27*ae771770SStanislav Sedov# can be downloaded from http://www.gnu.org/licenses/gpl.html, 28*ae771770SStanislav Sedov# or obtained by writing to the Free Software Foundation, Inc., 29*ae771770SStanislav Sedov# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 30b528cefcSMark Murray 31*ae771770SStanislav Sedov# Usage: $progname [OPTION]... [MODE-ARG]... 32*ae771770SStanislav Sedov# 33*ae771770SStanislav Sedov# Provide generalized library-building support services. 34*ae771770SStanislav Sedov# 35*ae771770SStanislav Sedov# --config show all configuration variables 36*ae771770SStanislav Sedov# --debug enable verbose shell tracing 37*ae771770SStanislav Sedov# -n, --dry-run display commands without modifying any files 38*ae771770SStanislav Sedov# --features display basic configuration information and exit 39*ae771770SStanislav Sedov# --mode=MODE use operation mode MODE 40*ae771770SStanislav Sedov# --preserve-dup-deps don't remove duplicate dependency libraries 41*ae771770SStanislav Sedov# --quiet, --silent don't print informational messages 42*ae771770SStanislav Sedov# --no-quiet, --no-silent 43*ae771770SStanislav Sedov# print informational messages (default) 44*ae771770SStanislav Sedov# --tag=TAG use configuration variables from tag TAG 45*ae771770SStanislav Sedov# -v, --verbose print more informational messages than default 46*ae771770SStanislav Sedov# --no-verbose don't print the extra informational messages 47*ae771770SStanislav Sedov# --version print version information 48*ae771770SStanislav Sedov# -h, --help, --help-all print short, long, or detailed help message 49*ae771770SStanislav Sedov# 50*ae771770SStanislav Sedov# MODE must be one of the following: 51*ae771770SStanislav Sedov# 52*ae771770SStanislav Sedov# clean remove files from the build directory 53*ae771770SStanislav Sedov# compile compile a source file into a libtool object 54*ae771770SStanislav Sedov# execute automatically set library path, then run a program 55*ae771770SStanislav Sedov# finish complete the installation of libtool libraries 56*ae771770SStanislav Sedov# install install libraries or executables 57*ae771770SStanislav Sedov# link create a library or an executable 58*ae771770SStanislav Sedov# uninstall remove libraries from an installed directory 59*ae771770SStanislav Sedov# 60*ae771770SStanislav Sedov# MODE-ARGS vary depending on the MODE. When passed as first option, 61*ae771770SStanislav Sedov# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. 62*ae771770SStanislav Sedov# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 63*ae771770SStanislav Sedov# 64*ae771770SStanislav Sedov# When reporting a bug, please describe a test case to reproduce it and 65*ae771770SStanislav Sedov# include the following information: 66*ae771770SStanislav Sedov# 67*ae771770SStanislav Sedov# host-triplet: $host 68*ae771770SStanislav Sedov# shell: $SHELL 69*ae771770SStanislav Sedov# compiler: $LTCC 70*ae771770SStanislav Sedov# compiler flags: $LTCFLAGS 71*ae771770SStanislav Sedov# linker: $LD (gnu? $with_gnu_ld) 72*ae771770SStanislav Sedov# $progname: (GNU libtool) 2.4 73*ae771770SStanislav Sedov# automake: $automake_version 74*ae771770SStanislav Sedov# autoconf: $autoconf_version 75*ae771770SStanislav Sedov# 76*ae771770SStanislav Sedov# Report bugs to <bug-libtool@gnu.org>. 77*ae771770SStanislav Sedov# GNU libtool home page: <http://www.gnu.org/software/libtool/>. 78*ae771770SStanislav Sedov# General help using GNU software: <http://www.gnu.org/gethelp/>. 79*ae771770SStanislav Sedov 80*ae771770SStanislav SedovPROGRAM=libtool 81*ae771770SStanislav SedovPACKAGE=libtool 82*ae771770SStanislav SedovVERSION=2.4 83*ae771770SStanislav SedovTIMESTAMP="" 84*ae771770SStanislav Sedovpackage_revision=1.3293 85*ae771770SStanislav Sedov 86*ae771770SStanislav Sedov# Be Bourne compatible 87*ae771770SStanislav Sedovif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 88*ae771770SStanislav Sedov emulate sh 89*ae771770SStanislav Sedov NULLCMD=: 90*ae771770SStanislav Sedov # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 91*ae771770SStanislav Sedov # is contrary to our usage. Disable this feature. 92*ae771770SStanislav Sedov alias -g '${1+"$@"}'='"$@"' 93*ae771770SStanislav Sedov setopt NO_GLOB_SUBST 94*ae771770SStanislav Sedovelse 95*ae771770SStanislav Sedov case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 96*ae771770SStanislav Sedovfi 97*ae771770SStanislav SedovBIN_SH=xpg4; export BIN_SH # for Tru64 98*ae771770SStanislav SedovDUALCASE=1; export DUALCASE # for MKS sh 99*ae771770SStanislav Sedov 100*ae771770SStanislav Sedov# A function that is used when there is no print builtin or printf. 101*ae771770SStanislav Sedovfunc_fallback_echo () 102*ae771770SStanislav Sedov{ 103*ae771770SStanislav Sedov eval 'cat <<_LTECHO_EOF 104*ae771770SStanislav Sedov$1 105*ae771770SStanislav Sedov_LTECHO_EOF' 106*ae771770SStanislav Sedov} 107*ae771770SStanislav Sedov 108*ae771770SStanislav Sedov# NLS nuisances: We save the old values to restore during execute mode. 109*ae771770SStanislav Sedovlt_user_locale= 110*ae771770SStanislav Sedovlt_safe_locale= 111*ae771770SStanislav Sedovfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 112*ae771770SStanislav Sedovdo 113*ae771770SStanislav Sedov eval "if test \"\${$lt_var+set}\" = set; then 114*ae771770SStanislav Sedov save_$lt_var=\$$lt_var 115*ae771770SStanislav Sedov $lt_var=C 116*ae771770SStanislav Sedov export $lt_var 117*ae771770SStanislav Sedov lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 118*ae771770SStanislav Sedov lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 119*ae771770SStanislav Sedov fi" 120*ae771770SStanislav Sedovdone 121*ae771770SStanislav SedovLC_ALL=C 122*ae771770SStanislav SedovLANGUAGE=C 123*ae771770SStanislav Sedovexport LANGUAGE LC_ALL 124*ae771770SStanislav Sedov 125*ae771770SStanislav Sedov$lt_unset CDPATH 126*ae771770SStanislav Sedov 127c19800e8SDoug Rabson 128c19800e8SDoug Rabson# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 129c19800e8SDoug Rabson# is ksh but when the shell is invoked as "sh" and the current value of 130c19800e8SDoug Rabson# the _XPG environment variable is not equal to 1 (one), the special 131c19800e8SDoug Rabson# positional parameter $0, within a function call, is the name of the 132c19800e8SDoug Rabson# function. 133c19800e8SDoug Rabsonprogpath="$0" 134c19800e8SDoug Rabson 135*ae771770SStanislav Sedov 136*ae771770SStanislav Sedov 137*ae771770SStanislav Sedov: ${CP="cp -f"} 138*ae771770SStanislav Sedovtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} 139*ae771770SStanislav Sedov: ${EGREP="grep -E"} 140*ae771770SStanislav Sedov: ${FGREP="grep -F"} 141*ae771770SStanislav Sedov: ${GREP="grep"} 142*ae771770SStanislav Sedov: ${LN_S="ln -s"} 143*ae771770SStanislav Sedov: ${MAKE="make"} 144*ae771770SStanislav Sedov: ${MKDIR="mkdir"} 145*ae771770SStanislav Sedov: ${MV="mv -f"} 146*ae771770SStanislav Sedov: ${RM="rm -f"} 147*ae771770SStanislav Sedov: ${SED="sed"} 148*ae771770SStanislav Sedov: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 149*ae771770SStanislav Sedov: ${Xsed="$SED -e 1s/^X//"} 150c19800e8SDoug Rabson 151c19800e8SDoug Rabson# Global variables: 152c19800e8SDoug RabsonEXIT_SUCCESS=0 153c19800e8SDoug RabsonEXIT_FAILURE=1 154*ae771770SStanislav SedovEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 155*ae771770SStanislav SedovEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 156c19800e8SDoug Rabson 157*ae771770SStanislav Sedovexit_status=$EXIT_SUCCESS 158b528cefcSMark Murray 1598373020dSJacques Vidrine# Make sure IFS has a sensible default 160c19800e8SDoug Rabsonlt_nl=' 161c19800e8SDoug Rabson' 162c19800e8SDoug RabsonIFS=" $lt_nl" 1638373020dSJacques Vidrine 164*ae771770SStanislav Sedovdirname="s,/[^/]*$,," 165*ae771770SStanislav Sedovbasename="s,^.*/,," 166*ae771770SStanislav Sedov 167*ae771770SStanislav Sedov# func_dirname file append nondir_replacement 168*ae771770SStanislav Sedov# Compute the dirname of FILE. If nonempty, add APPEND to the result, 169*ae771770SStanislav Sedov# otherwise set result to NONDIR_REPLACEMENT. 170*ae771770SStanislav Sedovfunc_dirname () 171*ae771770SStanislav Sedov{ 172*ae771770SStanislav Sedov func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` 173*ae771770SStanislav Sedov if test "X$func_dirname_result" = "X${1}"; then 174*ae771770SStanislav Sedov func_dirname_result="${3}" 175*ae771770SStanislav Sedov else 176*ae771770SStanislav Sedov func_dirname_result="$func_dirname_result${2}" 177*ae771770SStanislav Sedov fi 178*ae771770SStanislav Sedov} # func_dirname may be replaced by extended shell implementation 179*ae771770SStanislav Sedov 180*ae771770SStanislav Sedov 181*ae771770SStanislav Sedov# func_basename file 182*ae771770SStanislav Sedovfunc_basename () 183*ae771770SStanislav Sedov{ 184*ae771770SStanislav Sedov func_basename_result=`$ECHO "${1}" | $SED "$basename"` 185*ae771770SStanislav Sedov} # func_basename may be replaced by extended shell implementation 186*ae771770SStanislav Sedov 187*ae771770SStanislav Sedov 188*ae771770SStanislav Sedov# func_dirname_and_basename file append nondir_replacement 189*ae771770SStanislav Sedov# perform func_basename and func_dirname in a single function 190*ae771770SStanislav Sedov# call: 191*ae771770SStanislav Sedov# dirname: Compute the dirname of FILE. If nonempty, 192*ae771770SStanislav Sedov# add APPEND to the result, otherwise set result 193*ae771770SStanislav Sedov# to NONDIR_REPLACEMENT. 194*ae771770SStanislav Sedov# value returned in "$func_dirname_result" 195*ae771770SStanislav Sedov# basename: Compute filename of FILE. 196*ae771770SStanislav Sedov# value retuned in "$func_basename_result" 197*ae771770SStanislav Sedov# Implementation must be kept synchronized with func_dirname 198*ae771770SStanislav Sedov# and func_basename. For efficiency, we do not delegate to 199*ae771770SStanislav Sedov# those functions but instead duplicate the functionality here. 200*ae771770SStanislav Sedovfunc_dirname_and_basename () 201*ae771770SStanislav Sedov{ 202*ae771770SStanislav Sedov # Extract subdirectory from the argument. 203*ae771770SStanislav Sedov func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` 204*ae771770SStanislav Sedov if test "X$func_dirname_result" = "X${1}"; then 205*ae771770SStanislav Sedov func_dirname_result="${3}" 206*ae771770SStanislav Sedov else 207*ae771770SStanislav Sedov func_dirname_result="$func_dirname_result${2}" 208*ae771770SStanislav Sedov fi 209*ae771770SStanislav Sedov func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` 210*ae771770SStanislav Sedov} # func_dirname_and_basename may be replaced by extended shell implementation 211*ae771770SStanislav Sedov 212*ae771770SStanislav Sedov 213*ae771770SStanislav Sedov# func_stripname prefix suffix name 214*ae771770SStanislav Sedov# strip PREFIX and SUFFIX off of NAME. 215*ae771770SStanislav Sedov# PREFIX and SUFFIX must not contain globbing or regex special 216*ae771770SStanislav Sedov# characters, hashes, percent signs, but SUFFIX may contain a leading 217*ae771770SStanislav Sedov# dot (in which case that matches only a dot). 218*ae771770SStanislav Sedov# func_strip_suffix prefix name 219*ae771770SStanislav Sedovfunc_stripname () 220*ae771770SStanislav Sedov{ 221*ae771770SStanislav Sedov case ${2} in 222*ae771770SStanislav Sedov .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; 223*ae771770SStanislav Sedov *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; 224*ae771770SStanislav Sedov esac 225*ae771770SStanislav Sedov} # func_stripname may be replaced by extended shell implementation 226*ae771770SStanislav Sedov 227*ae771770SStanislav Sedov 228*ae771770SStanislav Sedov# These SED scripts presuppose an absolute path with a trailing slash. 229*ae771770SStanislav Sedovpathcar='s,^/\([^/]*\).*$,\1,' 230*ae771770SStanislav Sedovpathcdr='s,^/[^/]*,,' 231*ae771770SStanislav Sedovremovedotparts=':dotsl 232*ae771770SStanislav Sedov s@/\./@/@g 233*ae771770SStanislav Sedov t dotsl 234*ae771770SStanislav Sedov s,/\.$,/,' 235*ae771770SStanislav Sedovcollapseslashes='s@/\{1,\}@/@g' 236*ae771770SStanislav Sedovfinalslash='s,/*$,/,' 237*ae771770SStanislav Sedov 238*ae771770SStanislav Sedov# func_normal_abspath PATH 239*ae771770SStanislav Sedov# Remove doubled-up and trailing slashes, "." path components, 240*ae771770SStanislav Sedov# and cancel out any ".." path components in PATH after making 241*ae771770SStanislav Sedov# it an absolute path. 242*ae771770SStanislav Sedov# value returned in "$func_normal_abspath_result" 243*ae771770SStanislav Sedovfunc_normal_abspath () 244*ae771770SStanislav Sedov{ 245*ae771770SStanislav Sedov # Start from root dir and reassemble the path. 246*ae771770SStanislav Sedov func_normal_abspath_result= 247*ae771770SStanislav Sedov func_normal_abspath_tpath=$1 248*ae771770SStanislav Sedov func_normal_abspath_altnamespace= 249*ae771770SStanislav Sedov case $func_normal_abspath_tpath in 250*ae771770SStanislav Sedov "") 251*ae771770SStanislav Sedov # Empty path, that just means $cwd. 252*ae771770SStanislav Sedov func_stripname '' '/' "`pwd`" 253*ae771770SStanislav Sedov func_normal_abspath_result=$func_stripname_result 254*ae771770SStanislav Sedov return 255*ae771770SStanislav Sedov ;; 256*ae771770SStanislav Sedov # The next three entries are used to spot a run of precisely 257*ae771770SStanislav Sedov # two leading slashes without using negated character classes; 258*ae771770SStanislav Sedov # we take advantage of case's first-match behaviour. 259*ae771770SStanislav Sedov ///*) 260*ae771770SStanislav Sedov # Unusual form of absolute path, do nothing. 261*ae771770SStanislav Sedov ;; 262*ae771770SStanislav Sedov //*) 263*ae771770SStanislav Sedov # Not necessarily an ordinary path; POSIX reserves leading '//' 264*ae771770SStanislav Sedov # and for example Cygwin uses it to access remote file shares 265*ae771770SStanislav Sedov # over CIFS/SMB, so we conserve a leading double slash if found. 266*ae771770SStanislav Sedov func_normal_abspath_altnamespace=/ 267*ae771770SStanislav Sedov ;; 268*ae771770SStanislav Sedov /*) 269*ae771770SStanislav Sedov # Absolute path, do nothing. 270*ae771770SStanislav Sedov ;; 271*ae771770SStanislav Sedov *) 272*ae771770SStanislav Sedov # Relative path, prepend $cwd. 273*ae771770SStanislav Sedov func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 274*ae771770SStanislav Sedov ;; 275*ae771770SStanislav Sedov esac 276*ae771770SStanislav Sedov # Cancel out all the simple stuff to save iterations. We also want 277*ae771770SStanislav Sedov # the path to end with a slash for ease of parsing, so make sure 278*ae771770SStanislav Sedov # there is one (and only one) here. 279*ae771770SStanislav Sedov func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 280*ae771770SStanislav Sedov -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` 281*ae771770SStanislav Sedov while :; do 282*ae771770SStanislav Sedov # Processed it all yet? 283*ae771770SStanislav Sedov if test "$func_normal_abspath_tpath" = / ; then 284*ae771770SStanislav Sedov # If we ascended to the root using ".." the result may be empty now. 285*ae771770SStanislav Sedov if test -z "$func_normal_abspath_result" ; then 286*ae771770SStanislav Sedov func_normal_abspath_result=/ 287*ae771770SStanislav Sedov fi 288*ae771770SStanislav Sedov break 289*ae771770SStanislav Sedov fi 290*ae771770SStanislav Sedov func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 291*ae771770SStanislav Sedov -e "$pathcar"` 292*ae771770SStanislav Sedov func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 293*ae771770SStanislav Sedov -e "$pathcdr"` 294*ae771770SStanislav Sedov # Figure out what to do with it 295*ae771770SStanislav Sedov case $func_normal_abspath_tcomponent in 296*ae771770SStanislav Sedov "") 297*ae771770SStanislav Sedov # Trailing empty path component, ignore it. 298*ae771770SStanislav Sedov ;; 299*ae771770SStanislav Sedov ..) 300*ae771770SStanislav Sedov # Parent dir; strip last assembled component from result. 301*ae771770SStanislav Sedov func_dirname "$func_normal_abspath_result" 302*ae771770SStanislav Sedov func_normal_abspath_result=$func_dirname_result 303*ae771770SStanislav Sedov ;; 304*ae771770SStanislav Sedov *) 305*ae771770SStanislav Sedov # Actual path component, append it. 306*ae771770SStanislav Sedov func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent 307*ae771770SStanislav Sedov ;; 308*ae771770SStanislav Sedov esac 309*ae771770SStanislav Sedov done 310*ae771770SStanislav Sedov # Restore leading double-slash if one was found on entry. 311*ae771770SStanislav Sedov func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 312*ae771770SStanislav Sedov} 313*ae771770SStanislav Sedov 314*ae771770SStanislav Sedov# func_relative_path SRCDIR DSTDIR 315*ae771770SStanislav Sedov# generates a relative path from SRCDIR to DSTDIR, with a trailing 316*ae771770SStanislav Sedov# slash if non-empty, suitable for immediately appending a filename 317*ae771770SStanislav Sedov# without needing to append a separator. 318*ae771770SStanislav Sedov# value returned in "$func_relative_path_result" 319*ae771770SStanislav Sedovfunc_relative_path () 320*ae771770SStanislav Sedov{ 321*ae771770SStanislav Sedov func_relative_path_result= 322*ae771770SStanislav Sedov func_normal_abspath "$1" 323*ae771770SStanislav Sedov func_relative_path_tlibdir=$func_normal_abspath_result 324*ae771770SStanislav Sedov func_normal_abspath "$2" 325*ae771770SStanislav Sedov func_relative_path_tbindir=$func_normal_abspath_result 326*ae771770SStanislav Sedov 327*ae771770SStanislav Sedov # Ascend the tree starting from libdir 328*ae771770SStanislav Sedov while :; do 329*ae771770SStanislav Sedov # check if we have found a prefix of bindir 330*ae771770SStanislav Sedov case $func_relative_path_tbindir in 331*ae771770SStanislav Sedov $func_relative_path_tlibdir) 332*ae771770SStanislav Sedov # found an exact match 333*ae771770SStanislav Sedov func_relative_path_tcancelled= 334*ae771770SStanislav Sedov break 335*ae771770SStanislav Sedov ;; 336*ae771770SStanislav Sedov $func_relative_path_tlibdir*) 337*ae771770SStanislav Sedov # found a matching prefix 338*ae771770SStanislav Sedov func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 339*ae771770SStanislav Sedov func_relative_path_tcancelled=$func_stripname_result 340*ae771770SStanislav Sedov if test -z "$func_relative_path_result"; then 341*ae771770SStanislav Sedov func_relative_path_result=. 342*ae771770SStanislav Sedov fi 343*ae771770SStanislav Sedov break 344*ae771770SStanislav Sedov ;; 345*ae771770SStanislav Sedov *) 346*ae771770SStanislav Sedov func_dirname $func_relative_path_tlibdir 347*ae771770SStanislav Sedov func_relative_path_tlibdir=${func_dirname_result} 348*ae771770SStanislav Sedov if test "x$func_relative_path_tlibdir" = x ; then 349*ae771770SStanislav Sedov # Have to descend all the way to the root! 350*ae771770SStanislav Sedov func_relative_path_result=../$func_relative_path_result 351*ae771770SStanislav Sedov func_relative_path_tcancelled=$func_relative_path_tbindir 352*ae771770SStanislav Sedov break 353*ae771770SStanislav Sedov fi 354*ae771770SStanislav Sedov func_relative_path_result=../$func_relative_path_result 355*ae771770SStanislav Sedov ;; 356*ae771770SStanislav Sedov esac 357*ae771770SStanislav Sedov done 358*ae771770SStanislav Sedov 359*ae771770SStanislav Sedov # Now calculate path; take care to avoid doubling-up slashes. 360*ae771770SStanislav Sedov func_stripname '' '/' "$func_relative_path_result" 361*ae771770SStanislav Sedov func_relative_path_result=$func_stripname_result 362*ae771770SStanislav Sedov func_stripname '/' '/' "$func_relative_path_tcancelled" 363*ae771770SStanislav Sedov if test "x$func_stripname_result" != x ; then 364*ae771770SStanislav Sedov func_relative_path_result=${func_relative_path_result}/${func_stripname_result} 365b528cefcSMark Murray fi 366b528cefcSMark Murray 367*ae771770SStanislav Sedov # Normalisation. If bindir is libdir, return empty string, 368*ae771770SStanislav Sedov # else relative path ending with a slash; either way, target 369*ae771770SStanislav Sedov # file name can be directly appended. 370*ae771770SStanislav Sedov if test ! -z "$func_relative_path_result"; then 371*ae771770SStanislav Sedov func_stripname './' '' "$func_relative_path_result/" 372*ae771770SStanislav Sedov func_relative_path_result=$func_stripname_result 373*ae771770SStanislav Sedov fi 374*ae771770SStanislav Sedov} 375b528cefcSMark Murray 376*ae771770SStanislav Sedov# The name of this program: 377*ae771770SStanislav Sedovfunc_dirname_and_basename "$progpath" 378*ae771770SStanislav Sedovprogname=$func_basename_result 379*ae771770SStanislav Sedov 380*ae771770SStanislav Sedov# Make sure we have an absolute path for reexecution: 381*ae771770SStanislav Sedovcase $progpath in 382*ae771770SStanislav Sedov [\\/]*|[A-Za-z]:\\*) ;; 383*ae771770SStanislav Sedov *[\\/]*) 384*ae771770SStanislav Sedov progdir=$func_dirname_result 385*ae771770SStanislav Sedov progdir=`cd "$progdir" && pwd` 386*ae771770SStanislav Sedov progpath="$progdir/$progname" 387*ae771770SStanislav Sedov ;; 388*ae771770SStanislav Sedov *) 389*ae771770SStanislav Sedov save_IFS="$IFS" 390*ae771770SStanislav Sedov IFS=: 391*ae771770SStanislav Sedov for progdir in $PATH; do 392*ae771770SStanislav Sedov IFS="$save_IFS" 393*ae771770SStanislav Sedov test -x "$progdir/$progname" && break 394*ae771770SStanislav Sedov done 395*ae771770SStanislav Sedov IFS="$save_IFS" 396*ae771770SStanislav Sedov test -n "$progdir" || progdir=`pwd` 397*ae771770SStanislav Sedov progpath="$progdir/$progname" 398*ae771770SStanislav Sedov ;; 399*ae771770SStanislav Sedovesac 400*ae771770SStanislav Sedov 401*ae771770SStanislav Sedov# Sed substitution that helps us do robust quoting. It backslashifies 402*ae771770SStanislav Sedov# metacharacters that are still active within double-quoted strings. 403*ae771770SStanislav SedovXsed="${SED}"' -e 1s/^X//' 404*ae771770SStanislav Sedovsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 405*ae771770SStanislav Sedov 406*ae771770SStanislav Sedov# Same as above, but do not quote variable references. 407*ae771770SStanislav Sedovdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 408*ae771770SStanislav Sedov 409*ae771770SStanislav Sedov# Sed substitution that turns a string into a regex matching for the 410*ae771770SStanislav Sedov# string literally. 411*ae771770SStanislav Sedovsed_make_literal_regex='s,[].[^$\\*\/],\\&,g' 412*ae771770SStanislav Sedov 413*ae771770SStanislav Sedov# Sed substitution that converts a w32 file name or path 414*ae771770SStanislav Sedov# which contains forward slashes, into one that contains 415*ae771770SStanislav Sedov# (escaped) backslashes. A very naive implementation. 416*ae771770SStanislav Sedovlt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 417*ae771770SStanislav Sedov 418*ae771770SStanislav Sedov# Re-`\' parameter expansions in output of double_quote_subst that were 419*ae771770SStanislav Sedov# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 420*ae771770SStanislav Sedov# in input to double_quote_subst, that '$' was protected from expansion. 421*ae771770SStanislav Sedov# Since each input `\' is now two `\'s, look for any number of runs of 422*ae771770SStanislav Sedov# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 423*ae771770SStanislav Sedovbs='\\' 424*ae771770SStanislav Sedovbs2='\\\\' 425*ae771770SStanislav Sedovbs4='\\\\\\\\' 426*ae771770SStanislav Sedovdollar='\$' 427*ae771770SStanislav Sedovsed_double_backslash="\ 428*ae771770SStanislav Sedov s/$bs4/&\\ 429*ae771770SStanislav Sedov/g 430*ae771770SStanislav Sedov s/^$bs2$dollar/$bs&/ 431*ae771770SStanislav Sedov s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 432*ae771770SStanislav Sedov s/\n//g" 433*ae771770SStanislav Sedov 434*ae771770SStanislav Sedov# Standard options: 435*ae771770SStanislav Sedovopt_dry_run=false 436*ae771770SStanislav Sedovopt_help=false 437*ae771770SStanislav Sedovopt_quiet=false 438*ae771770SStanislav Sedovopt_verbose=false 439*ae771770SStanislav Sedovopt_warning=: 440*ae771770SStanislav Sedov 441*ae771770SStanislav Sedov# func_echo arg... 442*ae771770SStanislav Sedov# Echo program name prefixed message, along with the current mode 443*ae771770SStanislav Sedov# name if it has been set yet. 444*ae771770SStanislav Sedovfunc_echo () 445*ae771770SStanislav Sedov{ 446*ae771770SStanislav Sedov $ECHO "$progname: ${opt_mode+$opt_mode: }$*" 447*ae771770SStanislav Sedov} 448*ae771770SStanislav Sedov 449*ae771770SStanislav Sedov# func_verbose arg... 450*ae771770SStanislav Sedov# Echo program name prefixed message in verbose mode only. 451*ae771770SStanislav Sedovfunc_verbose () 452*ae771770SStanislav Sedov{ 453*ae771770SStanislav Sedov $opt_verbose && func_echo ${1+"$@"} 454*ae771770SStanislav Sedov 455*ae771770SStanislav Sedov # A bug in bash halts the script if the last line of a function 456*ae771770SStanislav Sedov # fails when set -e is in force, so we need another command to 457*ae771770SStanislav Sedov # work around that: 458*ae771770SStanislav Sedov : 459*ae771770SStanislav Sedov} 460*ae771770SStanislav Sedov 461*ae771770SStanislav Sedov# func_echo_all arg... 462*ae771770SStanislav Sedov# Invoke $ECHO with all args, space-separated. 463*ae771770SStanislav Sedovfunc_echo_all () 464*ae771770SStanislav Sedov{ 465*ae771770SStanislav Sedov $ECHO "$*" 466*ae771770SStanislav Sedov} 467*ae771770SStanislav Sedov 468*ae771770SStanislav Sedov# func_error arg... 469*ae771770SStanislav Sedov# Echo program name prefixed message to standard error. 470*ae771770SStanislav Sedovfunc_error () 471*ae771770SStanislav Sedov{ 472*ae771770SStanislav Sedov $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 473*ae771770SStanislav Sedov} 474*ae771770SStanislav Sedov 475*ae771770SStanislav Sedov# func_warning arg... 476*ae771770SStanislav Sedov# Echo program name prefixed warning message to standard error. 477*ae771770SStanislav Sedovfunc_warning () 478*ae771770SStanislav Sedov{ 479*ae771770SStanislav Sedov $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 480*ae771770SStanislav Sedov 481*ae771770SStanislav Sedov # bash bug again: 482*ae771770SStanislav Sedov : 483*ae771770SStanislav Sedov} 484*ae771770SStanislav Sedov 485*ae771770SStanislav Sedov# func_fatal_error arg... 486*ae771770SStanislav Sedov# Echo program name prefixed message to standard error, and exit. 487*ae771770SStanislav Sedovfunc_fatal_error () 488*ae771770SStanislav Sedov{ 489*ae771770SStanislav Sedov func_error ${1+"$@"} 490*ae771770SStanislav Sedov exit $EXIT_FAILURE 491*ae771770SStanislav Sedov} 492*ae771770SStanislav Sedov 493*ae771770SStanislav Sedov# func_fatal_help arg... 494*ae771770SStanislav Sedov# Echo program name prefixed message to standard error, followed by 495*ae771770SStanislav Sedov# a help hint, and exit. 496*ae771770SStanislav Sedovfunc_fatal_help () 497*ae771770SStanislav Sedov{ 498*ae771770SStanislav Sedov func_error ${1+"$@"} 499*ae771770SStanislav Sedov func_fatal_error "$help" 500*ae771770SStanislav Sedov} 501*ae771770SStanislav Sedovhelp="Try \`$progname --help' for more information." ## default 502*ae771770SStanislav Sedov 503*ae771770SStanislav Sedov 504*ae771770SStanislav Sedov# func_grep expression filename 505*ae771770SStanislav Sedov# Check whether EXPRESSION matches any line of FILENAME, without output. 506*ae771770SStanislav Sedovfunc_grep () 507*ae771770SStanislav Sedov{ 508*ae771770SStanislav Sedov $GREP "$1" "$2" >/dev/null 2>&1 509*ae771770SStanislav Sedov} 510*ae771770SStanislav Sedov 511*ae771770SStanislav Sedov 512*ae771770SStanislav Sedov# func_mkdir_p directory-path 513*ae771770SStanislav Sedov# Make sure the entire path to DIRECTORY-PATH is available. 514*ae771770SStanislav Sedovfunc_mkdir_p () 515*ae771770SStanislav Sedov{ 516*ae771770SStanislav Sedov my_directory_path="$1" 517*ae771770SStanislav Sedov my_dir_list= 518*ae771770SStanislav Sedov 519*ae771770SStanislav Sedov if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 520*ae771770SStanislav Sedov 521*ae771770SStanislav Sedov # Protect directory names starting with `-' 522*ae771770SStanislav Sedov case $my_directory_path in 523*ae771770SStanislav Sedov -*) my_directory_path="./$my_directory_path" ;; 524*ae771770SStanislav Sedov esac 525*ae771770SStanislav Sedov 526*ae771770SStanislav Sedov # While some portion of DIR does not yet exist... 527*ae771770SStanislav Sedov while test ! -d "$my_directory_path"; do 528*ae771770SStanislav Sedov # ...make a list in topmost first order. Use a colon delimited 529*ae771770SStanislav Sedov # list incase some portion of path contains whitespace. 530*ae771770SStanislav Sedov my_dir_list="$my_directory_path:$my_dir_list" 531*ae771770SStanislav Sedov 532*ae771770SStanislav Sedov # If the last portion added has no slash in it, the list is done 533*ae771770SStanislav Sedov case $my_directory_path in */*) ;; *) break ;; esac 534*ae771770SStanislav Sedov 535*ae771770SStanislav Sedov # ...otherwise throw away the child directory and loop 536*ae771770SStanislav Sedov my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` 537*ae771770SStanislav Sedov done 538*ae771770SStanislav Sedov my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` 539*ae771770SStanislav Sedov 540*ae771770SStanislav Sedov save_mkdir_p_IFS="$IFS"; IFS=':' 541*ae771770SStanislav Sedov for my_dir in $my_dir_list; do 542*ae771770SStanislav Sedov IFS="$save_mkdir_p_IFS" 543*ae771770SStanislav Sedov # mkdir can fail with a `File exist' error if two processes 544*ae771770SStanislav Sedov # try to create one of the directories concurrently. Don't 545*ae771770SStanislav Sedov # stop in that case! 546*ae771770SStanislav Sedov $MKDIR "$my_dir" 2>/dev/null || : 547*ae771770SStanislav Sedov done 548*ae771770SStanislav Sedov IFS="$save_mkdir_p_IFS" 549*ae771770SStanislav Sedov 550*ae771770SStanislav Sedov # Bail out if we (or some other process) failed to create a directory. 551*ae771770SStanislav Sedov test -d "$my_directory_path" || \ 552*ae771770SStanislav Sedov func_fatal_error "Failed to create \`$1'" 553*ae771770SStanislav Sedov fi 554*ae771770SStanislav Sedov} 555*ae771770SStanislav Sedov 5561c43270aSJacques Vidrine 557c19800e8SDoug Rabson# func_mktempdir [string] 558c19800e8SDoug Rabson# Make a temporary directory that won't clash with other running 559c19800e8SDoug Rabson# libtool processes, and avoids race conditions if possible. If 560c19800e8SDoug Rabson# given, STRING is the basename for that directory. 561c19800e8SDoug Rabsonfunc_mktempdir () 562c19800e8SDoug Rabson{ 563c19800e8SDoug Rabson my_template="${TMPDIR-/tmp}/${1-$progname}" 564c19800e8SDoug Rabson 565*ae771770SStanislav Sedov if test "$opt_dry_run" = ":"; then 566c19800e8SDoug Rabson # Return a directory name, but don't create it in dry-run mode 567c19800e8SDoug Rabson my_tmpdir="${my_template}-$$" 568c19800e8SDoug Rabson else 569c19800e8SDoug Rabson 570c19800e8SDoug Rabson # If mktemp works, use that first and foremost 571c19800e8SDoug Rabson my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 572c19800e8SDoug Rabson 573c19800e8SDoug Rabson if test ! -d "$my_tmpdir"; then 574c19800e8SDoug Rabson # Failing that, at least try and use $RANDOM to avoid a race 575c19800e8SDoug Rabson my_tmpdir="${my_template}-${RANDOM-0}$$" 576c19800e8SDoug Rabson 577c19800e8SDoug Rabson save_mktempdir_umask=`umask` 578c19800e8SDoug Rabson umask 0077 579*ae771770SStanislav Sedov $MKDIR "$my_tmpdir" 580c19800e8SDoug Rabson umask $save_mktempdir_umask 581c19800e8SDoug Rabson fi 582c19800e8SDoug Rabson 583c19800e8SDoug Rabson # If we're not in dry-run mode, bomb out on failure 584*ae771770SStanislav Sedov test -d "$my_tmpdir" || \ 585*ae771770SStanislav Sedov func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 586c19800e8SDoug Rabson fi 587c19800e8SDoug Rabson 588*ae771770SStanislav Sedov $ECHO "$my_tmpdir" 589c19800e8SDoug Rabson} 590c19800e8SDoug Rabson 591c19800e8SDoug Rabson 592*ae771770SStanislav Sedov# func_quote_for_eval arg 593*ae771770SStanislav Sedov# Aesthetically quote ARG to be evaled later. 594*ae771770SStanislav Sedov# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 595*ae771770SStanislav Sedov# is double-quoted, suitable for a subsequent eval, whereas 596*ae771770SStanislav Sedov# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 597*ae771770SStanislav Sedov# which are still active within double quotes backslashified. 598*ae771770SStanislav Sedovfunc_quote_for_eval () 599c19800e8SDoug Rabson{ 600*ae771770SStanislav Sedov case $1 in 601*ae771770SStanislav Sedov *[\\\`\"\$]*) 602*ae771770SStanislav Sedov func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; 603*ae771770SStanislav Sedov *) 604*ae771770SStanislav Sedov func_quote_for_eval_unquoted_result="$1" ;; 605c19800e8SDoug Rabson esac 606*ae771770SStanislav Sedov 607*ae771770SStanislav Sedov case $func_quote_for_eval_unquoted_result in 608*ae771770SStanislav Sedov # Double-quote args containing shell metacharacters to delay 609*ae771770SStanislav Sedov # word splitting, command substitution and and variable 610*ae771770SStanislav Sedov # expansion for a subsequent eval. 611*ae771770SStanislav Sedov # Many Bourne shells cannot handle close brackets correctly 612*ae771770SStanislav Sedov # in scan sets, so we specify it separately. 613*ae771770SStanislav Sedov *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 614*ae771770SStanislav Sedov func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 6151c43270aSJacques Vidrine ;; 616*ae771770SStanislav Sedov *) 617*ae771770SStanislav Sedov func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 6181c43270aSJacques Vidrine esac 6191c43270aSJacques Vidrine} 6201c43270aSJacques Vidrine 621c19800e8SDoug Rabson 622*ae771770SStanislav Sedov# func_quote_for_expand arg 623*ae771770SStanislav Sedov# Aesthetically quote ARG to be evaled later; same as above, 624*ae771770SStanislav Sedov# but do not quote variable references. 625*ae771770SStanislav Sedovfunc_quote_for_expand () 626*ae771770SStanislav Sedov{ 627*ae771770SStanislav Sedov case $1 in 628*ae771770SStanislav Sedov *[\\\`\"]*) 629*ae771770SStanislav Sedov my_arg=`$ECHO "$1" | $SED \ 630*ae771770SStanislav Sedov -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 631*ae771770SStanislav Sedov *) 632*ae771770SStanislav Sedov my_arg="$1" ;; 633*ae771770SStanislav Sedov esac 634*ae771770SStanislav Sedov 635*ae771770SStanislav Sedov case $my_arg in 636*ae771770SStanislav Sedov # Double-quote args containing shell metacharacters to delay 637*ae771770SStanislav Sedov # word splitting and command substitution for a subsequent eval. 638*ae771770SStanislav Sedov # Many Bourne shells cannot handle close brackets correctly 639*ae771770SStanislav Sedov # in scan sets, so we specify it separately. 640*ae771770SStanislav Sedov *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 641*ae771770SStanislav Sedov my_arg="\"$my_arg\"" 642*ae771770SStanislav Sedov ;; 643*ae771770SStanislav Sedov esac 644*ae771770SStanislav Sedov 645*ae771770SStanislav Sedov func_quote_for_expand_result="$my_arg" 646*ae771770SStanislav Sedov} 647*ae771770SStanislav Sedov 648*ae771770SStanislav Sedov 649*ae771770SStanislav Sedov# func_show_eval cmd [fail_exp] 650*ae771770SStanislav Sedov# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 651*ae771770SStanislav Sedov# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 652*ae771770SStanislav Sedov# is given, then evaluate it. 653*ae771770SStanislav Sedovfunc_show_eval () 654*ae771770SStanislav Sedov{ 655*ae771770SStanislav Sedov my_cmd="$1" 656*ae771770SStanislav Sedov my_fail_exp="${2-:}" 657*ae771770SStanislav Sedov 658*ae771770SStanislav Sedov ${opt_silent-false} || { 659*ae771770SStanislav Sedov func_quote_for_expand "$my_cmd" 660*ae771770SStanislav Sedov eval "func_echo $func_quote_for_expand_result" 661*ae771770SStanislav Sedov } 662*ae771770SStanislav Sedov 663*ae771770SStanislav Sedov if ${opt_dry_run-false}; then :; else 664*ae771770SStanislav Sedov eval "$my_cmd" 665*ae771770SStanislav Sedov my_status=$? 666*ae771770SStanislav Sedov if test "$my_status" -eq 0; then :; else 667*ae771770SStanislav Sedov eval "(exit $my_status); $my_fail_exp" 668*ae771770SStanislav Sedov fi 669*ae771770SStanislav Sedov fi 670*ae771770SStanislav Sedov} 671*ae771770SStanislav Sedov 672*ae771770SStanislav Sedov 673*ae771770SStanislav Sedov# func_show_eval_locale cmd [fail_exp] 674*ae771770SStanislav Sedov# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 675*ae771770SStanislav Sedov# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 676*ae771770SStanislav Sedov# is given, then evaluate it. Use the saved locale for evaluation. 677*ae771770SStanislav Sedovfunc_show_eval_locale () 678*ae771770SStanislav Sedov{ 679*ae771770SStanislav Sedov my_cmd="$1" 680*ae771770SStanislav Sedov my_fail_exp="${2-:}" 681*ae771770SStanislav Sedov 682*ae771770SStanislav Sedov ${opt_silent-false} || { 683*ae771770SStanislav Sedov func_quote_for_expand "$my_cmd" 684*ae771770SStanislav Sedov eval "func_echo $func_quote_for_expand_result" 685*ae771770SStanislav Sedov } 686*ae771770SStanislav Sedov 687*ae771770SStanislav Sedov if ${opt_dry_run-false}; then :; else 688*ae771770SStanislav Sedov eval "$lt_user_locale 689*ae771770SStanislav Sedov $my_cmd" 690*ae771770SStanislav Sedov my_status=$? 691*ae771770SStanislav Sedov eval "$lt_safe_locale" 692*ae771770SStanislav Sedov if test "$my_status" -eq 0; then :; else 693*ae771770SStanislav Sedov eval "(exit $my_status); $my_fail_exp" 694*ae771770SStanislav Sedov fi 695*ae771770SStanislav Sedov fi 696*ae771770SStanislav Sedov} 697*ae771770SStanislav Sedov 698*ae771770SStanislav Sedov# func_tr_sh 699*ae771770SStanislav Sedov# Turn $1 into a string suitable for a shell variable name. 700*ae771770SStanislav Sedov# Result is stored in $func_tr_sh_result. All characters 701*ae771770SStanislav Sedov# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 702*ae771770SStanislav Sedov# if $1 begins with a digit, a '_' is prepended as well. 703*ae771770SStanislav Sedovfunc_tr_sh () 704*ae771770SStanislav Sedov{ 705*ae771770SStanislav Sedov case $1 in 706*ae771770SStanislav Sedov [0-9]* | *[!a-zA-Z0-9_]*) 707*ae771770SStanislav Sedov func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` 708*ae771770SStanislav Sedov ;; 709*ae771770SStanislav Sedov * ) 710*ae771770SStanislav Sedov func_tr_sh_result=$1 711*ae771770SStanislav Sedov ;; 712*ae771770SStanislav Sedov esac 713*ae771770SStanislav Sedov} 714*ae771770SStanislav Sedov 715*ae771770SStanislav Sedov 716*ae771770SStanislav Sedov# func_version 717*ae771770SStanislav Sedov# Echo version message to standard output and exit. 718*ae771770SStanislav Sedovfunc_version () 719*ae771770SStanislav Sedov{ 720*ae771770SStanislav Sedov $opt_debug 721*ae771770SStanislav Sedov 722*ae771770SStanislav Sedov $SED -n '/(C)/!b go 723*ae771770SStanislav Sedov :more 724*ae771770SStanislav Sedov /\./!{ 725*ae771770SStanislav Sedov N 726*ae771770SStanislav Sedov s/\n# / / 727*ae771770SStanislav Sedov b more 728*ae771770SStanislav Sedov } 729*ae771770SStanislav Sedov :go 730*ae771770SStanislav Sedov /^# '$PROGRAM' (GNU /,/# warranty; / { 731*ae771770SStanislav Sedov s/^# // 732*ae771770SStanislav Sedov s/^# *$// 733*ae771770SStanislav Sedov s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 734*ae771770SStanislav Sedov p 735*ae771770SStanislav Sedov }' < "$progpath" 736*ae771770SStanislav Sedov exit $? 737*ae771770SStanislav Sedov} 738*ae771770SStanislav Sedov 739*ae771770SStanislav Sedov# func_usage 740*ae771770SStanislav Sedov# Echo short help message to standard output and exit. 741*ae771770SStanislav Sedovfunc_usage () 742*ae771770SStanislav Sedov{ 743*ae771770SStanislav Sedov $opt_debug 744*ae771770SStanislav Sedov 745*ae771770SStanislav Sedov $SED -n '/^# Usage:/,/^# *.*--help/ { 746*ae771770SStanislav Sedov s/^# // 747*ae771770SStanislav Sedov s/^# *$// 748*ae771770SStanislav Sedov s/\$progname/'$progname'/ 749*ae771770SStanislav Sedov p 750*ae771770SStanislav Sedov }' < "$progpath" 751*ae771770SStanislav Sedov echo 752*ae771770SStanislav Sedov $ECHO "run \`$progname --help | more' for full usage" 753*ae771770SStanislav Sedov exit $? 754*ae771770SStanislav Sedov} 755*ae771770SStanislav Sedov 756*ae771770SStanislav Sedov# func_help [NOEXIT] 757*ae771770SStanislav Sedov# Echo long help message to standard output and exit, 758*ae771770SStanislav Sedov# unless 'noexit' is passed as argument. 759*ae771770SStanislav Sedovfunc_help () 760*ae771770SStanislav Sedov{ 761*ae771770SStanislav Sedov $opt_debug 762*ae771770SStanislav Sedov 763*ae771770SStanislav Sedov $SED -n '/^# Usage:/,/# Report bugs to/ { 764*ae771770SStanislav Sedov :print 765*ae771770SStanislav Sedov s/^# // 766*ae771770SStanislav Sedov s/^# *$// 767*ae771770SStanislav Sedov s*\$progname*'$progname'* 768*ae771770SStanislav Sedov s*\$host*'"$host"'* 769*ae771770SStanislav Sedov s*\$SHELL*'"$SHELL"'* 770*ae771770SStanislav Sedov s*\$LTCC*'"$LTCC"'* 771*ae771770SStanislav Sedov s*\$LTCFLAGS*'"$LTCFLAGS"'* 772*ae771770SStanislav Sedov s*\$LD*'"$LD"'* 773*ae771770SStanislav Sedov s/\$with_gnu_ld/'"$with_gnu_ld"'/ 774*ae771770SStanislav Sedov s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ 775*ae771770SStanislav Sedov s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ 776*ae771770SStanislav Sedov p 777*ae771770SStanislav Sedov d 778*ae771770SStanislav Sedov } 779*ae771770SStanislav Sedov /^# .* home page:/b print 780*ae771770SStanislav Sedov /^# General help using/b print 781*ae771770SStanislav Sedov ' < "$progpath" 782*ae771770SStanislav Sedov ret=$? 783*ae771770SStanislav Sedov if test -z "$1"; then 784*ae771770SStanislav Sedov exit $ret 785*ae771770SStanislav Sedov fi 786*ae771770SStanislav Sedov} 787*ae771770SStanislav Sedov 788*ae771770SStanislav Sedov# func_missing_arg argname 789*ae771770SStanislav Sedov# Echo program name prefixed message to standard error and set global 790*ae771770SStanislav Sedov# exit_cmd. 791*ae771770SStanislav Sedovfunc_missing_arg () 792*ae771770SStanislav Sedov{ 793*ae771770SStanislav Sedov $opt_debug 794*ae771770SStanislav Sedov 795*ae771770SStanislav Sedov func_error "missing argument for $1." 796*ae771770SStanislav Sedov exit_cmd=exit 797*ae771770SStanislav Sedov} 798*ae771770SStanislav Sedov 799*ae771770SStanislav Sedov 800*ae771770SStanislav Sedov# func_split_short_opt shortopt 801*ae771770SStanislav Sedov# Set func_split_short_opt_name and func_split_short_opt_arg shell 802*ae771770SStanislav Sedov# variables after splitting SHORTOPT after the 2nd character. 803*ae771770SStanislav Sedovfunc_split_short_opt () 804*ae771770SStanislav Sedov{ 805*ae771770SStanislav Sedov my_sed_short_opt='1s/^\(..\).*$/\1/;q' 806*ae771770SStanislav Sedov my_sed_short_rest='1s/^..\(.*\)$/\1/;q' 807*ae771770SStanislav Sedov 808*ae771770SStanislav Sedov func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` 809*ae771770SStanislav Sedov func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` 810*ae771770SStanislav Sedov} # func_split_short_opt may be replaced by extended shell implementation 811*ae771770SStanislav Sedov 812*ae771770SStanislav Sedov 813*ae771770SStanislav Sedov# func_split_long_opt longopt 814*ae771770SStanislav Sedov# Set func_split_long_opt_name and func_split_long_opt_arg shell 815*ae771770SStanislav Sedov# variables after splitting LONGOPT at the `=' sign. 816*ae771770SStanislav Sedovfunc_split_long_opt () 817*ae771770SStanislav Sedov{ 818*ae771770SStanislav Sedov my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' 819*ae771770SStanislav Sedov my_sed_long_arg='1s/^--[^=]*=//' 820*ae771770SStanislav Sedov 821*ae771770SStanislav Sedov func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` 822*ae771770SStanislav Sedov func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` 823*ae771770SStanislav Sedov} # func_split_long_opt may be replaced by extended shell implementation 824*ae771770SStanislav Sedov 825*ae771770SStanislav Sedovexit_cmd=: 826*ae771770SStanislav Sedov 827*ae771770SStanislav Sedov 828*ae771770SStanislav Sedov 829*ae771770SStanislav Sedov 830*ae771770SStanislav Sedov 831*ae771770SStanislav Sedovmagic="%%%MAGIC variable%%%" 832*ae771770SStanislav Sedovmagic_exe="%%%MAGIC EXE variable%%%" 833*ae771770SStanislav Sedov 834*ae771770SStanislav Sedov# Global variables. 835*ae771770SStanislav Sedovnonopt= 836*ae771770SStanislav Sedovpreserve_args= 837*ae771770SStanislav Sedovlo2o="s/\\.lo\$/.${objext}/" 838*ae771770SStanislav Sedovo2lo="s/\\.${objext}\$/.lo/" 839*ae771770SStanislav Sedovextracted_archives= 840*ae771770SStanislav Sedovextracted_serial=0 841*ae771770SStanislav Sedov 842*ae771770SStanislav Sedov# If this variable is set in any of the actions, the command in it 843*ae771770SStanislav Sedov# will be execed at the end. This prevents here-documents from being 844*ae771770SStanislav Sedov# left over by shells. 845*ae771770SStanislav Sedovexec_cmd= 846*ae771770SStanislav Sedov 847*ae771770SStanislav Sedov# func_append var value 848*ae771770SStanislav Sedov# Append VALUE to the end of shell variable VAR. 849*ae771770SStanislav Sedovfunc_append () 850*ae771770SStanislav Sedov{ 851*ae771770SStanislav Sedov eval "${1}=\$${1}\${2}" 852*ae771770SStanislav Sedov} # func_append may be replaced by extended shell implementation 853*ae771770SStanislav Sedov 854*ae771770SStanislav Sedov# func_append_quoted var value 855*ae771770SStanislav Sedov# Quote VALUE and append to the end of shell variable VAR, separated 856*ae771770SStanislav Sedov# by a space. 857*ae771770SStanislav Sedovfunc_append_quoted () 858*ae771770SStanislav Sedov{ 859*ae771770SStanislav Sedov func_quote_for_eval "${2}" 860*ae771770SStanislav Sedov eval "${1}=\$${1}\\ \$func_quote_for_eval_result" 861*ae771770SStanislav Sedov} # func_append_quoted may be replaced by extended shell implementation 862*ae771770SStanislav Sedov 863*ae771770SStanislav Sedov 864*ae771770SStanislav Sedov# func_arith arithmetic-term... 865*ae771770SStanislav Sedovfunc_arith () 866*ae771770SStanislav Sedov{ 867*ae771770SStanislav Sedov func_arith_result=`expr "${@}"` 868*ae771770SStanislav Sedov} # func_arith may be replaced by extended shell implementation 869*ae771770SStanislav Sedov 870*ae771770SStanislav Sedov 871*ae771770SStanislav Sedov# func_len string 872*ae771770SStanislav Sedov# STRING may not start with a hyphen. 873*ae771770SStanislav Sedovfunc_len () 874*ae771770SStanislav Sedov{ 875*ae771770SStanislav Sedov func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` 876*ae771770SStanislav Sedov} # func_len may be replaced by extended shell implementation 877*ae771770SStanislav Sedov 878*ae771770SStanislav Sedov 879*ae771770SStanislav Sedov# func_lo2o object 880*ae771770SStanislav Sedovfunc_lo2o () 881*ae771770SStanislav Sedov{ 882*ae771770SStanislav Sedov func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` 883*ae771770SStanislav Sedov} # func_lo2o may be replaced by extended shell implementation 884*ae771770SStanislav Sedov 885*ae771770SStanislav Sedov 886*ae771770SStanislav Sedov# func_xform libobj-or-source 887*ae771770SStanislav Sedovfunc_xform () 888*ae771770SStanislav Sedov{ 889*ae771770SStanislav Sedov func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` 890*ae771770SStanislav Sedov} # func_xform may be replaced by extended shell implementation 891*ae771770SStanislav Sedov 892*ae771770SStanislav Sedov 893*ae771770SStanislav Sedov# func_fatal_configuration arg... 894*ae771770SStanislav Sedov# Echo program name prefixed message to standard error, followed by 895*ae771770SStanislav Sedov# a configuration failure hint, and exit. 896*ae771770SStanislav Sedovfunc_fatal_configuration () 897*ae771770SStanislav Sedov{ 898*ae771770SStanislav Sedov func_error ${1+"$@"} 899*ae771770SStanislav Sedov func_error "See the $PACKAGE documentation for more information." 900*ae771770SStanislav Sedov func_fatal_error "Fatal configuration error." 901*ae771770SStanislav Sedov} 902*ae771770SStanislav Sedov 903*ae771770SStanislav Sedov 904*ae771770SStanislav Sedov# func_config 905*ae771770SStanislav Sedov# Display the configuration for all the tags in this script. 906*ae771770SStanislav Sedovfunc_config () 907*ae771770SStanislav Sedov{ 908*ae771770SStanislav Sedov re_begincf='^# ### BEGIN LIBTOOL' 909*ae771770SStanislav Sedov re_endcf='^# ### END LIBTOOL' 910*ae771770SStanislav Sedov 911*ae771770SStanislav Sedov # Default configuration. 912*ae771770SStanislav Sedov $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 913*ae771770SStanislav Sedov 914*ae771770SStanislav Sedov # Now print the configurations for the tags. 915*ae771770SStanislav Sedov for tagname in $taglist; do 916*ae771770SStanislav Sedov $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 917*ae771770SStanislav Sedov done 918*ae771770SStanislav Sedov 919*ae771770SStanislav Sedov exit $? 920*ae771770SStanislav Sedov} 921*ae771770SStanislav Sedov 922*ae771770SStanislav Sedov# func_features 923*ae771770SStanislav Sedov# Display the features supported by this script. 924*ae771770SStanislav Sedovfunc_features () 925*ae771770SStanislav Sedov{ 926*ae771770SStanislav Sedov echo "host: $host" 927*ae771770SStanislav Sedov if test "$build_libtool_libs" = yes; then 928*ae771770SStanislav Sedov echo "enable shared libraries" 929*ae771770SStanislav Sedov else 930*ae771770SStanislav Sedov echo "disable shared libraries" 931*ae771770SStanislav Sedov fi 932*ae771770SStanislav Sedov if test "$build_old_libs" = yes; then 933*ae771770SStanislav Sedov echo "enable static libraries" 934*ae771770SStanislav Sedov else 935*ae771770SStanislav Sedov echo "disable static libraries" 936*ae771770SStanislav Sedov fi 937*ae771770SStanislav Sedov 938*ae771770SStanislav Sedov exit $? 939*ae771770SStanislav Sedov} 940*ae771770SStanislav Sedov 941*ae771770SStanislav Sedov# func_enable_tag tagname 942*ae771770SStanislav Sedov# Verify that TAGNAME is valid, and either flag an error and exit, or 943*ae771770SStanislav Sedov# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 944*ae771770SStanislav Sedov# variable here. 945*ae771770SStanislav Sedovfunc_enable_tag () 946*ae771770SStanislav Sedov{ 947*ae771770SStanislav Sedov # Global variable: 948*ae771770SStanislav Sedov tagname="$1" 949*ae771770SStanislav Sedov 950*ae771770SStanislav Sedov re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 951*ae771770SStanislav Sedov re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 952*ae771770SStanislav Sedov sed_extractcf="/$re_begincf/,/$re_endcf/p" 953*ae771770SStanislav Sedov 954*ae771770SStanislav Sedov # Validate tagname. 955*ae771770SStanislav Sedov case $tagname in 956*ae771770SStanislav Sedov *[!-_A-Za-z0-9,/]*) 957*ae771770SStanislav Sedov func_fatal_error "invalid tag name: $tagname" 958*ae771770SStanislav Sedov ;; 959*ae771770SStanislav Sedov esac 960*ae771770SStanislav Sedov 961*ae771770SStanislav Sedov # Don't test for the "default" C tag, as we know it's 962*ae771770SStanislav Sedov # there but not specially marked. 963*ae771770SStanislav Sedov case $tagname in 964*ae771770SStanislav Sedov CC) ;; 965*ae771770SStanislav Sedov *) 966*ae771770SStanislav Sedov if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 967*ae771770SStanislav Sedov taglist="$taglist $tagname" 968*ae771770SStanislav Sedov 969*ae771770SStanislav Sedov # Evaluate the configuration. Be careful to quote the path 970*ae771770SStanislav Sedov # and the sed script, to avoid splitting on whitespace, but 971*ae771770SStanislav Sedov # also don't use non-portable quotes within backquotes within 972*ae771770SStanislav Sedov # quotes we have to do it in 2 steps: 973*ae771770SStanislav Sedov extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 974*ae771770SStanislav Sedov eval "$extractedcf" 975*ae771770SStanislav Sedov else 976*ae771770SStanislav Sedov func_error "ignoring unknown tag $tagname" 977*ae771770SStanislav Sedov fi 978*ae771770SStanislav Sedov ;; 979*ae771770SStanislav Sedov esac 980*ae771770SStanislav Sedov} 981*ae771770SStanislav Sedov 982*ae771770SStanislav Sedov# func_check_version_match 983*ae771770SStanislav Sedov# Ensure that we are using m4 macros, and libtool script from the same 984*ae771770SStanislav Sedov# release of libtool. 985*ae771770SStanislav Sedovfunc_check_version_match () 986*ae771770SStanislav Sedov{ 987*ae771770SStanislav Sedov if test "$package_revision" != "$macro_revision"; then 988*ae771770SStanislav Sedov if test "$VERSION" != "$macro_version"; then 989*ae771770SStanislav Sedov if test -z "$macro_version"; then 990*ae771770SStanislav Sedov cat >&2 <<_LT_EOF 991*ae771770SStanislav Sedov$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 992*ae771770SStanislav Sedov$progname: definition of this LT_INIT comes from an older release. 993*ae771770SStanislav Sedov$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 994*ae771770SStanislav Sedov$progname: and run autoconf again. 995*ae771770SStanislav Sedov_LT_EOF 996*ae771770SStanislav Sedov else 997*ae771770SStanislav Sedov cat >&2 <<_LT_EOF 998*ae771770SStanislav Sedov$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 999*ae771770SStanislav Sedov$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 1000*ae771770SStanislav Sedov$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 1001*ae771770SStanislav Sedov$progname: and run autoconf again. 1002*ae771770SStanislav Sedov_LT_EOF 1003*ae771770SStanislav Sedov fi 1004*ae771770SStanislav Sedov else 1005*ae771770SStanislav Sedov cat >&2 <<_LT_EOF 1006*ae771770SStanislav Sedov$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 1007*ae771770SStanislav Sedov$progname: but the definition of this LT_INIT comes from revision $macro_revision. 1008*ae771770SStanislav Sedov$progname: You should recreate aclocal.m4 with macros from revision $package_revision 1009*ae771770SStanislav Sedov$progname: of $PACKAGE $VERSION and run autoconf again. 1010*ae771770SStanislav Sedov_LT_EOF 1011*ae771770SStanislav Sedov fi 1012*ae771770SStanislav Sedov 1013*ae771770SStanislav Sedov exit $EXIT_MISMATCH 1014*ae771770SStanislav Sedov fi 1015*ae771770SStanislav Sedov} 1016*ae771770SStanislav Sedov 1017*ae771770SStanislav Sedov 1018*ae771770SStanislav Sedov# Shorthand for --mode=foo, only valid as the first argument 1019*ae771770SStanislav Sedovcase $1 in 1020*ae771770SStanislav Sedovclean|clea|cle|cl) 1021*ae771770SStanislav Sedov shift; set dummy --mode clean ${1+"$@"}; shift 1022*ae771770SStanislav Sedov ;; 1023*ae771770SStanislav Sedovcompile|compil|compi|comp|com|co|c) 1024*ae771770SStanislav Sedov shift; set dummy --mode compile ${1+"$@"}; shift 1025*ae771770SStanislav Sedov ;; 1026*ae771770SStanislav Sedovexecute|execut|execu|exec|exe|ex|e) 1027*ae771770SStanislav Sedov shift; set dummy --mode execute ${1+"$@"}; shift 1028*ae771770SStanislav Sedov ;; 1029*ae771770SStanislav Sedovfinish|finis|fini|fin|fi|f) 1030*ae771770SStanislav Sedov shift; set dummy --mode finish ${1+"$@"}; shift 1031*ae771770SStanislav Sedov ;; 1032*ae771770SStanislav Sedovinstall|instal|insta|inst|ins|in|i) 1033*ae771770SStanislav Sedov shift; set dummy --mode install ${1+"$@"}; shift 1034*ae771770SStanislav Sedov ;; 1035*ae771770SStanislav Sedovlink|lin|li|l) 1036*ae771770SStanislav Sedov shift; set dummy --mode link ${1+"$@"}; shift 1037*ae771770SStanislav Sedov ;; 1038*ae771770SStanislav Sedovuninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 1039*ae771770SStanislav Sedov shift; set dummy --mode uninstall ${1+"$@"}; shift 1040*ae771770SStanislav Sedov ;; 1041*ae771770SStanislav Sedovesac 1042*ae771770SStanislav Sedov 1043*ae771770SStanislav Sedov 1044*ae771770SStanislav Sedov 1045*ae771770SStanislav Sedov# Option defaults: 1046*ae771770SStanislav Sedovopt_debug=: 1047*ae771770SStanislav Sedovopt_dry_run=false 1048*ae771770SStanislav Sedovopt_config=false 1049*ae771770SStanislav Sedovopt_preserve_dup_deps=false 1050*ae771770SStanislav Sedovopt_features=false 1051*ae771770SStanislav Sedovopt_finish=false 1052*ae771770SStanislav Sedovopt_help=false 1053*ae771770SStanislav Sedovopt_help_all=false 1054*ae771770SStanislav Sedovopt_silent=: 1055*ae771770SStanislav Sedovopt_verbose=: 1056*ae771770SStanislav Sedovopt_silent=false 1057*ae771770SStanislav Sedovopt_verbose=false 1058*ae771770SStanislav Sedov 1059*ae771770SStanislav Sedov 1060*ae771770SStanislav Sedov# Parse options once, thoroughly. This comes as soon as possible in the 1061*ae771770SStanislav Sedov# script to make things like `--version' happen as quickly as we can. 1062*ae771770SStanislav Sedov{ 1063*ae771770SStanislav Sedov # this just eases exit handling 1064*ae771770SStanislav Sedov while test $# -gt 0; do 1065*ae771770SStanislav Sedov opt="$1" 1066*ae771770SStanislav Sedov shift 1067*ae771770SStanislav Sedov case $opt in 1068*ae771770SStanislav Sedov --debug|-x) opt_debug='set -x' 1069*ae771770SStanislav Sedov func_echo "enabling shell trace mode" 1070*ae771770SStanislav Sedov $opt_debug 1071*ae771770SStanislav Sedov ;; 1072*ae771770SStanislav Sedov --dry-run|--dryrun|-n) 1073*ae771770SStanislav Sedov opt_dry_run=: 1074*ae771770SStanislav Sedov ;; 1075*ae771770SStanislav Sedov --config) 1076*ae771770SStanislav Sedov opt_config=: 1077*ae771770SStanislav Sedovfunc_config 1078*ae771770SStanislav Sedov ;; 1079*ae771770SStanislav Sedov --dlopen|-dlopen) 1080*ae771770SStanislav Sedov optarg="$1" 1081*ae771770SStanislav Sedov opt_dlopen="${opt_dlopen+$opt_dlopen 1082*ae771770SStanislav Sedov}$optarg" 1083*ae771770SStanislav Sedov shift 1084*ae771770SStanislav Sedov ;; 1085*ae771770SStanislav Sedov --preserve-dup-deps) 1086*ae771770SStanislav Sedov opt_preserve_dup_deps=: 1087*ae771770SStanislav Sedov ;; 1088*ae771770SStanislav Sedov --features) 1089*ae771770SStanislav Sedov opt_features=: 1090*ae771770SStanislav Sedovfunc_features 1091*ae771770SStanislav Sedov ;; 1092*ae771770SStanislav Sedov --finish) 1093*ae771770SStanislav Sedov opt_finish=: 1094*ae771770SStanislav Sedovset dummy --mode finish ${1+"$@"}; shift 1095*ae771770SStanislav Sedov ;; 1096*ae771770SStanislav Sedov --help) 1097*ae771770SStanislav Sedov opt_help=: 1098*ae771770SStanislav Sedov ;; 1099*ae771770SStanislav Sedov --help-all) 1100*ae771770SStanislav Sedov opt_help_all=: 1101*ae771770SStanislav Sedovopt_help=': help-all' 1102*ae771770SStanislav Sedov ;; 1103*ae771770SStanislav Sedov --mode) 1104*ae771770SStanislav Sedov test $# = 0 && func_missing_arg $opt && break 1105*ae771770SStanislav Sedov optarg="$1" 1106*ae771770SStanislav Sedov opt_mode="$optarg" 1107*ae771770SStanislav Sedovcase $optarg in 1108*ae771770SStanislav Sedov # Valid mode arguments: 1109*ae771770SStanislav Sedov clean|compile|execute|finish|install|link|relink|uninstall) ;; 1110*ae771770SStanislav Sedov 1111*ae771770SStanislav Sedov # Catch anything else as an error 1112*ae771770SStanislav Sedov *) func_error "invalid argument for $opt" 1113*ae771770SStanislav Sedov exit_cmd=exit 1114*ae771770SStanislav Sedov break 1115*ae771770SStanislav Sedov ;; 1116*ae771770SStanislav Sedovesac 1117*ae771770SStanislav Sedov shift 1118*ae771770SStanislav Sedov ;; 1119*ae771770SStanislav Sedov --no-silent|--no-quiet) 1120*ae771770SStanislav Sedov opt_silent=false 1121*ae771770SStanislav Sedovfunc_append preserve_args " $opt" 1122*ae771770SStanislav Sedov ;; 1123*ae771770SStanislav Sedov --no-verbose) 1124*ae771770SStanislav Sedov opt_verbose=false 1125*ae771770SStanislav Sedovfunc_append preserve_args " $opt" 1126*ae771770SStanislav Sedov ;; 1127*ae771770SStanislav Sedov --silent|--quiet) 1128*ae771770SStanislav Sedov opt_silent=: 1129*ae771770SStanislav Sedovfunc_append preserve_args " $opt" 1130*ae771770SStanislav Sedov opt_verbose=false 1131*ae771770SStanislav Sedov ;; 1132*ae771770SStanislav Sedov --verbose|-v) 1133*ae771770SStanislav Sedov opt_verbose=: 1134*ae771770SStanislav Sedovfunc_append preserve_args " $opt" 1135*ae771770SStanislav Sedovopt_silent=false 1136*ae771770SStanislav Sedov ;; 1137*ae771770SStanislav Sedov --tag) 1138*ae771770SStanislav Sedov test $# = 0 && func_missing_arg $opt && break 1139*ae771770SStanislav Sedov optarg="$1" 1140*ae771770SStanislav Sedov opt_tag="$optarg" 1141*ae771770SStanislav Sedovfunc_append preserve_args " $opt $optarg" 1142*ae771770SStanislav Sedovfunc_enable_tag "$optarg" 1143*ae771770SStanislav Sedov shift 1144*ae771770SStanislav Sedov ;; 1145*ae771770SStanislav Sedov 1146*ae771770SStanislav Sedov -\?|-h) func_usage ;; 1147*ae771770SStanislav Sedov --help) func_help ;; 1148*ae771770SStanislav Sedov --version) func_version ;; 1149*ae771770SStanislav Sedov 1150*ae771770SStanislav Sedov # Separate optargs to long options: 1151*ae771770SStanislav Sedov --*=*) 1152*ae771770SStanislav Sedov func_split_long_opt "$opt" 1153*ae771770SStanislav Sedov set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} 1154*ae771770SStanislav Sedov shift 1155*ae771770SStanislav Sedov ;; 1156*ae771770SStanislav Sedov 1157*ae771770SStanislav Sedov # Separate non-argument short options: 1158*ae771770SStanislav Sedov -\?*|-h*|-n*|-v*) 1159*ae771770SStanislav Sedov func_split_short_opt "$opt" 1160*ae771770SStanislav Sedov set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} 1161*ae771770SStanislav Sedov shift 1162*ae771770SStanislav Sedov ;; 1163*ae771770SStanislav Sedov 1164*ae771770SStanislav Sedov --) break ;; 1165*ae771770SStanislav Sedov -*) func_fatal_help "unrecognized option \`$opt'" ;; 1166*ae771770SStanislav Sedov *) set dummy "$opt" ${1+"$@"}; shift; break ;; 1167*ae771770SStanislav Sedov esac 1168*ae771770SStanislav Sedov done 1169*ae771770SStanislav Sedov 1170*ae771770SStanislav Sedov # Validate options: 1171*ae771770SStanislav Sedov 1172*ae771770SStanislav Sedov # save first non-option argument 1173*ae771770SStanislav Sedov if test "$#" -gt 0; then 1174*ae771770SStanislav Sedov nonopt="$opt" 1175*ae771770SStanislav Sedov shift 1176*ae771770SStanislav Sedov fi 1177*ae771770SStanislav Sedov 1178*ae771770SStanislav Sedov # preserve --debug 1179*ae771770SStanislav Sedov test "$opt_debug" = : || func_append preserve_args " --debug" 1180*ae771770SStanislav Sedov 1181*ae771770SStanislav Sedov case $host in 1182*ae771770SStanislav Sedov *cygwin* | *mingw* | *pw32* | *cegcc*) 1183*ae771770SStanislav Sedov # don't eliminate duplications in $postdeps and $predeps 1184*ae771770SStanislav Sedov opt_duplicate_compiler_generated_deps=: 1185*ae771770SStanislav Sedov ;; 1186*ae771770SStanislav Sedov *) 1187*ae771770SStanislav Sedov opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 1188*ae771770SStanislav Sedov ;; 1189*ae771770SStanislav Sedov esac 1190*ae771770SStanislav Sedov 1191*ae771770SStanislav Sedov $opt_help || { 1192*ae771770SStanislav Sedov # Sanity checks first: 1193*ae771770SStanislav Sedov func_check_version_match 1194*ae771770SStanislav Sedov 1195*ae771770SStanislav Sedov if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 1196*ae771770SStanislav Sedov func_fatal_configuration "not configured to build any kind of library" 1197*ae771770SStanislav Sedov fi 1198*ae771770SStanislav Sedov 1199*ae771770SStanislav Sedov # Darwin sucks 1200*ae771770SStanislav Sedov eval std_shrext=\"$shrext_cmds\" 1201*ae771770SStanislav Sedov 1202*ae771770SStanislav Sedov # Only execute mode is allowed to have -dlopen flags. 1203*ae771770SStanislav Sedov if test -n "$opt_dlopen" && test "$opt_mode" != execute; then 1204*ae771770SStanislav Sedov func_error "unrecognized option \`-dlopen'" 1205*ae771770SStanislav Sedov $ECHO "$help" 1>&2 1206*ae771770SStanislav Sedov exit $EXIT_FAILURE 1207*ae771770SStanislav Sedov fi 1208*ae771770SStanislav Sedov 1209*ae771770SStanislav Sedov # Change the help message to a mode-specific one. 1210*ae771770SStanislav Sedov generic_help="$help" 1211*ae771770SStanislav Sedov help="Try \`$progname --help --mode=$opt_mode' for more information." 1212*ae771770SStanislav Sedov } 1213*ae771770SStanislav Sedov 1214*ae771770SStanislav Sedov 1215*ae771770SStanislav Sedov # Bail if the options were screwed 1216*ae771770SStanislav Sedov $exit_cmd $EXIT_FAILURE 1217*ae771770SStanislav Sedov} 1218*ae771770SStanislav Sedov 1219*ae771770SStanislav Sedov 1220*ae771770SStanislav Sedov 1221*ae771770SStanislav Sedov 1222*ae771770SStanislav Sedov## ----------- ## 1223*ae771770SStanislav Sedov## Main. ## 1224*ae771770SStanislav Sedov## ----------- ## 1225*ae771770SStanislav Sedov 1226*ae771770SStanislav Sedov# func_lalib_p file 1227*ae771770SStanislav Sedov# True iff FILE is a libtool `.la' library or `.lo' object file. 1228*ae771770SStanislav Sedov# This function is only a basic sanity check; it will hardly flush out 1229*ae771770SStanislav Sedov# determined imposters. 1230*ae771770SStanislav Sedovfunc_lalib_p () 1231*ae771770SStanislav Sedov{ 1232*ae771770SStanislav Sedov test -f "$1" && 1233*ae771770SStanislav Sedov $SED -e 4q "$1" 2>/dev/null \ 1234*ae771770SStanislav Sedov | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 1235*ae771770SStanislav Sedov} 1236*ae771770SStanislav Sedov 1237*ae771770SStanislav Sedov# func_lalib_unsafe_p file 1238*ae771770SStanislav Sedov# True iff FILE is a libtool `.la' library or `.lo' object file. 1239*ae771770SStanislav Sedov# This function implements the same check as func_lalib_p without 1240*ae771770SStanislav Sedov# resorting to external programs. To this end, it redirects stdin and 1241*ae771770SStanislav Sedov# closes it afterwards, without saving the original file descriptor. 1242*ae771770SStanislav Sedov# As a safety measure, use it only where a negative result would be 1243*ae771770SStanislav Sedov# fatal anyway. Works if `file' does not exist. 1244*ae771770SStanislav Sedovfunc_lalib_unsafe_p () 1245*ae771770SStanislav Sedov{ 1246*ae771770SStanislav Sedov lalib_p=no 1247*ae771770SStanislav Sedov if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 1248*ae771770SStanislav Sedov for lalib_p_l in 1 2 3 4 1249*ae771770SStanislav Sedov do 1250*ae771770SStanislav Sedov read lalib_p_line 1251*ae771770SStanislav Sedov case "$lalib_p_line" in 1252*ae771770SStanislav Sedov \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 1253*ae771770SStanislav Sedov esac 1254*ae771770SStanislav Sedov done 1255*ae771770SStanislav Sedov exec 0<&5 5<&- 1256*ae771770SStanislav Sedov fi 1257*ae771770SStanislav Sedov test "$lalib_p" = yes 1258*ae771770SStanislav Sedov} 1259*ae771770SStanislav Sedov 1260*ae771770SStanislav Sedov# func_ltwrapper_script_p file 1261*ae771770SStanislav Sedov# True iff FILE is a libtool wrapper script 1262*ae771770SStanislav Sedov# This function is only a basic sanity check; it will hardly flush out 1263*ae771770SStanislav Sedov# determined imposters. 1264*ae771770SStanislav Sedovfunc_ltwrapper_script_p () 1265*ae771770SStanislav Sedov{ 1266*ae771770SStanislav Sedov func_lalib_p "$1" 1267*ae771770SStanislav Sedov} 1268*ae771770SStanislav Sedov 1269*ae771770SStanislav Sedov# func_ltwrapper_executable_p file 1270*ae771770SStanislav Sedov# True iff FILE is a libtool wrapper executable 1271*ae771770SStanislav Sedov# This function is only a basic sanity check; it will hardly flush out 1272*ae771770SStanislav Sedov# determined imposters. 1273*ae771770SStanislav Sedovfunc_ltwrapper_executable_p () 1274*ae771770SStanislav Sedov{ 1275*ae771770SStanislav Sedov func_ltwrapper_exec_suffix= 1276*ae771770SStanislav Sedov case $1 in 1277*ae771770SStanislav Sedov *.exe) ;; 1278*ae771770SStanislav Sedov *) func_ltwrapper_exec_suffix=.exe ;; 1279*ae771770SStanislav Sedov esac 1280*ae771770SStanislav Sedov $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 1281*ae771770SStanislav Sedov} 1282*ae771770SStanislav Sedov 1283*ae771770SStanislav Sedov# func_ltwrapper_scriptname file 1284*ae771770SStanislav Sedov# Assumes file is an ltwrapper_executable 1285*ae771770SStanislav Sedov# uses $file to determine the appropriate filename for a 1286*ae771770SStanislav Sedov# temporary ltwrapper_script. 1287*ae771770SStanislav Sedovfunc_ltwrapper_scriptname () 1288*ae771770SStanislav Sedov{ 1289*ae771770SStanislav Sedov func_dirname_and_basename "$1" "" "." 1290*ae771770SStanislav Sedov func_stripname '' '.exe' "$func_basename_result" 1291*ae771770SStanislav Sedov func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 1292*ae771770SStanislav Sedov} 1293*ae771770SStanislav Sedov 1294*ae771770SStanislav Sedov# func_ltwrapper_p file 1295*ae771770SStanislav Sedov# True iff FILE is a libtool wrapper script or wrapper executable 1296*ae771770SStanislav Sedov# This function is only a basic sanity check; it will hardly flush out 1297*ae771770SStanislav Sedov# determined imposters. 1298*ae771770SStanislav Sedovfunc_ltwrapper_p () 1299*ae771770SStanislav Sedov{ 1300*ae771770SStanislav Sedov func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 1301*ae771770SStanislav Sedov} 1302*ae771770SStanislav Sedov 1303*ae771770SStanislav Sedov 1304*ae771770SStanislav Sedov# func_execute_cmds commands fail_cmd 1305*ae771770SStanislav Sedov# Execute tilde-delimited COMMANDS. 1306*ae771770SStanislav Sedov# If FAIL_CMD is given, eval that upon failure. 1307*ae771770SStanislav Sedov# FAIL_CMD may read-access the current command in variable CMD! 1308*ae771770SStanislav Sedovfunc_execute_cmds () 1309*ae771770SStanislav Sedov{ 1310*ae771770SStanislav Sedov $opt_debug 1311*ae771770SStanislav Sedov save_ifs=$IFS; IFS='~' 1312*ae771770SStanislav Sedov for cmd in $1; do 1313*ae771770SStanislav Sedov IFS=$save_ifs 1314*ae771770SStanislav Sedov eval cmd=\"$cmd\" 1315*ae771770SStanislav Sedov func_show_eval "$cmd" "${2-:}" 1316*ae771770SStanislav Sedov done 1317*ae771770SStanislav Sedov IFS=$save_ifs 1318*ae771770SStanislav Sedov} 1319*ae771770SStanislav Sedov 1320*ae771770SStanislav Sedov 1321*ae771770SStanislav Sedov# func_source file 1322*ae771770SStanislav Sedov# Source FILE, adding directory component if necessary. 1323*ae771770SStanislav Sedov# Note that it is not necessary on cygwin/mingw to append a dot to 1324*ae771770SStanislav Sedov# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 1325*ae771770SStanislav Sedov# behavior happens only for exec(3), not for open(2)! Also, sourcing 1326*ae771770SStanislav Sedov# `FILE.' does not work on cygwin managed mounts. 1327*ae771770SStanislav Sedovfunc_source () 1328*ae771770SStanislav Sedov{ 1329*ae771770SStanislav Sedov $opt_debug 1330*ae771770SStanislav Sedov case $1 in 1331*ae771770SStanislav Sedov */* | *\\*) . "$1" ;; 1332*ae771770SStanislav Sedov *) . "./$1" ;; 1333*ae771770SStanislav Sedov esac 1334*ae771770SStanislav Sedov} 1335*ae771770SStanislav Sedov 1336*ae771770SStanislav Sedov 1337*ae771770SStanislav Sedov# func_resolve_sysroot PATH 1338*ae771770SStanislav Sedov# Replace a leading = in PATH with a sysroot. Store the result into 1339*ae771770SStanislav Sedov# func_resolve_sysroot_result 1340*ae771770SStanislav Sedovfunc_resolve_sysroot () 1341*ae771770SStanislav Sedov{ 1342*ae771770SStanislav Sedov func_resolve_sysroot_result=$1 1343*ae771770SStanislav Sedov case $func_resolve_sysroot_result in 1344*ae771770SStanislav Sedov =*) 1345*ae771770SStanislav Sedov func_stripname '=' '' "$func_resolve_sysroot_result" 1346*ae771770SStanislav Sedov func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 1347*ae771770SStanislav Sedov ;; 1348*ae771770SStanislav Sedov esac 1349*ae771770SStanislav Sedov} 1350*ae771770SStanislav Sedov 1351*ae771770SStanislav Sedov# func_replace_sysroot PATH 1352*ae771770SStanislav Sedov# If PATH begins with the sysroot, replace it with = and 1353*ae771770SStanislav Sedov# store the result into func_replace_sysroot_result. 1354*ae771770SStanislav Sedovfunc_replace_sysroot () 1355*ae771770SStanislav Sedov{ 1356*ae771770SStanislav Sedov case "$lt_sysroot:$1" in 1357*ae771770SStanislav Sedov ?*:"$lt_sysroot"*) 1358*ae771770SStanislav Sedov func_stripname "$lt_sysroot" '' "$1" 1359*ae771770SStanislav Sedov func_replace_sysroot_result="=$func_stripname_result" 1360*ae771770SStanislav Sedov ;; 1361*ae771770SStanislav Sedov *) 1362*ae771770SStanislav Sedov # Including no sysroot. 1363*ae771770SStanislav Sedov func_replace_sysroot_result=$1 1364*ae771770SStanislav Sedov ;; 1365*ae771770SStanislav Sedov esac 1366*ae771770SStanislav Sedov} 1367*ae771770SStanislav Sedov 1368c19800e8SDoug Rabson# func_infer_tag arg 1369c19800e8SDoug Rabson# Infer tagged configuration to use if any are available and 1370c19800e8SDoug Rabson# if one wasn't chosen via the "--tag" command line option. 1371c19800e8SDoug Rabson# Only attempt this if the compiler in the base compile 1372c19800e8SDoug Rabson# command doesn't match the default compiler. 1373c19800e8SDoug Rabson# arg is usually of the form 'gcc ...' 1374c19800e8SDoug Rabsonfunc_infer_tag () 1375c19800e8SDoug Rabson{ 1376*ae771770SStanislav Sedov $opt_debug 1377c19800e8SDoug Rabson if test -n "$available_tags" && test -z "$tagname"; then 1378c19800e8SDoug Rabson CC_quoted= 1379c19800e8SDoug Rabson for arg in $CC; do 1380*ae771770SStanislav Sedov func_append_quoted CC_quoted "$arg" 1381c19800e8SDoug Rabson done 1382*ae771770SStanislav Sedov CC_expanded=`func_echo_all $CC` 1383*ae771770SStanislav Sedov CC_quoted_expanded=`func_echo_all $CC_quoted` 1384c19800e8SDoug Rabson case $@ in 1385c19800e8SDoug Rabson # Blanks in the command may have been stripped by the calling shell, 1386c19800e8SDoug Rabson # but not from the CC environment variable when configure was run. 1387*ae771770SStanislav Sedov " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 1388*ae771770SStanislav Sedov " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 1389c19800e8SDoug Rabson # Blanks at the start of $base_compile will cause this to fail 1390c19800e8SDoug Rabson # if we don't check for them as well. 1391c19800e8SDoug Rabson *) 1392c19800e8SDoug Rabson for z in $available_tags; do 1393*ae771770SStanislav Sedov if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 1394c19800e8SDoug Rabson # Evaluate the configuration. 1395c19800e8SDoug Rabson eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 1396c19800e8SDoug Rabson CC_quoted= 1397c19800e8SDoug Rabson for arg in $CC; do 1398c19800e8SDoug Rabson # Double-quote args containing other shell metacharacters. 1399*ae771770SStanislav Sedov func_append_quoted CC_quoted "$arg" 1400c19800e8SDoug Rabson done 1401*ae771770SStanislav Sedov CC_expanded=`func_echo_all $CC` 1402*ae771770SStanislav Sedov CC_quoted_expanded=`func_echo_all $CC_quoted` 1403c19800e8SDoug Rabson case "$@ " in 1404*ae771770SStanislav Sedov " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 1405*ae771770SStanislav Sedov " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 1406c19800e8SDoug Rabson # The compiler in the base compile command matches 1407c19800e8SDoug Rabson # the one in the tagged configuration. 1408c19800e8SDoug Rabson # Assume this is the tagged configuration we want. 1409c19800e8SDoug Rabson tagname=$z 1410c19800e8SDoug Rabson break 1411c19800e8SDoug Rabson ;; 1412c19800e8SDoug Rabson esac 1413c19800e8SDoug Rabson fi 1414c19800e8SDoug Rabson done 1415c19800e8SDoug Rabson # If $tagname still isn't set, then no tagged configuration 1416c19800e8SDoug Rabson # was found and let the user know that the "--tag" command 1417c19800e8SDoug Rabson # line option must be used. 1418c19800e8SDoug Rabson if test -z "$tagname"; then 1419*ae771770SStanislav Sedov func_echo "unable to infer tagged configuration" 1420*ae771770SStanislav Sedov func_fatal_error "specify a tag with \`--tag'" 1421c19800e8SDoug Rabson# else 1422*ae771770SStanislav Sedov# func_verbose "using $tagname tagged configuration" 1423c19800e8SDoug Rabson fi 1424c19800e8SDoug Rabson ;; 1425c19800e8SDoug Rabson esac 1426c19800e8SDoug Rabson fi 1427c19800e8SDoug Rabson} 1428c19800e8SDoug Rabson 1429c19800e8SDoug Rabson 1430*ae771770SStanislav Sedov 1431*ae771770SStanislav Sedov# func_write_libtool_object output_name pic_name nonpic_name 1432*ae771770SStanislav Sedov# Create a libtool object file (analogous to a ".la" file), 1433*ae771770SStanislav Sedov# but don't create it if we're doing a dry run. 1434*ae771770SStanislav Sedovfunc_write_libtool_object () 1435c19800e8SDoug Rabson{ 1436*ae771770SStanislav Sedov write_libobj=${1} 1437b528cefcSMark Murray if test "$build_libtool_libs" = yes; then 1438*ae771770SStanislav Sedov write_lobj=\'${2}\' 1439b528cefcSMark Murray else 1440*ae771770SStanislav Sedov write_lobj=none 1441b528cefcSMark Murray fi 1442*ae771770SStanislav Sedov 1443b528cefcSMark Murray if test "$build_old_libs" = yes; then 1444*ae771770SStanislav Sedov write_oldobj=\'${3}\' 1445b528cefcSMark Murray else 1446*ae771770SStanislav Sedov write_oldobj=none 1447b528cefcSMark Murray fi 1448b528cefcSMark Murray 1449*ae771770SStanislav Sedov $opt_dry_run || { 1450*ae771770SStanislav Sedov cat >${write_libobj}T <<EOF 1451*ae771770SStanislav Sedov# $write_libobj - a libtool object file 1452*ae771770SStanislav Sedov# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 1453*ae771770SStanislav Sedov# 1454*ae771770SStanislav Sedov# Please DO NOT delete this file! 1455*ae771770SStanislav Sedov# It is necessary for linking the library. 1456c19800e8SDoug Rabson 1457*ae771770SStanislav Sedov# Name of the PIC object. 1458*ae771770SStanislav Sedovpic_object=$write_lobj 14598373020dSJacques Vidrine 1460*ae771770SStanislav Sedov# Name of the non-PIC object 1461*ae771770SStanislav Sedovnon_pic_object=$write_oldobj 1462b528cefcSMark Murray 1463*ae771770SStanislav SedovEOF 1464*ae771770SStanislav Sedov $MV "${write_libobj}T" "${write_libobj}" 1465*ae771770SStanislav Sedov } 1466*ae771770SStanislav Sedov} 1467*ae771770SStanislav Sedov 1468*ae771770SStanislav Sedov 1469*ae771770SStanislav Sedov################################################## 1470*ae771770SStanislav Sedov# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 1471*ae771770SStanislav Sedov################################################## 1472*ae771770SStanislav Sedov 1473*ae771770SStanislav Sedov# func_convert_core_file_wine_to_w32 ARG 1474*ae771770SStanislav Sedov# Helper function used by file name conversion functions when $build is *nix, 1475*ae771770SStanislav Sedov# and $host is mingw, cygwin, or some other w32 environment. Relies on a 1476*ae771770SStanislav Sedov# correctly configured wine environment available, with the winepath program 1477*ae771770SStanislav Sedov# in $build's $PATH. 1478*ae771770SStanislav Sedov# 1479*ae771770SStanislav Sedov# ARG is the $build file name to be converted to w32 format. 1480*ae771770SStanislav Sedov# Result is available in $func_convert_core_file_wine_to_w32_result, and will 1481*ae771770SStanislav Sedov# be empty on error (or when ARG is empty) 1482*ae771770SStanislav Sedovfunc_convert_core_file_wine_to_w32 () 1483*ae771770SStanislav Sedov{ 1484*ae771770SStanislav Sedov $opt_debug 1485*ae771770SStanislav Sedov func_convert_core_file_wine_to_w32_result="$1" 1486*ae771770SStanislav Sedov if test -n "$1"; then 1487*ae771770SStanislav Sedov # Unfortunately, winepath does not exit with a non-zero error code, so we 1488*ae771770SStanislav Sedov # are forced to check the contents of stdout. On the other hand, if the 1489*ae771770SStanislav Sedov # command is not found, the shell will set an exit code of 127 and print 1490*ae771770SStanislav Sedov # *an error message* to stdout. So we must check for both error code of 1491*ae771770SStanislav Sedov # zero AND non-empty stdout, which explains the odd construction: 1492*ae771770SStanislav Sedov func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 1493*ae771770SStanislav Sedov if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then 1494*ae771770SStanislav Sedov func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 1495*ae771770SStanislav Sedov $SED -e "$lt_sed_naive_backslashify"` 1496*ae771770SStanislav Sedov else 1497*ae771770SStanislav Sedov func_convert_core_file_wine_to_w32_result= 1498*ae771770SStanislav Sedov fi 1499*ae771770SStanislav Sedov fi 1500*ae771770SStanislav Sedov} 1501*ae771770SStanislav Sedov# end: func_convert_core_file_wine_to_w32 1502*ae771770SStanislav Sedov 1503*ae771770SStanislav Sedov 1504*ae771770SStanislav Sedov# func_convert_core_path_wine_to_w32 ARG 1505*ae771770SStanislav Sedov# Helper function used by path conversion functions when $build is *nix, and 1506*ae771770SStanislav Sedov# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 1507*ae771770SStanislav Sedov# configured wine environment available, with the winepath program in $build's 1508*ae771770SStanislav Sedov# $PATH. Assumes ARG has no leading or trailing path separator characters. 1509*ae771770SStanislav Sedov# 1510*ae771770SStanislav Sedov# ARG is path to be converted from $build format to win32. 1511*ae771770SStanislav Sedov# Result is available in $func_convert_core_path_wine_to_w32_result. 1512*ae771770SStanislav Sedov# Unconvertible file (directory) names in ARG are skipped; if no directory names 1513*ae771770SStanislav Sedov# are convertible, then the result may be empty. 1514*ae771770SStanislav Sedovfunc_convert_core_path_wine_to_w32 () 1515*ae771770SStanislav Sedov{ 1516*ae771770SStanislav Sedov $opt_debug 1517*ae771770SStanislav Sedov # unfortunately, winepath doesn't convert paths, only file names 1518*ae771770SStanislav Sedov func_convert_core_path_wine_to_w32_result="" 1519*ae771770SStanislav Sedov if test -n "$1"; then 1520*ae771770SStanislav Sedov oldIFS=$IFS 1521*ae771770SStanislav Sedov IFS=: 1522*ae771770SStanislav Sedov for func_convert_core_path_wine_to_w32_f in $1; do 1523*ae771770SStanislav Sedov IFS=$oldIFS 1524*ae771770SStanislav Sedov func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 1525*ae771770SStanislav Sedov if test -n "$func_convert_core_file_wine_to_w32_result" ; then 1526*ae771770SStanislav Sedov if test -z "$func_convert_core_path_wine_to_w32_result"; then 1527*ae771770SStanislav Sedov func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" 1528*ae771770SStanislav Sedov else 1529*ae771770SStanislav Sedov func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 1530*ae771770SStanislav Sedov fi 1531*ae771770SStanislav Sedov fi 1532b528cefcSMark Murray done 1533*ae771770SStanislav Sedov IFS=$oldIFS 1534*ae771770SStanislav Sedov fi 1535*ae771770SStanislav Sedov} 1536*ae771770SStanislav Sedov# end: func_convert_core_path_wine_to_w32 1537*ae771770SStanislav Sedov 1538*ae771770SStanislav Sedov 1539*ae771770SStanislav Sedov# func_cygpath ARGS... 1540*ae771770SStanislav Sedov# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 1541*ae771770SStanislav Sedov# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 1542*ae771770SStanislav Sedov# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 1543*ae771770SStanislav Sedov# (2), returns the Cygwin file name or path in func_cygpath_result (input 1544*ae771770SStanislav Sedov# file name or path is assumed to be in w32 format, as previously converted 1545*ae771770SStanislav Sedov# from $build's *nix or MSYS format). In case (3), returns the w32 file name 1546*ae771770SStanislav Sedov# or path in func_cygpath_result (input file name or path is assumed to be in 1547*ae771770SStanislav Sedov# Cygwin format). Returns an empty string on error. 1548*ae771770SStanislav Sedov# 1549*ae771770SStanislav Sedov# ARGS are passed to cygpath, with the last one being the file name or path to 1550*ae771770SStanislav Sedov# be converted. 1551*ae771770SStanislav Sedov# 1552*ae771770SStanislav Sedov# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 1553*ae771770SStanislav Sedov# environment variable; do not put it in $PATH. 1554*ae771770SStanislav Sedovfunc_cygpath () 1555*ae771770SStanislav Sedov{ 1556*ae771770SStanislav Sedov $opt_debug 1557*ae771770SStanislav Sedov if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 1558*ae771770SStanislav Sedov func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 1559*ae771770SStanislav Sedov if test "$?" -ne 0; then 1560*ae771770SStanislav Sedov # on failure, ensure result is empty 1561*ae771770SStanislav Sedov func_cygpath_result= 1562*ae771770SStanislav Sedov fi 1563*ae771770SStanislav Sedov else 1564*ae771770SStanislav Sedov func_cygpath_result= 1565*ae771770SStanislav Sedov func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" 1566*ae771770SStanislav Sedov fi 1567*ae771770SStanislav Sedov} 1568*ae771770SStanislav Sedov#end: func_cygpath 1569*ae771770SStanislav Sedov 1570*ae771770SStanislav Sedov 1571*ae771770SStanislav Sedov# func_convert_core_msys_to_w32 ARG 1572*ae771770SStanislav Sedov# Convert file name or path ARG from MSYS format to w32 format. Return 1573*ae771770SStanislav Sedov# result in func_convert_core_msys_to_w32_result. 1574*ae771770SStanislav Sedovfunc_convert_core_msys_to_w32 () 1575*ae771770SStanislav Sedov{ 1576*ae771770SStanislav Sedov $opt_debug 1577*ae771770SStanislav Sedov # awkward: cmd appends spaces to result 1578*ae771770SStanislav Sedov func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 1579*ae771770SStanislav Sedov $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 1580*ae771770SStanislav Sedov} 1581*ae771770SStanislav Sedov#end: func_convert_core_msys_to_w32 1582*ae771770SStanislav Sedov 1583*ae771770SStanislav Sedov 1584*ae771770SStanislav Sedov# func_convert_file_check ARG1 ARG2 1585*ae771770SStanislav Sedov# Verify that ARG1 (a file name in $build format) was converted to $host 1586*ae771770SStanislav Sedov# format in ARG2. Otherwise, emit an error message, but continue (resetting 1587*ae771770SStanislav Sedov# func_to_host_file_result to ARG1). 1588*ae771770SStanislav Sedovfunc_convert_file_check () 1589*ae771770SStanislav Sedov{ 1590*ae771770SStanislav Sedov $opt_debug 1591*ae771770SStanislav Sedov if test -z "$2" && test -n "$1" ; then 1592*ae771770SStanislav Sedov func_error "Could not determine host file name corresponding to" 1593*ae771770SStanislav Sedov func_error " \`$1'" 1594*ae771770SStanislav Sedov func_error "Continuing, but uninstalled executables may not work." 1595*ae771770SStanislav Sedov # Fallback: 1596*ae771770SStanislav Sedov func_to_host_file_result="$1" 1597*ae771770SStanislav Sedov fi 1598*ae771770SStanislav Sedov} 1599*ae771770SStanislav Sedov# end func_convert_file_check 1600*ae771770SStanislav Sedov 1601*ae771770SStanislav Sedov 1602*ae771770SStanislav Sedov# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 1603*ae771770SStanislav Sedov# Verify that FROM_PATH (a path in $build format) was converted to $host 1604*ae771770SStanislav Sedov# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 1605*ae771770SStanislav Sedov# func_to_host_file_result to a simplistic fallback value (see below). 1606*ae771770SStanislav Sedovfunc_convert_path_check () 1607*ae771770SStanislav Sedov{ 1608*ae771770SStanislav Sedov $opt_debug 1609*ae771770SStanislav Sedov if test -z "$4" && test -n "$3"; then 1610*ae771770SStanislav Sedov func_error "Could not determine the host path corresponding to" 1611*ae771770SStanislav Sedov func_error " \`$3'" 1612*ae771770SStanislav Sedov func_error "Continuing, but uninstalled executables may not work." 1613*ae771770SStanislav Sedov # Fallback. This is a deliberately simplistic "conversion" and 1614*ae771770SStanislav Sedov # should not be "improved". See libtool.info. 1615*ae771770SStanislav Sedov if test "x$1" != "x$2"; then 1616*ae771770SStanislav Sedov lt_replace_pathsep_chars="s|$1|$2|g" 1617*ae771770SStanislav Sedov func_to_host_path_result=`echo "$3" | 1618*ae771770SStanislav Sedov $SED -e "$lt_replace_pathsep_chars"` 1619*ae771770SStanislav Sedov else 1620*ae771770SStanislav Sedov func_to_host_path_result="$3" 1621*ae771770SStanislav Sedov fi 1622*ae771770SStanislav Sedov fi 1623*ae771770SStanislav Sedov} 1624*ae771770SStanislav Sedov# end func_convert_path_check 1625*ae771770SStanislav Sedov 1626*ae771770SStanislav Sedov 1627*ae771770SStanislav Sedov# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 1628*ae771770SStanislav Sedov# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 1629*ae771770SStanislav Sedov# and appending REPL if ORIG matches BACKPAT. 1630*ae771770SStanislav Sedovfunc_convert_path_front_back_pathsep () 1631*ae771770SStanislav Sedov{ 1632*ae771770SStanislav Sedov $opt_debug 1633*ae771770SStanislav Sedov case $4 in 1634*ae771770SStanislav Sedov $1 ) func_to_host_path_result="$3$func_to_host_path_result" 1635b528cefcSMark Murray ;; 1636*ae771770SStanislav Sedov esac 1637*ae771770SStanislav Sedov case $4 in 1638*ae771770SStanislav Sedov $2 ) func_append func_to_host_path_result "$3" 1639b528cefcSMark Murray ;; 1640*ae771770SStanislav Sedov esac 1641*ae771770SStanislav Sedov} 1642*ae771770SStanislav Sedov# end func_convert_path_front_back_pathsep 1643*ae771770SStanislav Sedov 1644*ae771770SStanislav Sedov 1645*ae771770SStanislav Sedov################################################## 1646*ae771770SStanislav Sedov# $build to $host FILE NAME CONVERSION FUNCTIONS # 1647*ae771770SStanislav Sedov################################################## 1648*ae771770SStanislav Sedov# invoked via `$to_host_file_cmd ARG' 1649*ae771770SStanislav Sedov# 1650*ae771770SStanislav Sedov# In each case, ARG is the path to be converted from $build to $host format. 1651*ae771770SStanislav Sedov# Result will be available in $func_to_host_file_result. 1652*ae771770SStanislav Sedov 1653*ae771770SStanislav Sedov 1654*ae771770SStanislav Sedov# func_to_host_file ARG 1655*ae771770SStanislav Sedov# Converts the file name ARG from $build format to $host format. Return result 1656*ae771770SStanislav Sedov# in func_to_host_file_result. 1657*ae771770SStanislav Sedovfunc_to_host_file () 1658*ae771770SStanislav Sedov{ 1659*ae771770SStanislav Sedov $opt_debug 1660*ae771770SStanislav Sedov $to_host_file_cmd "$1" 1661*ae771770SStanislav Sedov} 1662*ae771770SStanislav Sedov# end func_to_host_file 1663*ae771770SStanislav Sedov 1664*ae771770SStanislav Sedov 1665*ae771770SStanislav Sedov# func_to_tool_file ARG LAZY 1666*ae771770SStanislav Sedov# converts the file name ARG from $build format to toolchain format. Return 1667*ae771770SStanislav Sedov# result in func_to_tool_file_result. If the conversion in use is listed 1668*ae771770SStanislav Sedov# in (the comma separated) LAZY, no conversion takes place. 1669*ae771770SStanislav Sedovfunc_to_tool_file () 1670*ae771770SStanislav Sedov{ 1671*ae771770SStanislav Sedov $opt_debug 1672*ae771770SStanislav Sedov case ,$2, in 1673*ae771770SStanislav Sedov *,"$to_tool_file_cmd",*) 1674*ae771770SStanislav Sedov func_to_tool_file_result=$1 1675b528cefcSMark Murray ;; 1676b528cefcSMark Murray *) 1677*ae771770SStanislav Sedov $to_tool_file_cmd "$1" 1678*ae771770SStanislav Sedov func_to_tool_file_result=$func_to_host_file_result 1679b528cefcSMark Murray ;; 1680b528cefcSMark Murray esac 1681*ae771770SStanislav Sedov} 1682*ae771770SStanislav Sedov# end func_to_tool_file 1683*ae771770SStanislav Sedov 1684*ae771770SStanislav Sedov 1685*ae771770SStanislav Sedov# func_convert_file_noop ARG 1686*ae771770SStanislav Sedov# Copy ARG to func_to_host_file_result. 1687*ae771770SStanislav Sedovfunc_convert_file_noop () 1688*ae771770SStanislav Sedov{ 1689*ae771770SStanislav Sedov func_to_host_file_result="$1" 1690*ae771770SStanislav Sedov} 1691*ae771770SStanislav Sedov# end func_convert_file_noop 1692*ae771770SStanislav Sedov 1693*ae771770SStanislav Sedov 1694*ae771770SStanislav Sedov# func_convert_file_msys_to_w32 ARG 1695*ae771770SStanislav Sedov# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 1696*ae771770SStanislav Sedov# conversion to w32 is not available inside the cwrapper. Returns result in 1697*ae771770SStanislav Sedov# func_to_host_file_result. 1698*ae771770SStanislav Sedovfunc_convert_file_msys_to_w32 () 1699*ae771770SStanislav Sedov{ 1700*ae771770SStanislav Sedov $opt_debug 1701*ae771770SStanislav Sedov func_to_host_file_result="$1" 1702*ae771770SStanislav Sedov if test -n "$1"; then 1703*ae771770SStanislav Sedov func_convert_core_msys_to_w32 "$1" 1704*ae771770SStanislav Sedov func_to_host_file_result="$func_convert_core_msys_to_w32_result" 1705b528cefcSMark Murray fi 1706*ae771770SStanislav Sedov func_convert_file_check "$1" "$func_to_host_file_result" 1707*ae771770SStanislav Sedov} 1708*ae771770SStanislav Sedov# end func_convert_file_msys_to_w32 1709b528cefcSMark Murray 1710*ae771770SStanislav Sedov 1711*ae771770SStanislav Sedov# func_convert_file_cygwin_to_w32 ARG 1712*ae771770SStanislav Sedov# Convert file name ARG from Cygwin to w32 format. Returns result in 1713*ae771770SStanislav Sedov# func_to_host_file_result. 1714*ae771770SStanislav Sedovfunc_convert_file_cygwin_to_w32 () 1715*ae771770SStanislav Sedov{ 1716*ae771770SStanislav Sedov $opt_debug 1717*ae771770SStanislav Sedov func_to_host_file_result="$1" 1718*ae771770SStanislav Sedov if test -n "$1"; then 1719*ae771770SStanislav Sedov # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 1720*ae771770SStanislav Sedov # LT_CYGPATH in this case. 1721*ae771770SStanislav Sedov func_to_host_file_result=`cygpath -m "$1"` 1722b528cefcSMark Murray fi 1723*ae771770SStanislav Sedov func_convert_file_check "$1" "$func_to_host_file_result" 1724*ae771770SStanislav Sedov} 1725*ae771770SStanislav Sedov# end func_convert_file_cygwin_to_w32 1726b528cefcSMark Murray 1727b528cefcSMark Murray 1728*ae771770SStanislav Sedov# func_convert_file_nix_to_w32 ARG 1729*ae771770SStanislav Sedov# Convert file name ARG from *nix to w32 format. Requires a wine environment 1730*ae771770SStanislav Sedov# and a working winepath. Returns result in func_to_host_file_result. 1731*ae771770SStanislav Sedovfunc_convert_file_nix_to_w32 () 1732*ae771770SStanislav Sedov{ 1733*ae771770SStanislav Sedov $opt_debug 1734*ae771770SStanislav Sedov func_to_host_file_result="$1" 1735*ae771770SStanislav Sedov if test -n "$1"; then 1736*ae771770SStanislav Sedov func_convert_core_file_wine_to_w32 "$1" 1737*ae771770SStanislav Sedov func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" 1738*ae771770SStanislav Sedov fi 1739*ae771770SStanislav Sedov func_convert_file_check "$1" "$func_to_host_file_result" 1740*ae771770SStanislav Sedov} 1741*ae771770SStanislav Sedov# end func_convert_file_nix_to_w32 1742*ae771770SStanislav Sedov 1743*ae771770SStanislav Sedov 1744*ae771770SStanislav Sedov# func_convert_file_msys_to_cygwin ARG 1745*ae771770SStanislav Sedov# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 1746*ae771770SStanislav Sedov# Returns result in func_to_host_file_result. 1747*ae771770SStanislav Sedovfunc_convert_file_msys_to_cygwin () 1748*ae771770SStanislav Sedov{ 1749*ae771770SStanislav Sedov $opt_debug 1750*ae771770SStanislav Sedov func_to_host_file_result="$1" 1751*ae771770SStanislav Sedov if test -n "$1"; then 1752*ae771770SStanislav Sedov func_convert_core_msys_to_w32 "$1" 1753*ae771770SStanislav Sedov func_cygpath -u "$func_convert_core_msys_to_w32_result" 1754*ae771770SStanislav Sedov func_to_host_file_result="$func_cygpath_result" 1755*ae771770SStanislav Sedov fi 1756*ae771770SStanislav Sedov func_convert_file_check "$1" "$func_to_host_file_result" 1757*ae771770SStanislav Sedov} 1758*ae771770SStanislav Sedov# end func_convert_file_msys_to_cygwin 1759*ae771770SStanislav Sedov 1760*ae771770SStanislav Sedov 1761*ae771770SStanislav Sedov# func_convert_file_nix_to_cygwin ARG 1762*ae771770SStanislav Sedov# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 1763*ae771770SStanislav Sedov# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 1764*ae771770SStanislav Sedov# in func_to_host_file_result. 1765*ae771770SStanislav Sedovfunc_convert_file_nix_to_cygwin () 1766*ae771770SStanislav Sedov{ 1767*ae771770SStanislav Sedov $opt_debug 1768*ae771770SStanislav Sedov func_to_host_file_result="$1" 1769*ae771770SStanislav Sedov if test -n "$1"; then 1770*ae771770SStanislav Sedov # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 1771*ae771770SStanislav Sedov func_convert_core_file_wine_to_w32 "$1" 1772*ae771770SStanislav Sedov func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 1773*ae771770SStanislav Sedov func_to_host_file_result="$func_cygpath_result" 1774*ae771770SStanislav Sedov fi 1775*ae771770SStanislav Sedov func_convert_file_check "$1" "$func_to_host_file_result" 1776*ae771770SStanislav Sedov} 1777*ae771770SStanislav Sedov# end func_convert_file_nix_to_cygwin 1778*ae771770SStanislav Sedov 1779*ae771770SStanislav Sedov 1780*ae771770SStanislav Sedov############################################# 1781*ae771770SStanislav Sedov# $build to $host PATH CONVERSION FUNCTIONS # 1782*ae771770SStanislav Sedov############################################# 1783*ae771770SStanislav Sedov# invoked via `$to_host_path_cmd ARG' 1784*ae771770SStanislav Sedov# 1785*ae771770SStanislav Sedov# In each case, ARG is the path to be converted from $build to $host format. 1786*ae771770SStanislav Sedov# The result will be available in $func_to_host_path_result. 1787*ae771770SStanislav Sedov# 1788*ae771770SStanislav Sedov# Path separators are also converted from $build format to $host format. If 1789*ae771770SStanislav Sedov# ARG begins or ends with a path separator character, it is preserved (but 1790*ae771770SStanislav Sedov# converted to $host format) on output. 1791*ae771770SStanislav Sedov# 1792*ae771770SStanislav Sedov# All path conversion functions are named using the following convention: 1793*ae771770SStanislav Sedov# file name conversion function : func_convert_file_X_to_Y () 1794*ae771770SStanislav Sedov# path conversion function : func_convert_path_X_to_Y () 1795*ae771770SStanislav Sedov# where, for any given $build/$host combination the 'X_to_Y' value is the 1796*ae771770SStanislav Sedov# same. If conversion functions are added for new $build/$host combinations, 1797*ae771770SStanislav Sedov# the two new functions must follow this pattern, or func_init_to_host_path_cmd 1798*ae771770SStanislav Sedov# will break. 1799*ae771770SStanislav Sedov 1800*ae771770SStanislav Sedov 1801*ae771770SStanislav Sedov# func_init_to_host_path_cmd 1802*ae771770SStanislav Sedov# Ensures that function "pointer" variable $to_host_path_cmd is set to the 1803*ae771770SStanislav Sedov# appropriate value, based on the value of $to_host_file_cmd. 1804*ae771770SStanislav Sedovto_host_path_cmd= 1805*ae771770SStanislav Sedovfunc_init_to_host_path_cmd () 1806*ae771770SStanislav Sedov{ 1807*ae771770SStanislav Sedov $opt_debug 1808*ae771770SStanislav Sedov if test -z "$to_host_path_cmd"; then 1809*ae771770SStanislav Sedov func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 1810*ae771770SStanislav Sedov to_host_path_cmd="func_convert_path_${func_stripname_result}" 1811*ae771770SStanislav Sedov fi 1812*ae771770SStanislav Sedov} 1813*ae771770SStanislav Sedov 1814*ae771770SStanislav Sedov 1815*ae771770SStanislav Sedov# func_to_host_path ARG 1816*ae771770SStanislav Sedov# Converts the path ARG from $build format to $host format. Return result 1817*ae771770SStanislav Sedov# in func_to_host_path_result. 1818*ae771770SStanislav Sedovfunc_to_host_path () 1819*ae771770SStanislav Sedov{ 1820*ae771770SStanislav Sedov $opt_debug 1821*ae771770SStanislav Sedov func_init_to_host_path_cmd 1822*ae771770SStanislav Sedov $to_host_path_cmd "$1" 1823*ae771770SStanislav Sedov} 1824*ae771770SStanislav Sedov# end func_to_host_path 1825*ae771770SStanislav Sedov 1826*ae771770SStanislav Sedov 1827*ae771770SStanislav Sedov# func_convert_path_noop ARG 1828*ae771770SStanislav Sedov# Copy ARG to func_to_host_path_result. 1829*ae771770SStanislav Sedovfunc_convert_path_noop () 1830*ae771770SStanislav Sedov{ 1831*ae771770SStanislav Sedov func_to_host_path_result="$1" 1832*ae771770SStanislav Sedov} 1833*ae771770SStanislav Sedov# end func_convert_path_noop 1834*ae771770SStanislav Sedov 1835*ae771770SStanislav Sedov 1836*ae771770SStanislav Sedov# func_convert_path_msys_to_w32 ARG 1837*ae771770SStanislav Sedov# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 1838*ae771770SStanislav Sedov# conversion to w32 is not available inside the cwrapper. Returns result in 1839*ae771770SStanislav Sedov# func_to_host_path_result. 1840*ae771770SStanislav Sedovfunc_convert_path_msys_to_w32 () 1841*ae771770SStanislav Sedov{ 1842*ae771770SStanislav Sedov $opt_debug 1843*ae771770SStanislav Sedov func_to_host_path_result="$1" 1844*ae771770SStanislav Sedov if test -n "$1"; then 1845*ae771770SStanislav Sedov # Remove leading and trailing path separator characters from ARG. MSYS 1846*ae771770SStanislav Sedov # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 1847*ae771770SStanislav Sedov # and winepath ignores them completely. 1848*ae771770SStanislav Sedov func_stripname : : "$1" 1849*ae771770SStanislav Sedov func_to_host_path_tmp1=$func_stripname_result 1850*ae771770SStanislav Sedov func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 1851*ae771770SStanislav Sedov func_to_host_path_result="$func_convert_core_msys_to_w32_result" 1852*ae771770SStanislav Sedov func_convert_path_check : ";" \ 1853*ae771770SStanislav Sedov "$func_to_host_path_tmp1" "$func_to_host_path_result" 1854*ae771770SStanislav Sedov func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1855*ae771770SStanislav Sedov fi 1856*ae771770SStanislav Sedov} 1857*ae771770SStanislav Sedov# end func_convert_path_msys_to_w32 1858*ae771770SStanislav Sedov 1859*ae771770SStanislav Sedov 1860*ae771770SStanislav Sedov# func_convert_path_cygwin_to_w32 ARG 1861*ae771770SStanislav Sedov# Convert path ARG from Cygwin to w32 format. Returns result in 1862*ae771770SStanislav Sedov# func_to_host_file_result. 1863*ae771770SStanislav Sedovfunc_convert_path_cygwin_to_w32 () 1864*ae771770SStanislav Sedov{ 1865*ae771770SStanislav Sedov $opt_debug 1866*ae771770SStanislav Sedov func_to_host_path_result="$1" 1867*ae771770SStanislav Sedov if test -n "$1"; then 1868*ae771770SStanislav Sedov # See func_convert_path_msys_to_w32: 1869*ae771770SStanislav Sedov func_stripname : : "$1" 1870*ae771770SStanislav Sedov func_to_host_path_tmp1=$func_stripname_result 1871*ae771770SStanislav Sedov func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 1872*ae771770SStanislav Sedov func_convert_path_check : ";" \ 1873*ae771770SStanislav Sedov "$func_to_host_path_tmp1" "$func_to_host_path_result" 1874*ae771770SStanislav Sedov func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1875*ae771770SStanislav Sedov fi 1876*ae771770SStanislav Sedov} 1877*ae771770SStanislav Sedov# end func_convert_path_cygwin_to_w32 1878*ae771770SStanislav Sedov 1879*ae771770SStanislav Sedov 1880*ae771770SStanislav Sedov# func_convert_path_nix_to_w32 ARG 1881*ae771770SStanislav Sedov# Convert path ARG from *nix to w32 format. Requires a wine environment and 1882*ae771770SStanislav Sedov# a working winepath. Returns result in func_to_host_file_result. 1883*ae771770SStanislav Sedovfunc_convert_path_nix_to_w32 () 1884*ae771770SStanislav Sedov{ 1885*ae771770SStanislav Sedov $opt_debug 1886*ae771770SStanislav Sedov func_to_host_path_result="$1" 1887*ae771770SStanislav Sedov if test -n "$1"; then 1888*ae771770SStanislav Sedov # See func_convert_path_msys_to_w32: 1889*ae771770SStanislav Sedov func_stripname : : "$1" 1890*ae771770SStanislav Sedov func_to_host_path_tmp1=$func_stripname_result 1891*ae771770SStanislav Sedov func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 1892*ae771770SStanislav Sedov func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" 1893*ae771770SStanislav Sedov func_convert_path_check : ";" \ 1894*ae771770SStanislav Sedov "$func_to_host_path_tmp1" "$func_to_host_path_result" 1895*ae771770SStanislav Sedov func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1896*ae771770SStanislav Sedov fi 1897*ae771770SStanislav Sedov} 1898*ae771770SStanislav Sedov# end func_convert_path_nix_to_w32 1899*ae771770SStanislav Sedov 1900*ae771770SStanislav Sedov 1901*ae771770SStanislav Sedov# func_convert_path_msys_to_cygwin ARG 1902*ae771770SStanislav Sedov# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 1903*ae771770SStanislav Sedov# Returns result in func_to_host_file_result. 1904*ae771770SStanislav Sedovfunc_convert_path_msys_to_cygwin () 1905*ae771770SStanislav Sedov{ 1906*ae771770SStanislav Sedov $opt_debug 1907*ae771770SStanislav Sedov func_to_host_path_result="$1" 1908*ae771770SStanislav Sedov if test -n "$1"; then 1909*ae771770SStanislav Sedov # See func_convert_path_msys_to_w32: 1910*ae771770SStanislav Sedov func_stripname : : "$1" 1911*ae771770SStanislav Sedov func_to_host_path_tmp1=$func_stripname_result 1912*ae771770SStanislav Sedov func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 1913*ae771770SStanislav Sedov func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 1914*ae771770SStanislav Sedov func_to_host_path_result="$func_cygpath_result" 1915*ae771770SStanislav Sedov func_convert_path_check : : \ 1916*ae771770SStanislav Sedov "$func_to_host_path_tmp1" "$func_to_host_path_result" 1917*ae771770SStanislav Sedov func_convert_path_front_back_pathsep ":*" "*:" : "$1" 1918*ae771770SStanislav Sedov fi 1919*ae771770SStanislav Sedov} 1920*ae771770SStanislav Sedov# end func_convert_path_msys_to_cygwin 1921*ae771770SStanislav Sedov 1922*ae771770SStanislav Sedov 1923*ae771770SStanislav Sedov# func_convert_path_nix_to_cygwin ARG 1924*ae771770SStanislav Sedov# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 1925*ae771770SStanislav Sedov# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 1926*ae771770SStanislav Sedov# func_to_host_file_result. 1927*ae771770SStanislav Sedovfunc_convert_path_nix_to_cygwin () 1928*ae771770SStanislav Sedov{ 1929*ae771770SStanislav Sedov $opt_debug 1930*ae771770SStanislav Sedov func_to_host_path_result="$1" 1931*ae771770SStanislav Sedov if test -n "$1"; then 1932*ae771770SStanislav Sedov # Remove leading and trailing path separator characters from 1933*ae771770SStanislav Sedov # ARG. msys behavior is inconsistent here, cygpath turns them 1934*ae771770SStanislav Sedov # into '.;' and ';.', and winepath ignores them completely. 1935*ae771770SStanislav Sedov func_stripname : : "$1" 1936*ae771770SStanislav Sedov func_to_host_path_tmp1=$func_stripname_result 1937*ae771770SStanislav Sedov func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 1938*ae771770SStanislav Sedov func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 1939*ae771770SStanislav Sedov func_to_host_path_result="$func_cygpath_result" 1940*ae771770SStanislav Sedov func_convert_path_check : : \ 1941*ae771770SStanislav Sedov "$func_to_host_path_tmp1" "$func_to_host_path_result" 1942*ae771770SStanislav Sedov func_convert_path_front_back_pathsep ":*" "*:" : "$1" 1943*ae771770SStanislav Sedov fi 1944*ae771770SStanislav Sedov} 1945*ae771770SStanislav Sedov# end func_convert_path_nix_to_cygwin 1946*ae771770SStanislav Sedov 1947*ae771770SStanislav Sedov 1948*ae771770SStanislav Sedov# func_mode_compile arg... 1949*ae771770SStanislav Sedovfunc_mode_compile () 1950*ae771770SStanislav Sedov{ 1951*ae771770SStanislav Sedov $opt_debug 1952b528cefcSMark Murray # Get the compilation command and the source file. 1953b528cefcSMark Murray base_compile= 19541c43270aSJacques Vidrine srcfile="$nonopt" # always keep a non-empty value in "srcfile" 19551c43270aSJacques Vidrine suppress_opt=yes 1956b528cefcSMark Murray suppress_output= 19571c43270aSJacques Vidrine arg_mode=normal 19581c43270aSJacques Vidrine libobj= 19591c43270aSJacques Vidrine later= 1960*ae771770SStanislav Sedov pie_flag= 1961b528cefcSMark Murray 1962b528cefcSMark Murray for arg 1963b528cefcSMark Murray do 1964c19800e8SDoug Rabson case $arg_mode in 19651c43270aSJacques Vidrine arg ) 19661c43270aSJacques Vidrine # do not "continue". Instead, add this to base_compile 19671c43270aSJacques Vidrine lastarg="$arg" 19681c43270aSJacques Vidrine arg_mode=normal 19695e9cd1aeSAssar Westerlund ;; 19705e9cd1aeSAssar Westerlund 19711c43270aSJacques Vidrine target ) 19721c43270aSJacques Vidrine libobj="$arg" 19731c43270aSJacques Vidrine arg_mode=normal 19745e9cd1aeSAssar Westerlund continue 19755e9cd1aeSAssar Westerlund ;; 19765e9cd1aeSAssar Westerlund 19771c43270aSJacques Vidrine normal ) 1978b528cefcSMark Murray # Accept any command-line options. 19794137ff4cSJacques Vidrine case $arg in 1980b528cefcSMark Murray -o) 1981*ae771770SStanislav Sedov test -n "$libobj" && \ 1982*ae771770SStanislav Sedov func_fatal_error "you cannot specify \`-o' more than once" 19831c43270aSJacques Vidrine arg_mode=target 1984b528cefcSMark Murray continue 1985b528cefcSMark Murray ;; 1986b528cefcSMark Murray 1987*ae771770SStanislav Sedov -pie | -fpie | -fPIE) 1988*ae771770SStanislav Sedov func_append pie_flag " $arg" 1989*ae771770SStanislav Sedov continue 1990*ae771770SStanislav Sedov ;; 1991*ae771770SStanislav Sedov 1992*ae771770SStanislav Sedov -shared | -static | -prefer-pic | -prefer-non-pic) 1993*ae771770SStanislav Sedov func_append later " $arg" 19945e9cd1aeSAssar Westerlund continue 19955e9cd1aeSAssar Westerlund ;; 19965e9cd1aeSAssar Westerlund 19971c43270aSJacques Vidrine -no-suppress) 19981c43270aSJacques Vidrine suppress_opt=no 19995e9cd1aeSAssar Westerlund continue 20005e9cd1aeSAssar Westerlund ;; 20015e9cd1aeSAssar Westerlund 20025e9cd1aeSAssar Westerlund -Xcompiler) 20031c43270aSJacques Vidrine arg_mode=arg # the next one goes into the "base_compile" arg list 20041c43270aSJacques Vidrine continue # The current "srcfile" will either be retained or 20051c43270aSJacques Vidrine ;; # replaced later. I would guess that would be a bug. 20065e9cd1aeSAssar Westerlund 20075e9cd1aeSAssar Westerlund -Wc,*) 2008*ae771770SStanislav Sedov func_stripname '-Wc,' '' "$arg" 2009*ae771770SStanislav Sedov args=$func_stripname_result 20105e9cd1aeSAssar Westerlund lastarg= 20118373020dSJacques Vidrine save_ifs="$IFS"; IFS=',' 20125e9cd1aeSAssar Westerlund for arg in $args; do 20135e9cd1aeSAssar Westerlund IFS="$save_ifs" 2014*ae771770SStanislav Sedov func_append_quoted lastarg "$arg" 20155e9cd1aeSAssar Westerlund done 20165e9cd1aeSAssar Westerlund IFS="$save_ifs" 2017*ae771770SStanislav Sedov func_stripname ' ' '' "$lastarg" 2018*ae771770SStanislav Sedov lastarg=$func_stripname_result 20195e9cd1aeSAssar Westerlund 20205e9cd1aeSAssar Westerlund # Add the arguments to base_compile. 2021*ae771770SStanislav Sedov func_append base_compile " $lastarg" 2022b528cefcSMark Murray continue 2023b528cefcSMark Murray ;; 2024b528cefcSMark Murray 20251c43270aSJacques Vidrine *) 2026b528cefcSMark Murray # Accept the current argument as the source file. 20271c43270aSJacques Vidrine # The previous "srcfile" becomes the current argument. 20281c43270aSJacques Vidrine # 2029b528cefcSMark Murray lastarg="$srcfile" 2030b528cefcSMark Murray srcfile="$arg" 20311c43270aSJacques Vidrine ;; 20321c43270aSJacques Vidrine esac # case $arg 20331c43270aSJacques Vidrine ;; 20341c43270aSJacques Vidrine esac # case $arg_mode 2035b528cefcSMark Murray 2036b528cefcSMark Murray # Aesthetically quote the previous argument. 2037*ae771770SStanislav Sedov func_append_quoted base_compile "$lastarg" 20381c43270aSJacques Vidrine done # for arg 2039b528cefcSMark Murray 20401c43270aSJacques Vidrine case $arg_mode in 20411c43270aSJacques Vidrine arg) 2042*ae771770SStanislav Sedov func_fatal_error "you must specify an argument for -Xcompile" 2043b528cefcSMark Murray ;; 20441c43270aSJacques Vidrine target) 2045*ae771770SStanislav Sedov func_fatal_error "you must specify a target with \`-o'" 2046b528cefcSMark Murray ;; 20471c43270aSJacques Vidrine *) 20481c43270aSJacques Vidrine # Get the name of the library object. 2049*ae771770SStanislav Sedov test -z "$libobj" && { 2050*ae771770SStanislav Sedov func_basename "$srcfile" 2051*ae771770SStanislav Sedov libobj="$func_basename_result" 2052*ae771770SStanislav Sedov } 20531c43270aSJacques Vidrine ;; 2054b528cefcSMark Murray esac 2055b528cefcSMark Murray 2056b528cefcSMark Murray # Recognize several different file suffixes. 2057b528cefcSMark Murray # If the user specifies -o file.o, it is replaced with file.lo 20584137ff4cSJacques Vidrine case $libobj in 2059*ae771770SStanislav Sedov *.[cCFSifmso] | \ 2060*ae771770SStanislav Sedov *.ada | *.adb | *.ads | *.asm | \ 2061*ae771770SStanislav Sedov *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 2062*ae771770SStanislav Sedov *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup) 2063*ae771770SStanislav Sedov func_xform "$libobj" 2064*ae771770SStanislav Sedov libobj=$func_xform_result 2065*ae771770SStanislav Sedov ;; 2066b528cefcSMark Murray esac 2067b528cefcSMark Murray 20684137ff4cSJacques Vidrine case $libobj in 2069*ae771770SStanislav Sedov *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 2070b528cefcSMark Murray *) 2071*ae771770SStanislav Sedov func_fatal_error "cannot determine name of library object from \`$libobj'" 2072b528cefcSMark Murray ;; 2073b528cefcSMark Murray esac 2074b528cefcSMark Murray 2075c19800e8SDoug Rabson func_infer_tag $base_compile 20761c43270aSJacques Vidrine 20771c43270aSJacques Vidrine for arg in $later; do 20781c43270aSJacques Vidrine case $arg in 2079*ae771770SStanislav Sedov -shared) 2080*ae771770SStanislav Sedov test "$build_libtool_libs" != yes && \ 2081*ae771770SStanislav Sedov func_fatal_configuration "can not build a shared library" 2082*ae771770SStanislav Sedov build_old_libs=no 2083*ae771770SStanislav Sedov continue 2084*ae771770SStanislav Sedov ;; 2085*ae771770SStanislav Sedov 20861c43270aSJacques Vidrine -static) 2087*ae771770SStanislav Sedov build_libtool_libs=no 20881c43270aSJacques Vidrine build_old_libs=yes 20891c43270aSJacques Vidrine continue 20901c43270aSJacques Vidrine ;; 20911c43270aSJacques Vidrine 20921c43270aSJacques Vidrine -prefer-pic) 20931c43270aSJacques Vidrine pic_mode=yes 20941c43270aSJacques Vidrine continue 20951c43270aSJacques Vidrine ;; 20961c43270aSJacques Vidrine 20971c43270aSJacques Vidrine -prefer-non-pic) 20981c43270aSJacques Vidrine pic_mode=no 20991c43270aSJacques Vidrine continue 21001c43270aSJacques Vidrine ;; 21011c43270aSJacques Vidrine esac 21021c43270aSJacques Vidrine done 21031c43270aSJacques Vidrine 2104*ae771770SStanislav Sedov func_quote_for_eval "$libobj" 2105*ae771770SStanislav Sedov test "X$libobj" != "X$func_quote_for_eval_result" \ 2106*ae771770SStanislav Sedov && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 2107*ae771770SStanislav Sedov && func_warning "libobj name \`$libobj' may not contain shell special characters." 2108*ae771770SStanislav Sedov func_dirname_and_basename "$obj" "/" "" 2109*ae771770SStanislav Sedov objname="$func_basename_result" 2110*ae771770SStanislav Sedov xdir="$func_dirname_result" 21111c43270aSJacques Vidrine lobj=${xdir}$objdir/$objname 21121c43270aSJacques Vidrine 2113*ae771770SStanislav Sedov test -z "$base_compile" && \ 2114*ae771770SStanislav Sedov func_fatal_help "you must specify a compilation command" 2115b528cefcSMark Murray 2116b528cefcSMark Murray # Delete any leftover library objects. 2117b528cefcSMark Murray if test "$build_old_libs" = yes; then 21181c43270aSJacques Vidrine removelist="$obj $lobj $libobj ${libobj}T" 2119b528cefcSMark Murray else 21201c43270aSJacques Vidrine removelist="$lobj $libobj ${libobj}T" 2121b528cefcSMark Murray fi 2122b528cefcSMark Murray 21235e9cd1aeSAssar Westerlund # On Cygwin there's no "real" PIC flag so we must build both object types 21244137ff4cSJacques Vidrine case $host_os in 2125*ae771770SStanislav Sedov cygwin* | mingw* | pw32* | os2* | cegcc*) 21265e9cd1aeSAssar Westerlund pic_mode=default 21275e9cd1aeSAssar Westerlund ;; 21285e9cd1aeSAssar Westerlund esac 21291c43270aSJacques Vidrine if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 21305e9cd1aeSAssar Westerlund # non-PIC code in shared libraries is not supported 21315e9cd1aeSAssar Westerlund pic_mode=default 21325e9cd1aeSAssar Westerlund fi 21335e9cd1aeSAssar Westerlund 2134b528cefcSMark Murray # Calculate the filename of the output object if compiler does 2135b528cefcSMark Murray # not support -o with -c 2136b528cefcSMark Murray if test "$compiler_c_o" = no; then 2137*ae771770SStanislav Sedov output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} 2138b528cefcSMark Murray lockfile="$output_obj.lock" 2139b528cefcSMark Murray else 21401c43270aSJacques Vidrine output_obj= 2141b528cefcSMark Murray need_locks=no 2142b528cefcSMark Murray lockfile= 2143b528cefcSMark Murray fi 2144b528cefcSMark Murray 2145b528cefcSMark Murray # Lock this critical section if it is needed 2146b528cefcSMark Murray # We use this script file to make the link, it avoids creating a new file 2147b528cefcSMark Murray if test "$need_locks" = yes; then 2148*ae771770SStanislav Sedov until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 2149*ae771770SStanislav Sedov func_echo "Waiting for $lockfile to be removed" 2150b528cefcSMark Murray sleep 2 2151b528cefcSMark Murray done 2152b528cefcSMark Murray elif test "$need_locks" = warn; then 2153b528cefcSMark Murray if test -f "$lockfile"; then 2154*ae771770SStanislav Sedov $ECHO "\ 2155b528cefcSMark Murray*** ERROR, $lockfile exists and contains: 2156b528cefcSMark Murray`cat $lockfile 2>/dev/null` 2157b528cefcSMark Murray 2158b528cefcSMark MurrayThis indicates that another process is trying to use the same 2159b528cefcSMark Murraytemporary object file, and libtool could not work around it because 2160b528cefcSMark Murrayyour compiler does not support \`-c' and \`-o' together. If you 2161b528cefcSMark Murrayrepeat this compilation, it may succeed, by chance, but you had better 2162b528cefcSMark Murrayavoid parallel builds (make -j) in this platform, or get a better 2163b528cefcSMark Murraycompiler." 2164b528cefcSMark Murray 2165*ae771770SStanislav Sedov $opt_dry_run || $RM $removelist 2166c19800e8SDoug Rabson exit $EXIT_FAILURE 2167b528cefcSMark Murray fi 2168*ae771770SStanislav Sedov func_append removelist " $output_obj" 2169*ae771770SStanislav Sedov $ECHO "$srcfile" > "$lockfile" 2170b528cefcSMark Murray fi 2171b528cefcSMark Murray 2172*ae771770SStanislav Sedov $opt_dry_run || $RM $removelist 2173*ae771770SStanislav Sedov func_append removelist " $lockfile" 2174*ae771770SStanislav Sedov trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 2175b528cefcSMark Murray 2176*ae771770SStanislav Sedov func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 2177*ae771770SStanislav Sedov srcfile=$func_to_tool_file_result 2178*ae771770SStanislav Sedov func_quote_for_eval "$srcfile" 2179*ae771770SStanislav Sedov qsrcfile=$func_quote_for_eval_result 21801c43270aSJacques Vidrine 2181b528cefcSMark Murray # Only build a PIC object if we are building libtool libraries. 2182b528cefcSMark Murray if test "$build_libtool_libs" = yes; then 2183b528cefcSMark Murray # Without this assignment, base_compile gets emptied. 2184b528cefcSMark Murray fbsd_hideous_sh_bug=$base_compile 2185b528cefcSMark Murray 21865e9cd1aeSAssar Westerlund if test "$pic_mode" != no; then 2187c19800e8SDoug Rabson command="$base_compile $qsrcfile $pic_flag" 21885e9cd1aeSAssar Westerlund else 21895e9cd1aeSAssar Westerlund # Don't build PIC code 2190c19800e8SDoug Rabson command="$base_compile $qsrcfile" 21915e9cd1aeSAssar Westerlund fi 21925e9cd1aeSAssar Westerlund 2193*ae771770SStanislav Sedov func_mkdir_p "$xdir$objdir" 21941c43270aSJacques Vidrine 21951c43270aSJacques Vidrine if test -z "$output_obj"; then 21961c43270aSJacques Vidrine # Place PIC objects in $objdir 2197*ae771770SStanislav Sedov func_append command " -o $lobj" 2198b528cefcSMark Murray fi 2199b528cefcSMark Murray 2200*ae771770SStanislav Sedov func_show_eval_locale "$command" \ 2201*ae771770SStanislav Sedov 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 2202b528cefcSMark Murray 2203b528cefcSMark Murray if test "$need_locks" = warn && 22041c43270aSJacques Vidrine test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2205*ae771770SStanislav Sedov $ECHO "\ 2206b528cefcSMark Murray*** ERROR, $lockfile contains: 2207b528cefcSMark Murray`cat $lockfile 2>/dev/null` 2208b528cefcSMark Murray 2209b528cefcSMark Murraybut it should contain: 2210b528cefcSMark Murray$srcfile 2211b528cefcSMark Murray 2212b528cefcSMark MurrayThis indicates that another process is trying to use the same 2213b528cefcSMark Murraytemporary object file, and libtool could not work around it because 2214b528cefcSMark Murrayyour compiler does not support \`-c' and \`-o' together. If you 2215b528cefcSMark Murrayrepeat this compilation, it may succeed, by chance, but you had better 2216b528cefcSMark Murrayavoid parallel builds (make -j) in this platform, or get a better 2217b528cefcSMark Murraycompiler." 2218b528cefcSMark Murray 2219*ae771770SStanislav Sedov $opt_dry_run || $RM $removelist 2220c19800e8SDoug Rabson exit $EXIT_FAILURE 2221b528cefcSMark Murray fi 2222b528cefcSMark Murray 2223b528cefcSMark Murray # Just move the object if needed, then go on to compile the next one 22241c43270aSJacques Vidrine if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 2225*ae771770SStanislav Sedov func_show_eval '$MV "$output_obj" "$lobj"' \ 2226*ae771770SStanislav Sedov 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2227b528cefcSMark Murray fi 2228b528cefcSMark Murray 2229b528cefcSMark Murray # Allow error messages only from the first compilation. 22301c43270aSJacques Vidrine if test "$suppress_opt" = yes; then 2231b528cefcSMark Murray suppress_output=' >/dev/null 2>&1' 2232b528cefcSMark Murray fi 22331c43270aSJacques Vidrine fi 2234b528cefcSMark Murray 2235b528cefcSMark Murray # Only build a position-dependent object if we build old libraries. 2236b528cefcSMark Murray if test "$build_old_libs" = yes; then 22375e9cd1aeSAssar Westerlund if test "$pic_mode" != yes; then 22385e9cd1aeSAssar Westerlund # Don't build PIC code 2239*ae771770SStanislav Sedov command="$base_compile $qsrcfile$pie_flag" 22405e9cd1aeSAssar Westerlund else 2241c19800e8SDoug Rabson command="$base_compile $qsrcfile $pic_flag" 2242b528cefcSMark Murray fi 2243b528cefcSMark Murray if test "$compiler_c_o" = yes; then 2244*ae771770SStanislav Sedov func_append command " -o $obj" 2245b528cefcSMark Murray fi 2246b528cefcSMark Murray 2247b528cefcSMark Murray # Suppress compiler output if we already did a PIC compilation. 2248*ae771770SStanislav Sedov func_append command "$suppress_output" 2249*ae771770SStanislav Sedov func_show_eval_locale "$command" \ 2250*ae771770SStanislav Sedov '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 2251b528cefcSMark Murray 2252b528cefcSMark Murray if test "$need_locks" = warn && 22531c43270aSJacques Vidrine test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2254*ae771770SStanislav Sedov $ECHO "\ 2255b528cefcSMark Murray*** ERROR, $lockfile contains: 2256b528cefcSMark Murray`cat $lockfile 2>/dev/null` 2257b528cefcSMark Murray 2258b528cefcSMark Murraybut it should contain: 2259b528cefcSMark Murray$srcfile 2260b528cefcSMark Murray 2261b528cefcSMark MurrayThis indicates that another process is trying to use the same 2262b528cefcSMark Murraytemporary object file, and libtool could not work around it because 2263b528cefcSMark Murrayyour compiler does not support \`-c' and \`-o' together. If you 2264b528cefcSMark Murrayrepeat this compilation, it may succeed, by chance, but you had better 2265b528cefcSMark Murrayavoid parallel builds (make -j) in this platform, or get a better 2266b528cefcSMark Murraycompiler." 2267b528cefcSMark Murray 2268*ae771770SStanislav Sedov $opt_dry_run || $RM $removelist 2269c19800e8SDoug Rabson exit $EXIT_FAILURE 2270b528cefcSMark Murray fi 2271b528cefcSMark Murray 2272b528cefcSMark Murray # Just move the object if needed 22731c43270aSJacques Vidrine if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 2274*ae771770SStanislav Sedov func_show_eval '$MV "$output_obj" "$obj"' \ 2275*ae771770SStanislav Sedov 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2276b528cefcSMark Murray fi 2277b528cefcSMark Murray fi 22785e9cd1aeSAssar Westerlund 2279*ae771770SStanislav Sedov $opt_dry_run || { 2280*ae771770SStanislav Sedov func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 2281b528cefcSMark Murray 2282b528cefcSMark Murray # Unlock the critical section if it was locked 2283b528cefcSMark Murray if test "$need_locks" != no; then 2284*ae771770SStanislav Sedov removelist=$lockfile 2285*ae771770SStanislav Sedov $RM "$lockfile" 2286*ae771770SStanislav Sedov fi 2287*ae771770SStanislav Sedov } 2288*ae771770SStanislav Sedov 2289*ae771770SStanislav Sedov exit $EXIT_SUCCESS 2290*ae771770SStanislav Sedov} 2291*ae771770SStanislav Sedov 2292*ae771770SStanislav Sedov$opt_help || { 2293*ae771770SStanislav Sedov test "$opt_mode" = compile && func_mode_compile ${1+"$@"} 2294*ae771770SStanislav Sedov} 2295*ae771770SStanislav Sedov 2296*ae771770SStanislav Sedovfunc_mode_help () 2297*ae771770SStanislav Sedov{ 2298*ae771770SStanislav Sedov # We need to display help for each of the modes. 2299*ae771770SStanislav Sedov case $opt_mode in 2300*ae771770SStanislav Sedov "") 2301*ae771770SStanislav Sedov # Generic help is extracted from the usage comments 2302*ae771770SStanislav Sedov # at the start of this file. 2303*ae771770SStanislav Sedov func_help 2304*ae771770SStanislav Sedov ;; 2305*ae771770SStanislav Sedov 2306*ae771770SStanislav Sedov clean) 2307*ae771770SStanislav Sedov $ECHO \ 2308*ae771770SStanislav Sedov"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 2309*ae771770SStanislav Sedov 2310*ae771770SStanislav SedovRemove files from the build directory. 2311*ae771770SStanislav Sedov 2312*ae771770SStanislav SedovRM is the name of the program to use to delete files associated with each FILE 2313*ae771770SStanislav Sedov(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2314*ae771770SStanislav Sedovto RM. 2315*ae771770SStanislav Sedov 2316*ae771770SStanislav SedovIf FILE is a libtool library, object or program, all the files associated 2317*ae771770SStanislav Sedovwith it are deleted. Otherwise, only FILE itself is deleted using RM." 2318*ae771770SStanislav Sedov ;; 2319*ae771770SStanislav Sedov 2320*ae771770SStanislav Sedov compile) 2321*ae771770SStanislav Sedov $ECHO \ 2322*ae771770SStanislav Sedov"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 2323*ae771770SStanislav Sedov 2324*ae771770SStanislav SedovCompile a source file into a libtool library object. 2325*ae771770SStanislav Sedov 2326*ae771770SStanislav SedovThis mode accepts the following additional options: 2327*ae771770SStanislav Sedov 2328*ae771770SStanislav Sedov -o OUTPUT-FILE set the output file name to OUTPUT-FILE 2329*ae771770SStanislav Sedov -no-suppress do not suppress compiler output for multiple passes 2330*ae771770SStanislav Sedov -prefer-pic try to build PIC objects only 2331*ae771770SStanislav Sedov -prefer-non-pic try to build non-PIC objects only 2332*ae771770SStanislav Sedov -shared do not build a \`.o' file suitable for static linking 2333*ae771770SStanislav Sedov -static only build a \`.o' file suitable for static linking 2334*ae771770SStanislav Sedov -Wc,FLAG pass FLAG directly to the compiler 2335*ae771770SStanislav Sedov 2336*ae771770SStanislav SedovCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 2337*ae771770SStanislav Sedovfrom the given SOURCEFILE. 2338*ae771770SStanislav Sedov 2339*ae771770SStanislav SedovThe output file name is determined by removing the directory component from 2340*ae771770SStanislav SedovSOURCEFILE, then substituting the C source code suffix \`.c' with the 2341*ae771770SStanislav Sedovlibrary object suffix, \`.lo'." 2342*ae771770SStanislav Sedov ;; 2343*ae771770SStanislav Sedov 2344*ae771770SStanislav Sedov execute) 2345*ae771770SStanislav Sedov $ECHO \ 2346*ae771770SStanislav Sedov"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 2347*ae771770SStanislav Sedov 2348*ae771770SStanislav SedovAutomatically set library path, then run a program. 2349*ae771770SStanislav Sedov 2350*ae771770SStanislav SedovThis mode accepts the following additional options: 2351*ae771770SStanislav Sedov 2352*ae771770SStanislav Sedov -dlopen FILE add the directory containing FILE to the library path 2353*ae771770SStanislav Sedov 2354*ae771770SStanislav SedovThis mode sets the library path environment variable according to \`-dlopen' 2355*ae771770SStanislav Sedovflags. 2356*ae771770SStanislav Sedov 2357*ae771770SStanislav SedovIf any of the ARGS are libtool executable wrappers, then they are translated 2358*ae771770SStanislav Sedovinto their corresponding uninstalled binary, and any of their required library 2359*ae771770SStanislav Sedovdirectories are added to the library path. 2360*ae771770SStanislav Sedov 2361*ae771770SStanislav SedovThen, COMMAND is executed, with ARGS as arguments." 2362*ae771770SStanislav Sedov ;; 2363*ae771770SStanislav Sedov 2364*ae771770SStanislav Sedov finish) 2365*ae771770SStanislav Sedov $ECHO \ 2366*ae771770SStanislav Sedov"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 2367*ae771770SStanislav Sedov 2368*ae771770SStanislav SedovComplete the installation of libtool libraries. 2369*ae771770SStanislav Sedov 2370*ae771770SStanislav SedovEach LIBDIR is a directory that contains libtool libraries. 2371*ae771770SStanislav Sedov 2372*ae771770SStanislav SedovThe commands that this mode executes may require superuser privileges. Use 2373*ae771770SStanislav Sedovthe \`--dry-run' option if you just want to see what would be executed." 2374*ae771770SStanislav Sedov ;; 2375*ae771770SStanislav Sedov 2376*ae771770SStanislav Sedov install) 2377*ae771770SStanislav Sedov $ECHO \ 2378*ae771770SStanislav Sedov"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 2379*ae771770SStanislav Sedov 2380*ae771770SStanislav SedovInstall executables or libraries. 2381*ae771770SStanislav Sedov 2382*ae771770SStanislav SedovINSTALL-COMMAND is the installation command. The first component should be 2383*ae771770SStanislav Sedoveither the \`install' or \`cp' program. 2384*ae771770SStanislav Sedov 2385*ae771770SStanislav SedovThe following components of INSTALL-COMMAND are treated specially: 2386*ae771770SStanislav Sedov 2387*ae771770SStanislav Sedov -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 2388*ae771770SStanislav Sedov 2389*ae771770SStanislav SedovThe rest of the components are interpreted as arguments to that command (only 2390*ae771770SStanislav SedovBSD-compatible install options are recognized)." 2391*ae771770SStanislav Sedov ;; 2392*ae771770SStanislav Sedov 2393*ae771770SStanislav Sedov link) 2394*ae771770SStanislav Sedov $ECHO \ 2395*ae771770SStanislav Sedov"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 2396*ae771770SStanislav Sedov 2397*ae771770SStanislav SedovLink object files or libraries together to form another library, or to 2398*ae771770SStanislav Sedovcreate an executable program. 2399*ae771770SStanislav Sedov 2400*ae771770SStanislav SedovLINK-COMMAND is a command using the C compiler that you would use to create 2401*ae771770SStanislav Sedova program from several object files. 2402*ae771770SStanislav Sedov 2403*ae771770SStanislav SedovThe following components of LINK-COMMAND are treated specially: 2404*ae771770SStanislav Sedov 2405*ae771770SStanislav Sedov -all-static do not do any dynamic linking at all 2406*ae771770SStanislav Sedov -avoid-version do not add a version suffix if possible 2407*ae771770SStanislav Sedov -bindir BINDIR specify path to binaries directory (for systems where 2408*ae771770SStanislav Sedov libraries must be found in the PATH setting at runtime) 2409*ae771770SStanislav Sedov -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 2410*ae771770SStanislav Sedov -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 2411*ae771770SStanislav Sedov -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 2412*ae771770SStanislav Sedov -export-symbols SYMFILE 2413*ae771770SStanislav Sedov try to export only the symbols listed in SYMFILE 2414*ae771770SStanislav Sedov -export-symbols-regex REGEX 2415*ae771770SStanislav Sedov try to export only the symbols matching REGEX 2416*ae771770SStanislav Sedov -LLIBDIR search LIBDIR for required installed libraries 2417*ae771770SStanislav Sedov -lNAME OUTPUT-FILE requires the installed library libNAME 2418*ae771770SStanislav Sedov -module build a library that can dlopened 2419*ae771770SStanislav Sedov -no-fast-install disable the fast-install mode 2420*ae771770SStanislav Sedov -no-install link a not-installable executable 2421*ae771770SStanislav Sedov -no-undefined declare that a library does not refer to external symbols 2422*ae771770SStanislav Sedov -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 2423*ae771770SStanislav Sedov -objectlist FILE Use a list of object files found in FILE to specify objects 2424*ae771770SStanislav Sedov -precious-files-regex REGEX 2425*ae771770SStanislav Sedov don't remove output files matching REGEX 2426*ae771770SStanislav Sedov -release RELEASE specify package release information 2427*ae771770SStanislav Sedov -rpath LIBDIR the created library will eventually be installed in LIBDIR 2428*ae771770SStanislav Sedov -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 2429*ae771770SStanislav Sedov -shared only do dynamic linking of libtool libraries 2430*ae771770SStanislav Sedov -shrext SUFFIX override the standard shared library file extension 2431*ae771770SStanislav Sedov -static do not do any dynamic linking of uninstalled libtool libraries 2432*ae771770SStanislav Sedov -static-libtool-libs 2433*ae771770SStanislav Sedov do not do any dynamic linking of libtool libraries 2434*ae771770SStanislav Sedov -version-info CURRENT[:REVISION[:AGE]] 2435*ae771770SStanislav Sedov specify library version info [each variable defaults to 0] 2436*ae771770SStanislav Sedov -weak LIBNAME declare that the target provides the LIBNAME interface 2437*ae771770SStanislav Sedov -Wc,FLAG 2438*ae771770SStanislav Sedov -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 2439*ae771770SStanislav Sedov -Wl,FLAG 2440*ae771770SStanislav Sedov -Xlinker FLAG pass linker-specific FLAG directly to the linker 2441*ae771770SStanislav Sedov -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 2442*ae771770SStanislav Sedov 2443*ae771770SStanislav SedovAll other options (arguments beginning with \`-') are ignored. 2444*ae771770SStanislav Sedov 2445*ae771770SStanislav SedovEvery other argument is treated as a filename. Files ending in \`.la' are 2446*ae771770SStanislav Sedovtreated as uninstalled libtool libraries, other files are standard or library 2447*ae771770SStanislav Sedovobject files. 2448*ae771770SStanislav Sedov 2449*ae771770SStanislav SedovIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 2450*ae771770SStanislav Sedovonly library objects (\`.lo' files) may be specified, and \`-rpath' is 2451*ae771770SStanislav Sedovrequired, except when creating a convenience library. 2452*ae771770SStanislav Sedov 2453*ae771770SStanislav SedovIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 2454*ae771770SStanislav Sedovusing \`ar' and \`ranlib', or on Windows using \`lib'. 2455*ae771770SStanislav Sedov 2456*ae771770SStanislav SedovIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 2457*ae771770SStanislav Sedovis created, otherwise an executable program is created." 2458*ae771770SStanislav Sedov ;; 2459*ae771770SStanislav Sedov 2460*ae771770SStanislav Sedov uninstall) 2461*ae771770SStanislav Sedov $ECHO \ 2462*ae771770SStanislav Sedov"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 2463*ae771770SStanislav Sedov 2464*ae771770SStanislav SedovRemove libraries from an installation directory. 2465*ae771770SStanislav Sedov 2466*ae771770SStanislav SedovRM is the name of the program to use to delete files associated with each FILE 2467*ae771770SStanislav Sedov(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2468*ae771770SStanislav Sedovto RM. 2469*ae771770SStanislav Sedov 2470*ae771770SStanislav SedovIf FILE is a libtool library, all the files associated with it are deleted. 2471*ae771770SStanislav SedovOtherwise, only FILE itself is deleted using RM." 2472*ae771770SStanislav Sedov ;; 2473*ae771770SStanislav Sedov 2474*ae771770SStanislav Sedov *) 2475*ae771770SStanislav Sedov func_fatal_help "invalid operation mode \`$opt_mode'" 2476*ae771770SStanislav Sedov ;; 2477*ae771770SStanislav Sedov esac 2478*ae771770SStanislav Sedov 2479*ae771770SStanislav Sedov echo 2480*ae771770SStanislav Sedov $ECHO "Try \`$progname --help' for more information about other modes." 2481*ae771770SStanislav Sedov} 2482*ae771770SStanislav Sedov 2483*ae771770SStanislav Sedov# Now that we've collected a possible --mode arg, show help if necessary 2484*ae771770SStanislav Sedovif $opt_help; then 2485*ae771770SStanislav Sedov if test "$opt_help" = :; then 2486*ae771770SStanislav Sedov func_mode_help 2487*ae771770SStanislav Sedov else 2488*ae771770SStanislav Sedov { 2489*ae771770SStanislav Sedov func_help noexit 2490*ae771770SStanislav Sedov for opt_mode in compile link execute install finish uninstall clean; do 2491*ae771770SStanislav Sedov func_mode_help 2492*ae771770SStanislav Sedov done 2493*ae771770SStanislav Sedov } | sed -n '1p; 2,$s/^Usage:/ or: /p' 2494*ae771770SStanislav Sedov { 2495*ae771770SStanislav Sedov func_help noexit 2496*ae771770SStanislav Sedov for opt_mode in compile link execute install finish uninstall clean; do 2497*ae771770SStanislav Sedov echo 2498*ae771770SStanislav Sedov func_mode_help 2499*ae771770SStanislav Sedov done 2500*ae771770SStanislav Sedov } | 2501*ae771770SStanislav Sedov sed '1d 2502*ae771770SStanislav Sedov /^When reporting/,/^Report/{ 2503*ae771770SStanislav Sedov H 2504*ae771770SStanislav Sedov d 2505*ae771770SStanislav Sedov } 2506*ae771770SStanislav Sedov $x 2507*ae771770SStanislav Sedov /information about other modes/d 2508*ae771770SStanislav Sedov /more detailed .*MODE/d 2509*ae771770SStanislav Sedov s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 2510*ae771770SStanislav Sedov fi 2511*ae771770SStanislav Sedov exit $? 2512b528cefcSMark Murrayfi 2513b528cefcSMark Murray 2514*ae771770SStanislav Sedov 2515*ae771770SStanislav Sedov# func_mode_execute arg... 2516*ae771770SStanislav Sedovfunc_mode_execute () 2517*ae771770SStanislav Sedov{ 2518*ae771770SStanislav Sedov $opt_debug 2519*ae771770SStanislav Sedov # The first argument is the command name. 2520*ae771770SStanislav Sedov cmd="$nonopt" 2521*ae771770SStanislav Sedov test -z "$cmd" && \ 2522*ae771770SStanislav Sedov func_fatal_help "you must specify a COMMAND" 2523*ae771770SStanislav Sedov 2524*ae771770SStanislav Sedov # Handle -dlopen flags immediately. 2525*ae771770SStanislav Sedov for file in $opt_dlopen; do 2526*ae771770SStanislav Sedov test -f "$file" \ 2527*ae771770SStanislav Sedov || func_fatal_help "\`$file' is not a file" 2528*ae771770SStanislav Sedov 2529*ae771770SStanislav Sedov dir= 2530*ae771770SStanislav Sedov case $file in 2531*ae771770SStanislav Sedov *.la) 2532*ae771770SStanislav Sedov func_resolve_sysroot "$file" 2533*ae771770SStanislav Sedov file=$func_resolve_sysroot_result 2534*ae771770SStanislav Sedov 2535*ae771770SStanislav Sedov # Check to see that this really is a libtool archive. 2536*ae771770SStanislav Sedov func_lalib_unsafe_p "$file" \ 2537*ae771770SStanislav Sedov || func_fatal_help "\`$lib' is not a valid libtool archive" 2538*ae771770SStanislav Sedov 2539*ae771770SStanislav Sedov # Read the libtool library. 2540*ae771770SStanislav Sedov dlname= 2541*ae771770SStanislav Sedov library_names= 2542*ae771770SStanislav Sedov func_source "$file" 2543*ae771770SStanislav Sedov 2544*ae771770SStanislav Sedov # Skip this library if it cannot be dlopened. 2545*ae771770SStanislav Sedov if test -z "$dlname"; then 2546*ae771770SStanislav Sedov # Warn if it was a shared library. 2547*ae771770SStanislav Sedov test -n "$library_names" && \ 2548*ae771770SStanislav Sedov func_warning "\`$file' was not linked with \`-export-dynamic'" 2549*ae771770SStanislav Sedov continue 2550*ae771770SStanislav Sedov fi 2551*ae771770SStanislav Sedov 2552*ae771770SStanislav Sedov func_dirname "$file" "" "." 2553*ae771770SStanislav Sedov dir="$func_dirname_result" 2554*ae771770SStanislav Sedov 2555*ae771770SStanislav Sedov if test -f "$dir/$objdir/$dlname"; then 2556*ae771770SStanislav Sedov func_append dir "/$objdir" 2557*ae771770SStanislav Sedov else 2558*ae771770SStanislav Sedov if test ! -f "$dir/$dlname"; then 2559*ae771770SStanislav Sedov func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 2560*ae771770SStanislav Sedov fi 2561*ae771770SStanislav Sedov fi 2562*ae771770SStanislav Sedov ;; 2563*ae771770SStanislav Sedov 2564*ae771770SStanislav Sedov *.lo) 2565*ae771770SStanislav Sedov # Just add the directory containing the .lo file. 2566*ae771770SStanislav Sedov func_dirname "$file" "" "." 2567*ae771770SStanislav Sedov dir="$func_dirname_result" 2568*ae771770SStanislav Sedov ;; 2569*ae771770SStanislav Sedov 2570*ae771770SStanislav Sedov *) 2571*ae771770SStanislav Sedov func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 2572*ae771770SStanislav Sedov continue 2573*ae771770SStanislav Sedov ;; 2574*ae771770SStanislav Sedov esac 2575*ae771770SStanislav Sedov 2576*ae771770SStanislav Sedov # Get the absolute pathname. 2577*ae771770SStanislav Sedov absdir=`cd "$dir" && pwd` 2578*ae771770SStanislav Sedov test -n "$absdir" && dir="$absdir" 2579*ae771770SStanislav Sedov 2580*ae771770SStanislav Sedov # Now add the directory to shlibpath_var. 2581*ae771770SStanislav Sedov if eval "test -z \"\$$shlibpath_var\""; then 2582*ae771770SStanislav Sedov eval "$shlibpath_var=\"\$dir\"" 2583*ae771770SStanislav Sedov else 2584*ae771770SStanislav Sedov eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 2585*ae771770SStanislav Sedov fi 2586*ae771770SStanislav Sedov done 2587*ae771770SStanislav Sedov 2588*ae771770SStanislav Sedov # This variable tells wrapper scripts just to set shlibpath_var 2589*ae771770SStanislav Sedov # rather than running their programs. 2590*ae771770SStanislav Sedov libtool_execute_magic="$magic" 2591*ae771770SStanislav Sedov 2592*ae771770SStanislav Sedov # Check if any of the arguments is a wrapper script. 2593*ae771770SStanislav Sedov args= 2594*ae771770SStanislav Sedov for file 2595*ae771770SStanislav Sedov do 2596*ae771770SStanislav Sedov case $file in 2597*ae771770SStanislav Sedov -* | *.la | *.lo ) ;; 2598*ae771770SStanislav Sedov *) 2599*ae771770SStanislav Sedov # Do a test to see if this is really a libtool program. 2600*ae771770SStanislav Sedov if func_ltwrapper_script_p "$file"; then 2601*ae771770SStanislav Sedov func_source "$file" 2602*ae771770SStanislav Sedov # Transform arg to wrapped name. 2603*ae771770SStanislav Sedov file="$progdir/$program" 2604*ae771770SStanislav Sedov elif func_ltwrapper_executable_p "$file"; then 2605*ae771770SStanislav Sedov func_ltwrapper_scriptname "$file" 2606*ae771770SStanislav Sedov func_source "$func_ltwrapper_scriptname_result" 2607*ae771770SStanislav Sedov # Transform arg to wrapped name. 2608*ae771770SStanislav Sedov file="$progdir/$program" 2609*ae771770SStanislav Sedov fi 2610*ae771770SStanislav Sedov ;; 2611*ae771770SStanislav Sedov esac 2612*ae771770SStanislav Sedov # Quote arguments (to preserve shell metacharacters). 2613*ae771770SStanislav Sedov func_append_quoted args "$file" 2614*ae771770SStanislav Sedov done 2615*ae771770SStanislav Sedov 2616*ae771770SStanislav Sedov if test "X$opt_dry_run" = Xfalse; then 2617*ae771770SStanislav Sedov if test -n "$shlibpath_var"; then 2618*ae771770SStanislav Sedov # Export the shlibpath_var. 2619*ae771770SStanislav Sedov eval "export $shlibpath_var" 2620*ae771770SStanislav Sedov fi 2621*ae771770SStanislav Sedov 2622*ae771770SStanislav Sedov # Restore saved environment variables 2623*ae771770SStanislav Sedov for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 2624*ae771770SStanislav Sedov do 2625*ae771770SStanislav Sedov eval "if test \"\${save_$lt_var+set}\" = set; then 2626*ae771770SStanislav Sedov $lt_var=\$save_$lt_var; export $lt_var 2627*ae771770SStanislav Sedov else 2628*ae771770SStanislav Sedov $lt_unset $lt_var 2629*ae771770SStanislav Sedov fi" 2630*ae771770SStanislav Sedov done 2631*ae771770SStanislav Sedov 2632*ae771770SStanislav Sedov # Now prepare to actually exec the command. 2633*ae771770SStanislav Sedov exec_cmd="\$cmd$args" 2634*ae771770SStanislav Sedov else 2635*ae771770SStanislav Sedov # Display what would be done. 2636*ae771770SStanislav Sedov if test -n "$shlibpath_var"; then 2637*ae771770SStanislav Sedov eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 2638*ae771770SStanislav Sedov echo "export $shlibpath_var" 2639*ae771770SStanislav Sedov fi 2640*ae771770SStanislav Sedov $ECHO "$cmd$args" 2641*ae771770SStanislav Sedov exit $EXIT_SUCCESS 2642*ae771770SStanislav Sedov fi 2643*ae771770SStanislav Sedov} 2644*ae771770SStanislav Sedov 2645*ae771770SStanislav Sedovtest "$opt_mode" = execute && func_mode_execute ${1+"$@"} 2646*ae771770SStanislav Sedov 2647*ae771770SStanislav Sedov 2648*ae771770SStanislav Sedov# func_mode_finish arg... 2649*ae771770SStanislav Sedovfunc_mode_finish () 2650*ae771770SStanislav Sedov{ 2651*ae771770SStanislav Sedov $opt_debug 2652*ae771770SStanislav Sedov libs= 2653*ae771770SStanislav Sedov libdirs= 2654*ae771770SStanislav Sedov admincmds= 2655*ae771770SStanislav Sedov 2656*ae771770SStanislav Sedov for opt in "$nonopt" ${1+"$@"} 2657*ae771770SStanislav Sedov do 2658*ae771770SStanislav Sedov if test -d "$opt"; then 2659*ae771770SStanislav Sedov func_append libdirs " $opt" 2660*ae771770SStanislav Sedov 2661*ae771770SStanislav Sedov elif test -f "$opt"; then 2662*ae771770SStanislav Sedov if func_lalib_unsafe_p "$opt"; then 2663*ae771770SStanislav Sedov func_append libs " $opt" 2664*ae771770SStanislav Sedov else 2665*ae771770SStanislav Sedov func_warning "\`$opt' is not a valid libtool archive" 2666*ae771770SStanislav Sedov fi 2667*ae771770SStanislav Sedov 2668*ae771770SStanislav Sedov else 2669*ae771770SStanislav Sedov func_fatal_error "invalid argument \`$opt'" 2670*ae771770SStanislav Sedov fi 2671*ae771770SStanislav Sedov done 2672*ae771770SStanislav Sedov 2673*ae771770SStanislav Sedov if test -n "$libs"; then 2674*ae771770SStanislav Sedov if test -n "$lt_sysroot"; then 2675*ae771770SStanislav Sedov sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 2676*ae771770SStanislav Sedov sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 2677*ae771770SStanislav Sedov else 2678*ae771770SStanislav Sedov sysroot_cmd= 2679*ae771770SStanislav Sedov fi 2680*ae771770SStanislav Sedov 2681*ae771770SStanislav Sedov # Remove sysroot references 2682*ae771770SStanislav Sedov if $opt_dry_run; then 2683*ae771770SStanislav Sedov for lib in $libs; do 2684*ae771770SStanislav Sedov echo "removing references to $lt_sysroot and \`=' prefixes from $lib" 2685*ae771770SStanislav Sedov done 2686*ae771770SStanislav Sedov else 2687*ae771770SStanislav Sedov tmpdir=`func_mktempdir` 2688*ae771770SStanislav Sedov for lib in $libs; do 2689*ae771770SStanislav Sedov sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 2690*ae771770SStanislav Sedov > $tmpdir/tmp-la 2691*ae771770SStanislav Sedov mv -f $tmpdir/tmp-la $lib 2692*ae771770SStanislav Sedov done 2693*ae771770SStanislav Sedov ${RM}r "$tmpdir" 2694*ae771770SStanislav Sedov fi 2695*ae771770SStanislav Sedov fi 2696*ae771770SStanislav Sedov 2697*ae771770SStanislav Sedov if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2698*ae771770SStanislav Sedov for libdir in $libdirs; do 2699*ae771770SStanislav Sedov if test -n "$finish_cmds"; then 2700*ae771770SStanislav Sedov # Do each command in the finish commands. 2701*ae771770SStanislav Sedov func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 2702*ae771770SStanislav Sedov'"$cmd"'"' 2703*ae771770SStanislav Sedov fi 2704*ae771770SStanislav Sedov if test -n "$finish_eval"; then 2705*ae771770SStanislav Sedov # Do the single finish_eval. 2706*ae771770SStanislav Sedov eval cmds=\"$finish_eval\" 2707*ae771770SStanislav Sedov $opt_dry_run || eval "$cmds" || func_append admincmds " 2708*ae771770SStanislav Sedov $cmds" 2709*ae771770SStanislav Sedov fi 2710*ae771770SStanislav Sedov done 2711*ae771770SStanislav Sedov fi 2712*ae771770SStanislav Sedov 2713*ae771770SStanislav Sedov # Exit here if they wanted silent mode. 2714*ae771770SStanislav Sedov $opt_silent && exit $EXIT_SUCCESS 2715*ae771770SStanislav Sedov 2716*ae771770SStanislav Sedov if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2717*ae771770SStanislav Sedov echo "----------------------------------------------------------------------" 2718*ae771770SStanislav Sedov echo "Libraries have been installed in:" 2719*ae771770SStanislav Sedov for libdir in $libdirs; do 2720*ae771770SStanislav Sedov $ECHO " $libdir" 2721*ae771770SStanislav Sedov done 2722*ae771770SStanislav Sedov echo 2723*ae771770SStanislav Sedov echo "If you ever happen to want to link against installed libraries" 2724*ae771770SStanislav Sedov echo "in a given directory, LIBDIR, you must either use libtool, and" 2725*ae771770SStanislav Sedov echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 2726*ae771770SStanislav Sedov echo "flag during linking and do at least one of the following:" 2727*ae771770SStanislav Sedov if test -n "$shlibpath_var"; then 2728*ae771770SStanislav Sedov echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 2729*ae771770SStanislav Sedov echo " during execution" 2730*ae771770SStanislav Sedov fi 2731*ae771770SStanislav Sedov if test -n "$runpath_var"; then 2732*ae771770SStanislav Sedov echo " - add LIBDIR to the \`$runpath_var' environment variable" 2733*ae771770SStanislav Sedov echo " during linking" 2734*ae771770SStanislav Sedov fi 2735*ae771770SStanislav Sedov if test -n "$hardcode_libdir_flag_spec"; then 2736*ae771770SStanislav Sedov libdir=LIBDIR 2737*ae771770SStanislav Sedov eval flag=\"$hardcode_libdir_flag_spec\" 2738*ae771770SStanislav Sedov 2739*ae771770SStanislav Sedov $ECHO " - use the \`$flag' linker flag" 2740*ae771770SStanislav Sedov fi 2741*ae771770SStanislav Sedov if test -n "$admincmds"; then 2742*ae771770SStanislav Sedov $ECHO " - have your system administrator run these commands:$admincmds" 2743*ae771770SStanislav Sedov fi 2744*ae771770SStanislav Sedov if test -f /etc/ld.so.conf; then 2745*ae771770SStanislav Sedov echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 2746*ae771770SStanislav Sedov fi 2747*ae771770SStanislav Sedov echo 2748*ae771770SStanislav Sedov 2749*ae771770SStanislav Sedov echo "See any operating system documentation about shared libraries for" 2750*ae771770SStanislav Sedov case $host in 2751*ae771770SStanislav Sedov solaris2.[6789]|solaris2.1[0-9]) 2752*ae771770SStanislav Sedov echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 2753*ae771770SStanislav Sedov echo "pages." 2754*ae771770SStanislav Sedov ;; 2755*ae771770SStanislav Sedov *) 2756*ae771770SStanislav Sedov echo "more information, such as the ld(1) and ld.so(8) manual pages." 2757*ae771770SStanislav Sedov ;; 2758*ae771770SStanislav Sedov esac 2759*ae771770SStanislav Sedov echo "----------------------------------------------------------------------" 2760*ae771770SStanislav Sedov fi 2761*ae771770SStanislav Sedov exit $EXIT_SUCCESS 2762*ae771770SStanislav Sedov} 2763*ae771770SStanislav Sedov 2764*ae771770SStanislav Sedovtest "$opt_mode" = finish && func_mode_finish ${1+"$@"} 2765*ae771770SStanislav Sedov 2766*ae771770SStanislav Sedov 2767*ae771770SStanislav Sedov# func_mode_install arg... 2768*ae771770SStanislav Sedovfunc_mode_install () 2769*ae771770SStanislav Sedov{ 2770*ae771770SStanislav Sedov $opt_debug 2771*ae771770SStanislav Sedov # There may be an optional sh(1) argument at the beginning of 2772*ae771770SStanislav Sedov # install_prog (especially on Windows NT). 2773*ae771770SStanislav Sedov if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 2774*ae771770SStanislav Sedov # Allow the use of GNU shtool's install command. 2775*ae771770SStanislav Sedov case $nonopt in *shtool*) :;; *) false;; esac; then 2776*ae771770SStanislav Sedov # Aesthetically quote it. 2777*ae771770SStanislav Sedov func_quote_for_eval "$nonopt" 2778*ae771770SStanislav Sedov install_prog="$func_quote_for_eval_result " 2779*ae771770SStanislav Sedov arg=$1 2780*ae771770SStanislav Sedov shift 2781*ae771770SStanislav Sedov else 2782*ae771770SStanislav Sedov install_prog= 2783*ae771770SStanislav Sedov arg=$nonopt 2784*ae771770SStanislav Sedov fi 2785*ae771770SStanislav Sedov 2786*ae771770SStanislav Sedov # The real first argument should be the name of the installation program. 2787*ae771770SStanislav Sedov # Aesthetically quote it. 2788*ae771770SStanislav Sedov func_quote_for_eval "$arg" 2789*ae771770SStanislav Sedov func_append install_prog "$func_quote_for_eval_result" 2790*ae771770SStanislav Sedov install_shared_prog=$install_prog 2791*ae771770SStanislav Sedov case " $install_prog " in 2792*ae771770SStanislav Sedov *[\\\ /]cp\ *) install_cp=: ;; 2793*ae771770SStanislav Sedov *) install_cp=false ;; 2794*ae771770SStanislav Sedov esac 2795*ae771770SStanislav Sedov 2796*ae771770SStanislav Sedov # We need to accept at least all the BSD install flags. 2797*ae771770SStanislav Sedov dest= 2798*ae771770SStanislav Sedov files= 2799*ae771770SStanislav Sedov opts= 2800*ae771770SStanislav Sedov prev= 2801*ae771770SStanislav Sedov install_type= 2802*ae771770SStanislav Sedov isdir=no 2803*ae771770SStanislav Sedov stripme= 2804*ae771770SStanislav Sedov no_mode=: 2805*ae771770SStanislav Sedov for arg 2806*ae771770SStanislav Sedov do 2807*ae771770SStanislav Sedov arg2= 2808*ae771770SStanislav Sedov if test -n "$dest"; then 2809*ae771770SStanislav Sedov func_append files " $dest" 2810*ae771770SStanislav Sedov dest=$arg 2811*ae771770SStanislav Sedov continue 2812*ae771770SStanislav Sedov fi 2813*ae771770SStanislav Sedov 2814*ae771770SStanislav Sedov case $arg in 2815*ae771770SStanislav Sedov -d) isdir=yes ;; 2816*ae771770SStanislav Sedov -f) 2817*ae771770SStanislav Sedov if $install_cp; then :; else 2818*ae771770SStanislav Sedov prev=$arg 2819*ae771770SStanislav Sedov fi 2820*ae771770SStanislav Sedov ;; 2821*ae771770SStanislav Sedov -g | -m | -o) 2822*ae771770SStanislav Sedov prev=$arg 2823*ae771770SStanislav Sedov ;; 2824*ae771770SStanislav Sedov -s) 2825*ae771770SStanislav Sedov stripme=" -s" 2826*ae771770SStanislav Sedov continue 2827*ae771770SStanislav Sedov ;; 2828*ae771770SStanislav Sedov -*) 2829*ae771770SStanislav Sedov ;; 2830*ae771770SStanislav Sedov *) 2831*ae771770SStanislav Sedov # If the previous option needed an argument, then skip it. 2832*ae771770SStanislav Sedov if test -n "$prev"; then 2833*ae771770SStanislav Sedov if test "x$prev" = x-m && test -n "$install_override_mode"; then 2834*ae771770SStanislav Sedov arg2=$install_override_mode 2835*ae771770SStanislav Sedov no_mode=false 2836*ae771770SStanislav Sedov fi 2837*ae771770SStanislav Sedov prev= 2838*ae771770SStanislav Sedov else 2839*ae771770SStanislav Sedov dest=$arg 2840*ae771770SStanislav Sedov continue 2841*ae771770SStanislav Sedov fi 2842*ae771770SStanislav Sedov ;; 2843*ae771770SStanislav Sedov esac 2844*ae771770SStanislav Sedov 2845*ae771770SStanislav Sedov # Aesthetically quote the argument. 2846*ae771770SStanislav Sedov func_quote_for_eval "$arg" 2847*ae771770SStanislav Sedov func_append install_prog " $func_quote_for_eval_result" 2848*ae771770SStanislav Sedov if test -n "$arg2"; then 2849*ae771770SStanislav Sedov func_quote_for_eval "$arg2" 2850*ae771770SStanislav Sedov fi 2851*ae771770SStanislav Sedov func_append install_shared_prog " $func_quote_for_eval_result" 2852*ae771770SStanislav Sedov done 2853*ae771770SStanislav Sedov 2854*ae771770SStanislav Sedov test -z "$install_prog" && \ 2855*ae771770SStanislav Sedov func_fatal_help "you must specify an install program" 2856*ae771770SStanislav Sedov 2857*ae771770SStanislav Sedov test -n "$prev" && \ 2858*ae771770SStanislav Sedov func_fatal_help "the \`$prev' option requires an argument" 2859*ae771770SStanislav Sedov 2860*ae771770SStanislav Sedov if test -n "$install_override_mode" && $no_mode; then 2861*ae771770SStanislav Sedov if $install_cp; then :; else 2862*ae771770SStanislav Sedov func_quote_for_eval "$install_override_mode" 2863*ae771770SStanislav Sedov func_append install_shared_prog " -m $func_quote_for_eval_result" 2864*ae771770SStanislav Sedov fi 2865*ae771770SStanislav Sedov fi 2866*ae771770SStanislav Sedov 2867*ae771770SStanislav Sedov if test -z "$files"; then 2868*ae771770SStanislav Sedov if test -z "$dest"; then 2869*ae771770SStanislav Sedov func_fatal_help "no file or destination specified" 2870*ae771770SStanislav Sedov else 2871*ae771770SStanislav Sedov func_fatal_help "you must specify a destination" 2872*ae771770SStanislav Sedov fi 2873*ae771770SStanislav Sedov fi 2874*ae771770SStanislav Sedov 2875*ae771770SStanislav Sedov # Strip any trailing slash from the destination. 2876*ae771770SStanislav Sedov func_stripname '' '/' "$dest" 2877*ae771770SStanislav Sedov dest=$func_stripname_result 2878*ae771770SStanislav Sedov 2879*ae771770SStanislav Sedov # Check to see that the destination is a directory. 2880*ae771770SStanislav Sedov test -d "$dest" && isdir=yes 2881*ae771770SStanislav Sedov if test "$isdir" = yes; then 2882*ae771770SStanislav Sedov destdir="$dest" 2883*ae771770SStanislav Sedov destname= 2884*ae771770SStanislav Sedov else 2885*ae771770SStanislav Sedov func_dirname_and_basename "$dest" "" "." 2886*ae771770SStanislav Sedov destdir="$func_dirname_result" 2887*ae771770SStanislav Sedov destname="$func_basename_result" 2888*ae771770SStanislav Sedov 2889*ae771770SStanislav Sedov # Not a directory, so check to see that there is only one file specified. 2890*ae771770SStanislav Sedov set dummy $files; shift 2891*ae771770SStanislav Sedov test "$#" -gt 1 && \ 2892*ae771770SStanislav Sedov func_fatal_help "\`$dest' is not a directory" 2893*ae771770SStanislav Sedov fi 2894*ae771770SStanislav Sedov case $destdir in 2895*ae771770SStanislav Sedov [\\/]* | [A-Za-z]:[\\/]*) ;; 2896*ae771770SStanislav Sedov *) 2897*ae771770SStanislav Sedov for file in $files; do 2898*ae771770SStanislav Sedov case $file in 2899*ae771770SStanislav Sedov *.lo) ;; 2900*ae771770SStanislav Sedov *) 2901*ae771770SStanislav Sedov func_fatal_help "\`$destdir' must be an absolute directory name" 2902*ae771770SStanislav Sedov ;; 2903*ae771770SStanislav Sedov esac 2904*ae771770SStanislav Sedov done 2905*ae771770SStanislav Sedov ;; 2906*ae771770SStanislav Sedov esac 2907*ae771770SStanislav Sedov 2908*ae771770SStanislav Sedov # This variable tells wrapper scripts just to set variables rather 2909*ae771770SStanislav Sedov # than running their programs. 2910*ae771770SStanislav Sedov libtool_install_magic="$magic" 2911*ae771770SStanislav Sedov 2912*ae771770SStanislav Sedov staticlibs= 2913*ae771770SStanislav Sedov future_libdirs= 2914*ae771770SStanislav Sedov current_libdirs= 2915*ae771770SStanislav Sedov for file in $files; do 2916*ae771770SStanislav Sedov 2917*ae771770SStanislav Sedov # Do each installation. 2918*ae771770SStanislav Sedov case $file in 2919*ae771770SStanislav Sedov *.$libext) 2920*ae771770SStanislav Sedov # Do the static libraries later. 2921*ae771770SStanislav Sedov func_append staticlibs " $file" 2922*ae771770SStanislav Sedov ;; 2923*ae771770SStanislav Sedov 2924*ae771770SStanislav Sedov *.la) 2925*ae771770SStanislav Sedov func_resolve_sysroot "$file" 2926*ae771770SStanislav Sedov file=$func_resolve_sysroot_result 2927*ae771770SStanislav Sedov 2928*ae771770SStanislav Sedov # Check to see that this really is a libtool archive. 2929*ae771770SStanislav Sedov func_lalib_unsafe_p "$file" \ 2930*ae771770SStanislav Sedov || func_fatal_help "\`$file' is not a valid libtool archive" 2931*ae771770SStanislav Sedov 2932*ae771770SStanislav Sedov library_names= 2933*ae771770SStanislav Sedov old_library= 2934*ae771770SStanislav Sedov relink_command= 2935*ae771770SStanislav Sedov func_source "$file" 2936*ae771770SStanislav Sedov 2937*ae771770SStanislav Sedov # Add the libdir to current_libdirs if it is the destination. 2938*ae771770SStanislav Sedov if test "X$destdir" = "X$libdir"; then 2939*ae771770SStanislav Sedov case "$current_libdirs " in 2940*ae771770SStanislav Sedov *" $libdir "*) ;; 2941*ae771770SStanislav Sedov *) func_append current_libdirs " $libdir" ;; 2942*ae771770SStanislav Sedov esac 2943*ae771770SStanislav Sedov else 2944*ae771770SStanislav Sedov # Note the libdir as a future libdir. 2945*ae771770SStanislav Sedov case "$future_libdirs " in 2946*ae771770SStanislav Sedov *" $libdir "*) ;; 2947*ae771770SStanislav Sedov *) func_append future_libdirs " $libdir" ;; 2948*ae771770SStanislav Sedov esac 2949*ae771770SStanislav Sedov fi 2950*ae771770SStanislav Sedov 2951*ae771770SStanislav Sedov func_dirname "$file" "/" "" 2952*ae771770SStanislav Sedov dir="$func_dirname_result" 2953*ae771770SStanislav Sedov func_append dir "$objdir" 2954*ae771770SStanislav Sedov 2955*ae771770SStanislav Sedov if test -n "$relink_command"; then 2956*ae771770SStanislav Sedov # Determine the prefix the user has applied to our future dir. 2957*ae771770SStanislav Sedov inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 2958*ae771770SStanislav Sedov 2959*ae771770SStanislav Sedov # Don't allow the user to place us outside of our expected 2960*ae771770SStanislav Sedov # location b/c this prevents finding dependent libraries that 2961*ae771770SStanislav Sedov # are installed to the same prefix. 2962*ae771770SStanislav Sedov # At present, this check doesn't affect windows .dll's that 2963*ae771770SStanislav Sedov # are installed into $libdir/../bin (currently, that works fine) 2964*ae771770SStanislav Sedov # but it's something to keep an eye on. 2965*ae771770SStanislav Sedov test "$inst_prefix_dir" = "$destdir" && \ 2966*ae771770SStanislav Sedov func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 2967*ae771770SStanislav Sedov 2968*ae771770SStanislav Sedov if test -n "$inst_prefix_dir"; then 2969*ae771770SStanislav Sedov # Stick the inst_prefix_dir data into the link command. 2970*ae771770SStanislav Sedov relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 2971*ae771770SStanislav Sedov else 2972*ae771770SStanislav Sedov relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 2973*ae771770SStanislav Sedov fi 2974*ae771770SStanislav Sedov 2975*ae771770SStanislav Sedov func_warning "relinking \`$file'" 2976*ae771770SStanislav Sedov func_show_eval "$relink_command" \ 2977*ae771770SStanislav Sedov 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 2978*ae771770SStanislav Sedov fi 2979*ae771770SStanislav Sedov 2980*ae771770SStanislav Sedov # See the names of the shared library. 2981*ae771770SStanislav Sedov set dummy $library_names; shift 2982*ae771770SStanislav Sedov if test -n "$1"; then 2983*ae771770SStanislav Sedov realname="$1" 2984*ae771770SStanislav Sedov shift 2985*ae771770SStanislav Sedov 2986*ae771770SStanislav Sedov srcname="$realname" 2987*ae771770SStanislav Sedov test -n "$relink_command" && srcname="$realname"T 2988*ae771770SStanislav Sedov 2989*ae771770SStanislav Sedov # Install the shared library and build the symlinks. 2990*ae771770SStanislav Sedov func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 2991*ae771770SStanislav Sedov 'exit $?' 2992*ae771770SStanislav Sedov tstripme="$stripme" 2993*ae771770SStanislav Sedov case $host_os in 2994*ae771770SStanislav Sedov cygwin* | mingw* | pw32* | cegcc*) 2995*ae771770SStanislav Sedov case $realname in 2996*ae771770SStanislav Sedov *.dll.a) 2997*ae771770SStanislav Sedov tstripme="" 2998*ae771770SStanislav Sedov ;; 2999*ae771770SStanislav Sedov esac 3000*ae771770SStanislav Sedov ;; 3001*ae771770SStanislav Sedov esac 3002*ae771770SStanislav Sedov if test -n "$tstripme" && test -n "$striplib"; then 3003*ae771770SStanislav Sedov func_show_eval "$striplib $destdir/$realname" 'exit $?' 3004*ae771770SStanislav Sedov fi 3005*ae771770SStanislav Sedov 3006*ae771770SStanislav Sedov if test "$#" -gt 0; then 3007*ae771770SStanislav Sedov # Delete the old symlinks, and create new ones. 3008*ae771770SStanislav Sedov # Try `ln -sf' first, because the `ln' binary might depend on 3009*ae771770SStanislav Sedov # the symlink we replace! Solaris /bin/ln does not understand -f, 3010*ae771770SStanislav Sedov # so we also need to try rm && ln -s. 3011*ae771770SStanislav Sedov for linkname 3012*ae771770SStanislav Sedov do 3013*ae771770SStanislav Sedov test "$linkname" != "$realname" \ 3014*ae771770SStanislav Sedov && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 3015*ae771770SStanislav Sedov done 3016*ae771770SStanislav Sedov fi 3017*ae771770SStanislav Sedov 3018*ae771770SStanislav Sedov # Do each command in the postinstall commands. 3019*ae771770SStanislav Sedov lib="$destdir/$realname" 3020*ae771770SStanislav Sedov func_execute_cmds "$postinstall_cmds" 'exit $?' 3021*ae771770SStanislav Sedov fi 3022*ae771770SStanislav Sedov 3023*ae771770SStanislav Sedov # Install the pseudo-library for information purposes. 3024*ae771770SStanislav Sedov func_basename "$file" 3025*ae771770SStanislav Sedov name="$func_basename_result" 3026*ae771770SStanislav Sedov instname="$dir/$name"i 3027*ae771770SStanislav Sedov func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 3028*ae771770SStanislav Sedov 3029*ae771770SStanislav Sedov # Maybe install the static library, too. 3030*ae771770SStanislav Sedov test -n "$old_library" && func_append staticlibs " $dir/$old_library" 3031*ae771770SStanislav Sedov ;; 3032*ae771770SStanislav Sedov 3033*ae771770SStanislav Sedov *.lo) 3034*ae771770SStanislav Sedov # Install (i.e. copy) a libtool object. 3035*ae771770SStanislav Sedov 3036*ae771770SStanislav Sedov # Figure out destination file name, if it wasn't already specified. 3037*ae771770SStanislav Sedov if test -n "$destname"; then 3038*ae771770SStanislav Sedov destfile="$destdir/$destname" 3039*ae771770SStanislav Sedov else 3040*ae771770SStanislav Sedov func_basename "$file" 3041*ae771770SStanislav Sedov destfile="$func_basename_result" 3042*ae771770SStanislav Sedov destfile="$destdir/$destfile" 3043*ae771770SStanislav Sedov fi 3044*ae771770SStanislav Sedov 3045*ae771770SStanislav Sedov # Deduce the name of the destination old-style object file. 3046*ae771770SStanislav Sedov case $destfile in 3047*ae771770SStanislav Sedov *.lo) 3048*ae771770SStanislav Sedov func_lo2o "$destfile" 3049*ae771770SStanislav Sedov staticdest=$func_lo2o_result 3050*ae771770SStanislav Sedov ;; 3051*ae771770SStanislav Sedov *.$objext) 3052*ae771770SStanislav Sedov staticdest="$destfile" 3053*ae771770SStanislav Sedov destfile= 3054*ae771770SStanislav Sedov ;; 3055*ae771770SStanislav Sedov *) 3056*ae771770SStanislav Sedov func_fatal_help "cannot copy a libtool object to \`$destfile'" 3057*ae771770SStanislav Sedov ;; 3058*ae771770SStanislav Sedov esac 3059*ae771770SStanislav Sedov 3060*ae771770SStanislav Sedov # Install the libtool object if requested. 3061*ae771770SStanislav Sedov test -n "$destfile" && \ 3062*ae771770SStanislav Sedov func_show_eval "$install_prog $file $destfile" 'exit $?' 3063*ae771770SStanislav Sedov 3064*ae771770SStanislav Sedov # Install the old object if enabled. 3065*ae771770SStanislav Sedov if test "$build_old_libs" = yes; then 3066*ae771770SStanislav Sedov # Deduce the name of the old-style object file. 3067*ae771770SStanislav Sedov func_lo2o "$file" 3068*ae771770SStanislav Sedov staticobj=$func_lo2o_result 3069*ae771770SStanislav Sedov func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 3070*ae771770SStanislav Sedov fi 3071c19800e8SDoug Rabson exit $EXIT_SUCCESS 3072b528cefcSMark Murray ;; 3073b528cefcSMark Murray 3074*ae771770SStanislav Sedov *) 3075*ae771770SStanislav Sedov # Figure out destination file name, if it wasn't already specified. 3076*ae771770SStanislav Sedov if test -n "$destname"; then 3077*ae771770SStanislav Sedov destfile="$destdir/$destname" 3078*ae771770SStanislav Sedov else 3079*ae771770SStanislav Sedov func_basename "$file" 3080*ae771770SStanislav Sedov destfile="$func_basename_result" 3081*ae771770SStanislav Sedov destfile="$destdir/$destfile" 3082*ae771770SStanislav Sedov fi 3083*ae771770SStanislav Sedov 3084*ae771770SStanislav Sedov # If the file is missing, and there is a .exe on the end, strip it 3085*ae771770SStanislav Sedov # because it is most likely a libtool script we actually want to 3086*ae771770SStanislav Sedov # install 3087*ae771770SStanislav Sedov stripped_ext="" 3088*ae771770SStanislav Sedov case $file in 3089*ae771770SStanislav Sedov *.exe) 3090*ae771770SStanislav Sedov if test ! -f "$file"; then 3091*ae771770SStanislav Sedov func_stripname '' '.exe' "$file" 3092*ae771770SStanislav Sedov file=$func_stripname_result 3093*ae771770SStanislav Sedov stripped_ext=".exe" 3094*ae771770SStanislav Sedov fi 3095*ae771770SStanislav Sedov ;; 3096*ae771770SStanislav Sedov esac 3097*ae771770SStanislav Sedov 3098*ae771770SStanislav Sedov # Do a test to see if this is really a libtool program. 30994137ff4cSJacques Vidrine case $host in 3100*ae771770SStanislav Sedov *cygwin* | *mingw*) 3101*ae771770SStanislav Sedov if func_ltwrapper_executable_p "$file"; then 3102*ae771770SStanislav Sedov func_ltwrapper_scriptname "$file" 3103*ae771770SStanislav Sedov wrapper=$func_ltwrapper_scriptname_result 3104*ae771770SStanislav Sedov else 3105*ae771770SStanislav Sedov func_stripname '' '.exe' "$file" 3106*ae771770SStanislav Sedov wrapper=$func_stripname_result 3107*ae771770SStanislav Sedov fi 3108*ae771770SStanislav Sedov ;; 3109*ae771770SStanislav Sedov *) 3110*ae771770SStanislav Sedov wrapper=$file 3111*ae771770SStanislav Sedov ;; 3112*ae771770SStanislav Sedov esac 3113*ae771770SStanislav Sedov if func_ltwrapper_script_p "$wrapper"; then 3114*ae771770SStanislav Sedov notinst_deplibs= 3115*ae771770SStanislav Sedov relink_command= 3116*ae771770SStanislav Sedov 3117*ae771770SStanislav Sedov func_source "$wrapper" 3118*ae771770SStanislav Sedov 3119*ae771770SStanislav Sedov # Check the variables that should have been set. 3120*ae771770SStanislav Sedov test -z "$generated_by_libtool_version" && \ 3121*ae771770SStanislav Sedov func_fatal_error "invalid libtool wrapper script \`$wrapper'" 3122*ae771770SStanislav Sedov 3123*ae771770SStanislav Sedov finalize=yes 3124*ae771770SStanislav Sedov for lib in $notinst_deplibs; do 3125*ae771770SStanislav Sedov # Check to see that each library is installed. 3126*ae771770SStanislav Sedov libdir= 3127*ae771770SStanislav Sedov if test -f "$lib"; then 3128*ae771770SStanislav Sedov func_source "$lib" 3129*ae771770SStanislav Sedov fi 3130*ae771770SStanislav Sedov libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test 3131*ae771770SStanislav Sedov if test -n "$libdir" && test ! -f "$libfile"; then 3132*ae771770SStanislav Sedov func_warning "\`$lib' has not been installed in \`$libdir'" 3133*ae771770SStanislav Sedov finalize=no 3134*ae771770SStanislav Sedov fi 3135*ae771770SStanislav Sedov done 3136*ae771770SStanislav Sedov 3137*ae771770SStanislav Sedov relink_command= 3138*ae771770SStanislav Sedov func_source "$wrapper" 3139*ae771770SStanislav Sedov 3140*ae771770SStanislav Sedov outputname= 3141*ae771770SStanislav Sedov if test "$fast_install" = no && test -n "$relink_command"; then 3142*ae771770SStanislav Sedov $opt_dry_run || { 3143*ae771770SStanislav Sedov if test "$finalize" = yes; then 3144*ae771770SStanislav Sedov tmpdir=`func_mktempdir` 3145*ae771770SStanislav Sedov func_basename "$file$stripped_ext" 3146*ae771770SStanislav Sedov file="$func_basename_result" 3147*ae771770SStanislav Sedov outputname="$tmpdir/$file" 3148*ae771770SStanislav Sedov # Replace the output file specification. 3149*ae771770SStanislav Sedov relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 3150*ae771770SStanislav Sedov 3151*ae771770SStanislav Sedov $opt_silent || { 3152*ae771770SStanislav Sedov func_quote_for_expand "$relink_command" 3153*ae771770SStanislav Sedov eval "func_echo $func_quote_for_expand_result" 3154*ae771770SStanislav Sedov } 3155*ae771770SStanislav Sedov if eval "$relink_command"; then : 3156*ae771770SStanislav Sedov else 3157*ae771770SStanislav Sedov func_error "error: relink \`$file' with the above command before installing it" 3158*ae771770SStanislav Sedov $opt_dry_run || ${RM}r "$tmpdir" 3159*ae771770SStanislav Sedov continue 3160*ae771770SStanislav Sedov fi 3161*ae771770SStanislav Sedov file="$outputname" 3162*ae771770SStanislav Sedov else 3163*ae771770SStanislav Sedov func_warning "cannot relink \`$file'" 3164*ae771770SStanislav Sedov fi 3165*ae771770SStanislav Sedov } 3166*ae771770SStanislav Sedov else 3167*ae771770SStanislav Sedov # Install the binary that we compiled earlier. 3168*ae771770SStanislav Sedov file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 3169*ae771770SStanislav Sedov fi 3170*ae771770SStanislav Sedov fi 3171*ae771770SStanislav Sedov 3172*ae771770SStanislav Sedov # remove .exe since cygwin /usr/bin/install will append another 3173*ae771770SStanislav Sedov # one anyway 3174*ae771770SStanislav Sedov case $install_prog,$host in 3175*ae771770SStanislav Sedov */usr/bin/install*,*cygwin*) 3176*ae771770SStanislav Sedov case $file:$destfile in 3177*ae771770SStanislav Sedov *.exe:*.exe) 3178*ae771770SStanislav Sedov # this is ok 3179*ae771770SStanislav Sedov ;; 3180*ae771770SStanislav Sedov *.exe:*) 3181*ae771770SStanislav Sedov destfile=$destfile.exe 3182*ae771770SStanislav Sedov ;; 3183*ae771770SStanislav Sedov *:*.exe) 3184*ae771770SStanislav Sedov func_stripname '' '.exe' "$destfile" 3185*ae771770SStanislav Sedov destfile=$func_stripname_result 3186*ae771770SStanislav Sedov ;; 3187*ae771770SStanislav Sedov esac 3188*ae771770SStanislav Sedov ;; 3189*ae771770SStanislav Sedov esac 3190*ae771770SStanislav Sedov func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 3191*ae771770SStanislav Sedov $opt_dry_run || if test -n "$outputname"; then 3192*ae771770SStanislav Sedov ${RM}r "$tmpdir" 3193*ae771770SStanislav Sedov fi 3194*ae771770SStanislav Sedov ;; 3195*ae771770SStanislav Sedov esac 3196*ae771770SStanislav Sedov done 3197*ae771770SStanislav Sedov 3198*ae771770SStanislav Sedov for file in $staticlibs; do 3199*ae771770SStanislav Sedov func_basename "$file" 3200*ae771770SStanislav Sedov name="$func_basename_result" 3201*ae771770SStanislav Sedov 3202*ae771770SStanislav Sedov # Set up the ranlib parameters. 3203*ae771770SStanislav Sedov oldlib="$destdir/$name" 3204*ae771770SStanislav Sedov 3205*ae771770SStanislav Sedov func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 3206*ae771770SStanislav Sedov 3207*ae771770SStanislav Sedov if test -n "$stripme" && test -n "$old_striplib"; then 3208*ae771770SStanislav Sedov func_show_eval "$old_striplib $oldlib" 'exit $?' 3209*ae771770SStanislav Sedov fi 3210*ae771770SStanislav Sedov 3211*ae771770SStanislav Sedov # Do each command in the postinstall commands. 3212*ae771770SStanislav Sedov func_execute_cmds "$old_postinstall_cmds" 'exit $?' 3213*ae771770SStanislav Sedov done 3214*ae771770SStanislav Sedov 3215*ae771770SStanislav Sedov test -n "$future_libdirs" && \ 3216*ae771770SStanislav Sedov func_warning "remember to run \`$progname --finish$future_libdirs'" 3217*ae771770SStanislav Sedov 3218*ae771770SStanislav Sedov if test -n "$current_libdirs"; then 3219*ae771770SStanislav Sedov # Maybe just do a dry run. 3220*ae771770SStanislav Sedov $opt_dry_run && current_libdirs=" -n$current_libdirs" 3221*ae771770SStanislav Sedov exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 3222*ae771770SStanislav Sedov else 3223*ae771770SStanislav Sedov exit $EXIT_SUCCESS 3224*ae771770SStanislav Sedov fi 3225*ae771770SStanislav Sedov} 3226*ae771770SStanislav Sedov 3227*ae771770SStanislav Sedovtest "$opt_mode" = install && func_mode_install ${1+"$@"} 3228*ae771770SStanislav Sedov 3229*ae771770SStanislav Sedov 3230*ae771770SStanislav Sedov# func_generate_dlsyms outputname originator pic_p 3231*ae771770SStanislav Sedov# Extract symbols from dlprefiles and create ${outputname}S.o with 3232*ae771770SStanislav Sedov# a dlpreopen symbol table. 3233*ae771770SStanislav Sedovfunc_generate_dlsyms () 3234*ae771770SStanislav Sedov{ 3235*ae771770SStanislav Sedov $opt_debug 3236*ae771770SStanislav Sedov my_outputname="$1" 3237*ae771770SStanislav Sedov my_originator="$2" 3238*ae771770SStanislav Sedov my_pic_p="${3-no}" 3239*ae771770SStanislav Sedov my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 3240*ae771770SStanislav Sedov my_dlsyms= 3241*ae771770SStanislav Sedov 3242*ae771770SStanislav Sedov if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 3243*ae771770SStanislav Sedov if test -n "$NM" && test -n "$global_symbol_pipe"; then 3244*ae771770SStanislav Sedov my_dlsyms="${my_outputname}S.c" 3245*ae771770SStanislav Sedov else 3246*ae771770SStanislav Sedov func_error "not configured to extract global symbols from dlpreopened files" 3247*ae771770SStanislav Sedov fi 3248*ae771770SStanislav Sedov fi 3249*ae771770SStanislav Sedov 3250*ae771770SStanislav Sedov if test -n "$my_dlsyms"; then 3251*ae771770SStanislav Sedov case $my_dlsyms in 3252*ae771770SStanislav Sedov "") ;; 3253*ae771770SStanislav Sedov *.c) 3254*ae771770SStanislav Sedov # Discover the nlist of each of the dlfiles. 3255*ae771770SStanislav Sedov nlist="$output_objdir/${my_outputname}.nm" 3256*ae771770SStanislav Sedov 3257*ae771770SStanislav Sedov func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 3258*ae771770SStanislav Sedov 3259*ae771770SStanislav Sedov # Parse the name list into a source file. 3260*ae771770SStanislav Sedov func_verbose "creating $output_objdir/$my_dlsyms" 3261*ae771770SStanislav Sedov 3262*ae771770SStanislav Sedov $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 3263*ae771770SStanislav Sedov/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 3264*ae771770SStanislav Sedov/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 3265*ae771770SStanislav Sedov 3266*ae771770SStanislav Sedov#ifdef __cplusplus 3267*ae771770SStanislav Sedovextern \"C\" { 3268*ae771770SStanislav Sedov#endif 3269*ae771770SStanislav Sedov 3270*ae771770SStanislav Sedov#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 3271*ae771770SStanislav Sedov#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 3272*ae771770SStanislav Sedov#endif 3273*ae771770SStanislav Sedov 3274*ae771770SStanislav Sedov/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 3275*ae771770SStanislav Sedov#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) 3276*ae771770SStanislav Sedov/* DATA imports from DLLs on WIN32 con't be const, because runtime 3277*ae771770SStanislav Sedov relocations are performed -- see ld's documentation on pseudo-relocs. */ 3278*ae771770SStanislav Sedov# define LT_DLSYM_CONST 3279*ae771770SStanislav Sedov#elif defined(__osf__) 3280*ae771770SStanislav Sedov/* This system does not cope well with relocations in const data. */ 3281*ae771770SStanislav Sedov# define LT_DLSYM_CONST 3282*ae771770SStanislav Sedov#else 3283*ae771770SStanislav Sedov# define LT_DLSYM_CONST const 3284*ae771770SStanislav Sedov#endif 3285*ae771770SStanislav Sedov 3286*ae771770SStanislav Sedov/* External symbol declarations for the compiler. */\ 3287*ae771770SStanislav Sedov" 3288*ae771770SStanislav Sedov 3289*ae771770SStanislav Sedov if test "$dlself" = yes; then 3290*ae771770SStanislav Sedov func_verbose "generating symbol list for \`$output'" 3291*ae771770SStanislav Sedov 3292*ae771770SStanislav Sedov $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 3293*ae771770SStanislav Sedov 3294*ae771770SStanislav Sedov # Add our own program objects to the symbol list. 3295*ae771770SStanislav Sedov progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 3296*ae771770SStanislav Sedov for progfile in $progfiles; do 3297*ae771770SStanislav Sedov func_to_tool_file "$progfile" func_convert_file_msys_to_w32 3298*ae771770SStanislav Sedov func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" 3299*ae771770SStanislav Sedov $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 3300*ae771770SStanislav Sedov done 3301*ae771770SStanislav Sedov 3302*ae771770SStanislav Sedov if test -n "$exclude_expsyms"; then 3303*ae771770SStanislav Sedov $opt_dry_run || { 3304*ae771770SStanislav Sedov eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 3305*ae771770SStanislav Sedov eval '$MV "$nlist"T "$nlist"' 3306*ae771770SStanislav Sedov } 3307*ae771770SStanislav Sedov fi 3308*ae771770SStanislav Sedov 3309*ae771770SStanislav Sedov if test -n "$export_symbols_regex"; then 3310*ae771770SStanislav Sedov $opt_dry_run || { 3311*ae771770SStanislav Sedov eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 3312*ae771770SStanislav Sedov eval '$MV "$nlist"T "$nlist"' 3313*ae771770SStanislav Sedov } 3314*ae771770SStanislav Sedov fi 3315*ae771770SStanislav Sedov 3316*ae771770SStanislav Sedov # Prepare the list of exported symbols 3317*ae771770SStanislav Sedov if test -z "$export_symbols"; then 3318*ae771770SStanislav Sedov export_symbols="$output_objdir/$outputname.exp" 3319*ae771770SStanislav Sedov $opt_dry_run || { 3320*ae771770SStanislav Sedov $RM $export_symbols 3321*ae771770SStanislav Sedov eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 3322*ae771770SStanislav Sedov case $host in 3323*ae771770SStanislav Sedov *cygwin* | *mingw* | *cegcc* ) 3324*ae771770SStanislav Sedov eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3325*ae771770SStanislav Sedov eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 3326*ae771770SStanislav Sedov ;; 3327*ae771770SStanislav Sedov esac 3328*ae771770SStanislav Sedov } 3329*ae771770SStanislav Sedov else 3330*ae771770SStanislav Sedov $opt_dry_run || { 3331*ae771770SStanislav Sedov eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 3332*ae771770SStanislav Sedov eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 3333*ae771770SStanislav Sedov eval '$MV "$nlist"T "$nlist"' 3334*ae771770SStanislav Sedov case $host in 3335*ae771770SStanislav Sedov *cygwin* | *mingw* | *cegcc* ) 3336*ae771770SStanislav Sedov eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3337*ae771770SStanislav Sedov eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 3338*ae771770SStanislav Sedov ;; 3339*ae771770SStanislav Sedov esac 3340*ae771770SStanislav Sedov } 3341*ae771770SStanislav Sedov fi 3342*ae771770SStanislav Sedov fi 3343*ae771770SStanislav Sedov 3344*ae771770SStanislav Sedov for dlprefile in $dlprefiles; do 3345*ae771770SStanislav Sedov func_verbose "extracting global C symbols from \`$dlprefile'" 3346*ae771770SStanislav Sedov func_basename "$dlprefile" 3347*ae771770SStanislav Sedov name="$func_basename_result" 3348*ae771770SStanislav Sedov case $host in 3349*ae771770SStanislav Sedov *cygwin* | *mingw* | *cegcc* ) 3350*ae771770SStanislav Sedov # if an import library, we need to obtain dlname 3351*ae771770SStanislav Sedov if func_win32_import_lib_p "$dlprefile"; then 3352*ae771770SStanislav Sedov func_tr_sh "$dlprefile" 3353*ae771770SStanislav Sedov eval "curr_lafile=\$libfile_$func_tr_sh_result" 3354*ae771770SStanislav Sedov dlprefile_dlbasename="" 3355*ae771770SStanislav Sedov if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 3356*ae771770SStanislav Sedov # Use subshell, to avoid clobbering current variable values 3357*ae771770SStanislav Sedov dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 3358*ae771770SStanislav Sedov if test -n "$dlprefile_dlname" ; then 3359*ae771770SStanislav Sedov func_basename "$dlprefile_dlname" 3360*ae771770SStanislav Sedov dlprefile_dlbasename="$func_basename_result" 3361*ae771770SStanislav Sedov else 3362*ae771770SStanislav Sedov # no lafile. user explicitly requested -dlpreopen <import library>. 3363*ae771770SStanislav Sedov $sharedlib_from_linklib_cmd "$dlprefile" 3364*ae771770SStanislav Sedov dlprefile_dlbasename=$sharedlib_from_linklib_result 3365*ae771770SStanislav Sedov fi 3366*ae771770SStanislav Sedov fi 3367*ae771770SStanislav Sedov $opt_dry_run || { 3368*ae771770SStanislav Sedov if test -n "$dlprefile_dlbasename" ; then 3369*ae771770SStanislav Sedov eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 3370*ae771770SStanislav Sedov else 3371*ae771770SStanislav Sedov func_warning "Could not compute DLL name from $name" 3372*ae771770SStanislav Sedov eval '$ECHO ": $name " >> "$nlist"' 3373*ae771770SStanislav Sedov fi 3374*ae771770SStanislav Sedov func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3375*ae771770SStanislav Sedov eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 3376*ae771770SStanislav Sedov $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 3377*ae771770SStanislav Sedov } 3378*ae771770SStanislav Sedov else # not an import lib 3379*ae771770SStanislav Sedov $opt_dry_run || { 3380*ae771770SStanislav Sedov eval '$ECHO ": $name " >> "$nlist"' 3381*ae771770SStanislav Sedov func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3382*ae771770SStanislav Sedov eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 3383*ae771770SStanislav Sedov } 3384*ae771770SStanislav Sedov fi 3385*ae771770SStanislav Sedov ;; 3386*ae771770SStanislav Sedov *) 3387*ae771770SStanislav Sedov $opt_dry_run || { 3388*ae771770SStanislav Sedov eval '$ECHO ": $name " >> "$nlist"' 3389*ae771770SStanislav Sedov func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3390*ae771770SStanislav Sedov eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 3391*ae771770SStanislav Sedov } 3392*ae771770SStanislav Sedov ;; 3393*ae771770SStanislav Sedov esac 3394*ae771770SStanislav Sedov done 3395*ae771770SStanislav Sedov 3396*ae771770SStanislav Sedov $opt_dry_run || { 3397*ae771770SStanislav Sedov # Make sure we have at least an empty file. 3398*ae771770SStanislav Sedov test -f "$nlist" || : > "$nlist" 3399*ae771770SStanislav Sedov 3400*ae771770SStanislav Sedov if test -n "$exclude_expsyms"; then 3401*ae771770SStanislav Sedov $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 3402*ae771770SStanislav Sedov $MV "$nlist"T "$nlist" 3403*ae771770SStanislav Sedov fi 3404*ae771770SStanislav Sedov 3405*ae771770SStanislav Sedov # Try sorting and uniquifying the output. 3406*ae771770SStanislav Sedov if $GREP -v "^: " < "$nlist" | 3407*ae771770SStanislav Sedov if sort -k 3 </dev/null >/dev/null 2>&1; then 3408*ae771770SStanislav Sedov sort -k 3 3409*ae771770SStanislav Sedov else 3410*ae771770SStanislav Sedov sort +2 3411*ae771770SStanislav Sedov fi | 3412*ae771770SStanislav Sedov uniq > "$nlist"S; then 3413*ae771770SStanislav Sedov : 3414*ae771770SStanislav Sedov else 3415*ae771770SStanislav Sedov $GREP -v "^: " < "$nlist" > "$nlist"S 3416*ae771770SStanislav Sedov fi 3417*ae771770SStanislav Sedov 3418*ae771770SStanislav Sedov if test -f "$nlist"S; then 3419*ae771770SStanislav Sedov eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 3420*ae771770SStanislav Sedov else 3421*ae771770SStanislav Sedov echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 3422*ae771770SStanislav Sedov fi 3423*ae771770SStanislav Sedov 3424*ae771770SStanislav Sedov echo >> "$output_objdir/$my_dlsyms" "\ 3425*ae771770SStanislav Sedov 3426*ae771770SStanislav Sedov/* The mapping between symbol names and symbols. */ 3427*ae771770SStanislav Sedovtypedef struct { 3428*ae771770SStanislav Sedov const char *name; 3429*ae771770SStanislav Sedov void *address; 3430*ae771770SStanislav Sedov} lt_dlsymlist; 3431*ae771770SStanislav Sedovextern LT_DLSYM_CONST lt_dlsymlist 3432*ae771770SStanislav Sedovlt_${my_prefix}_LTX_preloaded_symbols[]; 3433*ae771770SStanislav SedovLT_DLSYM_CONST lt_dlsymlist 3434*ae771770SStanislav Sedovlt_${my_prefix}_LTX_preloaded_symbols[] = 3435*ae771770SStanislav Sedov{\ 3436*ae771770SStanislav Sedov { \"$my_originator\", (void *) 0 }," 3437*ae771770SStanislav Sedov 3438*ae771770SStanislav Sedov case $need_lib_prefix in 3439*ae771770SStanislav Sedov no) 3440*ae771770SStanislav Sedov eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 3441*ae771770SStanislav Sedov ;; 3442*ae771770SStanislav Sedov *) 3443*ae771770SStanislav Sedov eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 3444*ae771770SStanislav Sedov ;; 3445*ae771770SStanislav Sedov esac 3446*ae771770SStanislav Sedov echo >> "$output_objdir/$my_dlsyms" "\ 3447*ae771770SStanislav Sedov {0, (void *) 0} 3448*ae771770SStanislav Sedov}; 3449*ae771770SStanislav Sedov 3450*ae771770SStanislav Sedov/* This works around a problem in FreeBSD linker */ 3451*ae771770SStanislav Sedov#ifdef FREEBSD_WORKAROUND 3452*ae771770SStanislav Sedovstatic const void *lt_preloaded_setup() { 3453*ae771770SStanislav Sedov return lt_${my_prefix}_LTX_preloaded_symbols; 3454*ae771770SStanislav Sedov} 3455*ae771770SStanislav Sedov#endif 3456*ae771770SStanislav Sedov 3457*ae771770SStanislav Sedov#ifdef __cplusplus 3458*ae771770SStanislav Sedov} 3459*ae771770SStanislav Sedov#endif\ 3460*ae771770SStanislav Sedov" 3461*ae771770SStanislav Sedov } # !$opt_dry_run 3462*ae771770SStanislav Sedov 3463*ae771770SStanislav Sedov pic_flag_for_symtable= 3464*ae771770SStanislav Sedov case "$compile_command " in 3465*ae771770SStanislav Sedov *" -static "*) ;; 3466*ae771770SStanislav Sedov *) 3467*ae771770SStanislav Sedov case $host in 3468*ae771770SStanislav Sedov # compiling the symbol table file with pic_flag works around 3469*ae771770SStanislav Sedov # a FreeBSD bug that causes programs to crash when -lm is 3470*ae771770SStanislav Sedov # linked before any other PIC object. But we must not use 3471*ae771770SStanislav Sedov # pic_flag when linking with -static. The problem exists in 3472*ae771770SStanislav Sedov # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 3473*ae771770SStanislav Sedov *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 3474*ae771770SStanislav Sedov pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 3475*ae771770SStanislav Sedov *-*-hpux*) 3476*ae771770SStanislav Sedov pic_flag_for_symtable=" $pic_flag" ;; 3477*ae771770SStanislav Sedov *) 3478*ae771770SStanislav Sedov if test "X$my_pic_p" != Xno; then 3479*ae771770SStanislav Sedov pic_flag_for_symtable=" $pic_flag" 3480*ae771770SStanislav Sedov fi 3481*ae771770SStanislav Sedov ;; 3482*ae771770SStanislav Sedov esac 3483*ae771770SStanislav Sedov ;; 3484*ae771770SStanislav Sedov esac 3485*ae771770SStanislav Sedov symtab_cflags= 3486*ae771770SStanislav Sedov for arg in $LTCFLAGS; do 3487*ae771770SStanislav Sedov case $arg in 3488*ae771770SStanislav Sedov -pie | -fpie | -fPIE) ;; 3489*ae771770SStanislav Sedov *) func_append symtab_cflags " $arg" ;; 3490*ae771770SStanislav Sedov esac 3491*ae771770SStanislav Sedov done 3492*ae771770SStanislav Sedov 3493*ae771770SStanislav Sedov # Now compile the dynamic symbol file. 3494*ae771770SStanislav Sedov func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 3495*ae771770SStanislav Sedov 3496*ae771770SStanislav Sedov # Clean up the generated files. 3497*ae771770SStanislav Sedov func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 3498*ae771770SStanislav Sedov 3499*ae771770SStanislav Sedov # Transform the symbol file into the correct name. 3500*ae771770SStanislav Sedov symfileobj="$output_objdir/${my_outputname}S.$objext" 3501*ae771770SStanislav Sedov case $host in 3502*ae771770SStanislav Sedov *cygwin* | *mingw* | *cegcc* ) 3503*ae771770SStanislav Sedov if test -f "$output_objdir/$my_outputname.def"; then 3504*ae771770SStanislav Sedov compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 3505*ae771770SStanislav Sedov finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 3506*ae771770SStanislav Sedov else 3507*ae771770SStanislav Sedov compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3508*ae771770SStanislav Sedov finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3509*ae771770SStanislav Sedov fi 3510*ae771770SStanislav Sedov ;; 3511*ae771770SStanislav Sedov *) 3512*ae771770SStanislav Sedov compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3513*ae771770SStanislav Sedov finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3514*ae771770SStanislav Sedov ;; 3515*ae771770SStanislav Sedov esac 3516*ae771770SStanislav Sedov ;; 3517*ae771770SStanislav Sedov *) 3518*ae771770SStanislav Sedov func_fatal_error "unknown suffix for \`$my_dlsyms'" 3519*ae771770SStanislav Sedov ;; 3520*ae771770SStanislav Sedov esac 3521*ae771770SStanislav Sedov else 3522*ae771770SStanislav Sedov # We keep going just in case the user didn't refer to 3523*ae771770SStanislav Sedov # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 3524*ae771770SStanislav Sedov # really was required. 3525*ae771770SStanislav Sedov 3526*ae771770SStanislav Sedov # Nullify the symbol file. 3527*ae771770SStanislav Sedov compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 3528*ae771770SStanislav Sedov finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 3529*ae771770SStanislav Sedov fi 3530*ae771770SStanislav Sedov} 3531*ae771770SStanislav Sedov 3532*ae771770SStanislav Sedov# func_win32_libid arg 3533*ae771770SStanislav Sedov# return the library type of file 'arg' 3534*ae771770SStanislav Sedov# 3535*ae771770SStanislav Sedov# Need a lot of goo to handle *both* DLLs and import libs 3536*ae771770SStanislav Sedov# Has to be a shell function in order to 'eat' the argument 3537*ae771770SStanislav Sedov# that is supplied when $file_magic_command is called. 3538*ae771770SStanislav Sedov# Despite the name, also deal with 64 bit binaries. 3539*ae771770SStanislav Sedovfunc_win32_libid () 3540*ae771770SStanislav Sedov{ 3541*ae771770SStanislav Sedov $opt_debug 3542*ae771770SStanislav Sedov win32_libid_type="unknown" 3543*ae771770SStanislav Sedov win32_fileres=`file -L $1 2>/dev/null` 3544*ae771770SStanislav Sedov case $win32_fileres in 3545*ae771770SStanislav Sedov *ar\ archive\ import\ library*) # definitely import 3546*ae771770SStanislav Sedov win32_libid_type="x86 archive import" 3547*ae771770SStanislav Sedov ;; 3548*ae771770SStanislav Sedov *ar\ archive*) # could be an import, or static 3549*ae771770SStanislav Sedov # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 3550*ae771770SStanislav Sedov if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 3551*ae771770SStanislav Sedov $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 3552*ae771770SStanislav Sedov func_to_tool_file "$1" func_convert_file_msys_to_w32 3553*ae771770SStanislav Sedov win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 3554*ae771770SStanislav Sedov $SED -n -e ' 3555*ae771770SStanislav Sedov 1,100{ 3556*ae771770SStanislav Sedov / I /{ 3557*ae771770SStanislav Sedov s,.*,import, 3558*ae771770SStanislav Sedov p 3559*ae771770SStanislav Sedov q 3560*ae771770SStanislav Sedov } 3561*ae771770SStanislav Sedov }'` 3562*ae771770SStanislav Sedov case $win32_nmres in 3563*ae771770SStanislav Sedov import*) win32_libid_type="x86 archive import";; 3564*ae771770SStanislav Sedov *) win32_libid_type="x86 archive static";; 3565*ae771770SStanislav Sedov esac 3566*ae771770SStanislav Sedov fi 3567*ae771770SStanislav Sedov ;; 3568*ae771770SStanislav Sedov *DLL*) 3569*ae771770SStanislav Sedov win32_libid_type="x86 DLL" 3570*ae771770SStanislav Sedov ;; 3571*ae771770SStanislav Sedov *executable*) # but shell scripts are "executable" too... 3572*ae771770SStanislav Sedov case $win32_fileres in 3573*ae771770SStanislav Sedov *MS\ Windows\ PE\ Intel*) 3574*ae771770SStanislav Sedov win32_libid_type="x86 DLL" 3575*ae771770SStanislav Sedov ;; 3576*ae771770SStanislav Sedov esac 3577*ae771770SStanislav Sedov ;; 3578*ae771770SStanislav Sedov esac 3579*ae771770SStanislav Sedov $ECHO "$win32_libid_type" 3580*ae771770SStanislav Sedov} 3581*ae771770SStanislav Sedov 3582*ae771770SStanislav Sedov# func_cygming_dll_for_implib ARG 3583*ae771770SStanislav Sedov# 3584*ae771770SStanislav Sedov# Platform-specific function to extract the 3585*ae771770SStanislav Sedov# name of the DLL associated with the specified 3586*ae771770SStanislav Sedov# import library ARG. 3587*ae771770SStanislav Sedov# Invoked by eval'ing the libtool variable 3588*ae771770SStanislav Sedov# $sharedlib_from_linklib_cmd 3589*ae771770SStanislav Sedov# Result is available in the variable 3590*ae771770SStanislav Sedov# $sharedlib_from_linklib_result 3591*ae771770SStanislav Sedovfunc_cygming_dll_for_implib () 3592*ae771770SStanislav Sedov{ 3593*ae771770SStanislav Sedov $opt_debug 3594*ae771770SStanislav Sedov sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 3595*ae771770SStanislav Sedov} 3596*ae771770SStanislav Sedov 3597*ae771770SStanislav Sedov# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 3598*ae771770SStanislav Sedov# 3599*ae771770SStanislav Sedov# The is the core of a fallback implementation of a 3600*ae771770SStanislav Sedov# platform-specific function to extract the name of the 3601*ae771770SStanislav Sedov# DLL associated with the specified import library LIBNAME. 3602*ae771770SStanislav Sedov# 3603*ae771770SStanislav Sedov# SECTION_NAME is either .idata$6 or .idata$7, depending 3604*ae771770SStanislav Sedov# on the platform and compiler that created the implib. 3605*ae771770SStanislav Sedov# 3606*ae771770SStanislav Sedov# Echos the name of the DLL associated with the 3607*ae771770SStanislav Sedov# specified import library. 3608*ae771770SStanislav Sedovfunc_cygming_dll_for_implib_fallback_core () 3609*ae771770SStanislav Sedov{ 3610*ae771770SStanislav Sedov $opt_debug 3611*ae771770SStanislav Sedov match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 3612*ae771770SStanislav Sedov $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 3613*ae771770SStanislav Sedov $SED '/^Contents of section '"$match_literal"':/{ 3614*ae771770SStanislav Sedov # Place marker at beginning of archive member dllname section 3615*ae771770SStanislav Sedov s/.*/====MARK====/ 3616*ae771770SStanislav Sedov p 3617*ae771770SStanislav Sedov d 3618*ae771770SStanislav Sedov } 3619*ae771770SStanislav Sedov # These lines can sometimes be longer than 43 characters, but 3620*ae771770SStanislav Sedov # are always uninteresting 3621*ae771770SStanislav Sedov /:[ ]*file format pe[i]\{,1\}-/d 3622*ae771770SStanislav Sedov /^In archive [^:]*:/d 3623*ae771770SStanislav Sedov # Ensure marker is printed 3624*ae771770SStanislav Sedov /^====MARK====/p 3625*ae771770SStanislav Sedov # Remove all lines with less than 43 characters 3626*ae771770SStanislav Sedov /^.\{43\}/!d 3627*ae771770SStanislav Sedov # From remaining lines, remove first 43 characters 3628*ae771770SStanislav Sedov s/^.\{43\}//' | 3629*ae771770SStanislav Sedov $SED -n ' 3630*ae771770SStanislav Sedov # Join marker and all lines until next marker into a single line 3631*ae771770SStanislav Sedov /^====MARK====/ b para 3632*ae771770SStanislav Sedov H 3633*ae771770SStanislav Sedov $ b para 3634*ae771770SStanislav Sedov b 3635*ae771770SStanislav Sedov :para 3636*ae771770SStanislav Sedov x 3637*ae771770SStanislav Sedov s/\n//g 3638*ae771770SStanislav Sedov # Remove the marker 3639*ae771770SStanislav Sedov s/^====MARK====// 3640*ae771770SStanislav Sedov # Remove trailing dots and whitespace 3641*ae771770SStanislav Sedov s/[\. \t]*$// 3642*ae771770SStanislav Sedov # Print 3643*ae771770SStanislav Sedov /./p' | 3644*ae771770SStanislav Sedov # we now have a list, one entry per line, of the stringified 3645*ae771770SStanislav Sedov # contents of the appropriate section of all members of the 3646*ae771770SStanislav Sedov # archive which possess that section. Heuristic: eliminate 3647*ae771770SStanislav Sedov # all those which have a first or second character that is 3648*ae771770SStanislav Sedov # a '.' (that is, objdump's representation of an unprintable 3649*ae771770SStanislav Sedov # character.) This should work for all archives with less than 3650*ae771770SStanislav Sedov # 0x302f exports -- but will fail for DLLs whose name actually 3651*ae771770SStanislav Sedov # begins with a literal '.' or a single character followed by 3652*ae771770SStanislav Sedov # a '.'. 3653*ae771770SStanislav Sedov # 3654*ae771770SStanislav Sedov # Of those that remain, print the first one. 3655*ae771770SStanislav Sedov $SED -e '/^\./d;/^.\./d;q' 3656*ae771770SStanislav Sedov} 3657*ae771770SStanislav Sedov 3658*ae771770SStanislav Sedov# func_cygming_gnu_implib_p ARG 3659*ae771770SStanislav Sedov# This predicate returns with zero status (TRUE) if 3660*ae771770SStanislav Sedov# ARG is a GNU/binutils-style import library. Returns 3661*ae771770SStanislav Sedov# with nonzero status (FALSE) otherwise. 3662*ae771770SStanislav Sedovfunc_cygming_gnu_implib_p () 3663*ae771770SStanislav Sedov{ 3664*ae771770SStanislav Sedov $opt_debug 3665*ae771770SStanislav Sedov func_to_tool_file "$1" func_convert_file_msys_to_w32 3666*ae771770SStanislav Sedov 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)$'` 3667*ae771770SStanislav Sedov test -n "$func_cygming_gnu_implib_tmp" 3668*ae771770SStanislav Sedov} 3669*ae771770SStanislav Sedov 3670*ae771770SStanislav Sedov# func_cygming_ms_implib_p ARG 3671*ae771770SStanislav Sedov# This predicate returns with zero status (TRUE) if 3672*ae771770SStanislav Sedov# ARG is an MS-style import library. Returns 3673*ae771770SStanislav Sedov# with nonzero status (FALSE) otherwise. 3674*ae771770SStanislav Sedovfunc_cygming_ms_implib_p () 3675*ae771770SStanislav Sedov{ 3676*ae771770SStanislav Sedov $opt_debug 3677*ae771770SStanislav Sedov func_to_tool_file "$1" func_convert_file_msys_to_w32 3678*ae771770SStanislav Sedov func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 3679*ae771770SStanislav Sedov test -n "$func_cygming_ms_implib_tmp" 3680*ae771770SStanislav Sedov} 3681*ae771770SStanislav Sedov 3682*ae771770SStanislav Sedov# func_cygming_dll_for_implib_fallback ARG 3683*ae771770SStanislav Sedov# Platform-specific function to extract the 3684*ae771770SStanislav Sedov# name of the DLL associated with the specified 3685*ae771770SStanislav Sedov# import library ARG. 3686*ae771770SStanislav Sedov# 3687*ae771770SStanislav Sedov# This fallback implementation is for use when $DLLTOOL 3688*ae771770SStanislav Sedov# does not support the --identify-strict option. 3689*ae771770SStanislav Sedov# Invoked by eval'ing the libtool variable 3690*ae771770SStanislav Sedov# $sharedlib_from_linklib_cmd 3691*ae771770SStanislav Sedov# Result is available in the variable 3692*ae771770SStanislav Sedov# $sharedlib_from_linklib_result 3693*ae771770SStanislav Sedovfunc_cygming_dll_for_implib_fallback () 3694*ae771770SStanislav Sedov{ 3695*ae771770SStanislav Sedov $opt_debug 3696*ae771770SStanislav Sedov if func_cygming_gnu_implib_p "$1" ; then 3697*ae771770SStanislav Sedov # binutils import library 3698*ae771770SStanislav Sedov sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 3699*ae771770SStanislav Sedov elif func_cygming_ms_implib_p "$1" ; then 3700*ae771770SStanislav Sedov # ms-generated import library 3701*ae771770SStanislav Sedov sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 3702*ae771770SStanislav Sedov else 3703*ae771770SStanislav Sedov # unknown 3704*ae771770SStanislav Sedov sharedlib_from_linklib_result="" 3705*ae771770SStanislav Sedov fi 3706*ae771770SStanislav Sedov} 3707*ae771770SStanislav Sedov 3708*ae771770SStanislav Sedov 3709*ae771770SStanislav Sedov# func_extract_an_archive dir oldlib 3710*ae771770SStanislav Sedovfunc_extract_an_archive () 3711*ae771770SStanislav Sedov{ 3712*ae771770SStanislav Sedov $opt_debug 3713*ae771770SStanislav Sedov f_ex_an_ar_dir="$1"; shift 3714*ae771770SStanislav Sedov f_ex_an_ar_oldlib="$1" 3715*ae771770SStanislav Sedov if test "$lock_old_archive_extraction" = yes; then 3716*ae771770SStanislav Sedov lockfile=$f_ex_an_ar_oldlib.lock 3717*ae771770SStanislav Sedov until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 3718*ae771770SStanislav Sedov func_echo "Waiting for $lockfile to be removed" 3719*ae771770SStanislav Sedov sleep 2 3720*ae771770SStanislav Sedov done 3721*ae771770SStanislav Sedov fi 3722*ae771770SStanislav Sedov func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 3723*ae771770SStanislav Sedov 'stat=$?; rm -f "$lockfile"; exit $stat' 3724*ae771770SStanislav Sedov if test "$lock_old_archive_extraction" = yes; then 3725*ae771770SStanislav Sedov $opt_dry_run || rm -f "$lockfile" 3726*ae771770SStanislav Sedov fi 3727*ae771770SStanislav Sedov if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 3728*ae771770SStanislav Sedov : 3729*ae771770SStanislav Sedov else 3730*ae771770SStanislav Sedov func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 3731*ae771770SStanislav Sedov fi 3732*ae771770SStanislav Sedov} 3733*ae771770SStanislav Sedov 3734*ae771770SStanislav Sedov 3735*ae771770SStanislav Sedov# func_extract_archives gentop oldlib ... 3736*ae771770SStanislav Sedovfunc_extract_archives () 3737*ae771770SStanislav Sedov{ 3738*ae771770SStanislav Sedov $opt_debug 3739*ae771770SStanislav Sedov my_gentop="$1"; shift 3740*ae771770SStanislav Sedov my_oldlibs=${1+"$@"} 3741*ae771770SStanislav Sedov my_oldobjs="" 3742*ae771770SStanislav Sedov my_xlib="" 3743*ae771770SStanislav Sedov my_xabs="" 3744*ae771770SStanislav Sedov my_xdir="" 3745*ae771770SStanislav Sedov 3746*ae771770SStanislav Sedov for my_xlib in $my_oldlibs; do 3747*ae771770SStanislav Sedov # Extract the objects. 3748*ae771770SStanislav Sedov case $my_xlib in 3749*ae771770SStanislav Sedov [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 3750*ae771770SStanislav Sedov *) my_xabs=`pwd`"/$my_xlib" ;; 3751*ae771770SStanislav Sedov esac 3752*ae771770SStanislav Sedov func_basename "$my_xlib" 3753*ae771770SStanislav Sedov my_xlib="$func_basename_result" 3754*ae771770SStanislav Sedov my_xlib_u=$my_xlib 3755*ae771770SStanislav Sedov while :; do 3756*ae771770SStanislav Sedov case " $extracted_archives " in 3757*ae771770SStanislav Sedov *" $my_xlib_u "*) 3758*ae771770SStanislav Sedov func_arith $extracted_serial + 1 3759*ae771770SStanislav Sedov extracted_serial=$func_arith_result 3760*ae771770SStanislav Sedov my_xlib_u=lt$extracted_serial-$my_xlib ;; 3761*ae771770SStanislav Sedov *) break ;; 3762*ae771770SStanislav Sedov esac 3763*ae771770SStanislav Sedov done 3764*ae771770SStanislav Sedov extracted_archives="$extracted_archives $my_xlib_u" 3765*ae771770SStanislav Sedov my_xdir="$my_gentop/$my_xlib_u" 3766*ae771770SStanislav Sedov 3767*ae771770SStanislav Sedov func_mkdir_p "$my_xdir" 3768*ae771770SStanislav Sedov 3769*ae771770SStanislav Sedov case $host in 3770*ae771770SStanislav Sedov *-darwin*) 3771*ae771770SStanislav Sedov func_verbose "Extracting $my_xabs" 3772*ae771770SStanislav Sedov # Do not bother doing anything if just a dry run 3773*ae771770SStanislav Sedov $opt_dry_run || { 3774*ae771770SStanislav Sedov darwin_orig_dir=`pwd` 3775*ae771770SStanislav Sedov cd $my_xdir || exit $? 3776*ae771770SStanislav Sedov darwin_archive=$my_xabs 3777*ae771770SStanislav Sedov darwin_curdir=`pwd` 3778*ae771770SStanislav Sedov darwin_base_archive=`basename "$darwin_archive"` 3779*ae771770SStanislav Sedov darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 3780*ae771770SStanislav Sedov if test -n "$darwin_arches"; then 3781*ae771770SStanislav Sedov darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 3782*ae771770SStanislav Sedov darwin_arch= 3783*ae771770SStanislav Sedov func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 3784*ae771770SStanislav Sedov for darwin_arch in $darwin_arches ; do 3785*ae771770SStanislav Sedov func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3786*ae771770SStanislav Sedov $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 3787*ae771770SStanislav Sedov cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3788*ae771770SStanislav Sedov func_extract_an_archive "`pwd`" "${darwin_base_archive}" 3789*ae771770SStanislav Sedov cd "$darwin_curdir" 3790*ae771770SStanislav Sedov $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 3791*ae771770SStanislav Sedov done # $darwin_arches 3792*ae771770SStanislav Sedov ## Okay now we've a bunch of thin objects, gotta fatten them up :) 3793*ae771770SStanislav Sedov darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 3794*ae771770SStanislav Sedov darwin_file= 3795*ae771770SStanislav Sedov darwin_files= 3796*ae771770SStanislav Sedov for darwin_file in $darwin_filelist; do 3797*ae771770SStanislav Sedov darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 3798*ae771770SStanislav Sedov $LIPO -create -output "$darwin_file" $darwin_files 3799*ae771770SStanislav Sedov done # $darwin_filelist 3800*ae771770SStanislav Sedov $RM -rf unfat-$$ 3801*ae771770SStanislav Sedov cd "$darwin_orig_dir" 3802*ae771770SStanislav Sedov else 3803*ae771770SStanislav Sedov cd $darwin_orig_dir 3804*ae771770SStanislav Sedov func_extract_an_archive "$my_xdir" "$my_xabs" 3805*ae771770SStanislav Sedov fi # $darwin_arches 3806*ae771770SStanislav Sedov } # !$opt_dry_run 3807*ae771770SStanislav Sedov ;; 3808*ae771770SStanislav Sedov *) 3809*ae771770SStanislav Sedov func_extract_an_archive "$my_xdir" "$my_xabs" 3810*ae771770SStanislav Sedov ;; 3811*ae771770SStanislav Sedov esac 3812*ae771770SStanislav Sedov my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 3813*ae771770SStanislav Sedov done 3814*ae771770SStanislav Sedov 3815*ae771770SStanislav Sedov func_extract_archives_result="$my_oldobjs" 3816*ae771770SStanislav Sedov} 3817*ae771770SStanislav Sedov 3818*ae771770SStanislav Sedov 3819*ae771770SStanislav Sedov# func_emit_wrapper [arg=no] 3820*ae771770SStanislav Sedov# 3821*ae771770SStanislav Sedov# Emit a libtool wrapper script on stdout. 3822*ae771770SStanislav Sedov# Don't directly open a file because we may want to 3823*ae771770SStanislav Sedov# incorporate the script contents within a cygwin/mingw 3824*ae771770SStanislav Sedov# wrapper executable. Must ONLY be called from within 3825*ae771770SStanislav Sedov# func_mode_link because it depends on a number of variables 3826*ae771770SStanislav Sedov# set therein. 3827*ae771770SStanislav Sedov# 3828*ae771770SStanislav Sedov# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 3829*ae771770SStanislav Sedov# variable will take. If 'yes', then the emitted script 3830*ae771770SStanislav Sedov# will assume that the directory in which it is stored is 3831*ae771770SStanislav Sedov# the $objdir directory. This is a cygwin/mingw-specific 3832*ae771770SStanislav Sedov# behavior. 3833*ae771770SStanislav Sedovfunc_emit_wrapper () 3834*ae771770SStanislav Sedov{ 3835*ae771770SStanislav Sedov func_emit_wrapper_arg1=${1-no} 3836*ae771770SStanislav Sedov 3837*ae771770SStanislav Sedov $ECHO "\ 3838*ae771770SStanislav Sedov#! $SHELL 3839*ae771770SStanislav Sedov 3840*ae771770SStanislav Sedov# $output - temporary wrapper script for $objdir/$outputname 3841*ae771770SStanislav Sedov# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 3842*ae771770SStanislav Sedov# 3843*ae771770SStanislav Sedov# The $output program cannot be directly executed until all the libtool 3844*ae771770SStanislav Sedov# libraries that it depends on are installed. 3845*ae771770SStanislav Sedov# 3846*ae771770SStanislav Sedov# This wrapper script should never be moved out of the build directory. 3847*ae771770SStanislav Sedov# If it is, it will not operate correctly. 3848*ae771770SStanislav Sedov 3849*ae771770SStanislav Sedov# Sed substitution that helps us do robust quoting. It backslashifies 3850*ae771770SStanislav Sedov# metacharacters that are still active within double-quoted strings. 3851*ae771770SStanislav Sedovsed_quote_subst='$sed_quote_subst' 3852*ae771770SStanislav Sedov 3853*ae771770SStanislav Sedov# Be Bourne compatible 3854*ae771770SStanislav Sedovif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 3855*ae771770SStanislav Sedov emulate sh 3856*ae771770SStanislav Sedov NULLCMD=: 3857*ae771770SStanislav Sedov # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 3858*ae771770SStanislav Sedov # is contrary to our usage. Disable this feature. 3859*ae771770SStanislav Sedov alias -g '\${1+\"\$@\"}'='\"\$@\"' 3860*ae771770SStanislav Sedov setopt NO_GLOB_SUBST 3861*ae771770SStanislav Sedovelse 3862*ae771770SStanislav Sedov case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 3863*ae771770SStanislav Sedovfi 3864*ae771770SStanislav SedovBIN_SH=xpg4; export BIN_SH # for Tru64 3865*ae771770SStanislav SedovDUALCASE=1; export DUALCASE # for MKS sh 3866*ae771770SStanislav Sedov 3867*ae771770SStanislav Sedov# The HP-UX ksh and POSIX shell print the target directory to stdout 3868*ae771770SStanislav Sedov# if CDPATH is set. 3869*ae771770SStanislav Sedov(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 3870*ae771770SStanislav Sedov 3871*ae771770SStanislav Sedovrelink_command=\"$relink_command\" 3872*ae771770SStanislav Sedov 3873*ae771770SStanislav Sedov# This environment variable determines our operation mode. 3874*ae771770SStanislav Sedovif test \"\$libtool_install_magic\" = \"$magic\"; then 3875*ae771770SStanislav Sedov # install mode needs the following variables: 3876*ae771770SStanislav Sedov generated_by_libtool_version='$macro_version' 3877*ae771770SStanislav Sedov notinst_deplibs='$notinst_deplibs' 3878*ae771770SStanislav Sedovelse 3879*ae771770SStanislav Sedov # When we are sourced in execute mode, \$file and \$ECHO are already set. 3880*ae771770SStanislav Sedov if test \"\$libtool_execute_magic\" != \"$magic\"; then 3881*ae771770SStanislav Sedov file=\"\$0\"" 3882*ae771770SStanislav Sedov 3883*ae771770SStanislav Sedov qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 3884*ae771770SStanislav Sedov $ECHO "\ 3885*ae771770SStanislav Sedov 3886*ae771770SStanislav Sedov# A function that is used when there is no print builtin or printf. 3887*ae771770SStanislav Sedovfunc_fallback_echo () 3888*ae771770SStanislav Sedov{ 3889*ae771770SStanislav Sedov eval 'cat <<_LTECHO_EOF 3890*ae771770SStanislav Sedov\$1 3891*ae771770SStanislav Sedov_LTECHO_EOF' 3892*ae771770SStanislav Sedov} 3893*ae771770SStanislav Sedov ECHO=\"$qECHO\" 3894*ae771770SStanislav Sedov fi 3895*ae771770SStanislav Sedov 3896*ae771770SStanislav Sedov# Very basic option parsing. These options are (a) specific to 3897*ae771770SStanislav Sedov# the libtool wrapper, (b) are identical between the wrapper 3898*ae771770SStanislav Sedov# /script/ and the wrapper /executable/ which is used only on 3899*ae771770SStanislav Sedov# windows platforms, and (c) all begin with the string "--lt-" 3900*ae771770SStanislav Sedov# (application programs are unlikely to have options which match 3901*ae771770SStanislav Sedov# this pattern). 3902*ae771770SStanislav Sedov# 3903*ae771770SStanislav Sedov# There are only two supported options: --lt-debug and 3904*ae771770SStanislav Sedov# --lt-dump-script. There is, deliberately, no --lt-help. 3905*ae771770SStanislav Sedov# 3906*ae771770SStanislav Sedov# The first argument to this parsing function should be the 3907*ae771770SStanislav Sedov# script's $0 value, followed by "$@". 3908*ae771770SStanislav Sedovlt_option_debug= 3909*ae771770SStanislav Sedovfunc_parse_lt_options () 3910*ae771770SStanislav Sedov{ 3911*ae771770SStanislav Sedov lt_script_arg0=\$0 3912*ae771770SStanislav Sedov shift 3913*ae771770SStanislav Sedov for lt_opt 3914*ae771770SStanislav Sedov do 3915*ae771770SStanislav Sedov case \"\$lt_opt\" in 3916*ae771770SStanislav Sedov --lt-debug) lt_option_debug=1 ;; 3917*ae771770SStanislav Sedov --lt-dump-script) 3918*ae771770SStanislav Sedov lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 3919*ae771770SStanislav Sedov test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 3920*ae771770SStanislav Sedov lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 3921*ae771770SStanislav Sedov cat \"\$lt_dump_D/\$lt_dump_F\" 3922*ae771770SStanislav Sedov exit 0 3923*ae771770SStanislav Sedov ;; 3924*ae771770SStanislav Sedov --lt-*) 3925*ae771770SStanislav Sedov \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 3926*ae771770SStanislav Sedov exit 1 3927*ae771770SStanislav Sedov ;; 3928*ae771770SStanislav Sedov esac 3929*ae771770SStanislav Sedov done 3930*ae771770SStanislav Sedov 3931*ae771770SStanislav Sedov # Print the debug banner immediately: 3932*ae771770SStanislav Sedov if test -n \"\$lt_option_debug\"; then 3933*ae771770SStanislav Sedov echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 3934*ae771770SStanislav Sedov fi 3935*ae771770SStanislav Sedov} 3936*ae771770SStanislav Sedov 3937*ae771770SStanislav Sedov# Used when --lt-debug. Prints its arguments to stdout 3938*ae771770SStanislav Sedov# (redirection is the responsibility of the caller) 3939*ae771770SStanislav Sedovfunc_lt_dump_args () 3940*ae771770SStanislav Sedov{ 3941*ae771770SStanislav Sedov lt_dump_args_N=1; 3942*ae771770SStanislav Sedov for lt_arg 3943*ae771770SStanislav Sedov do 3944*ae771770SStanislav Sedov \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" 3945*ae771770SStanislav Sedov lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 3946*ae771770SStanislav Sedov done 3947*ae771770SStanislav Sedov} 3948*ae771770SStanislav Sedov 3949*ae771770SStanislav Sedov# Core function for launching the target application 3950*ae771770SStanislav Sedovfunc_exec_program_core () 3951*ae771770SStanislav Sedov{ 3952*ae771770SStanislav Sedov" 3953*ae771770SStanislav Sedov case $host in 3954*ae771770SStanislav Sedov # Backslashes separate directories on plain windows 3955*ae771770SStanislav Sedov *-*-mingw | *-*-os2* | *-cegcc*) 3956*ae771770SStanislav Sedov $ECHO "\ 3957*ae771770SStanislav Sedov if test -n \"\$lt_option_debug\"; then 3958*ae771770SStanislav Sedov \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 3959*ae771770SStanislav Sedov func_lt_dump_args \${1+\"\$@\"} 1>&2 3960*ae771770SStanislav Sedov fi 3961*ae771770SStanislav Sedov exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 3962*ae771770SStanislav Sedov" 3963*ae771770SStanislav Sedov ;; 3964*ae771770SStanislav Sedov 3965*ae771770SStanislav Sedov *) 3966*ae771770SStanislav Sedov $ECHO "\ 3967*ae771770SStanislav Sedov if test -n \"\$lt_option_debug\"; then 3968*ae771770SStanislav Sedov \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 3969*ae771770SStanislav Sedov func_lt_dump_args \${1+\"\$@\"} 1>&2 3970*ae771770SStanislav Sedov fi 3971*ae771770SStanislav Sedov exec \"\$progdir/\$program\" \${1+\"\$@\"} 3972*ae771770SStanislav Sedov" 3973*ae771770SStanislav Sedov ;; 3974*ae771770SStanislav Sedov esac 3975*ae771770SStanislav Sedov $ECHO "\ 3976*ae771770SStanislav Sedov \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 3977*ae771770SStanislav Sedov exit 1 3978*ae771770SStanislav Sedov} 3979*ae771770SStanislav Sedov 3980*ae771770SStanislav Sedov# A function to encapsulate launching the target application 3981*ae771770SStanislav Sedov# Strips options in the --lt-* namespace from \$@ and 3982*ae771770SStanislav Sedov# launches target application with the remaining arguments. 3983*ae771770SStanislav Sedovfunc_exec_program () 3984*ae771770SStanislav Sedov{ 3985*ae771770SStanislav Sedov for lt_wr_arg 3986*ae771770SStanislav Sedov do 3987*ae771770SStanislav Sedov case \$lt_wr_arg in 3988*ae771770SStanislav Sedov --lt-*) ;; 3989*ae771770SStanislav Sedov *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 3990*ae771770SStanislav Sedov esac 3991*ae771770SStanislav Sedov shift 3992*ae771770SStanislav Sedov done 3993*ae771770SStanislav Sedov func_exec_program_core \${1+\"\$@\"} 3994*ae771770SStanislav Sedov} 3995*ae771770SStanislav Sedov 3996*ae771770SStanislav Sedov # Parse options 3997*ae771770SStanislav Sedov func_parse_lt_options \"\$0\" \${1+\"\$@\"} 3998*ae771770SStanislav Sedov 3999*ae771770SStanislav Sedov # Find the directory that this script lives in. 4000*ae771770SStanislav Sedov thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 4001*ae771770SStanislav Sedov test \"x\$thisdir\" = \"x\$file\" && thisdir=. 4002*ae771770SStanislav Sedov 4003*ae771770SStanislav Sedov # Follow symbolic links until we get to the real thisdir. 4004*ae771770SStanislav Sedov file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 4005*ae771770SStanislav Sedov while test -n \"\$file\"; do 4006*ae771770SStanislav Sedov destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 4007*ae771770SStanislav Sedov 4008*ae771770SStanislav Sedov # If there was a directory component, then change thisdir. 4009*ae771770SStanislav Sedov if test \"x\$destdir\" != \"x\$file\"; then 4010*ae771770SStanislav Sedov case \"\$destdir\" in 4011*ae771770SStanislav Sedov [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 4012*ae771770SStanislav Sedov *) thisdir=\"\$thisdir/\$destdir\" ;; 4013*ae771770SStanislav Sedov esac 4014*ae771770SStanislav Sedov fi 4015*ae771770SStanislav Sedov 4016*ae771770SStanislav Sedov file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 4017*ae771770SStanislav Sedov file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 4018*ae771770SStanislav Sedov done 4019*ae771770SStanislav Sedov 4020*ae771770SStanislav Sedov # Usually 'no', except on cygwin/mingw when embedded into 4021*ae771770SStanislav Sedov # the cwrapper. 4022*ae771770SStanislav Sedov WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 4023*ae771770SStanislav Sedov if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 4024*ae771770SStanislav Sedov # special case for '.' 4025*ae771770SStanislav Sedov if test \"\$thisdir\" = \".\"; then 4026*ae771770SStanislav Sedov thisdir=\`pwd\` 4027*ae771770SStanislav Sedov fi 4028*ae771770SStanislav Sedov # remove .libs from thisdir 4029*ae771770SStanislav Sedov case \"\$thisdir\" in 4030*ae771770SStanislav Sedov *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 4031*ae771770SStanislav Sedov $objdir ) thisdir=. ;; 4032*ae771770SStanislav Sedov esac 4033*ae771770SStanislav Sedov fi 4034*ae771770SStanislav Sedov 4035*ae771770SStanislav Sedov # Try to get the absolute directory name. 4036*ae771770SStanislav Sedov absdir=\`cd \"\$thisdir\" && pwd\` 4037*ae771770SStanislav Sedov test -n \"\$absdir\" && thisdir=\"\$absdir\" 4038*ae771770SStanislav Sedov" 4039*ae771770SStanislav Sedov 4040*ae771770SStanislav Sedov if test "$fast_install" = yes; then 4041*ae771770SStanislav Sedov $ECHO "\ 4042*ae771770SStanislav Sedov program=lt-'$outputname'$exeext 4043*ae771770SStanislav Sedov progdir=\"\$thisdir/$objdir\" 4044*ae771770SStanislav Sedov 4045*ae771770SStanislav Sedov if test ! -f \"\$progdir/\$program\" || 4046*ae771770SStanislav Sedov { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 4047*ae771770SStanislav Sedov test \"X\$file\" != \"X\$progdir/\$program\"; }; then 4048*ae771770SStanislav Sedov 4049*ae771770SStanislav Sedov file=\"\$\$-\$program\" 4050*ae771770SStanislav Sedov 4051*ae771770SStanislav Sedov if test ! -d \"\$progdir\"; then 4052*ae771770SStanislav Sedov $MKDIR \"\$progdir\" 4053*ae771770SStanislav Sedov else 4054*ae771770SStanislav Sedov $RM \"\$progdir/\$file\" 4055*ae771770SStanislav Sedov fi" 4056*ae771770SStanislav Sedov 4057*ae771770SStanislav Sedov $ECHO "\ 4058*ae771770SStanislav Sedov 4059*ae771770SStanislav Sedov # relink executable if necessary 4060*ae771770SStanislav Sedov if test -n \"\$relink_command\"; then 4061*ae771770SStanislav Sedov if relink_command_output=\`eval \$relink_command 2>&1\`; then : 4062*ae771770SStanislav Sedov else 4063*ae771770SStanislav Sedov $ECHO \"\$relink_command_output\" >&2 4064*ae771770SStanislav Sedov $RM \"\$progdir/\$file\" 4065*ae771770SStanislav Sedov exit 1 4066*ae771770SStanislav Sedov fi 4067*ae771770SStanislav Sedov fi 4068*ae771770SStanislav Sedov 4069*ae771770SStanislav Sedov $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 4070*ae771770SStanislav Sedov { $RM \"\$progdir/\$program\"; 4071*ae771770SStanislav Sedov $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 4072*ae771770SStanislav Sedov $RM \"\$progdir/\$file\" 4073*ae771770SStanislav Sedov fi" 4074*ae771770SStanislav Sedov else 4075*ae771770SStanislav Sedov $ECHO "\ 4076*ae771770SStanislav Sedov program='$outputname' 4077*ae771770SStanislav Sedov progdir=\"\$thisdir/$objdir\" 4078*ae771770SStanislav Sedov" 4079*ae771770SStanislav Sedov fi 4080*ae771770SStanislav Sedov 4081*ae771770SStanislav Sedov $ECHO "\ 4082*ae771770SStanislav Sedov 4083*ae771770SStanislav Sedov if test -f \"\$progdir/\$program\"; then" 4084*ae771770SStanislav Sedov 4085*ae771770SStanislav Sedov # fixup the dll searchpath if we need to. 4086*ae771770SStanislav Sedov # 4087*ae771770SStanislav Sedov # Fix the DLL searchpath if we need to. Do this before prepending 4088*ae771770SStanislav Sedov # to shlibpath, because on Windows, both are PATH and uninstalled 4089*ae771770SStanislav Sedov # libraries must come first. 4090*ae771770SStanislav Sedov if test -n "$dllsearchpath"; then 4091*ae771770SStanislav Sedov $ECHO "\ 4092*ae771770SStanislav Sedov # Add the dll search path components to the executable PATH 4093*ae771770SStanislav Sedov PATH=$dllsearchpath:\$PATH 4094*ae771770SStanislav Sedov" 4095*ae771770SStanislav Sedov fi 4096*ae771770SStanislav Sedov 4097*ae771770SStanislav Sedov # Export our shlibpath_var if we have one. 4098*ae771770SStanislav Sedov if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4099*ae771770SStanislav Sedov $ECHO "\ 4100*ae771770SStanislav Sedov # Add our own library path to $shlibpath_var 4101*ae771770SStanislav Sedov $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 4102*ae771770SStanislav Sedov 4103*ae771770SStanislav Sedov # Some systems cannot cope with colon-terminated $shlibpath_var 4104*ae771770SStanislav Sedov # The second colon is a workaround for a bug in BeOS R4 sed 4105*ae771770SStanislav Sedov $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 4106*ae771770SStanislav Sedov 4107*ae771770SStanislav Sedov export $shlibpath_var 4108*ae771770SStanislav Sedov" 4109*ae771770SStanislav Sedov fi 4110*ae771770SStanislav Sedov 4111*ae771770SStanislav Sedov $ECHO "\ 4112*ae771770SStanislav Sedov if test \"\$libtool_execute_magic\" != \"$magic\"; then 4113*ae771770SStanislav Sedov # Run the actual program with our arguments. 4114*ae771770SStanislav Sedov func_exec_program \${1+\"\$@\"} 4115*ae771770SStanislav Sedov fi 4116*ae771770SStanislav Sedov else 4117*ae771770SStanislav Sedov # The program doesn't exist. 4118*ae771770SStanislav Sedov \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 4119*ae771770SStanislav Sedov \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 4120*ae771770SStanislav Sedov \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 4121*ae771770SStanislav Sedov exit 1 4122*ae771770SStanislav Sedov fi 4123*ae771770SStanislav Sedovfi\ 4124*ae771770SStanislav Sedov" 4125*ae771770SStanislav Sedov} 4126*ae771770SStanislav Sedov 4127*ae771770SStanislav Sedov 4128*ae771770SStanislav Sedov# func_emit_cwrapperexe_src 4129*ae771770SStanislav Sedov# emit the source code for a wrapper executable on stdout 4130*ae771770SStanislav Sedov# Must ONLY be called from within func_mode_link because 4131*ae771770SStanislav Sedov# it depends on a number of variable set therein. 4132*ae771770SStanislav Sedovfunc_emit_cwrapperexe_src () 4133*ae771770SStanislav Sedov{ 4134*ae771770SStanislav Sedov cat <<EOF 4135*ae771770SStanislav Sedov 4136*ae771770SStanislav Sedov/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 4137*ae771770SStanislav Sedov Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 4138*ae771770SStanislav Sedov 4139*ae771770SStanislav Sedov The $output program cannot be directly executed until all the libtool 4140*ae771770SStanislav Sedov libraries that it depends on are installed. 4141*ae771770SStanislav Sedov 4142*ae771770SStanislav Sedov This wrapper executable should never be moved out of the build directory. 4143*ae771770SStanislav Sedov If it is, it will not operate correctly. 4144*ae771770SStanislav Sedov*/ 4145*ae771770SStanislav SedovEOF 4146*ae771770SStanislav Sedov cat <<"EOF" 4147*ae771770SStanislav Sedov#ifdef _MSC_VER 4148*ae771770SStanislav Sedov# define _CRT_SECURE_NO_DEPRECATE 1 4149*ae771770SStanislav Sedov#endif 4150*ae771770SStanislav Sedov#include <stdio.h> 4151*ae771770SStanislav Sedov#include <stdlib.h> 4152*ae771770SStanislav Sedov#ifdef _MSC_VER 4153*ae771770SStanislav Sedov# include <direct.h> 4154*ae771770SStanislav Sedov# include <process.h> 4155*ae771770SStanislav Sedov# include <io.h> 4156*ae771770SStanislav Sedov#else 4157*ae771770SStanislav Sedov# include <unistd.h> 4158*ae771770SStanislav Sedov# include <stdint.h> 4159*ae771770SStanislav Sedov# ifdef __CYGWIN__ 4160*ae771770SStanislav Sedov# include <io.h> 4161*ae771770SStanislav Sedov# endif 4162*ae771770SStanislav Sedov#endif 4163*ae771770SStanislav Sedov#include <malloc.h> 4164*ae771770SStanislav Sedov#include <stdarg.h> 4165*ae771770SStanislav Sedov#include <assert.h> 4166*ae771770SStanislav Sedov#include <string.h> 4167*ae771770SStanislav Sedov#include <ctype.h> 4168*ae771770SStanislav Sedov#include <errno.h> 4169*ae771770SStanislav Sedov#include <fcntl.h> 4170*ae771770SStanislav Sedov#include <sys/stat.h> 4171*ae771770SStanislav Sedov 4172*ae771770SStanislav Sedov/* declarations of non-ANSI functions */ 4173*ae771770SStanislav Sedov#if defined(__MINGW32__) 4174*ae771770SStanislav Sedov# ifdef __STRICT_ANSI__ 4175*ae771770SStanislav Sedovint _putenv (const char *); 4176*ae771770SStanislav Sedov# endif 4177*ae771770SStanislav Sedov#elif defined(__CYGWIN__) 4178*ae771770SStanislav Sedov# ifdef __STRICT_ANSI__ 4179*ae771770SStanislav Sedovchar *realpath (const char *, char *); 4180*ae771770SStanislav Sedovint putenv (char *); 4181*ae771770SStanislav Sedovint setenv (const char *, const char *, int); 4182*ae771770SStanislav Sedov# endif 4183*ae771770SStanislav Sedov/* #elif defined (other platforms) ... */ 4184*ae771770SStanislav Sedov#endif 4185*ae771770SStanislav Sedov 4186*ae771770SStanislav Sedov/* portability defines, excluding path handling macros */ 4187*ae771770SStanislav Sedov#if defined(_MSC_VER) 4188*ae771770SStanislav Sedov# define setmode _setmode 4189*ae771770SStanislav Sedov# define stat _stat 4190*ae771770SStanislav Sedov# define chmod _chmod 4191*ae771770SStanislav Sedov# define getcwd _getcwd 4192*ae771770SStanislav Sedov# define putenv _putenv 4193*ae771770SStanislav Sedov# define S_IXUSR _S_IEXEC 4194*ae771770SStanislav Sedov# ifndef _INTPTR_T_DEFINED 4195*ae771770SStanislav Sedov# define _INTPTR_T_DEFINED 4196*ae771770SStanislav Sedov# define intptr_t int 4197*ae771770SStanislav Sedov# endif 4198*ae771770SStanislav Sedov#elif defined(__MINGW32__) 4199*ae771770SStanislav Sedov# define setmode _setmode 4200*ae771770SStanislav Sedov# define stat _stat 4201*ae771770SStanislav Sedov# define chmod _chmod 4202*ae771770SStanislav Sedov# define getcwd _getcwd 4203*ae771770SStanislav Sedov# define putenv _putenv 4204*ae771770SStanislav Sedov#elif defined(__CYGWIN__) 4205*ae771770SStanislav Sedov# define HAVE_SETENV 4206*ae771770SStanislav Sedov# define FOPEN_WB "wb" 4207*ae771770SStanislav Sedov/* #elif defined (other platforms) ... */ 4208*ae771770SStanislav Sedov#endif 4209*ae771770SStanislav Sedov 4210*ae771770SStanislav Sedov#if defined(PATH_MAX) 4211*ae771770SStanislav Sedov# define LT_PATHMAX PATH_MAX 4212*ae771770SStanislav Sedov#elif defined(MAXPATHLEN) 4213*ae771770SStanislav Sedov# define LT_PATHMAX MAXPATHLEN 4214*ae771770SStanislav Sedov#else 4215*ae771770SStanislav Sedov# define LT_PATHMAX 1024 4216*ae771770SStanislav Sedov#endif 4217*ae771770SStanislav Sedov 4218*ae771770SStanislav Sedov#ifndef S_IXOTH 4219*ae771770SStanislav Sedov# define S_IXOTH 0 4220*ae771770SStanislav Sedov#endif 4221*ae771770SStanislav Sedov#ifndef S_IXGRP 4222*ae771770SStanislav Sedov# define S_IXGRP 0 4223*ae771770SStanislav Sedov#endif 4224*ae771770SStanislav Sedov 4225*ae771770SStanislav Sedov/* path handling portability macros */ 4226*ae771770SStanislav Sedov#ifndef DIR_SEPARATOR 4227*ae771770SStanislav Sedov# define DIR_SEPARATOR '/' 4228*ae771770SStanislav Sedov# define PATH_SEPARATOR ':' 4229*ae771770SStanislav Sedov#endif 4230*ae771770SStanislav Sedov 4231*ae771770SStanislav Sedov#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 4232*ae771770SStanislav Sedov defined (__OS2__) 4233*ae771770SStanislav Sedov# define HAVE_DOS_BASED_FILE_SYSTEM 4234*ae771770SStanislav Sedov# define FOPEN_WB "wb" 4235*ae771770SStanislav Sedov# ifndef DIR_SEPARATOR_2 4236*ae771770SStanislav Sedov# define DIR_SEPARATOR_2 '\\' 4237*ae771770SStanislav Sedov# endif 4238*ae771770SStanislav Sedov# ifndef PATH_SEPARATOR_2 4239*ae771770SStanislav Sedov# define PATH_SEPARATOR_2 ';' 4240*ae771770SStanislav Sedov# endif 4241*ae771770SStanislav Sedov#endif 4242*ae771770SStanislav Sedov 4243*ae771770SStanislav Sedov#ifndef DIR_SEPARATOR_2 4244*ae771770SStanislav Sedov# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 4245*ae771770SStanislav Sedov#else /* DIR_SEPARATOR_2 */ 4246*ae771770SStanislav Sedov# define IS_DIR_SEPARATOR(ch) \ 4247*ae771770SStanislav Sedov (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 4248*ae771770SStanislav Sedov#endif /* DIR_SEPARATOR_2 */ 4249*ae771770SStanislav Sedov 4250*ae771770SStanislav Sedov#ifndef PATH_SEPARATOR_2 4251*ae771770SStanislav Sedov# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 4252*ae771770SStanislav Sedov#else /* PATH_SEPARATOR_2 */ 4253*ae771770SStanislav Sedov# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 4254*ae771770SStanislav Sedov#endif /* PATH_SEPARATOR_2 */ 4255*ae771770SStanislav Sedov 4256*ae771770SStanislav Sedov#ifndef FOPEN_WB 4257*ae771770SStanislav Sedov# define FOPEN_WB "w" 4258*ae771770SStanislav Sedov#endif 4259*ae771770SStanislav Sedov#ifndef _O_BINARY 4260*ae771770SStanislav Sedov# define _O_BINARY 0 4261*ae771770SStanislav Sedov#endif 4262*ae771770SStanislav Sedov 4263*ae771770SStanislav Sedov#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 4264*ae771770SStanislav Sedov#define XFREE(stale) do { \ 4265*ae771770SStanislav Sedov if (stale) { free ((void *) stale); stale = 0; } \ 4266*ae771770SStanislav Sedov} while (0) 4267*ae771770SStanislav Sedov 4268*ae771770SStanislav Sedov#if defined(LT_DEBUGWRAPPER) 4269*ae771770SStanislav Sedovstatic int lt_debug = 1; 4270*ae771770SStanislav Sedov#else 4271*ae771770SStanislav Sedovstatic int lt_debug = 0; 4272*ae771770SStanislav Sedov#endif 4273*ae771770SStanislav Sedov 4274*ae771770SStanislav Sedovconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 4275*ae771770SStanislav Sedov 4276*ae771770SStanislav Sedovvoid *xmalloc (size_t num); 4277*ae771770SStanislav Sedovchar *xstrdup (const char *string); 4278*ae771770SStanislav Sedovconst char *base_name (const char *name); 4279*ae771770SStanislav Sedovchar *find_executable (const char *wrapper); 4280*ae771770SStanislav Sedovchar *chase_symlinks (const char *pathspec); 4281*ae771770SStanislav Sedovint make_executable (const char *path); 4282*ae771770SStanislav Sedovint check_executable (const char *path); 4283*ae771770SStanislav Sedovchar *strendzap (char *str, const char *pat); 4284*ae771770SStanislav Sedovvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 4285*ae771770SStanislav Sedovvoid lt_fatal (const char *file, int line, const char *message, ...); 4286*ae771770SStanislav Sedovstatic const char *nonnull (const char *s); 4287*ae771770SStanislav Sedovstatic const char *nonempty (const char *s); 4288*ae771770SStanislav Sedovvoid lt_setenv (const char *name, const char *value); 4289*ae771770SStanislav Sedovchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 4290*ae771770SStanislav Sedovvoid lt_update_exe_path (const char *name, const char *value); 4291*ae771770SStanislav Sedovvoid lt_update_lib_path (const char *name, const char *value); 4292*ae771770SStanislav Sedovchar **prepare_spawn (char **argv); 4293*ae771770SStanislav Sedovvoid lt_dump_script (FILE *f); 4294*ae771770SStanislav SedovEOF 4295*ae771770SStanislav Sedov 4296*ae771770SStanislav Sedov cat <<EOF 4297*ae771770SStanislav Sedovvolatile const char * MAGIC_EXE = "$magic_exe"; 4298*ae771770SStanislav Sedovconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 4299*ae771770SStanislav SedovEOF 4300*ae771770SStanislav Sedov 4301*ae771770SStanislav Sedov if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4302*ae771770SStanislav Sedov func_to_host_path "$temp_rpath" 4303*ae771770SStanislav Sedov cat <<EOF 4304*ae771770SStanislav Sedovconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 4305*ae771770SStanislav SedovEOF 4306*ae771770SStanislav Sedov else 4307*ae771770SStanislav Sedov cat <<"EOF" 4308*ae771770SStanislav Sedovconst char * LIB_PATH_VALUE = ""; 4309*ae771770SStanislav SedovEOF 4310*ae771770SStanislav Sedov fi 4311*ae771770SStanislav Sedov 4312*ae771770SStanislav Sedov if test -n "$dllsearchpath"; then 4313*ae771770SStanislav Sedov func_to_host_path "$dllsearchpath:" 4314*ae771770SStanislav Sedov cat <<EOF 4315*ae771770SStanislav Sedovconst char * EXE_PATH_VARNAME = "PATH"; 4316*ae771770SStanislav Sedovconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 4317*ae771770SStanislav SedovEOF 4318*ae771770SStanislav Sedov else 4319*ae771770SStanislav Sedov cat <<"EOF" 4320*ae771770SStanislav Sedovconst char * EXE_PATH_VARNAME = ""; 4321*ae771770SStanislav Sedovconst char * EXE_PATH_VALUE = ""; 4322*ae771770SStanislav SedovEOF 4323*ae771770SStanislav Sedov fi 4324*ae771770SStanislav Sedov 4325*ae771770SStanislav Sedov if test "$fast_install" = yes; then 4326*ae771770SStanislav Sedov cat <<EOF 4327*ae771770SStanislav Sedovconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 4328*ae771770SStanislav SedovEOF 4329*ae771770SStanislav Sedov else 4330*ae771770SStanislav Sedov cat <<EOF 4331*ae771770SStanislav Sedovconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 4332*ae771770SStanislav SedovEOF 4333*ae771770SStanislav Sedov fi 4334*ae771770SStanislav Sedov 4335*ae771770SStanislav Sedov 4336*ae771770SStanislav Sedov cat <<"EOF" 4337*ae771770SStanislav Sedov 4338*ae771770SStanislav Sedov#define LTWRAPPER_OPTION_PREFIX "--lt-" 4339*ae771770SStanislav Sedov 4340*ae771770SStanislav Sedovstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 4341*ae771770SStanislav Sedovstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 4342*ae771770SStanislav Sedovstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 4343*ae771770SStanislav Sedov 4344*ae771770SStanislav Sedovint 4345*ae771770SStanislav Sedovmain (int argc, char *argv[]) 4346*ae771770SStanislav Sedov{ 4347*ae771770SStanislav Sedov char **newargz; 4348*ae771770SStanislav Sedov int newargc; 4349*ae771770SStanislav Sedov char *tmp_pathspec; 4350*ae771770SStanislav Sedov char *actual_cwrapper_path; 4351*ae771770SStanislav Sedov char *actual_cwrapper_name; 4352*ae771770SStanislav Sedov char *target_name; 4353*ae771770SStanislav Sedov char *lt_argv_zero; 4354*ae771770SStanislav Sedov intptr_t rval = 127; 4355*ae771770SStanislav Sedov 4356*ae771770SStanislav Sedov int i; 4357*ae771770SStanislav Sedov 4358*ae771770SStanislav Sedov program_name = (char *) xstrdup (base_name (argv[0])); 4359*ae771770SStanislav Sedov newargz = XMALLOC (char *, argc + 1); 4360*ae771770SStanislav Sedov 4361*ae771770SStanislav Sedov /* very simple arg parsing; don't want to rely on getopt 4362*ae771770SStanislav Sedov * also, copy all non cwrapper options to newargz, except 4363*ae771770SStanislav Sedov * argz[0], which is handled differently 4364*ae771770SStanislav Sedov */ 4365*ae771770SStanislav Sedov newargc=0; 4366*ae771770SStanislav Sedov for (i = 1; i < argc; i++) 4367*ae771770SStanislav Sedov { 4368*ae771770SStanislav Sedov if (strcmp (argv[i], dumpscript_opt) == 0) 4369*ae771770SStanislav Sedov { 4370*ae771770SStanislav SedovEOF 4371*ae771770SStanislav Sedov case "$host" in 4372*ae771770SStanislav Sedov *mingw* | *cygwin* ) 4373*ae771770SStanislav Sedov # make stdout use "unix" line endings 4374*ae771770SStanislav Sedov echo " setmode(1,_O_BINARY);" 4375*ae771770SStanislav Sedov ;; 4376*ae771770SStanislav Sedov esac 4377*ae771770SStanislav Sedov 4378*ae771770SStanislav Sedov cat <<"EOF" 4379*ae771770SStanislav Sedov lt_dump_script (stdout); 4380*ae771770SStanislav Sedov return 0; 4381*ae771770SStanislav Sedov } 4382*ae771770SStanislav Sedov if (strcmp (argv[i], debug_opt) == 0) 4383*ae771770SStanislav Sedov { 4384*ae771770SStanislav Sedov lt_debug = 1; 4385*ae771770SStanislav Sedov continue; 4386*ae771770SStanislav Sedov } 4387*ae771770SStanislav Sedov if (strcmp (argv[i], ltwrapper_option_prefix) == 0) 4388*ae771770SStanislav Sedov { 4389*ae771770SStanislav Sedov /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 4390*ae771770SStanislav Sedov namespace, but it is not one of the ones we know about and 4391*ae771770SStanislav Sedov have already dealt with, above (inluding dump-script), then 4392*ae771770SStanislav Sedov report an error. Otherwise, targets might begin to believe 4393*ae771770SStanislav Sedov they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 4394*ae771770SStanislav Sedov namespace. The first time any user complains about this, we'll 4395*ae771770SStanislav Sedov need to make LTWRAPPER_OPTION_PREFIX a configure-time option 4396*ae771770SStanislav Sedov or a configure.ac-settable value. 4397*ae771770SStanislav Sedov */ 4398*ae771770SStanislav Sedov lt_fatal (__FILE__, __LINE__, 4399*ae771770SStanislav Sedov "unrecognized %s option: '%s'", 4400*ae771770SStanislav Sedov ltwrapper_option_prefix, argv[i]); 4401*ae771770SStanislav Sedov } 4402*ae771770SStanislav Sedov /* otherwise ... */ 4403*ae771770SStanislav Sedov newargz[++newargc] = xstrdup (argv[i]); 4404*ae771770SStanislav Sedov } 4405*ae771770SStanislav Sedov newargz[++newargc] = NULL; 4406*ae771770SStanislav Sedov 4407*ae771770SStanislav SedovEOF 4408*ae771770SStanislav Sedov cat <<EOF 4409*ae771770SStanislav Sedov /* The GNU banner must be the first non-error debug message */ 4410*ae771770SStanislav Sedov lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); 4411*ae771770SStanislav SedovEOF 4412*ae771770SStanislav Sedov cat <<"EOF" 4413*ae771770SStanislav Sedov lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 4414*ae771770SStanislav Sedov lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 4415*ae771770SStanislav Sedov 4416*ae771770SStanislav Sedov tmp_pathspec = find_executable (argv[0]); 4417*ae771770SStanislav Sedov if (tmp_pathspec == NULL) 4418*ae771770SStanislav Sedov lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 4419*ae771770SStanislav Sedov lt_debugprintf (__FILE__, __LINE__, 4420*ae771770SStanislav Sedov "(main) found exe (before symlink chase) at: %s\n", 4421*ae771770SStanislav Sedov tmp_pathspec); 4422*ae771770SStanislav Sedov 4423*ae771770SStanislav Sedov actual_cwrapper_path = chase_symlinks (tmp_pathspec); 4424*ae771770SStanislav Sedov lt_debugprintf (__FILE__, __LINE__, 4425*ae771770SStanislav Sedov "(main) found exe (after symlink chase) at: %s\n", 4426*ae771770SStanislav Sedov actual_cwrapper_path); 4427*ae771770SStanislav Sedov XFREE (tmp_pathspec); 4428*ae771770SStanislav Sedov 4429*ae771770SStanislav Sedov actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 4430*ae771770SStanislav Sedov strendzap (actual_cwrapper_path, actual_cwrapper_name); 4431*ae771770SStanislav Sedov 4432*ae771770SStanislav Sedov /* wrapper name transforms */ 4433*ae771770SStanislav Sedov strendzap (actual_cwrapper_name, ".exe"); 4434*ae771770SStanislav Sedov tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 4435*ae771770SStanislav Sedov XFREE (actual_cwrapper_name); 4436*ae771770SStanislav Sedov actual_cwrapper_name = tmp_pathspec; 4437*ae771770SStanislav Sedov tmp_pathspec = 0; 4438*ae771770SStanislav Sedov 4439*ae771770SStanislav Sedov /* target_name transforms -- use actual target program name; might have lt- prefix */ 4440*ae771770SStanislav Sedov target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 4441*ae771770SStanislav Sedov strendzap (target_name, ".exe"); 4442*ae771770SStanislav Sedov tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 4443*ae771770SStanislav Sedov XFREE (target_name); 4444*ae771770SStanislav Sedov target_name = tmp_pathspec; 4445*ae771770SStanislav Sedov tmp_pathspec = 0; 4446*ae771770SStanislav Sedov 4447*ae771770SStanislav Sedov lt_debugprintf (__FILE__, __LINE__, 4448*ae771770SStanislav Sedov "(main) libtool target name: %s\n", 4449*ae771770SStanislav Sedov target_name); 4450*ae771770SStanislav SedovEOF 4451*ae771770SStanislav Sedov 4452*ae771770SStanislav Sedov cat <<EOF 4453*ae771770SStanislav Sedov newargz[0] = 4454*ae771770SStanislav Sedov XMALLOC (char, (strlen (actual_cwrapper_path) + 4455*ae771770SStanislav Sedov strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 4456*ae771770SStanislav Sedov strcpy (newargz[0], actual_cwrapper_path); 4457*ae771770SStanislav Sedov strcat (newargz[0], "$objdir"); 4458*ae771770SStanislav Sedov strcat (newargz[0], "/"); 4459*ae771770SStanislav SedovEOF 4460*ae771770SStanislav Sedov 4461*ae771770SStanislav Sedov cat <<"EOF" 4462*ae771770SStanislav Sedov /* stop here, and copy so we don't have to do this twice */ 4463*ae771770SStanislav Sedov tmp_pathspec = xstrdup (newargz[0]); 4464*ae771770SStanislav Sedov 4465*ae771770SStanislav Sedov /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 4466*ae771770SStanislav Sedov strcat (newargz[0], actual_cwrapper_name); 4467*ae771770SStanislav Sedov 4468*ae771770SStanislav Sedov /* DO want the lt- prefix here if it exists, so use target_name */ 4469*ae771770SStanislav Sedov lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 4470*ae771770SStanislav Sedov XFREE (tmp_pathspec); 4471*ae771770SStanislav Sedov tmp_pathspec = NULL; 4472*ae771770SStanislav SedovEOF 4473*ae771770SStanislav Sedov 4474*ae771770SStanislav Sedov case $host_os in 4475*ae771770SStanislav Sedov mingw*) 4476*ae771770SStanislav Sedov cat <<"EOF" 4477*ae771770SStanislav Sedov { 4478*ae771770SStanislav Sedov char* p; 4479*ae771770SStanislav Sedov while ((p = strchr (newargz[0], '\\')) != NULL) 4480*ae771770SStanislav Sedov { 4481*ae771770SStanislav Sedov *p = '/'; 4482*ae771770SStanislav Sedov } 4483*ae771770SStanislav Sedov while ((p = strchr (lt_argv_zero, '\\')) != NULL) 4484*ae771770SStanislav Sedov { 4485*ae771770SStanislav Sedov *p = '/'; 4486*ae771770SStanislav Sedov } 4487*ae771770SStanislav Sedov } 4488*ae771770SStanislav SedovEOF 4489*ae771770SStanislav Sedov ;; 4490*ae771770SStanislav Sedov esac 4491*ae771770SStanislav Sedov 4492*ae771770SStanislav Sedov cat <<"EOF" 4493*ae771770SStanislav Sedov XFREE (target_name); 4494*ae771770SStanislav Sedov XFREE (actual_cwrapper_path); 4495*ae771770SStanislav Sedov XFREE (actual_cwrapper_name); 4496*ae771770SStanislav Sedov 4497*ae771770SStanislav Sedov lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 4498*ae771770SStanislav Sedov lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 4499*ae771770SStanislav Sedov /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 4500*ae771770SStanislav Sedov be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 4501*ae771770SStanislav Sedov because on Windows, both *_VARNAMEs are PATH but uninstalled 4502*ae771770SStanislav Sedov libraries must come first. */ 4503*ae771770SStanislav Sedov lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 4504*ae771770SStanislav Sedov lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 4505*ae771770SStanislav Sedov 4506*ae771770SStanislav Sedov lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 4507*ae771770SStanislav Sedov nonnull (lt_argv_zero)); 4508*ae771770SStanislav Sedov for (i = 0; i < newargc; i++) 4509*ae771770SStanislav Sedov { 4510*ae771770SStanislav Sedov lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 4511*ae771770SStanislav Sedov i, nonnull (newargz[i])); 4512*ae771770SStanislav Sedov } 4513*ae771770SStanislav Sedov 4514*ae771770SStanislav SedovEOF 4515*ae771770SStanislav Sedov 4516*ae771770SStanislav Sedov case $host_os in 4517*ae771770SStanislav Sedov mingw*) 4518*ae771770SStanislav Sedov cat <<"EOF" 4519*ae771770SStanislav Sedov /* execv doesn't actually work on mingw as expected on unix */ 4520*ae771770SStanislav Sedov newargz = prepare_spawn (newargz); 4521*ae771770SStanislav Sedov rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 4522*ae771770SStanislav Sedov if (rval == -1) 4523*ae771770SStanislav Sedov { 4524*ae771770SStanislav Sedov /* failed to start process */ 4525*ae771770SStanislav Sedov lt_debugprintf (__FILE__, __LINE__, 4526*ae771770SStanislav Sedov "(main) failed to launch target \"%s\": %s\n", 4527*ae771770SStanislav Sedov lt_argv_zero, nonnull (strerror (errno))); 4528*ae771770SStanislav Sedov return 127; 4529*ae771770SStanislav Sedov } 4530*ae771770SStanislav Sedov return rval; 4531*ae771770SStanislav SedovEOF 4532*ae771770SStanislav Sedov ;; 4533*ae771770SStanislav Sedov *) 4534*ae771770SStanislav Sedov cat <<"EOF" 4535*ae771770SStanislav Sedov execv (lt_argv_zero, newargz); 4536*ae771770SStanislav Sedov return rval; /* =127, but avoids unused variable warning */ 4537*ae771770SStanislav SedovEOF 4538*ae771770SStanislav Sedov ;; 4539*ae771770SStanislav Sedov esac 4540*ae771770SStanislav Sedov 4541*ae771770SStanislav Sedov cat <<"EOF" 4542*ae771770SStanislav Sedov} 4543*ae771770SStanislav Sedov 4544*ae771770SStanislav Sedovvoid * 4545*ae771770SStanislav Sedovxmalloc (size_t num) 4546*ae771770SStanislav Sedov{ 4547*ae771770SStanislav Sedov void *p = (void *) malloc (num); 4548*ae771770SStanislav Sedov if (!p) 4549*ae771770SStanislav Sedov lt_fatal (__FILE__, __LINE__, "memory exhausted"); 4550*ae771770SStanislav Sedov 4551*ae771770SStanislav Sedov return p; 4552*ae771770SStanislav Sedov} 4553*ae771770SStanislav Sedov 4554*ae771770SStanislav Sedovchar * 4555*ae771770SStanislav Sedovxstrdup (const char *string) 4556*ae771770SStanislav Sedov{ 4557*ae771770SStanislav Sedov return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 4558*ae771770SStanislav Sedov string) : NULL; 4559*ae771770SStanislav Sedov} 4560*ae771770SStanislav Sedov 4561*ae771770SStanislav Sedovconst char * 4562*ae771770SStanislav Sedovbase_name (const char *name) 4563*ae771770SStanislav Sedov{ 4564*ae771770SStanislav Sedov const char *base; 4565*ae771770SStanislav Sedov 4566*ae771770SStanislav Sedov#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4567*ae771770SStanislav Sedov /* Skip over the disk name in MSDOS pathnames. */ 4568*ae771770SStanislav Sedov if (isalpha ((unsigned char) name[0]) && name[1] == ':') 4569*ae771770SStanislav Sedov name += 2; 4570*ae771770SStanislav Sedov#endif 4571*ae771770SStanislav Sedov 4572*ae771770SStanislav Sedov for (base = name; *name; name++) 4573*ae771770SStanislav Sedov if (IS_DIR_SEPARATOR (*name)) 4574*ae771770SStanislav Sedov base = name + 1; 4575*ae771770SStanislav Sedov return base; 4576*ae771770SStanislav Sedov} 4577*ae771770SStanislav Sedov 4578*ae771770SStanislav Sedovint 4579*ae771770SStanislav Sedovcheck_executable (const char *path) 4580*ae771770SStanislav Sedov{ 4581*ae771770SStanislav Sedov struct stat st; 4582*ae771770SStanislav Sedov 4583*ae771770SStanislav Sedov lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 4584*ae771770SStanislav Sedov nonempty (path)); 4585*ae771770SStanislav Sedov if ((!path) || (!*path)) 4586*ae771770SStanislav Sedov return 0; 4587*ae771770SStanislav Sedov 4588*ae771770SStanislav Sedov if ((stat (path, &st) >= 0) 4589*ae771770SStanislav Sedov && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 4590*ae771770SStanislav Sedov return 1; 4591*ae771770SStanislav Sedov else 4592*ae771770SStanislav Sedov return 0; 4593*ae771770SStanislav Sedov} 4594*ae771770SStanislav Sedov 4595*ae771770SStanislav Sedovint 4596*ae771770SStanislav Sedovmake_executable (const char *path) 4597*ae771770SStanislav Sedov{ 4598*ae771770SStanislav Sedov int rval = 0; 4599*ae771770SStanislav Sedov struct stat st; 4600*ae771770SStanislav Sedov 4601*ae771770SStanislav Sedov lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 4602*ae771770SStanislav Sedov nonempty (path)); 4603*ae771770SStanislav Sedov if ((!path) || (!*path)) 4604*ae771770SStanislav Sedov return 0; 4605*ae771770SStanislav Sedov 4606*ae771770SStanislav Sedov if (stat (path, &st) >= 0) 4607*ae771770SStanislav Sedov { 4608*ae771770SStanislav Sedov rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 4609*ae771770SStanislav Sedov } 4610*ae771770SStanislav Sedov return rval; 4611*ae771770SStanislav Sedov} 4612*ae771770SStanislav Sedov 4613*ae771770SStanislav Sedov/* Searches for the full path of the wrapper. Returns 4614*ae771770SStanislav Sedov newly allocated full path name if found, NULL otherwise 4615*ae771770SStanislav Sedov Does not chase symlinks, even on platforms that support them. 4616*ae771770SStanislav Sedov*/ 4617*ae771770SStanislav Sedovchar * 4618*ae771770SStanislav Sedovfind_executable (const char *wrapper) 4619*ae771770SStanislav Sedov{ 4620*ae771770SStanislav Sedov int has_slash = 0; 4621*ae771770SStanislav Sedov const char *p; 4622*ae771770SStanislav Sedov const char *p_next; 4623*ae771770SStanislav Sedov /* static buffer for getcwd */ 4624*ae771770SStanislav Sedov char tmp[LT_PATHMAX + 1]; 4625*ae771770SStanislav Sedov int tmp_len; 4626*ae771770SStanislav Sedov char *concat_name; 4627*ae771770SStanislav Sedov 4628*ae771770SStanislav Sedov lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 4629*ae771770SStanislav Sedov nonempty (wrapper)); 4630*ae771770SStanislav Sedov 4631*ae771770SStanislav Sedov if ((wrapper == NULL) || (*wrapper == '\0')) 4632*ae771770SStanislav Sedov return NULL; 4633*ae771770SStanislav Sedov 4634*ae771770SStanislav Sedov /* Absolute path? */ 4635*ae771770SStanislav Sedov#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4636*ae771770SStanislav Sedov if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 4637*ae771770SStanislav Sedov { 4638*ae771770SStanislav Sedov concat_name = xstrdup (wrapper); 4639*ae771770SStanislav Sedov if (check_executable (concat_name)) 4640*ae771770SStanislav Sedov return concat_name; 4641*ae771770SStanislav Sedov XFREE (concat_name); 4642*ae771770SStanislav Sedov } 4643*ae771770SStanislav Sedov else 4644*ae771770SStanislav Sedov { 4645*ae771770SStanislav Sedov#endif 4646*ae771770SStanislav Sedov if (IS_DIR_SEPARATOR (wrapper[0])) 4647*ae771770SStanislav Sedov { 4648*ae771770SStanislav Sedov concat_name = xstrdup (wrapper); 4649*ae771770SStanislav Sedov if (check_executable (concat_name)) 4650*ae771770SStanislav Sedov return concat_name; 4651*ae771770SStanislav Sedov XFREE (concat_name); 4652*ae771770SStanislav Sedov } 4653*ae771770SStanislav Sedov#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4654*ae771770SStanislav Sedov } 4655*ae771770SStanislav Sedov#endif 4656*ae771770SStanislav Sedov 4657*ae771770SStanislav Sedov for (p = wrapper; *p; p++) 4658*ae771770SStanislav Sedov if (*p == '/') 4659*ae771770SStanislav Sedov { 4660*ae771770SStanislav Sedov has_slash = 1; 4661*ae771770SStanislav Sedov break; 4662*ae771770SStanislav Sedov } 4663*ae771770SStanislav Sedov if (!has_slash) 4664*ae771770SStanislav Sedov { 4665*ae771770SStanislav Sedov /* no slashes; search PATH */ 4666*ae771770SStanislav Sedov const char *path = getenv ("PATH"); 4667*ae771770SStanislav Sedov if (path != NULL) 4668*ae771770SStanislav Sedov { 4669*ae771770SStanislav Sedov for (p = path; *p; p = p_next) 4670*ae771770SStanislav Sedov { 4671*ae771770SStanislav Sedov const char *q; 4672*ae771770SStanislav Sedov size_t p_len; 4673*ae771770SStanislav Sedov for (q = p; *q; q++) 4674*ae771770SStanislav Sedov if (IS_PATH_SEPARATOR (*q)) 4675*ae771770SStanislav Sedov break; 4676*ae771770SStanislav Sedov p_len = q - p; 4677*ae771770SStanislav Sedov p_next = (*q == '\0' ? q : q + 1); 4678*ae771770SStanislav Sedov if (p_len == 0) 4679*ae771770SStanislav Sedov { 4680*ae771770SStanislav Sedov /* empty path: current directory */ 4681*ae771770SStanislav Sedov if (getcwd (tmp, LT_PATHMAX) == NULL) 4682*ae771770SStanislav Sedov lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 4683*ae771770SStanislav Sedov nonnull (strerror (errno))); 4684*ae771770SStanislav Sedov tmp_len = strlen (tmp); 4685*ae771770SStanislav Sedov concat_name = 4686*ae771770SStanislav Sedov XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4687*ae771770SStanislav Sedov memcpy (concat_name, tmp, tmp_len); 4688*ae771770SStanislav Sedov concat_name[tmp_len] = '/'; 4689*ae771770SStanislav Sedov strcpy (concat_name + tmp_len + 1, wrapper); 4690*ae771770SStanislav Sedov } 4691*ae771770SStanislav Sedov else 4692*ae771770SStanislav Sedov { 4693*ae771770SStanislav Sedov concat_name = 4694*ae771770SStanislav Sedov XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 4695*ae771770SStanislav Sedov memcpy (concat_name, p, p_len); 4696*ae771770SStanislav Sedov concat_name[p_len] = '/'; 4697*ae771770SStanislav Sedov strcpy (concat_name + p_len + 1, wrapper); 4698*ae771770SStanislav Sedov } 4699*ae771770SStanislav Sedov if (check_executable (concat_name)) 4700*ae771770SStanislav Sedov return concat_name; 4701*ae771770SStanislav Sedov XFREE (concat_name); 4702*ae771770SStanislav Sedov } 4703*ae771770SStanislav Sedov } 4704*ae771770SStanislav Sedov /* not found in PATH; assume curdir */ 4705*ae771770SStanislav Sedov } 4706*ae771770SStanislav Sedov /* Relative path | not found in path: prepend cwd */ 4707*ae771770SStanislav Sedov if (getcwd (tmp, LT_PATHMAX) == NULL) 4708*ae771770SStanislav Sedov lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 4709*ae771770SStanislav Sedov nonnull (strerror (errno))); 4710*ae771770SStanislav Sedov tmp_len = strlen (tmp); 4711*ae771770SStanislav Sedov concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4712*ae771770SStanislav Sedov memcpy (concat_name, tmp, tmp_len); 4713*ae771770SStanislav Sedov concat_name[tmp_len] = '/'; 4714*ae771770SStanislav Sedov strcpy (concat_name + tmp_len + 1, wrapper); 4715*ae771770SStanislav Sedov 4716*ae771770SStanislav Sedov if (check_executable (concat_name)) 4717*ae771770SStanislav Sedov return concat_name; 4718*ae771770SStanislav Sedov XFREE (concat_name); 4719*ae771770SStanislav Sedov return NULL; 4720*ae771770SStanislav Sedov} 4721*ae771770SStanislav Sedov 4722*ae771770SStanislav Sedovchar * 4723*ae771770SStanislav Sedovchase_symlinks (const char *pathspec) 4724*ae771770SStanislav Sedov{ 4725*ae771770SStanislav Sedov#ifndef S_ISLNK 4726*ae771770SStanislav Sedov return xstrdup (pathspec); 4727*ae771770SStanislav Sedov#else 4728*ae771770SStanislav Sedov char buf[LT_PATHMAX]; 4729*ae771770SStanislav Sedov struct stat s; 4730*ae771770SStanislav Sedov char *tmp_pathspec = xstrdup (pathspec); 4731*ae771770SStanislav Sedov char *p; 4732*ae771770SStanislav Sedov int has_symlinks = 0; 4733*ae771770SStanislav Sedov while (strlen (tmp_pathspec) && !has_symlinks) 4734*ae771770SStanislav Sedov { 4735*ae771770SStanislav Sedov lt_debugprintf (__FILE__, __LINE__, 4736*ae771770SStanislav Sedov "checking path component for symlinks: %s\n", 4737*ae771770SStanislav Sedov tmp_pathspec); 4738*ae771770SStanislav Sedov if (lstat (tmp_pathspec, &s) == 0) 4739*ae771770SStanislav Sedov { 4740*ae771770SStanislav Sedov if (S_ISLNK (s.st_mode) != 0) 4741*ae771770SStanislav Sedov { 4742*ae771770SStanislav Sedov has_symlinks = 1; 4743*ae771770SStanislav Sedov break; 4744*ae771770SStanislav Sedov } 4745*ae771770SStanislav Sedov 4746*ae771770SStanislav Sedov /* search backwards for last DIR_SEPARATOR */ 4747*ae771770SStanislav Sedov p = tmp_pathspec + strlen (tmp_pathspec) - 1; 4748*ae771770SStanislav Sedov while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4749*ae771770SStanislav Sedov p--; 4750*ae771770SStanislav Sedov if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4751*ae771770SStanislav Sedov { 4752*ae771770SStanislav Sedov /* no more DIR_SEPARATORS left */ 4753*ae771770SStanislav Sedov break; 4754*ae771770SStanislav Sedov } 4755*ae771770SStanislav Sedov *p = '\0'; 4756*ae771770SStanislav Sedov } 4757*ae771770SStanislav Sedov else 4758*ae771770SStanislav Sedov { 4759*ae771770SStanislav Sedov lt_fatal (__FILE__, __LINE__, 4760*ae771770SStanislav Sedov "error accessing file \"%s\": %s", 4761*ae771770SStanislav Sedov tmp_pathspec, nonnull (strerror (errno))); 4762*ae771770SStanislav Sedov } 4763*ae771770SStanislav Sedov } 4764*ae771770SStanislav Sedov XFREE (tmp_pathspec); 4765*ae771770SStanislav Sedov 4766*ae771770SStanislav Sedov if (!has_symlinks) 4767*ae771770SStanislav Sedov { 4768*ae771770SStanislav Sedov return xstrdup (pathspec); 4769*ae771770SStanislav Sedov } 4770*ae771770SStanislav Sedov 4771*ae771770SStanislav Sedov tmp_pathspec = realpath (pathspec, buf); 4772*ae771770SStanislav Sedov if (tmp_pathspec == 0) 4773*ae771770SStanislav Sedov { 4774*ae771770SStanislav Sedov lt_fatal (__FILE__, __LINE__, 4775*ae771770SStanislav Sedov "could not follow symlinks for %s", pathspec); 4776*ae771770SStanislav Sedov } 4777*ae771770SStanislav Sedov return xstrdup (tmp_pathspec); 4778*ae771770SStanislav Sedov#endif 4779*ae771770SStanislav Sedov} 4780*ae771770SStanislav Sedov 4781*ae771770SStanislav Sedovchar * 4782*ae771770SStanislav Sedovstrendzap (char *str, const char *pat) 4783*ae771770SStanislav Sedov{ 4784*ae771770SStanislav Sedov size_t len, patlen; 4785*ae771770SStanislav Sedov 4786*ae771770SStanislav Sedov assert (str != NULL); 4787*ae771770SStanislav Sedov assert (pat != NULL); 4788*ae771770SStanislav Sedov 4789*ae771770SStanislav Sedov len = strlen (str); 4790*ae771770SStanislav Sedov patlen = strlen (pat); 4791*ae771770SStanislav Sedov 4792*ae771770SStanislav Sedov if (patlen <= len) 4793*ae771770SStanislav Sedov { 4794*ae771770SStanislav Sedov str += len - patlen; 4795*ae771770SStanislav Sedov if (strcmp (str, pat) == 0) 4796*ae771770SStanislav Sedov *str = '\0'; 4797*ae771770SStanislav Sedov } 4798*ae771770SStanislav Sedov return str; 4799*ae771770SStanislav Sedov} 4800*ae771770SStanislav Sedov 4801*ae771770SStanislav Sedovvoid 4802*ae771770SStanislav Sedovlt_debugprintf (const char *file, int line, const char *fmt, ...) 4803*ae771770SStanislav Sedov{ 4804*ae771770SStanislav Sedov va_list args; 4805*ae771770SStanislav Sedov if (lt_debug) 4806*ae771770SStanislav Sedov { 4807*ae771770SStanislav Sedov (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 4808*ae771770SStanislav Sedov va_start (args, fmt); 4809*ae771770SStanislav Sedov (void) vfprintf (stderr, fmt, args); 4810*ae771770SStanislav Sedov va_end (args); 4811*ae771770SStanislav Sedov } 4812*ae771770SStanislav Sedov} 4813*ae771770SStanislav Sedov 4814*ae771770SStanislav Sedovstatic void 4815*ae771770SStanislav Sedovlt_error_core (int exit_status, const char *file, 4816*ae771770SStanislav Sedov int line, const char *mode, 4817*ae771770SStanislav Sedov const char *message, va_list ap) 4818*ae771770SStanislav Sedov{ 4819*ae771770SStanislav Sedov fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 4820*ae771770SStanislav Sedov vfprintf (stderr, message, ap); 4821*ae771770SStanislav Sedov fprintf (stderr, ".\n"); 4822*ae771770SStanislav Sedov 4823*ae771770SStanislav Sedov if (exit_status >= 0) 4824*ae771770SStanislav Sedov exit (exit_status); 4825*ae771770SStanislav Sedov} 4826*ae771770SStanislav Sedov 4827*ae771770SStanislav Sedovvoid 4828*ae771770SStanislav Sedovlt_fatal (const char *file, int line, const char *message, ...) 4829*ae771770SStanislav Sedov{ 4830*ae771770SStanislav Sedov va_list ap; 4831*ae771770SStanislav Sedov va_start (ap, message); 4832*ae771770SStanislav Sedov lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 4833*ae771770SStanislav Sedov va_end (ap); 4834*ae771770SStanislav Sedov} 4835*ae771770SStanislav Sedov 4836*ae771770SStanislav Sedovstatic const char * 4837*ae771770SStanislav Sedovnonnull (const char *s) 4838*ae771770SStanislav Sedov{ 4839*ae771770SStanislav Sedov return s ? s : "(null)"; 4840*ae771770SStanislav Sedov} 4841*ae771770SStanislav Sedov 4842*ae771770SStanislav Sedovstatic const char * 4843*ae771770SStanislav Sedovnonempty (const char *s) 4844*ae771770SStanislav Sedov{ 4845*ae771770SStanislav Sedov return (s && !*s) ? "(empty)" : nonnull (s); 4846*ae771770SStanislav Sedov} 4847*ae771770SStanislav Sedov 4848*ae771770SStanislav Sedovvoid 4849*ae771770SStanislav Sedovlt_setenv (const char *name, const char *value) 4850*ae771770SStanislav Sedov{ 4851*ae771770SStanislav Sedov lt_debugprintf (__FILE__, __LINE__, 4852*ae771770SStanislav Sedov "(lt_setenv) setting '%s' to '%s'\n", 4853*ae771770SStanislav Sedov nonnull (name), nonnull (value)); 4854*ae771770SStanislav Sedov { 4855*ae771770SStanislav Sedov#ifdef HAVE_SETENV 4856*ae771770SStanislav Sedov /* always make a copy, for consistency with !HAVE_SETENV */ 4857*ae771770SStanislav Sedov char *str = xstrdup (value); 4858*ae771770SStanislav Sedov setenv (name, str, 1); 4859*ae771770SStanislav Sedov#else 4860*ae771770SStanislav Sedov int len = strlen (name) + 1 + strlen (value) + 1; 4861*ae771770SStanislav Sedov char *str = XMALLOC (char, len); 4862*ae771770SStanislav Sedov sprintf (str, "%s=%s", name, value); 4863*ae771770SStanislav Sedov if (putenv (str) != EXIT_SUCCESS) 4864*ae771770SStanislav Sedov { 4865*ae771770SStanislav Sedov XFREE (str); 4866*ae771770SStanislav Sedov } 4867*ae771770SStanislav Sedov#endif 4868*ae771770SStanislav Sedov } 4869*ae771770SStanislav Sedov} 4870*ae771770SStanislav Sedov 4871*ae771770SStanislav Sedovchar * 4872*ae771770SStanislav Sedovlt_extend_str (const char *orig_value, const char *add, int to_end) 4873*ae771770SStanislav Sedov{ 4874*ae771770SStanislav Sedov char *new_value; 4875*ae771770SStanislav Sedov if (orig_value && *orig_value) 4876*ae771770SStanislav Sedov { 4877*ae771770SStanislav Sedov int orig_value_len = strlen (orig_value); 4878*ae771770SStanislav Sedov int add_len = strlen (add); 4879*ae771770SStanislav Sedov new_value = XMALLOC (char, add_len + orig_value_len + 1); 4880*ae771770SStanislav Sedov if (to_end) 4881*ae771770SStanislav Sedov { 4882*ae771770SStanislav Sedov strcpy (new_value, orig_value); 4883*ae771770SStanislav Sedov strcpy (new_value + orig_value_len, add); 4884*ae771770SStanislav Sedov } 4885*ae771770SStanislav Sedov else 4886*ae771770SStanislav Sedov { 4887*ae771770SStanislav Sedov strcpy (new_value, add); 4888*ae771770SStanislav Sedov strcpy (new_value + add_len, orig_value); 4889*ae771770SStanislav Sedov } 4890*ae771770SStanislav Sedov } 4891*ae771770SStanislav Sedov else 4892*ae771770SStanislav Sedov { 4893*ae771770SStanislav Sedov new_value = xstrdup (add); 4894*ae771770SStanislav Sedov } 4895*ae771770SStanislav Sedov return new_value; 4896*ae771770SStanislav Sedov} 4897*ae771770SStanislav Sedov 4898*ae771770SStanislav Sedovvoid 4899*ae771770SStanislav Sedovlt_update_exe_path (const char *name, const char *value) 4900*ae771770SStanislav Sedov{ 4901*ae771770SStanislav Sedov lt_debugprintf (__FILE__, __LINE__, 4902*ae771770SStanislav Sedov "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 4903*ae771770SStanislav Sedov nonnull (name), nonnull (value)); 4904*ae771770SStanislav Sedov 4905*ae771770SStanislav Sedov if (name && *name && value && *value) 4906*ae771770SStanislav Sedov { 4907*ae771770SStanislav Sedov char *new_value = lt_extend_str (getenv (name), value, 0); 4908*ae771770SStanislav Sedov /* some systems can't cope with a ':'-terminated path #' */ 4909*ae771770SStanislav Sedov int len = strlen (new_value); 4910*ae771770SStanislav Sedov while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 4911*ae771770SStanislav Sedov { 4912*ae771770SStanislav Sedov new_value[len-1] = '\0'; 4913*ae771770SStanislav Sedov } 4914*ae771770SStanislav Sedov lt_setenv (name, new_value); 4915*ae771770SStanislav Sedov XFREE (new_value); 4916*ae771770SStanislav Sedov } 4917*ae771770SStanislav Sedov} 4918*ae771770SStanislav Sedov 4919*ae771770SStanislav Sedovvoid 4920*ae771770SStanislav Sedovlt_update_lib_path (const char *name, const char *value) 4921*ae771770SStanislav Sedov{ 4922*ae771770SStanislav Sedov lt_debugprintf (__FILE__, __LINE__, 4923*ae771770SStanislav Sedov "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 4924*ae771770SStanislav Sedov nonnull (name), nonnull (value)); 4925*ae771770SStanislav Sedov 4926*ae771770SStanislav Sedov if (name && *name && value && *value) 4927*ae771770SStanislav Sedov { 4928*ae771770SStanislav Sedov char *new_value = lt_extend_str (getenv (name), value, 0); 4929*ae771770SStanislav Sedov lt_setenv (name, new_value); 4930*ae771770SStanislav Sedov XFREE (new_value); 4931*ae771770SStanislav Sedov } 4932*ae771770SStanislav Sedov} 4933*ae771770SStanislav Sedov 4934*ae771770SStanislav SedovEOF 4935*ae771770SStanislav Sedov case $host_os in 4936*ae771770SStanislav Sedov mingw*) 4937*ae771770SStanislav Sedov cat <<"EOF" 4938*ae771770SStanislav Sedov 4939*ae771770SStanislav Sedov/* Prepares an argument vector before calling spawn(). 4940*ae771770SStanislav Sedov Note that spawn() does not by itself call the command interpreter 4941*ae771770SStanislav Sedov (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 4942*ae771770SStanislav Sedov ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 4943*ae771770SStanislav Sedov GetVersionEx(&v); 4944*ae771770SStanislav Sedov v.dwPlatformId == VER_PLATFORM_WIN32_NT; 4945*ae771770SStanislav Sedov }) ? "cmd.exe" : "command.com"). 4946*ae771770SStanislav Sedov Instead it simply concatenates the arguments, separated by ' ', and calls 4947*ae771770SStanislav Sedov CreateProcess(). We must quote the arguments since Win32 CreateProcess() 4948*ae771770SStanislav Sedov interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 4949*ae771770SStanislav Sedov special way: 4950*ae771770SStanislav Sedov - Space and tab are interpreted as delimiters. They are not treated as 4951*ae771770SStanislav Sedov delimiters if they are surrounded by double quotes: "...". 4952*ae771770SStanislav Sedov - Unescaped double quotes are removed from the input. Their only effect is 4953*ae771770SStanislav Sedov that within double quotes, space and tab are treated like normal 4954*ae771770SStanislav Sedov characters. 4955*ae771770SStanislav Sedov - Backslashes not followed by double quotes are not special. 4956*ae771770SStanislav Sedov - But 2*n+1 backslashes followed by a double quote become 4957*ae771770SStanislav Sedov n backslashes followed by a double quote (n >= 0): 4958*ae771770SStanislav Sedov \" -> " 4959*ae771770SStanislav Sedov \\\" -> \" 4960*ae771770SStanislav Sedov \\\\\" -> \\" 4961*ae771770SStanislav Sedov */ 4962*ae771770SStanislav Sedov#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" 4963*ae771770SStanislav Sedov#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" 4964*ae771770SStanislav Sedovchar ** 4965*ae771770SStanislav Sedovprepare_spawn (char **argv) 4966*ae771770SStanislav Sedov{ 4967*ae771770SStanislav Sedov size_t argc; 4968*ae771770SStanislav Sedov char **new_argv; 4969*ae771770SStanislav Sedov size_t i; 4970*ae771770SStanislav Sedov 4971*ae771770SStanislav Sedov /* Count number of arguments. */ 4972*ae771770SStanislav Sedov for (argc = 0; argv[argc] != NULL; argc++) 4973*ae771770SStanislav Sedov ; 4974*ae771770SStanislav Sedov 4975*ae771770SStanislav Sedov /* Allocate new argument vector. */ 4976*ae771770SStanislav Sedov new_argv = XMALLOC (char *, argc + 1); 4977*ae771770SStanislav Sedov 4978*ae771770SStanislav Sedov /* Put quoted arguments into the new argument vector. */ 4979*ae771770SStanislav Sedov for (i = 0; i < argc; i++) 4980*ae771770SStanislav Sedov { 4981*ae771770SStanislav Sedov const char *string = argv[i]; 4982*ae771770SStanislav Sedov 4983*ae771770SStanislav Sedov if (string[0] == '\0') 4984*ae771770SStanislav Sedov new_argv[i] = xstrdup ("\"\""); 4985*ae771770SStanislav Sedov else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 4986*ae771770SStanislav Sedov { 4987*ae771770SStanislav Sedov int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 4988*ae771770SStanislav Sedov size_t length; 4989*ae771770SStanislav Sedov unsigned int backslashes; 4990*ae771770SStanislav Sedov const char *s; 4991*ae771770SStanislav Sedov char *quoted_string; 4992*ae771770SStanislav Sedov char *p; 4993*ae771770SStanislav Sedov 4994*ae771770SStanislav Sedov length = 0; 4995*ae771770SStanislav Sedov backslashes = 0; 4996*ae771770SStanislav Sedov if (quote_around) 4997*ae771770SStanislav Sedov length++; 4998*ae771770SStanislav Sedov for (s = string; *s != '\0'; s++) 4999*ae771770SStanislav Sedov { 5000*ae771770SStanislav Sedov char c = *s; 5001*ae771770SStanislav Sedov if (c == '"') 5002*ae771770SStanislav Sedov length += backslashes + 1; 5003*ae771770SStanislav Sedov length++; 5004*ae771770SStanislav Sedov if (c == '\\') 5005*ae771770SStanislav Sedov backslashes++; 5006*ae771770SStanislav Sedov else 5007*ae771770SStanislav Sedov backslashes = 0; 5008*ae771770SStanislav Sedov } 5009*ae771770SStanislav Sedov if (quote_around) 5010*ae771770SStanislav Sedov length += backslashes + 1; 5011*ae771770SStanislav Sedov 5012*ae771770SStanislav Sedov quoted_string = XMALLOC (char, length + 1); 5013*ae771770SStanislav Sedov 5014*ae771770SStanislav Sedov p = quoted_string; 5015*ae771770SStanislav Sedov backslashes = 0; 5016*ae771770SStanislav Sedov if (quote_around) 5017*ae771770SStanislav Sedov *p++ = '"'; 5018*ae771770SStanislav Sedov for (s = string; *s != '\0'; s++) 5019*ae771770SStanislav Sedov { 5020*ae771770SStanislav Sedov char c = *s; 5021*ae771770SStanislav Sedov if (c == '"') 5022*ae771770SStanislav Sedov { 5023*ae771770SStanislav Sedov unsigned int j; 5024*ae771770SStanislav Sedov for (j = backslashes + 1; j > 0; j--) 5025*ae771770SStanislav Sedov *p++ = '\\'; 5026*ae771770SStanislav Sedov } 5027*ae771770SStanislav Sedov *p++ = c; 5028*ae771770SStanislav Sedov if (c == '\\') 5029*ae771770SStanislav Sedov backslashes++; 5030*ae771770SStanislav Sedov else 5031*ae771770SStanislav Sedov backslashes = 0; 5032*ae771770SStanislav Sedov } 5033*ae771770SStanislav Sedov if (quote_around) 5034*ae771770SStanislav Sedov { 5035*ae771770SStanislav Sedov unsigned int j; 5036*ae771770SStanislav Sedov for (j = backslashes; j > 0; j--) 5037*ae771770SStanislav Sedov *p++ = '\\'; 5038*ae771770SStanislav Sedov *p++ = '"'; 5039*ae771770SStanislav Sedov } 5040*ae771770SStanislav Sedov *p = '\0'; 5041*ae771770SStanislav Sedov 5042*ae771770SStanislav Sedov new_argv[i] = quoted_string; 5043*ae771770SStanislav Sedov } 5044*ae771770SStanislav Sedov else 5045*ae771770SStanislav Sedov new_argv[i] = (char *) string; 5046*ae771770SStanislav Sedov } 5047*ae771770SStanislav Sedov new_argv[argc] = NULL; 5048*ae771770SStanislav Sedov 5049*ae771770SStanislav Sedov return new_argv; 5050*ae771770SStanislav Sedov} 5051*ae771770SStanislav SedovEOF 5052*ae771770SStanislav Sedov ;; 5053*ae771770SStanislav Sedov esac 5054*ae771770SStanislav Sedov 5055*ae771770SStanislav Sedov cat <<"EOF" 5056*ae771770SStanislav Sedovvoid lt_dump_script (FILE* f) 5057*ae771770SStanislav Sedov{ 5058*ae771770SStanislav SedovEOF 5059*ae771770SStanislav Sedov func_emit_wrapper yes | 5060*ae771770SStanislav Sedov $SED -e 's/\([\\"]\)/\\\1/g' \ 5061*ae771770SStanislav Sedov -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' 5062*ae771770SStanislav Sedov 5063*ae771770SStanislav Sedov cat <<"EOF" 5064*ae771770SStanislav Sedov} 5065*ae771770SStanislav SedovEOF 5066*ae771770SStanislav Sedov} 5067*ae771770SStanislav Sedov# end: func_emit_cwrapperexe_src 5068*ae771770SStanislav Sedov 5069*ae771770SStanislav Sedov# func_win32_import_lib_p ARG 5070*ae771770SStanislav Sedov# True if ARG is an import lib, as indicated by $file_magic_cmd 5071*ae771770SStanislav Sedovfunc_win32_import_lib_p () 5072*ae771770SStanislav Sedov{ 5073*ae771770SStanislav Sedov $opt_debug 5074*ae771770SStanislav Sedov case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 5075*ae771770SStanislav Sedov *import*) : ;; 5076*ae771770SStanislav Sedov *) false ;; 5077*ae771770SStanislav Sedov esac 5078*ae771770SStanislav Sedov} 5079*ae771770SStanislav Sedov 5080*ae771770SStanislav Sedov# func_mode_link arg... 5081*ae771770SStanislav Sedovfunc_mode_link () 5082*ae771770SStanislav Sedov{ 5083*ae771770SStanislav Sedov $opt_debug 5084*ae771770SStanislav Sedov case $host in 5085*ae771770SStanislav Sedov *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 50865e9cd1aeSAssar Westerlund # It is impossible to link a dll without this setting, and 50875e9cd1aeSAssar Westerlund # we shouldn't force the makefile maintainer to figure out 50885e9cd1aeSAssar Westerlund # which system we are compiling for in order to pass an extra 50891c43270aSJacques Vidrine # flag for every libtool invocation. 50905e9cd1aeSAssar Westerlund # allow_undefined=no 5091b528cefcSMark Murray 50925e9cd1aeSAssar Westerlund # FIXME: Unfortunately, there are problems with the above when trying 50935e9cd1aeSAssar Westerlund # to make a dll which has undefined symbols, in which case not 50945e9cd1aeSAssar Westerlund # even a static library is built. For now, we need to specify 50955e9cd1aeSAssar Westerlund # -no-undefined on the libtool link line when we can be certain 50965e9cd1aeSAssar Westerlund # that all symbols are satisfied, otherwise we get a static library. 50975e9cd1aeSAssar Westerlund allow_undefined=yes 50985e9cd1aeSAssar Westerlund ;; 50995e9cd1aeSAssar Westerlund *) 51005e9cd1aeSAssar Westerlund allow_undefined=yes 51015e9cd1aeSAssar Westerlund ;; 51025e9cd1aeSAssar Westerlund esac 5103*ae771770SStanislav Sedov libtool_args=$nonopt 51041c43270aSJacques Vidrine base_compile="$nonopt $@" 5105*ae771770SStanislav Sedov compile_command=$nonopt 5106*ae771770SStanislav Sedov finalize_command=$nonopt 51075e9cd1aeSAssar Westerlund 51085e9cd1aeSAssar Westerlund compile_rpath= 51095e9cd1aeSAssar Westerlund finalize_rpath= 5110b528cefcSMark Murray compile_shlibpath= 5111b528cefcSMark Murray finalize_shlibpath= 5112b528cefcSMark Murray convenience= 5113b528cefcSMark Murray old_convenience= 5114b528cefcSMark Murray deplibs= 51155e9cd1aeSAssar Westerlund old_deplibs= 51165e9cd1aeSAssar Westerlund compiler_flags= 51175e9cd1aeSAssar Westerlund linker_flags= 51185e9cd1aeSAssar Westerlund dllsearchpath= 51195e9cd1aeSAssar Westerlund lib_search_path=`pwd` 51201c43270aSJacques Vidrine inst_prefix_dir= 5121*ae771770SStanislav Sedov new_inherited_linker_flags= 5122b528cefcSMark Murray 51235e9cd1aeSAssar Westerlund avoid_version=no 5124*ae771770SStanislav Sedov bindir= 5125b528cefcSMark Murray dlfiles= 5126b528cefcSMark Murray dlprefiles= 51275e9cd1aeSAssar Westerlund dlself=no 5128b528cefcSMark Murray export_dynamic=no 5129b528cefcSMark Murray export_symbols= 51305e9cd1aeSAssar Westerlund export_symbols_regex= 5131b528cefcSMark Murray generated= 5132b528cefcSMark Murray libobjs= 5133b528cefcSMark Murray ltlibs= 5134b528cefcSMark Murray module=no 51355e9cd1aeSAssar Westerlund no_install=no 5136b528cefcSMark Murray objs= 51371c43270aSJacques Vidrine non_pic_objects= 51381c43270aSJacques Vidrine precious_files_regex= 51395e9cd1aeSAssar Westerlund prefer_static_libs=no 51405e9cd1aeSAssar Westerlund preload=no 5141b528cefcSMark Murray prev= 5142b528cefcSMark Murray prevarg= 5143b528cefcSMark Murray release= 5144b528cefcSMark Murray rpath= 51455e9cd1aeSAssar Westerlund xrpath= 5146b528cefcSMark Murray perm_rpath= 5147b528cefcSMark Murray temp_rpath= 51485e9cd1aeSAssar Westerlund thread_safe=no 5149b528cefcSMark Murray vinfo= 51501c43270aSJacques Vidrine vinfo_number=no 5151*ae771770SStanislav Sedov weak_libs= 5152*ae771770SStanislav Sedov single_module="${wl}-single_module" 5153c19800e8SDoug Rabson func_infer_tag $base_compile 5154b528cefcSMark Murray 5155b528cefcSMark Murray # We need to know -static, to get the right output filenames. 5156b528cefcSMark Murray for arg 5157b528cefcSMark Murray do 51584137ff4cSJacques Vidrine case $arg in 5159*ae771770SStanislav Sedov -shared) 5160*ae771770SStanislav Sedov test "$build_libtool_libs" != yes && \ 5161*ae771770SStanislav Sedov func_fatal_configuration "can not build a shared library" 5162*ae771770SStanislav Sedov build_old_libs=no 5163*ae771770SStanislav Sedov break 5164*ae771770SStanislav Sedov ;; 5165*ae771770SStanislav Sedov -all-static | -static | -static-libtool-libs) 5166*ae771770SStanislav Sedov case $arg in 5167*ae771770SStanislav Sedov -all-static) 51685e9cd1aeSAssar Westerlund if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 5169*ae771770SStanislav Sedov func_warning "complete static linking is impossible in this configuration" 5170b528cefcSMark Murray fi 51715e9cd1aeSAssar Westerlund if test -n "$link_static_flag"; then 51725e9cd1aeSAssar Westerlund dlopen_self=$dlopen_self_static 51735e9cd1aeSAssar Westerlund fi 5174c19800e8SDoug Rabson prefer_static_libs=yes 5175*ae771770SStanislav Sedov ;; 5176*ae771770SStanislav Sedov -static) 51775e9cd1aeSAssar Westerlund if test -z "$pic_flag" && test -n "$link_static_flag"; then 51785e9cd1aeSAssar Westerlund dlopen_self=$dlopen_self_static 51795e9cd1aeSAssar Westerlund fi 5180c19800e8SDoug Rabson prefer_static_libs=built 5181*ae771770SStanislav Sedov ;; 5182*ae771770SStanislav Sedov -static-libtool-libs) 5183*ae771770SStanislav Sedov if test -z "$pic_flag" && test -n "$link_static_flag"; then 5184*ae771770SStanislav Sedov dlopen_self=$dlopen_self_static 51855e9cd1aeSAssar Westerlund fi 5186*ae771770SStanislav Sedov prefer_static_libs=yes 5187*ae771770SStanislav Sedov ;; 5188*ae771770SStanislav Sedov esac 5189b528cefcSMark Murray build_libtool_libs=no 5190b528cefcSMark Murray build_old_libs=yes 5191b528cefcSMark Murray break 5192b528cefcSMark Murray ;; 5193b528cefcSMark Murray esac 5194b528cefcSMark Murray done 5195b528cefcSMark Murray 5196b528cefcSMark Murray # See if our shared archives depend on static archives. 5197b528cefcSMark Murray test -n "$old_archive_from_new_cmds" && build_old_libs=yes 5198b528cefcSMark Murray 5199b528cefcSMark Murray # Go through the arguments, transforming them on the way. 52001c43270aSJacques Vidrine while test "$#" -gt 0; do 5201b528cefcSMark Murray arg="$1" 5202b528cefcSMark Murray shift 5203*ae771770SStanislav Sedov func_quote_for_eval "$arg" 5204*ae771770SStanislav Sedov qarg=$func_quote_for_eval_unquoted_result 5205*ae771770SStanislav Sedov func_append libtool_args " $func_quote_for_eval_result" 5206b528cefcSMark Murray 5207b528cefcSMark Murray # If the previous option needs an argument, assign it. 5208b528cefcSMark Murray if test -n "$prev"; then 52094137ff4cSJacques Vidrine case $prev in 5210b528cefcSMark Murray output) 5211*ae771770SStanislav Sedov func_append compile_command " @OUTPUT@" 5212*ae771770SStanislav Sedov func_append finalize_command " @OUTPUT@" 5213b528cefcSMark Murray ;; 5214b528cefcSMark Murray esac 5215b528cefcSMark Murray 52164137ff4cSJacques Vidrine case $prev in 5217*ae771770SStanislav Sedov bindir) 5218*ae771770SStanislav Sedov bindir="$arg" 5219*ae771770SStanislav Sedov prev= 5220*ae771770SStanislav Sedov continue 5221*ae771770SStanislav Sedov ;; 5222b528cefcSMark Murray dlfiles|dlprefiles) 52235e9cd1aeSAssar Westerlund if test "$preload" = no; then 52245e9cd1aeSAssar Westerlund # Add the symbol object into the linking commands. 5225*ae771770SStanislav Sedov func_append compile_command " @SYMFILE@" 5226*ae771770SStanislav Sedov func_append finalize_command " @SYMFILE@" 52275e9cd1aeSAssar Westerlund preload=yes 52285e9cd1aeSAssar Westerlund fi 52294137ff4cSJacques Vidrine case $arg in 5230b528cefcSMark Murray *.la | *.lo) ;; # We handle these cases below. 52315e9cd1aeSAssar Westerlund force) 52325e9cd1aeSAssar Westerlund if test "$dlself" = no; then 52335e9cd1aeSAssar Westerlund dlself=needless 52345e9cd1aeSAssar Westerlund export_dynamic=yes 52355e9cd1aeSAssar Westerlund fi 5236b528cefcSMark Murray prev= 52375e9cd1aeSAssar Westerlund continue 52385e9cd1aeSAssar Westerlund ;; 52395e9cd1aeSAssar Westerlund self) 52405e9cd1aeSAssar Westerlund if test "$prev" = dlprefiles; then 52415e9cd1aeSAssar Westerlund dlself=yes 52425e9cd1aeSAssar Westerlund elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 52435e9cd1aeSAssar Westerlund dlself=yes 52445e9cd1aeSAssar Westerlund else 52455e9cd1aeSAssar Westerlund dlself=needless 52465e9cd1aeSAssar Westerlund export_dynamic=yes 52475e9cd1aeSAssar Westerlund fi 52485e9cd1aeSAssar Westerlund prev= 52495e9cd1aeSAssar Westerlund continue 52505e9cd1aeSAssar Westerlund ;; 52515e9cd1aeSAssar Westerlund *) 52525e9cd1aeSAssar Westerlund if test "$prev" = dlfiles; then 5253*ae771770SStanislav Sedov func_append dlfiles " $arg" 52545e9cd1aeSAssar Westerlund else 5255*ae771770SStanislav Sedov func_append dlprefiles " $arg" 52565e9cd1aeSAssar Westerlund fi 52575e9cd1aeSAssar Westerlund prev= 52585e9cd1aeSAssar Westerlund continue 5259b528cefcSMark Murray ;; 5260b528cefcSMark Murray esac 5261b528cefcSMark Murray ;; 52625e9cd1aeSAssar Westerlund expsyms) 5263b528cefcSMark Murray export_symbols="$arg" 5264*ae771770SStanislav Sedov test -f "$arg" \ 5265*ae771770SStanislav Sedov || func_fatal_error "symbol file \`$arg' does not exist" 5266b528cefcSMark Murray prev= 52675e9cd1aeSAssar Westerlund continue 52685e9cd1aeSAssar Westerlund ;; 52695e9cd1aeSAssar Westerlund expsyms_regex) 52705e9cd1aeSAssar Westerlund export_symbols_regex="$arg" 52715e9cd1aeSAssar Westerlund prev= 52725e9cd1aeSAssar Westerlund continue 5273b528cefcSMark Murray ;; 5274*ae771770SStanislav Sedov framework) 5275*ae771770SStanislav Sedov case $host in 5276*ae771770SStanislav Sedov *-*-darwin*) 5277*ae771770SStanislav Sedov case "$deplibs " in 5278*ae771770SStanislav Sedov *" $qarg.ltframework "*) ;; 5279*ae771770SStanislav Sedov *) func_append deplibs " $qarg.ltframework" # this is fixed later 5280*ae771770SStanislav Sedov ;; 5281*ae771770SStanislav Sedov esac 5282*ae771770SStanislav Sedov ;; 5283*ae771770SStanislav Sedov esac 5284*ae771770SStanislav Sedov prev= 5285*ae771770SStanislav Sedov continue 5286*ae771770SStanislav Sedov ;; 52871c43270aSJacques Vidrine inst_prefix) 52881c43270aSJacques Vidrine inst_prefix_dir="$arg" 52891c43270aSJacques Vidrine prev= 52901c43270aSJacques Vidrine continue 52911c43270aSJacques Vidrine ;; 5292*ae771770SStanislav Sedov objectlist) 5293*ae771770SStanislav Sedov if test -f "$arg"; then 5294*ae771770SStanislav Sedov save_arg=$arg 5295*ae771770SStanislav Sedov moreargs= 5296*ae771770SStanislav Sedov for fil in `cat "$save_arg"` 5297*ae771770SStanislav Sedov do 5298*ae771770SStanislav Sedov# func_append moreargs " $fil" 5299*ae771770SStanislav Sedov arg=$fil 5300*ae771770SStanislav Sedov # A libtool-controlled object. 5301*ae771770SStanislav Sedov 5302*ae771770SStanislav Sedov # Check to see that this really is a libtool object. 5303*ae771770SStanislav Sedov if func_lalib_unsafe_p "$arg"; then 5304*ae771770SStanislav Sedov pic_object= 5305*ae771770SStanislav Sedov non_pic_object= 5306*ae771770SStanislav Sedov 5307*ae771770SStanislav Sedov # Read the .lo file 5308*ae771770SStanislav Sedov func_source "$arg" 5309*ae771770SStanislav Sedov 5310*ae771770SStanislav Sedov if test -z "$pic_object" || 5311*ae771770SStanislav Sedov test -z "$non_pic_object" || 5312*ae771770SStanislav Sedov test "$pic_object" = none && 5313*ae771770SStanislav Sedov test "$non_pic_object" = none; then 5314*ae771770SStanislav Sedov func_fatal_error "cannot find name of object for \`$arg'" 5315*ae771770SStanislav Sedov fi 5316*ae771770SStanislav Sedov 5317*ae771770SStanislav Sedov # Extract subdirectory from the argument. 5318*ae771770SStanislav Sedov func_dirname "$arg" "/" "" 5319*ae771770SStanislav Sedov xdir="$func_dirname_result" 5320*ae771770SStanislav Sedov 5321*ae771770SStanislav Sedov if test "$pic_object" != none; then 5322*ae771770SStanislav Sedov # Prepend the subdirectory the object is found in. 5323*ae771770SStanislav Sedov pic_object="$xdir$pic_object" 5324*ae771770SStanislav Sedov 5325*ae771770SStanislav Sedov if test "$prev" = dlfiles; then 5326*ae771770SStanislav Sedov if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 5327*ae771770SStanislav Sedov func_append dlfiles " $pic_object" 5328*ae771770SStanislav Sedov prev= 5329*ae771770SStanislav Sedov continue 5330*ae771770SStanislav Sedov else 5331*ae771770SStanislav Sedov # If libtool objects are unsupported, then we need to preload. 5332*ae771770SStanislav Sedov prev=dlprefiles 5333*ae771770SStanislav Sedov fi 5334*ae771770SStanislav Sedov fi 5335*ae771770SStanislav Sedov 5336*ae771770SStanislav Sedov # CHECK ME: I think I busted this. -Ossama 5337*ae771770SStanislav Sedov if test "$prev" = dlprefiles; then 5338*ae771770SStanislav Sedov # Preload the old-style object. 5339*ae771770SStanislav Sedov func_append dlprefiles " $pic_object" 5340*ae771770SStanislav Sedov prev= 5341*ae771770SStanislav Sedov fi 5342*ae771770SStanislav Sedov 5343*ae771770SStanislav Sedov # A PIC object. 5344*ae771770SStanislav Sedov func_append libobjs " $pic_object" 5345*ae771770SStanislav Sedov arg="$pic_object" 5346*ae771770SStanislav Sedov fi 5347*ae771770SStanislav Sedov 5348*ae771770SStanislav Sedov # Non-PIC object. 5349*ae771770SStanislav Sedov if test "$non_pic_object" != none; then 5350*ae771770SStanislav Sedov # Prepend the subdirectory the object is found in. 5351*ae771770SStanislav Sedov non_pic_object="$xdir$non_pic_object" 5352*ae771770SStanislav Sedov 5353*ae771770SStanislav Sedov # A standard non-PIC object 5354*ae771770SStanislav Sedov func_append non_pic_objects " $non_pic_object" 5355*ae771770SStanislav Sedov if test -z "$pic_object" || test "$pic_object" = none ; then 5356*ae771770SStanislav Sedov arg="$non_pic_object" 5357*ae771770SStanislav Sedov fi 5358*ae771770SStanislav Sedov else 5359*ae771770SStanislav Sedov # If the PIC object exists, use it instead. 5360*ae771770SStanislav Sedov # $xdir was prepended to $pic_object above. 5361*ae771770SStanislav Sedov non_pic_object="$pic_object" 5362*ae771770SStanislav Sedov func_append non_pic_objects " $non_pic_object" 5363*ae771770SStanislav Sedov fi 5364*ae771770SStanislav Sedov else 5365*ae771770SStanislav Sedov # Only an error if not doing a dry-run. 5366*ae771770SStanislav Sedov if $opt_dry_run; then 5367*ae771770SStanislav Sedov # Extract subdirectory from the argument. 5368*ae771770SStanislav Sedov func_dirname "$arg" "/" "" 5369*ae771770SStanislav Sedov xdir="$func_dirname_result" 5370*ae771770SStanislav Sedov 5371*ae771770SStanislav Sedov func_lo2o "$arg" 5372*ae771770SStanislav Sedov pic_object=$xdir$objdir/$func_lo2o_result 5373*ae771770SStanislav Sedov non_pic_object=$xdir$func_lo2o_result 5374*ae771770SStanislav Sedov func_append libobjs " $pic_object" 5375*ae771770SStanislav Sedov func_append non_pic_objects " $non_pic_object" 5376*ae771770SStanislav Sedov else 5377*ae771770SStanislav Sedov func_fatal_error "\`$arg' is not a valid libtool object" 5378*ae771770SStanislav Sedov fi 5379*ae771770SStanislav Sedov fi 5380*ae771770SStanislav Sedov done 5381*ae771770SStanislav Sedov else 5382*ae771770SStanislav Sedov func_fatal_error "link input file \`$arg' does not exist" 5383*ae771770SStanislav Sedov fi 5384*ae771770SStanislav Sedov arg=$save_arg 5385*ae771770SStanislav Sedov prev= 5386*ae771770SStanislav Sedov continue 5387*ae771770SStanislav Sedov ;; 53881c43270aSJacques Vidrine precious_regex) 53891c43270aSJacques Vidrine precious_files_regex="$arg" 53901c43270aSJacques Vidrine prev= 53911c43270aSJacques Vidrine continue 53921c43270aSJacques Vidrine ;; 5393b528cefcSMark Murray release) 5394b528cefcSMark Murray release="-$arg" 5395b528cefcSMark Murray prev= 5396b528cefcSMark Murray continue 5397b528cefcSMark Murray ;; 53985e9cd1aeSAssar Westerlund rpath | xrpath) 53995e9cd1aeSAssar Westerlund # We need an absolute path. 54004137ff4cSJacques Vidrine case $arg in 54015e9cd1aeSAssar Westerlund [\\/]* | [A-Za-z]:[\\/]*) ;; 54025e9cd1aeSAssar Westerlund *) 5403*ae771770SStanislav Sedov func_fatal_error "only absolute run-paths are allowed" 54045e9cd1aeSAssar Westerlund ;; 54055e9cd1aeSAssar Westerlund esac 54065e9cd1aeSAssar Westerlund if test "$prev" = rpath; then 54075e9cd1aeSAssar Westerlund case "$rpath " in 54085e9cd1aeSAssar Westerlund *" $arg "*) ;; 5409*ae771770SStanislav Sedov *) func_append rpath " $arg" ;; 54105e9cd1aeSAssar Westerlund esac 54115e9cd1aeSAssar Westerlund else 54125e9cd1aeSAssar Westerlund case "$xrpath " in 54135e9cd1aeSAssar Westerlund *" $arg "*) ;; 5414*ae771770SStanislav Sedov *) func_append xrpath " $arg" ;; 54155e9cd1aeSAssar Westerlund esac 54165e9cd1aeSAssar Westerlund fi 5417b528cefcSMark Murray prev= 5418b528cefcSMark Murray continue 5419b528cefcSMark Murray ;; 5420c19800e8SDoug Rabson shrext) 5421c19800e8SDoug Rabson shrext_cmds="$arg" 5422c19800e8SDoug Rabson prev= 5423c19800e8SDoug Rabson continue 5424c19800e8SDoug Rabson ;; 5425*ae771770SStanislav Sedov weak) 5426*ae771770SStanislav Sedov func_append weak_libs " $arg" 5427c19800e8SDoug Rabson prev= 5428c19800e8SDoug Rabson continue 5429c19800e8SDoug Rabson ;; 5430*ae771770SStanislav Sedov xcclinker) 5431*ae771770SStanislav Sedov func_append linker_flags " $qarg" 5432*ae771770SStanislav Sedov func_append compiler_flags " $qarg" 5433*ae771770SStanislav Sedov prev= 5434*ae771770SStanislav Sedov func_append compile_command " $qarg" 5435*ae771770SStanislav Sedov func_append finalize_command " $qarg" 5436*ae771770SStanislav Sedov continue 5437*ae771770SStanislav Sedov ;; 5438*ae771770SStanislav Sedov xcompiler) 5439*ae771770SStanislav Sedov func_append compiler_flags " $qarg" 5440*ae771770SStanislav Sedov prev= 5441*ae771770SStanislav Sedov func_append compile_command " $qarg" 5442*ae771770SStanislav Sedov func_append finalize_command " $qarg" 5443*ae771770SStanislav Sedov continue 5444*ae771770SStanislav Sedov ;; 5445*ae771770SStanislav Sedov xlinker) 5446*ae771770SStanislav Sedov func_append linker_flags " $qarg" 5447*ae771770SStanislav Sedov func_append compiler_flags " $wl$qarg" 5448*ae771770SStanislav Sedov prev= 5449*ae771770SStanislav Sedov func_append compile_command " $wl$qarg" 5450*ae771770SStanislav Sedov func_append finalize_command " $wl$qarg" 5451*ae771770SStanislav Sedov continue 5452*ae771770SStanislav Sedov ;; 5453b528cefcSMark Murray *) 5454b528cefcSMark Murray eval "$prev=\"\$arg\"" 5455b528cefcSMark Murray prev= 5456b528cefcSMark Murray continue 5457b528cefcSMark Murray ;; 5458b528cefcSMark Murray esac 54591c43270aSJacques Vidrine fi # test -n "$prev" 5460b528cefcSMark Murray 5461b528cefcSMark Murray prevarg="$arg" 5462b528cefcSMark Murray 54634137ff4cSJacques Vidrine case $arg in 5464b528cefcSMark Murray -all-static) 5465b528cefcSMark Murray if test -n "$link_static_flag"; then 5466*ae771770SStanislav Sedov # See comment for -static flag below, for more details. 5467*ae771770SStanislav Sedov func_append compile_command " $link_static_flag" 5468*ae771770SStanislav Sedov func_append finalize_command " $link_static_flag" 5469b528cefcSMark Murray fi 5470b528cefcSMark Murray continue 5471b528cefcSMark Murray ;; 5472b528cefcSMark Murray 5473b528cefcSMark Murray -allow-undefined) 5474b528cefcSMark Murray # FIXME: remove this flag sometime in the future. 5475*ae771770SStanislav Sedov func_fatal_error "\`-allow-undefined' must not be used because it is the default" 5476b528cefcSMark Murray ;; 5477b528cefcSMark Murray 54785e9cd1aeSAssar Westerlund -avoid-version) 54795e9cd1aeSAssar Westerlund avoid_version=yes 54805e9cd1aeSAssar Westerlund continue 54815e9cd1aeSAssar Westerlund ;; 54825e9cd1aeSAssar Westerlund 5483*ae771770SStanislav Sedov -bindir) 5484*ae771770SStanislav Sedov prev=bindir 5485*ae771770SStanislav Sedov continue 5486*ae771770SStanislav Sedov ;; 5487*ae771770SStanislav Sedov 5488b528cefcSMark Murray -dlopen) 5489b528cefcSMark Murray prev=dlfiles 5490b528cefcSMark Murray continue 5491b528cefcSMark Murray ;; 5492b528cefcSMark Murray 5493b528cefcSMark Murray -dlpreopen) 5494b528cefcSMark Murray prev=dlprefiles 5495b528cefcSMark Murray continue 5496b528cefcSMark Murray ;; 5497b528cefcSMark Murray 5498b528cefcSMark Murray -export-dynamic) 5499b528cefcSMark Murray export_dynamic=yes 55005e9cd1aeSAssar Westerlund continue 5501b528cefcSMark Murray ;; 5502b528cefcSMark Murray 55035e9cd1aeSAssar Westerlund -export-symbols | -export-symbols-regex) 55045e9cd1aeSAssar Westerlund if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 5505*ae771770SStanislav Sedov func_fatal_error "more than one -exported-symbols argument is not allowed" 5506b528cefcSMark Murray fi 55075e9cd1aeSAssar Westerlund if test "X$arg" = "X-export-symbols"; then 55085e9cd1aeSAssar Westerlund prev=expsyms 55095e9cd1aeSAssar Westerlund else 55105e9cd1aeSAssar Westerlund prev=expsyms_regex 55115e9cd1aeSAssar Westerlund fi 5512b528cefcSMark Murray continue 5513b528cefcSMark Murray ;; 5514b528cefcSMark Murray 5515*ae771770SStanislav Sedov -framework) 5516*ae771770SStanislav Sedov prev=framework 5517c19800e8SDoug Rabson continue 5518c19800e8SDoug Rabson ;; 5519c19800e8SDoug Rabson 55201c43270aSJacques Vidrine -inst-prefix-dir) 55211c43270aSJacques Vidrine prev=inst_prefix 55221c43270aSJacques Vidrine continue 55231c43270aSJacques Vidrine ;; 55241c43270aSJacques Vidrine 55254137ff4cSJacques Vidrine # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 55264137ff4cSJacques Vidrine # so, if we see these flags be careful not to treat them like -L 55274137ff4cSJacques Vidrine -L[A-Z][A-Z]*:*) 55284137ff4cSJacques Vidrine case $with_gcc/$host in 55291c43270aSJacques Vidrine no/*-*-irix* | /*-*-irix*) 5530*ae771770SStanislav Sedov func_append compile_command " $arg" 5531*ae771770SStanislav Sedov func_append finalize_command " $arg" 55324137ff4cSJacques Vidrine ;; 55334137ff4cSJacques Vidrine esac 55344137ff4cSJacques Vidrine continue 55354137ff4cSJacques Vidrine ;; 55364137ff4cSJacques Vidrine 5537b528cefcSMark Murray -L*) 5538*ae771770SStanislav Sedov func_stripname "-L" '' "$arg" 5539*ae771770SStanislav Sedov if test -z "$func_stripname_result"; then 5540*ae771770SStanislav Sedov if test "$#" -gt 0; then 5541*ae771770SStanislav Sedov func_fatal_error "require no space between \`-L' and \`$1'" 5542*ae771770SStanislav Sedov else 5543*ae771770SStanislav Sedov func_fatal_error "need path for \`-L' option" 5544*ae771770SStanislav Sedov fi 5545*ae771770SStanislav Sedov fi 5546*ae771770SStanislav Sedov func_resolve_sysroot "$func_stripname_result" 5547*ae771770SStanislav Sedov dir=$func_resolve_sysroot_result 55485e9cd1aeSAssar Westerlund # We need an absolute path. 55494137ff4cSJacques Vidrine case $dir in 55505e9cd1aeSAssar Westerlund [\\/]* | [A-Za-z]:[\\/]*) ;; 5551b528cefcSMark Murray *) 55525e9cd1aeSAssar Westerlund absdir=`cd "$dir" && pwd` 5553*ae771770SStanislav Sedov test -z "$absdir" && \ 5554*ae771770SStanislav Sedov func_fatal_error "cannot determine absolute directory name of \`$dir'" 55555e9cd1aeSAssar Westerlund dir="$absdir" 5556b528cefcSMark Murray ;; 5557b528cefcSMark Murray esac 55585e9cd1aeSAssar Westerlund case "$deplibs " in 5559*ae771770SStanislav Sedov *" -L$dir "* | *" $arg "*) 5560*ae771770SStanislav Sedov # Will only happen for absolute or sysroot arguments 5561*ae771770SStanislav Sedov ;; 55625e9cd1aeSAssar Westerlund *) 5563*ae771770SStanislav Sedov # Preserve sysroot, but never include relative directories 5564*ae771770SStanislav Sedov case $dir in 5565*ae771770SStanislav Sedov [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 5566*ae771770SStanislav Sedov *) func_append deplibs " -L$dir" ;; 5567*ae771770SStanislav Sedov esac 5568*ae771770SStanislav Sedov func_append lib_search_path " $dir" 55695e9cd1aeSAssar Westerlund ;; 55705e9cd1aeSAssar Westerlund esac 55714137ff4cSJacques Vidrine case $host in 5572*ae771770SStanislav Sedov *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 5573*ae771770SStanislav Sedov testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 55744137ff4cSJacques Vidrine case :$dllsearchpath: in 55755e9cd1aeSAssar Westerlund *":$dir:"*) ;; 5576*ae771770SStanislav Sedov ::) dllsearchpath=$dir;; 5577*ae771770SStanislav Sedov *) func_append dllsearchpath ":$dir";; 55785e9cd1aeSAssar Westerlund esac 5579c19800e8SDoug Rabson case :$dllsearchpath: in 5580c19800e8SDoug Rabson *":$testbindir:"*) ;; 5581*ae771770SStanislav Sedov ::) dllsearchpath=$testbindir;; 5582*ae771770SStanislav Sedov *) func_append dllsearchpath ":$testbindir";; 5583c19800e8SDoug Rabson esac 55845e9cd1aeSAssar Westerlund ;; 55855e9cd1aeSAssar Westerlund esac 55865e9cd1aeSAssar Westerlund continue 5587b528cefcSMark Murray ;; 5588b528cefcSMark Murray 55895e9cd1aeSAssar Westerlund -l*) 55904137ff4cSJacques Vidrine if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 55914137ff4cSJacques Vidrine case $host in 5592*ae771770SStanislav Sedov *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 55934137ff4cSJacques Vidrine # These systems don't actually have a C or math library (as such) 55945e9cd1aeSAssar Westerlund continue 55955e9cd1aeSAssar Westerlund ;; 5596c19800e8SDoug Rabson *-*-os2*) 55974137ff4cSJacques Vidrine # These systems don't actually have a C library (as such) 55984137ff4cSJacques Vidrine test "X$arg" = "X-lc" && continue 55995e9cd1aeSAssar Westerlund ;; 5600c19800e8SDoug Rabson *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 56018373020dSJacques Vidrine # Do not include libc due to us having libc/libc_r. 56028373020dSJacques Vidrine test "X$arg" = "X-lc" && continue 56038373020dSJacques Vidrine ;; 56041c43270aSJacques Vidrine *-*-rhapsody* | *-*-darwin1.[012]) 56051c43270aSJacques Vidrine # Rhapsody C and math libraries are in the System framework 5606*ae771770SStanislav Sedov func_append deplibs " System.ltframework" 56071c43270aSJacques Vidrine continue 5608c19800e8SDoug Rabson ;; 5609c19800e8SDoug Rabson *-*-sco3.2v5* | *-*-sco5v6*) 5610c19800e8SDoug Rabson # Causes problems with __ctype 5611c19800e8SDoug Rabson test "X$arg" = "X-lc" && continue 5612c19800e8SDoug Rabson ;; 5613c19800e8SDoug Rabson *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 5614c19800e8SDoug Rabson # Compiler inserts libc in the correct place for threads to work 5615c19800e8SDoug Rabson test "X$arg" = "X-lc" && continue 5616c19800e8SDoug Rabson ;; 56178373020dSJacques Vidrine esac 56188373020dSJacques Vidrine elif test "X$arg" = "X-lc_r"; then 56198373020dSJacques Vidrine case $host in 5620c19800e8SDoug Rabson *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 56218373020dSJacques Vidrine # Do not include libc_r directly, use -pthread flag. 56228373020dSJacques Vidrine continue 56238373020dSJacques Vidrine ;; 56245e9cd1aeSAssar Westerlund esac 56255e9cd1aeSAssar Westerlund fi 5626*ae771770SStanislav Sedov func_append deplibs " $arg" 56271c43270aSJacques Vidrine continue 56281c43270aSJacques Vidrine ;; 56291c43270aSJacques Vidrine 5630b528cefcSMark Murray -module) 5631b528cefcSMark Murray module=yes 56325e9cd1aeSAssar Westerlund continue 56335e9cd1aeSAssar Westerlund ;; 56345e9cd1aeSAssar Westerlund 5635*ae771770SStanislav Sedov # Tru64 UNIX uses -model [arg] to determine the layout of C++ 5636*ae771770SStanislav Sedov # classes, name mangling, and exception handling. 5637*ae771770SStanislav Sedov # Darwin uses the -arch flag to determine output architecture. 5638*ae771770SStanislav Sedov -model|-arch|-isysroot|--sysroot) 5639*ae771770SStanislav Sedov func_append compiler_flags " $arg" 5640*ae771770SStanislav Sedov func_append compile_command " $arg" 5641*ae771770SStanislav Sedov func_append finalize_command " $arg" 5642*ae771770SStanislav Sedov prev=xcompiler 56431c43270aSJacques Vidrine continue 56441c43270aSJacques Vidrine ;; 56451c43270aSJacques Vidrine 5646*ae771770SStanislav Sedov -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 5647*ae771770SStanislav Sedov func_append compiler_flags " $arg" 5648*ae771770SStanislav Sedov func_append compile_command " $arg" 5649*ae771770SStanislav Sedov func_append finalize_command " $arg" 5650*ae771770SStanislav Sedov case "$new_inherited_linker_flags " in 5651*ae771770SStanislav Sedov *" $arg "*) ;; 5652*ae771770SStanislav Sedov * ) func_append new_inherited_linker_flags " $arg" ;; 5653*ae771770SStanislav Sedov esac 5654*ae771770SStanislav Sedov continue 5655*ae771770SStanislav Sedov ;; 5656*ae771770SStanislav Sedov 5657*ae771770SStanislav Sedov -multi_module) 5658*ae771770SStanislav Sedov single_module="${wl}-multi_module" 56591c43270aSJacques Vidrine continue 56601c43270aSJacques Vidrine ;; 56611c43270aSJacques Vidrine 56625e9cd1aeSAssar Westerlund -no-fast-install) 56635e9cd1aeSAssar Westerlund fast_install=no 56645e9cd1aeSAssar Westerlund continue 56655e9cd1aeSAssar Westerlund ;; 56665e9cd1aeSAssar Westerlund 56675e9cd1aeSAssar Westerlund -no-install) 56684137ff4cSJacques Vidrine case $host in 5669*ae771770SStanislav Sedov *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 56705e9cd1aeSAssar Westerlund # The PATH hackery in wrapper scripts is required on Windows 5671*ae771770SStanislav Sedov # and Darwin in order for the loader to find any dlls it needs. 5672*ae771770SStanislav Sedov func_warning "\`-no-install' is ignored for $host" 5673*ae771770SStanislav Sedov func_warning "assuming \`-no-fast-install' instead" 56745e9cd1aeSAssar Westerlund fast_install=no 56755e9cd1aeSAssar Westerlund ;; 56764137ff4cSJacques Vidrine *) no_install=yes ;; 56775e9cd1aeSAssar Westerlund esac 56785e9cd1aeSAssar Westerlund continue 5679b528cefcSMark Murray ;; 5680b528cefcSMark Murray 5681b528cefcSMark Murray -no-undefined) 5682b528cefcSMark Murray allow_undefined=no 5683b528cefcSMark Murray continue 5684b528cefcSMark Murray ;; 5685b528cefcSMark Murray 56861c43270aSJacques Vidrine -objectlist) 56871c43270aSJacques Vidrine prev=objectlist 56881c43270aSJacques Vidrine continue 56891c43270aSJacques Vidrine ;; 56901c43270aSJacques Vidrine 5691b528cefcSMark Murray -o) prev=output ;; 5692b528cefcSMark Murray 56931c43270aSJacques Vidrine -precious-files-regex) 56941c43270aSJacques Vidrine prev=precious_regex 56951c43270aSJacques Vidrine continue 56961c43270aSJacques Vidrine ;; 56971c43270aSJacques Vidrine 5698b528cefcSMark Murray -release) 5699b528cefcSMark Murray prev=release 5700b528cefcSMark Murray continue 5701b528cefcSMark Murray ;; 5702b528cefcSMark Murray 5703b528cefcSMark Murray -rpath) 5704b528cefcSMark Murray prev=rpath 5705b528cefcSMark Murray continue 5706b528cefcSMark Murray ;; 5707b528cefcSMark Murray 57085e9cd1aeSAssar Westerlund -R) 57095e9cd1aeSAssar Westerlund prev=xrpath 57105e9cd1aeSAssar Westerlund continue 57115e9cd1aeSAssar Westerlund ;; 57125e9cd1aeSAssar Westerlund 57135e9cd1aeSAssar Westerlund -R*) 5714*ae771770SStanislav Sedov func_stripname '-R' '' "$arg" 5715*ae771770SStanislav Sedov dir=$func_stripname_result 57165e9cd1aeSAssar Westerlund # We need an absolute path. 57174137ff4cSJacques Vidrine case $dir in 57185e9cd1aeSAssar Westerlund [\\/]* | [A-Za-z]:[\\/]*) ;; 5719*ae771770SStanislav Sedov =*) 5720*ae771770SStanislav Sedov func_stripname '=' '' "$dir" 5721*ae771770SStanislav Sedov dir=$lt_sysroot$func_stripname_result 5722*ae771770SStanislav Sedov ;; 57235e9cd1aeSAssar Westerlund *) 5724*ae771770SStanislav Sedov func_fatal_error "only absolute run-paths are allowed" 57255e9cd1aeSAssar Westerlund ;; 57265e9cd1aeSAssar Westerlund esac 57275e9cd1aeSAssar Westerlund case "$xrpath " in 57285e9cd1aeSAssar Westerlund *" $dir "*) ;; 5729*ae771770SStanislav Sedov *) func_append xrpath " $dir" ;; 57305e9cd1aeSAssar Westerlund esac 57315e9cd1aeSAssar Westerlund continue 57325e9cd1aeSAssar Westerlund ;; 57335e9cd1aeSAssar Westerlund 5734*ae771770SStanislav Sedov -shared) 5735*ae771770SStanislav Sedov # The effects of -shared are defined in a previous loop. 5736*ae771770SStanislav Sedov continue 5737*ae771770SStanislav Sedov ;; 5738*ae771770SStanislav Sedov 5739*ae771770SStanislav Sedov -shrext) 5740*ae771770SStanislav Sedov prev=shrext 5741*ae771770SStanislav Sedov continue 5742*ae771770SStanislav Sedov ;; 5743*ae771770SStanislav Sedov 5744*ae771770SStanislav Sedov -static | -static-libtool-libs) 57454137ff4cSJacques Vidrine # The effects of -static are defined in a previous loop. 57464137ff4cSJacques Vidrine # We used to do the same as -all-static on platforms that 57474137ff4cSJacques Vidrine # didn't have a PIC flag, but the assumption that the effects 57484137ff4cSJacques Vidrine # would be equivalent was wrong. It would break on at least 57494137ff4cSJacques Vidrine # Digital Unix and AIX. 5750b528cefcSMark Murray continue 5751b528cefcSMark Murray ;; 5752b528cefcSMark Murray 57535e9cd1aeSAssar Westerlund -thread-safe) 57545e9cd1aeSAssar Westerlund thread_safe=yes 57555e9cd1aeSAssar Westerlund continue 57565e9cd1aeSAssar Westerlund ;; 57575e9cd1aeSAssar Westerlund 5758b528cefcSMark Murray -version-info) 5759b528cefcSMark Murray prev=vinfo 5760b528cefcSMark Murray continue 5761b528cefcSMark Murray ;; 5762*ae771770SStanislav Sedov 57631c43270aSJacques Vidrine -version-number) 57641c43270aSJacques Vidrine prev=vinfo 57651c43270aSJacques Vidrine vinfo_number=yes 57661c43270aSJacques Vidrine continue 57671c43270aSJacques Vidrine ;; 5768b528cefcSMark Murray 5769*ae771770SStanislav Sedov -weak) 5770*ae771770SStanislav Sedov prev=weak 5771*ae771770SStanislav Sedov continue 5772*ae771770SStanislav Sedov ;; 5773*ae771770SStanislav Sedov 57745e9cd1aeSAssar Westerlund -Wc,*) 5775*ae771770SStanislav Sedov func_stripname '-Wc,' '' "$arg" 5776*ae771770SStanislav Sedov args=$func_stripname_result 57775e9cd1aeSAssar Westerlund arg= 57788373020dSJacques Vidrine save_ifs="$IFS"; IFS=',' 57795e9cd1aeSAssar Westerlund for flag in $args; do 57805e9cd1aeSAssar Westerlund IFS="$save_ifs" 5781*ae771770SStanislav Sedov func_quote_for_eval "$flag" 5782*ae771770SStanislav Sedov func_append arg " $func_quote_for_eval_result" 5783*ae771770SStanislav Sedov func_append compiler_flags " $func_quote_for_eval_result" 57845e9cd1aeSAssar Westerlund done 57855e9cd1aeSAssar Westerlund IFS="$save_ifs" 5786*ae771770SStanislav Sedov func_stripname ' ' '' "$arg" 5787*ae771770SStanislav Sedov arg=$func_stripname_result 57885e9cd1aeSAssar Westerlund ;; 57895e9cd1aeSAssar Westerlund 57905e9cd1aeSAssar Westerlund -Wl,*) 5791*ae771770SStanislav Sedov func_stripname '-Wl,' '' "$arg" 5792*ae771770SStanislav Sedov args=$func_stripname_result 57935e9cd1aeSAssar Westerlund arg= 57948373020dSJacques Vidrine save_ifs="$IFS"; IFS=',' 57955e9cd1aeSAssar Westerlund for flag in $args; do 57965e9cd1aeSAssar Westerlund IFS="$save_ifs" 5797*ae771770SStanislav Sedov func_quote_for_eval "$flag" 5798*ae771770SStanislav Sedov func_append arg " $wl$func_quote_for_eval_result" 5799*ae771770SStanislav Sedov func_append compiler_flags " $wl$func_quote_for_eval_result" 5800*ae771770SStanislav Sedov func_append linker_flags " $func_quote_for_eval_result" 58015e9cd1aeSAssar Westerlund done 58025e9cd1aeSAssar Westerlund IFS="$save_ifs" 5803*ae771770SStanislav Sedov func_stripname ' ' '' "$arg" 5804*ae771770SStanislav Sedov arg=$func_stripname_result 58055e9cd1aeSAssar Westerlund ;; 58065e9cd1aeSAssar Westerlund 58075e9cd1aeSAssar Westerlund -Xcompiler) 58085e9cd1aeSAssar Westerlund prev=xcompiler 58095e9cd1aeSAssar Westerlund continue 58105e9cd1aeSAssar Westerlund ;; 58115e9cd1aeSAssar Westerlund 58125e9cd1aeSAssar Westerlund -Xlinker) 58135e9cd1aeSAssar Westerlund prev=xlinker 58145e9cd1aeSAssar Westerlund continue 58155e9cd1aeSAssar Westerlund ;; 58165e9cd1aeSAssar Westerlund 58171c43270aSJacques Vidrine -XCClinker) 58181c43270aSJacques Vidrine prev=xcclinker 58191c43270aSJacques Vidrine continue 58201c43270aSJacques Vidrine ;; 58211c43270aSJacques Vidrine 5822*ae771770SStanislav Sedov # -msg_* for osf cc 5823*ae771770SStanislav Sedov -msg_*) 5824*ae771770SStanislav Sedov func_quote_for_eval "$arg" 5825*ae771770SStanislav Sedov arg="$func_quote_for_eval_result" 5826*ae771770SStanislav Sedov ;; 5827*ae771770SStanislav Sedov 5828*ae771770SStanislav Sedov # Flags to be passed through unchanged, with rationale: 5829*ae771770SStanislav Sedov # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 5830*ae771770SStanislav Sedov # -r[0-9][0-9]* specify processor for the SGI compiler 5831*ae771770SStanislav Sedov # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 5832*ae771770SStanislav Sedov # +DA*, +DD* enable 64-bit mode for the HP compiler 5833*ae771770SStanislav Sedov # -q* compiler args for the IBM compiler 5834*ae771770SStanislav Sedov # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 5835*ae771770SStanislav Sedov # -F/path path to uninstalled frameworks, gcc on darwin 5836*ae771770SStanislav Sedov # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 5837*ae771770SStanislav Sedov # @file GCC response files 5838*ae771770SStanislav Sedov # -tp=* Portland pgcc target processor selection 5839*ae771770SStanislav Sedov # --sysroot=* for sysroot support 5840*ae771770SStanislav Sedov # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 5841*ae771770SStanislav Sedov -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 5842*ae771770SStanislav Sedov -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 5843*ae771770SStanislav Sedov -O*|-flto*|-fwhopr*|-fuse-linker-plugin) 5844*ae771770SStanislav Sedov func_quote_for_eval "$arg" 5845*ae771770SStanislav Sedov arg="$func_quote_for_eval_result" 5846*ae771770SStanislav Sedov func_append compile_command " $arg" 5847*ae771770SStanislav Sedov func_append finalize_command " $arg" 5848*ae771770SStanislav Sedov func_append compiler_flags " $arg" 5849*ae771770SStanislav Sedov continue 5850*ae771770SStanislav Sedov ;; 5851*ae771770SStanislav Sedov 5852b528cefcSMark Murray # Some other compiler flag. 5853b528cefcSMark Murray -* | +*) 5854*ae771770SStanislav Sedov func_quote_for_eval "$arg" 5855*ae771770SStanislav Sedov arg="$func_quote_for_eval_result" 5856b528cefcSMark Murray ;; 5857b528cefcSMark Murray 58581c43270aSJacques Vidrine *.$objext) 58591c43270aSJacques Vidrine # A standard object. 5860*ae771770SStanislav Sedov func_append objs " $arg" 58611c43270aSJacques Vidrine ;; 58621c43270aSJacques Vidrine 58631c43270aSJacques Vidrine *.lo) 58641c43270aSJacques Vidrine # A libtool-controlled object. 58651c43270aSJacques Vidrine 58661c43270aSJacques Vidrine # Check to see that this really is a libtool object. 5867*ae771770SStanislav Sedov if func_lalib_unsafe_p "$arg"; then 58681c43270aSJacques Vidrine pic_object= 58691c43270aSJacques Vidrine non_pic_object= 58701c43270aSJacques Vidrine 58711c43270aSJacques Vidrine # Read the .lo file 5872*ae771770SStanislav Sedov func_source "$arg" 58731c43270aSJacques Vidrine 5874*ae771770SStanislav Sedov if test -z "$pic_object" || 58751c43270aSJacques Vidrine test -z "$non_pic_object" || 5876*ae771770SStanislav Sedov test "$pic_object" = none && 58771c43270aSJacques Vidrine test "$non_pic_object" = none; then 5878*ae771770SStanislav Sedov func_fatal_error "cannot find name of object for \`$arg'" 58791c43270aSJacques Vidrine fi 58801c43270aSJacques Vidrine 58811c43270aSJacques Vidrine # Extract subdirectory from the argument. 5882*ae771770SStanislav Sedov func_dirname "$arg" "/" "" 5883*ae771770SStanislav Sedov xdir="$func_dirname_result" 58841c43270aSJacques Vidrine 58851c43270aSJacques Vidrine if test "$pic_object" != none; then 58861c43270aSJacques Vidrine # Prepend the subdirectory the object is found in. 58871c43270aSJacques Vidrine pic_object="$xdir$pic_object" 58881c43270aSJacques Vidrine 5889b528cefcSMark Murray if test "$prev" = dlfiles; then 58905e9cd1aeSAssar Westerlund if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 5891*ae771770SStanislav Sedov func_append dlfiles " $pic_object" 5892b528cefcSMark Murray prev= 5893b528cefcSMark Murray continue 5894b528cefcSMark Murray else 5895b528cefcSMark Murray # If libtool objects are unsupported, then we need to preload. 5896b528cefcSMark Murray prev=dlprefiles 5897b528cefcSMark Murray fi 5898b528cefcSMark Murray fi 5899b528cefcSMark Murray 59001c43270aSJacques Vidrine # CHECK ME: I think I busted this. -Ossama 5901b528cefcSMark Murray if test "$prev" = dlprefiles; then 5902b528cefcSMark Murray # Preload the old-style object. 5903*ae771770SStanislav Sedov func_append dlprefiles " $pic_object" 5904b528cefcSMark Murray prev= 59051c43270aSJacques Vidrine fi 59061c43270aSJacques Vidrine 59071c43270aSJacques Vidrine # A PIC object. 5908*ae771770SStanislav Sedov func_append libobjs " $pic_object" 59091c43270aSJacques Vidrine arg="$pic_object" 59101c43270aSJacques Vidrine fi 59111c43270aSJacques Vidrine 59121c43270aSJacques Vidrine # Non-PIC object. 59131c43270aSJacques Vidrine if test "$non_pic_object" != none; then 59141c43270aSJacques Vidrine # Prepend the subdirectory the object is found in. 59151c43270aSJacques Vidrine non_pic_object="$xdir$non_pic_object" 59161c43270aSJacques Vidrine 59171c43270aSJacques Vidrine # A standard non-PIC object 5918*ae771770SStanislav Sedov func_append non_pic_objects " $non_pic_object" 59191c43270aSJacques Vidrine if test -z "$pic_object" || test "$pic_object" = none ; then 59201c43270aSJacques Vidrine arg="$non_pic_object" 59211c43270aSJacques Vidrine fi 5922c19800e8SDoug Rabson else 5923c19800e8SDoug Rabson # If the PIC object exists, use it instead. 5924c19800e8SDoug Rabson # $xdir was prepended to $pic_object above. 5925c19800e8SDoug Rabson non_pic_object="$pic_object" 5926*ae771770SStanislav Sedov func_append non_pic_objects " $non_pic_object" 59271c43270aSJacques Vidrine fi 59285e9cd1aeSAssar Westerlund else 59291c43270aSJacques Vidrine # Only an error if not doing a dry-run. 5930*ae771770SStanislav Sedov if $opt_dry_run; then 59311c43270aSJacques Vidrine # Extract subdirectory from the argument. 5932*ae771770SStanislav Sedov func_dirname "$arg" "/" "" 5933*ae771770SStanislav Sedov xdir="$func_dirname_result" 59341c43270aSJacques Vidrine 5935*ae771770SStanislav Sedov func_lo2o "$arg" 5936*ae771770SStanislav Sedov pic_object=$xdir$objdir/$func_lo2o_result 5937*ae771770SStanislav Sedov non_pic_object=$xdir$func_lo2o_result 5938*ae771770SStanislav Sedov func_append libobjs " $pic_object" 5939*ae771770SStanislav Sedov func_append non_pic_objects " $non_pic_object" 5940*ae771770SStanislav Sedov else 5941*ae771770SStanislav Sedov func_fatal_error "\`$arg' is not a valid libtool object" 59421c43270aSJacques Vidrine fi 59435e9cd1aeSAssar Westerlund fi 59445e9cd1aeSAssar Westerlund ;; 59455e9cd1aeSAssar Westerlund 59465e9cd1aeSAssar Westerlund *.$libext) 59475e9cd1aeSAssar Westerlund # An archive. 5948*ae771770SStanislav Sedov func_append deplibs " $arg" 5949*ae771770SStanislav Sedov func_append old_deplibs " $arg" 59505e9cd1aeSAssar Westerlund continue 5951b528cefcSMark Murray ;; 5952b528cefcSMark Murray 5953b528cefcSMark Murray *.la) 5954b528cefcSMark Murray # A libtool-controlled library. 5955b528cefcSMark Murray 5956*ae771770SStanislav Sedov func_resolve_sysroot "$arg" 5957b528cefcSMark Murray if test "$prev" = dlfiles; then 59585e9cd1aeSAssar Westerlund # This library was specified with -dlopen. 5959*ae771770SStanislav Sedov func_append dlfiles " $func_resolve_sysroot_result" 5960b528cefcSMark Murray prev= 59615e9cd1aeSAssar Westerlund elif test "$prev" = dlprefiles; then 5962b528cefcSMark Murray # The library was specified with -dlpreopen. 5963*ae771770SStanislav Sedov func_append dlprefiles " $func_resolve_sysroot_result" 5964b528cefcSMark Murray prev= 5965b528cefcSMark Murray else 5966*ae771770SStanislav Sedov func_append deplibs " $func_resolve_sysroot_result" 5967b528cefcSMark Murray fi 5968b528cefcSMark Murray continue 5969b528cefcSMark Murray ;; 5970b528cefcSMark Murray 5971b528cefcSMark Murray # Some other compiler argument. 5972b528cefcSMark Murray *) 5973b528cefcSMark Murray # Unknown arguments in both finalize_command and compile_command need 5974b528cefcSMark Murray # to be aesthetically quoted because they are evaled later. 5975*ae771770SStanislav Sedov func_quote_for_eval "$arg" 5976*ae771770SStanislav Sedov arg="$func_quote_for_eval_result" 5977b528cefcSMark Murray ;; 59784137ff4cSJacques Vidrine esac # arg 5979b528cefcSMark Murray 5980b528cefcSMark Murray # Now actually substitute the argument into the commands. 5981b528cefcSMark Murray if test -n "$arg"; then 5982*ae771770SStanislav Sedov func_append compile_command " $arg" 5983*ae771770SStanislav Sedov func_append finalize_command " $arg" 5984b528cefcSMark Murray fi 59854137ff4cSJacques Vidrine done # argument parsing loop 5986b528cefcSMark Murray 5987*ae771770SStanislav Sedov test -n "$prev" && \ 5988*ae771770SStanislav Sedov func_fatal_help "the \`$prevarg' option requires an argument" 5989b528cefcSMark Murray 59905e9cd1aeSAssar Westerlund if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 59915e9cd1aeSAssar Westerlund eval arg=\"$export_dynamic_flag_spec\" 5992*ae771770SStanislav Sedov func_append compile_command " $arg" 5993*ae771770SStanislav Sedov func_append finalize_command " $arg" 5994b528cefcSMark Murray fi 5995b528cefcSMark Murray 59961c43270aSJacques Vidrine oldlibs= 5997b528cefcSMark Murray # calculate the name of the file, without its directory 5998*ae771770SStanislav Sedov func_basename "$output" 5999*ae771770SStanislav Sedov outputname="$func_basename_result" 60005e9cd1aeSAssar Westerlund libobjs_save="$libobjs" 6001b528cefcSMark Murray 60025e9cd1aeSAssar Westerlund if test -n "$shlibpath_var"; then 60035e9cd1aeSAssar Westerlund # get the directories listed in $shlibpath_var 6004*ae771770SStanislav Sedov eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` 60055e9cd1aeSAssar Westerlund else 60065e9cd1aeSAssar Westerlund shlib_search_path= 60075e9cd1aeSAssar Westerlund fi 60085e9cd1aeSAssar Westerlund eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 60095e9cd1aeSAssar Westerlund eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 60105e9cd1aeSAssar Westerlund 6011*ae771770SStanislav Sedov func_dirname "$output" "/" "" 6012*ae771770SStanislav Sedov output_objdir="$func_dirname_result$objdir" 6013*ae771770SStanislav Sedov func_to_tool_file "$output_objdir/" 6014*ae771770SStanislav Sedov tool_output_objdir=$func_to_tool_file_result 60155e9cd1aeSAssar Westerlund # Create the object directory. 6016*ae771770SStanislav Sedov func_mkdir_p "$output_objdir" 60175e9cd1aeSAssar Westerlund 60185e9cd1aeSAssar Westerlund # Determine the type of output 60194137ff4cSJacques Vidrine case $output in 6020b528cefcSMark Murray "") 6021*ae771770SStanislav Sedov func_fatal_help "you must specify an output file" 6022b528cefcSMark Murray ;; 60235e9cd1aeSAssar Westerlund *.$libext) linkmode=oldlib ;; 60245e9cd1aeSAssar Westerlund *.lo | *.$objext) linkmode=obj ;; 60255e9cd1aeSAssar Westerlund *.la) linkmode=lib ;; 60265e9cd1aeSAssar Westerlund *) linkmode=prog ;; # Anything else should be a program. 60275e9cd1aeSAssar Westerlund esac 6028b528cefcSMark Murray 60295e9cd1aeSAssar Westerlund specialdeplibs= 60301c43270aSJacques Vidrine 60315e9cd1aeSAssar Westerlund libs= 60325e9cd1aeSAssar Westerlund # Find all interdependent deplibs by searching for libraries 60335e9cd1aeSAssar Westerlund # that are linked more than once (e.g. -la -lb -la) 60345e9cd1aeSAssar Westerlund for deplib in $deplibs; do 6035*ae771770SStanislav Sedov if $opt_preserve_dup_deps ; then 60365e9cd1aeSAssar Westerlund case "$libs " in 6037*ae771770SStanislav Sedov *" $deplib "*) func_append specialdeplibs " $deplib" ;; 60385e9cd1aeSAssar Westerlund esac 60391c43270aSJacques Vidrine fi 6040*ae771770SStanislav Sedov func_append libs " $deplib" 60415e9cd1aeSAssar Westerlund done 60421c43270aSJacques Vidrine 60431c43270aSJacques Vidrine if test "$linkmode" = lib; then 60441c43270aSJacques Vidrine libs="$predeps $libs $compiler_lib_search_path $postdeps" 60451c43270aSJacques Vidrine 60461c43270aSJacques Vidrine # Compute libraries that are listed more than once in $predeps 60471c43270aSJacques Vidrine # $postdeps and mark them as special (i.e., whose duplicates are 60481c43270aSJacques Vidrine # not to be eliminated). 60491c43270aSJacques Vidrine pre_post_deps= 6050*ae771770SStanislav Sedov if $opt_duplicate_compiler_generated_deps; then 60511c43270aSJacques Vidrine for pre_post_dep in $predeps $postdeps; do 60521c43270aSJacques Vidrine case "$pre_post_deps " in 6053*ae771770SStanislav Sedov *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 60541c43270aSJacques Vidrine esac 6055*ae771770SStanislav Sedov func_append pre_post_deps " $pre_post_dep" 60561c43270aSJacques Vidrine done 60571c43270aSJacques Vidrine fi 60581c43270aSJacques Vidrine pre_post_deps= 60591c43270aSJacques Vidrine fi 60601c43270aSJacques Vidrine 60615e9cd1aeSAssar Westerlund deplibs= 60625e9cd1aeSAssar Westerlund newdependency_libs= 60635e9cd1aeSAssar Westerlund newlib_search_path= 60645e9cd1aeSAssar Westerlund need_relink=no # whether we're linking any uninstalled libtool libraries 60654137ff4cSJacques Vidrine notinst_deplibs= # not-installed libtool libraries 6066*ae771770SStanislav Sedov notinst_path= # paths that contain not-installed libtool libraries 6067*ae771770SStanislav Sedov 60685e9cd1aeSAssar Westerlund case $linkmode in 60695e9cd1aeSAssar Westerlund lib) 6070*ae771770SStanislav Sedov passes="conv dlpreopen link" 60715e9cd1aeSAssar Westerlund for file in $dlfiles $dlprefiles; do 60724137ff4cSJacques Vidrine case $file in 60735e9cd1aeSAssar Westerlund *.la) ;; 60745e9cd1aeSAssar Westerlund *) 6075*ae771770SStanislav Sedov func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 60765e9cd1aeSAssar Westerlund ;; 60775e9cd1aeSAssar Westerlund esac 60785e9cd1aeSAssar Westerlund done 60795e9cd1aeSAssar Westerlund ;; 60805e9cd1aeSAssar Westerlund prog) 60815e9cd1aeSAssar Westerlund compile_deplibs= 60825e9cd1aeSAssar Westerlund finalize_deplibs= 60835e9cd1aeSAssar Westerlund alldeplibs=no 60845e9cd1aeSAssar Westerlund newdlfiles= 60855e9cd1aeSAssar Westerlund newdlprefiles= 60865e9cd1aeSAssar Westerlund passes="conv scan dlopen dlpreopen link" 60875e9cd1aeSAssar Westerlund ;; 60885e9cd1aeSAssar Westerlund *) passes="conv" 60895e9cd1aeSAssar Westerlund ;; 60905e9cd1aeSAssar Westerlund esac 6091*ae771770SStanislav Sedov 60925e9cd1aeSAssar Westerlund for pass in $passes; do 6093*ae771770SStanislav Sedov # The preopen pass in lib mode reverses $deplibs; put it back here 6094*ae771770SStanislav Sedov # so that -L comes before libs that need it for instance... 6095*ae771770SStanislav Sedov if test "$linkmode,$pass" = "lib,link"; then 6096*ae771770SStanislav Sedov ## FIXME: Find the place where the list is rebuilt in the wrong 6097*ae771770SStanislav Sedov ## order, and fix it there properly 6098*ae771770SStanislav Sedov tmp_deplibs= 6099*ae771770SStanislav Sedov for deplib in $deplibs; do 6100*ae771770SStanislav Sedov tmp_deplibs="$deplib $tmp_deplibs" 6101*ae771770SStanislav Sedov done 6102*ae771770SStanislav Sedov deplibs="$tmp_deplibs" 6103*ae771770SStanislav Sedov fi 6104*ae771770SStanislav Sedov 61051c43270aSJacques Vidrine if test "$linkmode,$pass" = "lib,link" || 61061c43270aSJacques Vidrine test "$linkmode,$pass" = "prog,scan"; then 61071c43270aSJacques Vidrine libs="$deplibs" 61084137ff4cSJacques Vidrine deplibs= 61091c43270aSJacques Vidrine fi 61101c43270aSJacques Vidrine if test "$linkmode" = prog; then 61111c43270aSJacques Vidrine case $pass in 61121c43270aSJacques Vidrine dlopen) libs="$dlfiles" ;; 61135e9cd1aeSAssar Westerlund dlpreopen) libs="$dlprefiles" ;; 61145e9cd1aeSAssar Westerlund link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 61155e9cd1aeSAssar Westerlund esac 61165e9cd1aeSAssar Westerlund fi 6117*ae771770SStanislav Sedov if test "$linkmode,$pass" = "lib,dlpreopen"; then 6118*ae771770SStanislav Sedov # Collect and forward deplibs of preopened libtool libs 6119*ae771770SStanislav Sedov for lib in $dlprefiles; do 6120*ae771770SStanislav Sedov # Ignore non-libtool-libs 6121*ae771770SStanislav Sedov dependency_libs= 6122*ae771770SStanislav Sedov func_resolve_sysroot "$lib" 6123*ae771770SStanislav Sedov case $lib in 6124*ae771770SStanislav Sedov *.la) func_source "$func_resolve_sysroot_result" ;; 6125*ae771770SStanislav Sedov esac 6126*ae771770SStanislav Sedov 6127*ae771770SStanislav Sedov # Collect preopened libtool deplibs, except any this library 6128*ae771770SStanislav Sedov # has declared as weak libs 6129*ae771770SStanislav Sedov for deplib in $dependency_libs; do 6130*ae771770SStanislav Sedov func_basename "$deplib" 6131*ae771770SStanislav Sedov deplib_base=$func_basename_result 6132*ae771770SStanislav Sedov case " $weak_libs " in 6133*ae771770SStanislav Sedov *" $deplib_base "*) ;; 6134*ae771770SStanislav Sedov *) func_append deplibs " $deplib" ;; 6135*ae771770SStanislav Sedov esac 6136*ae771770SStanislav Sedov done 6137*ae771770SStanislav Sedov done 6138*ae771770SStanislav Sedov libs="$dlprefiles" 6139*ae771770SStanislav Sedov fi 61401c43270aSJacques Vidrine if test "$pass" = dlopen; then 61411c43270aSJacques Vidrine # Collect dlpreopened libraries 61421c43270aSJacques Vidrine save_deplibs="$deplibs" 61431c43270aSJacques Vidrine deplibs= 61441c43270aSJacques Vidrine fi 6145*ae771770SStanislav Sedov 61465e9cd1aeSAssar Westerlund for deplib in $libs; do 61475e9cd1aeSAssar Westerlund lib= 61485e9cd1aeSAssar Westerlund found=no 61494137ff4cSJacques Vidrine case $deplib in 6150*ae771770SStanislav Sedov -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 61511c43270aSJacques Vidrine if test "$linkmode,$pass" = "prog,link"; then 61521c43270aSJacques Vidrine compile_deplibs="$deplib $compile_deplibs" 61531c43270aSJacques Vidrine finalize_deplibs="$deplib $finalize_deplibs" 61541c43270aSJacques Vidrine else 6155*ae771770SStanislav Sedov func_append compiler_flags " $deplib" 6156*ae771770SStanislav Sedov if test "$linkmode" = lib ; then 6157*ae771770SStanislav Sedov case "$new_inherited_linker_flags " in 6158*ae771770SStanislav Sedov *" $deplib "*) ;; 6159*ae771770SStanislav Sedov * ) func_append new_inherited_linker_flags " $deplib" ;; 6160*ae771770SStanislav Sedov esac 6161*ae771770SStanislav Sedov fi 61621c43270aSJacques Vidrine fi 61631c43270aSJacques Vidrine continue 61641c43270aSJacques Vidrine ;; 61655e9cd1aeSAssar Westerlund -l*) 61661c43270aSJacques Vidrine if test "$linkmode" != lib && test "$linkmode" != prog; then 6167*ae771770SStanislav Sedov func_warning "\`-l' is ignored for archives/objects" 61685e9cd1aeSAssar Westerlund continue 61695e9cd1aeSAssar Westerlund fi 6170*ae771770SStanislav Sedov func_stripname '-l' '' "$deplib" 6171*ae771770SStanislav Sedov name=$func_stripname_result 6172*ae771770SStanislav Sedov if test "$linkmode" = lib; then 6173*ae771770SStanislav Sedov searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 6174*ae771770SStanislav Sedov else 6175*ae771770SStanislav Sedov searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 6176*ae771770SStanislav Sedov fi 6177*ae771770SStanislav Sedov for searchdir in $searchdirs; do 6178c19800e8SDoug Rabson for search_ext in .la $std_shrext .so .a; do 61795e9cd1aeSAssar Westerlund # Search the libtool library 61801c43270aSJacques Vidrine lib="$searchdir/lib${name}${search_ext}" 61815e9cd1aeSAssar Westerlund if test -f "$lib"; then 61821c43270aSJacques Vidrine if test "$search_ext" = ".la"; then 61835e9cd1aeSAssar Westerlund found=yes 61841c43270aSJacques Vidrine else 61851c43270aSJacques Vidrine found=no 61865e9cd1aeSAssar Westerlund fi 61871c43270aSJacques Vidrine break 2 61881c43270aSJacques Vidrine fi 61891c43270aSJacques Vidrine done 61905e9cd1aeSAssar Westerlund done 61915e9cd1aeSAssar Westerlund if test "$found" != yes; then 61924137ff4cSJacques Vidrine # deplib doesn't seem to be a libtool library 61935e9cd1aeSAssar Westerlund if test "$linkmode,$pass" = "prog,link"; then 61945e9cd1aeSAssar Westerlund compile_deplibs="$deplib $compile_deplibs" 61955e9cd1aeSAssar Westerlund finalize_deplibs="$deplib $finalize_deplibs" 61965e9cd1aeSAssar Westerlund else 61975e9cd1aeSAssar Westerlund deplibs="$deplib $deplibs" 61981c43270aSJacques Vidrine test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 61995e9cd1aeSAssar Westerlund fi 62005e9cd1aeSAssar Westerlund continue 62011c43270aSJacques Vidrine else # deplib is a libtool library 62021c43270aSJacques Vidrine # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 62031c43270aSJacques Vidrine # We need to do some special things here, and not later. 62041c43270aSJacques Vidrine if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 62051c43270aSJacques Vidrine case " $predeps $postdeps " in 62061c43270aSJacques Vidrine *" $deplib "*) 6207*ae771770SStanislav Sedov if func_lalib_p "$lib"; then 62081c43270aSJacques Vidrine library_names= 62091c43270aSJacques Vidrine old_library= 6210*ae771770SStanislav Sedov func_source "$lib" 62111c43270aSJacques Vidrine for l in $old_library $library_names; do 62121c43270aSJacques Vidrine ll="$l" 62131c43270aSJacques Vidrine done 62141c43270aSJacques Vidrine if test "X$ll" = "X$old_library" ; then # only static version available 62151c43270aSJacques Vidrine found=no 6216*ae771770SStanislav Sedov func_dirname "$lib" "" "." 6217*ae771770SStanislav Sedov ladir="$func_dirname_result" 62181c43270aSJacques Vidrine lib=$ladir/$old_library 62191c43270aSJacques Vidrine if test "$linkmode,$pass" = "prog,link"; then 62201c43270aSJacques Vidrine compile_deplibs="$deplib $compile_deplibs" 62211c43270aSJacques Vidrine finalize_deplibs="$deplib $finalize_deplibs" 62221c43270aSJacques Vidrine else 62231c43270aSJacques Vidrine deplibs="$deplib $deplibs" 62241c43270aSJacques Vidrine test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 62251c43270aSJacques Vidrine fi 62261c43270aSJacques Vidrine continue 62271c43270aSJacques Vidrine fi 62281c43270aSJacques Vidrine fi 62291c43270aSJacques Vidrine ;; 62301c43270aSJacques Vidrine *) ;; 62311c43270aSJacques Vidrine esac 62321c43270aSJacques Vidrine fi 62335e9cd1aeSAssar Westerlund fi 62344137ff4cSJacques Vidrine ;; # -l 6235*ae771770SStanislav Sedov *.ltframework) 6236*ae771770SStanislav Sedov if test "$linkmode,$pass" = "prog,link"; then 6237*ae771770SStanislav Sedov compile_deplibs="$deplib $compile_deplibs" 6238*ae771770SStanislav Sedov finalize_deplibs="$deplib $finalize_deplibs" 6239*ae771770SStanislav Sedov else 6240*ae771770SStanislav Sedov deplibs="$deplib $deplibs" 6241*ae771770SStanislav Sedov if test "$linkmode" = lib ; then 6242*ae771770SStanislav Sedov case "$new_inherited_linker_flags " in 6243*ae771770SStanislav Sedov *" $deplib "*) ;; 6244*ae771770SStanislav Sedov * ) func_append new_inherited_linker_flags " $deplib" ;; 6245*ae771770SStanislav Sedov esac 6246*ae771770SStanislav Sedov fi 6247*ae771770SStanislav Sedov fi 6248*ae771770SStanislav Sedov continue 6249*ae771770SStanislav Sedov ;; 62505e9cd1aeSAssar Westerlund -L*) 62515e9cd1aeSAssar Westerlund case $linkmode in 62525e9cd1aeSAssar Westerlund lib) 62535e9cd1aeSAssar Westerlund deplibs="$deplib $deplibs" 62541c43270aSJacques Vidrine test "$pass" = conv && continue 62555e9cd1aeSAssar Westerlund newdependency_libs="$deplib $newdependency_libs" 6256*ae771770SStanislav Sedov func_stripname '-L' '' "$deplib" 6257*ae771770SStanislav Sedov func_resolve_sysroot "$func_stripname_result" 6258*ae771770SStanislav Sedov func_append newlib_search_path " $func_resolve_sysroot_result" 62595e9cd1aeSAssar Westerlund ;; 62605e9cd1aeSAssar Westerlund prog) 62611c43270aSJacques Vidrine if test "$pass" = conv; then 62625e9cd1aeSAssar Westerlund deplibs="$deplib $deplibs" 62635e9cd1aeSAssar Westerlund continue 62645e9cd1aeSAssar Westerlund fi 62651c43270aSJacques Vidrine if test "$pass" = scan; then 62665e9cd1aeSAssar Westerlund deplibs="$deplib $deplibs" 62675e9cd1aeSAssar Westerlund else 62685e9cd1aeSAssar Westerlund compile_deplibs="$deplib $compile_deplibs" 62695e9cd1aeSAssar Westerlund finalize_deplibs="$deplib $finalize_deplibs" 62705e9cd1aeSAssar Westerlund fi 6271*ae771770SStanislav Sedov func_stripname '-L' '' "$deplib" 6272*ae771770SStanislav Sedov func_resolve_sysroot "$func_stripname_result" 6273*ae771770SStanislav Sedov func_append newlib_search_path " $func_resolve_sysroot_result" 62745e9cd1aeSAssar Westerlund ;; 62755e9cd1aeSAssar Westerlund *) 6276*ae771770SStanislav Sedov func_warning "\`-L' is ignored for archives/objects" 62775e9cd1aeSAssar Westerlund ;; 62784137ff4cSJacques Vidrine esac # linkmode 62795e9cd1aeSAssar Westerlund continue 62804137ff4cSJacques Vidrine ;; # -L 62815e9cd1aeSAssar Westerlund -R*) 62821c43270aSJacques Vidrine if test "$pass" = link; then 6283*ae771770SStanislav Sedov func_stripname '-R' '' "$deplib" 6284*ae771770SStanislav Sedov func_resolve_sysroot "$func_stripname_result" 6285*ae771770SStanislav Sedov dir=$func_resolve_sysroot_result 62865e9cd1aeSAssar Westerlund # Make sure the xrpath contains only unique directories. 62875e9cd1aeSAssar Westerlund case "$xrpath " in 62885e9cd1aeSAssar Westerlund *" $dir "*) ;; 6289*ae771770SStanislav Sedov *) func_append xrpath " $dir" ;; 62905e9cd1aeSAssar Westerlund esac 62915e9cd1aeSAssar Westerlund fi 62925e9cd1aeSAssar Westerlund deplibs="$deplib $deplibs" 62935e9cd1aeSAssar Westerlund continue 62945e9cd1aeSAssar Westerlund ;; 6295*ae771770SStanislav Sedov *.la) 6296*ae771770SStanislav Sedov func_resolve_sysroot "$deplib" 6297*ae771770SStanislav Sedov lib=$func_resolve_sysroot_result 6298*ae771770SStanislav Sedov ;; 62995e9cd1aeSAssar Westerlund *.$libext) 63001c43270aSJacques Vidrine if test "$pass" = conv; then 63015e9cd1aeSAssar Westerlund deplibs="$deplib $deplibs" 63025e9cd1aeSAssar Westerlund continue 63035e9cd1aeSAssar Westerlund fi 63045e9cd1aeSAssar Westerlund case $linkmode in 63055e9cd1aeSAssar Westerlund lib) 6306*ae771770SStanislav Sedov # Linking convenience modules into shared libraries is allowed, 6307*ae771770SStanislav Sedov # but linking other static libraries is non-portable. 6308*ae771770SStanislav Sedov case " $dlpreconveniencelibs " in 6309*ae771770SStanislav Sedov *" $deplib "*) ;; 6310*ae771770SStanislav Sedov *) 6311c19800e8SDoug Rabson valid_a_lib=no 6312c19800e8SDoug Rabson case $deplibs_check_method in 6313c19800e8SDoug Rabson match_pattern*) 6314*ae771770SStanislav Sedov set dummy $deplibs_check_method; shift 6315*ae771770SStanislav Sedov match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 6316*ae771770SStanislav Sedov if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 6317c19800e8SDoug Rabson | $EGREP "$match_pattern_regex" > /dev/null; then 6318c19800e8SDoug Rabson valid_a_lib=yes 6319c19800e8SDoug Rabson fi 6320c19800e8SDoug Rabson ;; 6321c19800e8SDoug Rabson pass_all) 6322c19800e8SDoug Rabson valid_a_lib=yes 6323c19800e8SDoug Rabson ;; 6324c19800e8SDoug Rabson esac 6325c19800e8SDoug Rabson if test "$valid_a_lib" != yes; then 6326*ae771770SStanislav Sedov echo 6327*ae771770SStanislav Sedov $ECHO "*** Warning: Trying to link with static lib archive $deplib." 6328*ae771770SStanislav Sedov echo "*** I have the capability to make that library automatically link in when" 6329*ae771770SStanislav Sedov echo "*** you link to this library. But I can only do this if you have a" 6330*ae771770SStanislav Sedov echo "*** shared version of the library, which you do not appear to have" 6331*ae771770SStanislav Sedov echo "*** because the file extensions .$libext of this argument makes me believe" 6332*ae771770SStanislav Sedov echo "*** that it is just a static archive that I should not use here." 63335e9cd1aeSAssar Westerlund else 6334*ae771770SStanislav Sedov echo 6335*ae771770SStanislav Sedov $ECHO "*** Warning: Linking the shared library $output against the" 6336*ae771770SStanislav Sedov $ECHO "*** static library $deplib is not portable!" 63375e9cd1aeSAssar Westerlund deplibs="$deplib $deplibs" 63385e9cd1aeSAssar Westerlund fi 6339*ae771770SStanislav Sedov ;; 6340*ae771770SStanislav Sedov esac 63415e9cd1aeSAssar Westerlund continue 63425e9cd1aeSAssar Westerlund ;; 63435e9cd1aeSAssar Westerlund prog) 63441c43270aSJacques Vidrine if test "$pass" != link; then 63455e9cd1aeSAssar Westerlund deplibs="$deplib $deplibs" 63465e9cd1aeSAssar Westerlund else 63475e9cd1aeSAssar Westerlund compile_deplibs="$deplib $compile_deplibs" 63485e9cd1aeSAssar Westerlund finalize_deplibs="$deplib $finalize_deplibs" 63495e9cd1aeSAssar Westerlund fi 63505e9cd1aeSAssar Westerlund continue 63515e9cd1aeSAssar Westerlund ;; 63524137ff4cSJacques Vidrine esac # linkmode 63534137ff4cSJacques Vidrine ;; # *.$libext 63545e9cd1aeSAssar Westerlund *.lo | *.$objext) 63551c43270aSJacques Vidrine if test "$pass" = conv; then 63561c43270aSJacques Vidrine deplibs="$deplib $deplibs" 63571c43270aSJacques Vidrine elif test "$linkmode" = prog; then 63581c43270aSJacques Vidrine if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 63595e9cd1aeSAssar Westerlund # If there is no dlopen support or we're linking statically, 63605e9cd1aeSAssar Westerlund # we need to preload. 6361*ae771770SStanislav Sedov func_append newdlprefiles " $deplib" 63625e9cd1aeSAssar Westerlund compile_deplibs="$deplib $compile_deplibs" 63635e9cd1aeSAssar Westerlund finalize_deplibs="$deplib $finalize_deplibs" 63645e9cd1aeSAssar Westerlund else 6365*ae771770SStanislav Sedov func_append newdlfiles " $deplib" 63665e9cd1aeSAssar Westerlund fi 63671c43270aSJacques Vidrine fi 63685e9cd1aeSAssar Westerlund continue 63695e9cd1aeSAssar Westerlund ;; 63705e9cd1aeSAssar Westerlund %DEPLIBS%) 63715e9cd1aeSAssar Westerlund alldeplibs=yes 63725e9cd1aeSAssar Westerlund continue 63735e9cd1aeSAssar Westerlund ;; 63744137ff4cSJacques Vidrine esac # case $deplib 6375*ae771770SStanislav Sedov 63761c43270aSJacques Vidrine if test "$found" = yes || test -f "$lib"; then : 63775e9cd1aeSAssar Westerlund else 6378*ae771770SStanislav Sedov func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 6379b528cefcSMark Murray fi 6380b528cefcSMark Murray 63815e9cd1aeSAssar Westerlund # Check to see that this really is a libtool archive. 6382*ae771770SStanislav Sedov func_lalib_unsafe_p "$lib" \ 6383*ae771770SStanislav Sedov || func_fatal_error "\`$lib' is not a valid libtool archive" 63845e9cd1aeSAssar Westerlund 6385*ae771770SStanislav Sedov func_dirname "$lib" "" "." 6386*ae771770SStanislav Sedov ladir="$func_dirname_result" 63875e9cd1aeSAssar Westerlund 63885e9cd1aeSAssar Westerlund dlname= 63895e9cd1aeSAssar Westerlund dlopen= 63905e9cd1aeSAssar Westerlund dlpreopen= 63915e9cd1aeSAssar Westerlund libdir= 63925e9cd1aeSAssar Westerlund library_names= 63935e9cd1aeSAssar Westerlund old_library= 6394*ae771770SStanislav Sedov inherited_linker_flags= 63955e9cd1aeSAssar Westerlund # If the library was installed with an old release of libtool, 63961c43270aSJacques Vidrine # it will not redefine variables installed, or shouldnotlink 63975e9cd1aeSAssar Westerlund installed=yes 63981c43270aSJacques Vidrine shouldnotlink=no 6399c19800e8SDoug Rabson avoidtemprpath= 6400c19800e8SDoug Rabson 64015e9cd1aeSAssar Westerlund 64025e9cd1aeSAssar Westerlund # Read the .la file 6403*ae771770SStanislav Sedov func_source "$lib" 64045e9cd1aeSAssar Westerlund 6405*ae771770SStanislav Sedov # Convert "-framework foo" to "foo.ltframework" 6406*ae771770SStanislav Sedov if test -n "$inherited_linker_flags"; then 6407*ae771770SStanislav Sedov tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 6408*ae771770SStanislav Sedov for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 6409*ae771770SStanislav Sedov case " $new_inherited_linker_flags " in 6410*ae771770SStanislav Sedov *" $tmp_inherited_linker_flag "*) ;; 6411*ae771770SStanislav Sedov *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 6412*ae771770SStanislav Sedov esac 6413*ae771770SStanislav Sedov done 6414*ae771770SStanislav Sedov fi 6415*ae771770SStanislav Sedov dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 64165e9cd1aeSAssar Westerlund if test "$linkmode,$pass" = "lib,link" || 64175e9cd1aeSAssar Westerlund test "$linkmode,$pass" = "prog,scan" || 64181c43270aSJacques Vidrine { test "$linkmode" != prog && test "$linkmode" != lib; }; then 6419*ae771770SStanislav Sedov test -n "$dlopen" && func_append dlfiles " $dlopen" 6420*ae771770SStanislav Sedov test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 64215e9cd1aeSAssar Westerlund fi 64225e9cd1aeSAssar Westerlund 64231c43270aSJacques Vidrine if test "$pass" = conv; then 64244137ff4cSJacques Vidrine # Only check for convenience libraries 64255e9cd1aeSAssar Westerlund deplibs="$lib $deplibs" 64265e9cd1aeSAssar Westerlund if test -z "$libdir"; then 64275e9cd1aeSAssar Westerlund if test -z "$old_library"; then 6428*ae771770SStanislav Sedov func_fatal_error "cannot find name of link library for \`$lib'" 64295e9cd1aeSAssar Westerlund fi 64305e9cd1aeSAssar Westerlund # It is a libtool convenience library, so add in its objects. 6431*ae771770SStanislav Sedov func_append convenience " $ladir/$objdir/$old_library" 6432*ae771770SStanislav Sedov func_append old_convenience " $ladir/$objdir/$old_library" 6433*ae771770SStanislav Sedov elif test "$linkmode" != prog && test "$linkmode" != lib; then 6434*ae771770SStanislav Sedov func_fatal_error "\`$lib' is not a convenience library" 6435*ae771770SStanislav Sedov fi 64365e9cd1aeSAssar Westerlund tmp_libs= 64375e9cd1aeSAssar Westerlund for deplib in $dependency_libs; do 64385e9cd1aeSAssar Westerlund deplibs="$deplib $deplibs" 6439*ae771770SStanislav Sedov if $opt_preserve_dup_deps ; then 64405e9cd1aeSAssar Westerlund case "$tmp_libs " in 6441*ae771770SStanislav Sedov *" $deplib "*) func_append specialdeplibs " $deplib" ;; 64425e9cd1aeSAssar Westerlund esac 64431c43270aSJacques Vidrine fi 6444*ae771770SStanislav Sedov func_append tmp_libs " $deplib" 64455e9cd1aeSAssar Westerlund done 64465e9cd1aeSAssar Westerlund continue 64474137ff4cSJacques Vidrine fi # $pass = conv 64485e9cd1aeSAssar Westerlund 64491c43270aSJacques Vidrine 64505e9cd1aeSAssar Westerlund # Get the name of the library we link against. 64515e9cd1aeSAssar Westerlund linklib= 6452*ae771770SStanislav Sedov if test -n "$old_library" && 6453*ae771770SStanislav Sedov { test "$prefer_static_libs" = yes || 6454*ae771770SStanislav Sedov test "$prefer_static_libs,$installed" = "built,no"; }; then 6455*ae771770SStanislav Sedov linklib=$old_library 6456*ae771770SStanislav Sedov else 64575e9cd1aeSAssar Westerlund for l in $old_library $library_names; do 64585e9cd1aeSAssar Westerlund linklib="$l" 64595e9cd1aeSAssar Westerlund done 6460*ae771770SStanislav Sedov fi 64615e9cd1aeSAssar Westerlund if test -z "$linklib"; then 6462*ae771770SStanislav Sedov func_fatal_error "cannot find name of link library for \`$lib'" 64635e9cd1aeSAssar Westerlund fi 64645e9cd1aeSAssar Westerlund 64655e9cd1aeSAssar Westerlund # This library was specified with -dlopen. 64661c43270aSJacques Vidrine if test "$pass" = dlopen; then 64675e9cd1aeSAssar Westerlund if test -z "$libdir"; then 6468*ae771770SStanislav Sedov func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 64695e9cd1aeSAssar Westerlund fi 6470c19800e8SDoug Rabson if test -z "$dlname" || 6471c19800e8SDoug Rabson test "$dlopen_support" != yes || 6472c19800e8SDoug Rabson test "$build_libtool_libs" = no; then 64734137ff4cSJacques Vidrine # If there is no dlname, no dlopen support or we're linking 64741c43270aSJacques Vidrine # statically, we need to preload. We also need to preload any 64751c43270aSJacques Vidrine # dependent libraries so libltdl's deplib preloader doesn't 64761c43270aSJacques Vidrine # bomb out in the load deplibs phase. 6477*ae771770SStanislav Sedov func_append dlprefiles " $lib $dependency_libs" 64785e9cd1aeSAssar Westerlund else 6479*ae771770SStanislav Sedov func_append newdlfiles " $lib" 64805e9cd1aeSAssar Westerlund fi 64815e9cd1aeSAssar Westerlund continue 64824137ff4cSJacques Vidrine fi # $pass = dlopen 64835e9cd1aeSAssar Westerlund 64845e9cd1aeSAssar Westerlund # We need an absolute path. 64854137ff4cSJacques Vidrine case $ladir in 64865e9cd1aeSAssar Westerlund [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 64875e9cd1aeSAssar Westerlund *) 64885e9cd1aeSAssar Westerlund abs_ladir=`cd "$ladir" && pwd` 64895e9cd1aeSAssar Westerlund if test -z "$abs_ladir"; then 6490*ae771770SStanislav Sedov func_warning "cannot determine absolute directory name of \`$ladir'" 6491*ae771770SStanislav Sedov func_warning "passing it literally to the linker, although it might fail" 64925e9cd1aeSAssar Westerlund abs_ladir="$ladir" 64935e9cd1aeSAssar Westerlund fi 64945e9cd1aeSAssar Westerlund ;; 64955e9cd1aeSAssar Westerlund esac 6496*ae771770SStanislav Sedov func_basename "$lib" 6497*ae771770SStanislav Sedov laname="$func_basename_result" 64985e9cd1aeSAssar Westerlund 64995e9cd1aeSAssar Westerlund # Find the relevant object directory and library name. 65005e9cd1aeSAssar Westerlund if test "X$installed" = Xyes; then 6501*ae771770SStanislav Sedov if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6502*ae771770SStanislav Sedov func_warning "library \`$lib' was moved." 65035e9cd1aeSAssar Westerlund dir="$ladir" 65045e9cd1aeSAssar Westerlund absdir="$abs_ladir" 65055e9cd1aeSAssar Westerlund libdir="$abs_ladir" 65065e9cd1aeSAssar Westerlund else 6507*ae771770SStanislav Sedov dir="$lt_sysroot$libdir" 6508*ae771770SStanislav Sedov absdir="$lt_sysroot$libdir" 65095e9cd1aeSAssar Westerlund fi 6510c19800e8SDoug Rabson test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 6511c19800e8SDoug Rabson else 6512c19800e8SDoug Rabson if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6513c19800e8SDoug Rabson dir="$ladir" 6514c19800e8SDoug Rabson absdir="$abs_ladir" 6515c19800e8SDoug Rabson # Remove this search path later 6516*ae771770SStanislav Sedov func_append notinst_path " $abs_ladir" 65175e9cd1aeSAssar Westerlund else 65185e9cd1aeSAssar Westerlund dir="$ladir/$objdir" 65195e9cd1aeSAssar Westerlund absdir="$abs_ladir/$objdir" 65205e9cd1aeSAssar Westerlund # Remove this search path later 6521*ae771770SStanislav Sedov func_append notinst_path " $abs_ladir" 6522c19800e8SDoug Rabson fi 65234137ff4cSJacques Vidrine fi # $installed = yes 6524*ae771770SStanislav Sedov func_stripname 'lib' '.la' "$laname" 6525*ae771770SStanislav Sedov name=$func_stripname_result 65265e9cd1aeSAssar Westerlund 65275e9cd1aeSAssar Westerlund # This library was specified with -dlpreopen. 65281c43270aSJacques Vidrine if test "$pass" = dlpreopen; then 6529*ae771770SStanislav Sedov if test -z "$libdir" && test "$linkmode" = prog; then 6530*ae771770SStanislav Sedov func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 65315e9cd1aeSAssar Westerlund fi 6532*ae771770SStanislav Sedov case "$host" in 6533*ae771770SStanislav Sedov # special handling for platforms with PE-DLLs. 6534*ae771770SStanislav Sedov *cygwin* | *mingw* | *cegcc* ) 6535*ae771770SStanislav Sedov # Linker will automatically link against shared library if both 6536*ae771770SStanislav Sedov # static and shared are present. Therefore, ensure we extract 6537*ae771770SStanislav Sedov # symbols from the import library if a shared library is present 6538*ae771770SStanislav Sedov # (otherwise, the dlopen module name will be incorrect). We do 6539*ae771770SStanislav Sedov # this by putting the import library name into $newdlprefiles. 6540*ae771770SStanislav Sedov # We recover the dlopen module name by 'saving' the la file 6541*ae771770SStanislav Sedov # name in a special purpose variable, and (later) extracting the 6542*ae771770SStanislav Sedov # dlname from the la file. 6543*ae771770SStanislav Sedov if test -n "$dlname"; then 6544*ae771770SStanislav Sedov func_tr_sh "$dir/$linklib" 6545*ae771770SStanislav Sedov eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 6546*ae771770SStanislav Sedov func_append newdlprefiles " $dir/$linklib" 6547*ae771770SStanislav Sedov else 6548*ae771770SStanislav Sedov func_append newdlprefiles " $dir/$old_library" 6549*ae771770SStanislav Sedov # Keep a list of preopened convenience libraries to check 6550*ae771770SStanislav Sedov # that they are being used correctly in the link pass. 6551*ae771770SStanislav Sedov test -z "$libdir" && \ 6552*ae771770SStanislav Sedov func_append dlpreconveniencelibs " $dir/$old_library" 6553*ae771770SStanislav Sedov fi 6554*ae771770SStanislav Sedov ;; 6555*ae771770SStanislav Sedov * ) 65565e9cd1aeSAssar Westerlund # Prefer using a static library (so that no silly _DYNAMIC symbols 65575e9cd1aeSAssar Westerlund # are required to link). 65585e9cd1aeSAssar Westerlund if test -n "$old_library"; then 6559*ae771770SStanislav Sedov func_append newdlprefiles " $dir/$old_library" 6560*ae771770SStanislav Sedov # Keep a list of preopened convenience libraries to check 6561*ae771770SStanislav Sedov # that they are being used correctly in the link pass. 6562*ae771770SStanislav Sedov test -z "$libdir" && \ 6563*ae771770SStanislav Sedov func_append dlpreconveniencelibs " $dir/$old_library" 65644137ff4cSJacques Vidrine # Otherwise, use the dlname, so that lt_dlopen finds it. 65654137ff4cSJacques Vidrine elif test -n "$dlname"; then 6566*ae771770SStanislav Sedov func_append newdlprefiles " $dir/$dlname" 65675e9cd1aeSAssar Westerlund else 6568*ae771770SStanislav Sedov func_append newdlprefiles " $dir/$linklib" 65695e9cd1aeSAssar Westerlund fi 6570*ae771770SStanislav Sedov ;; 6571*ae771770SStanislav Sedov esac 65724137ff4cSJacques Vidrine fi # $pass = dlpreopen 65735e9cd1aeSAssar Westerlund 65745e9cd1aeSAssar Westerlund if test -z "$libdir"; then 65754137ff4cSJacques Vidrine # Link the convenience library 65761c43270aSJacques Vidrine if test "$linkmode" = lib; then 65775e9cd1aeSAssar Westerlund deplibs="$dir/$old_library $deplibs" 65785e9cd1aeSAssar Westerlund elif test "$linkmode,$pass" = "prog,link"; then 65795e9cd1aeSAssar Westerlund compile_deplibs="$dir/$old_library $compile_deplibs" 65805e9cd1aeSAssar Westerlund finalize_deplibs="$dir/$old_library $finalize_deplibs" 65815e9cd1aeSAssar Westerlund else 65821c43270aSJacques Vidrine deplibs="$lib $deplibs" # used for prog,scan pass 65835e9cd1aeSAssar Westerlund fi 65845e9cd1aeSAssar Westerlund continue 65855e9cd1aeSAssar Westerlund fi 65865e9cd1aeSAssar Westerlund 65871c43270aSJacques Vidrine 65881c43270aSJacques Vidrine if test "$linkmode" = prog && test "$pass" != link; then 6589*ae771770SStanislav Sedov func_append newlib_search_path " $ladir" 65905e9cd1aeSAssar Westerlund deplibs="$lib $deplibs" 65915e9cd1aeSAssar Westerlund 65925e9cd1aeSAssar Westerlund linkalldeplibs=no 65935e9cd1aeSAssar Westerlund if test "$link_all_deplibs" != no || test -z "$library_names" || 65945e9cd1aeSAssar Westerlund test "$build_libtool_libs" = no; then 65955e9cd1aeSAssar Westerlund linkalldeplibs=yes 65965e9cd1aeSAssar Westerlund fi 65975e9cd1aeSAssar Westerlund 65985e9cd1aeSAssar Westerlund tmp_libs= 65995e9cd1aeSAssar Westerlund for deplib in $dependency_libs; do 66004137ff4cSJacques Vidrine case $deplib in 6601*ae771770SStanislav Sedov -L*) func_stripname '-L' '' "$deplib" 6602*ae771770SStanislav Sedov func_resolve_sysroot "$func_stripname_result" 6603*ae771770SStanislav Sedov func_append newlib_search_path " $func_resolve_sysroot_result" 6604*ae771770SStanislav Sedov ;; 66055e9cd1aeSAssar Westerlund esac 66065e9cd1aeSAssar Westerlund # Need to link against all dependency_libs? 66071c43270aSJacques Vidrine if test "$linkalldeplibs" = yes; then 66085e9cd1aeSAssar Westerlund deplibs="$deplib $deplibs" 66095e9cd1aeSAssar Westerlund else 66105e9cd1aeSAssar Westerlund # Need to hardcode shared library paths 66115e9cd1aeSAssar Westerlund # or/and link against static libraries 66125e9cd1aeSAssar Westerlund newdependency_libs="$deplib $newdependency_libs" 66135e9cd1aeSAssar Westerlund fi 6614*ae771770SStanislav Sedov if $opt_preserve_dup_deps ; then 66155e9cd1aeSAssar Westerlund case "$tmp_libs " in 6616*ae771770SStanislav Sedov *" $deplib "*) func_append specialdeplibs " $deplib" ;; 66175e9cd1aeSAssar Westerlund esac 66181c43270aSJacques Vidrine fi 6619*ae771770SStanislav Sedov func_append tmp_libs " $deplib" 66204137ff4cSJacques Vidrine done # for deplib 66215e9cd1aeSAssar Westerlund continue 66224137ff4cSJacques Vidrine fi # $linkmode = prog... 66235e9cd1aeSAssar Westerlund 66241c43270aSJacques Vidrine if test "$linkmode,$pass" = "prog,link"; then 66255e9cd1aeSAssar Westerlund if test -n "$library_names" && 6626*ae771770SStanislav Sedov { { test "$prefer_static_libs" = no || 6627*ae771770SStanislav Sedov test "$prefer_static_libs,$installed" = "built,yes"; } || 6628*ae771770SStanislav Sedov test -z "$old_library"; }; then 66291c43270aSJacques Vidrine # We need to hardcode the library path 6630c19800e8SDoug Rabson if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 66311c43270aSJacques Vidrine # Make sure the rpath contains only unique directories. 6632*ae771770SStanislav Sedov case "$temp_rpath:" in 6633*ae771770SStanislav Sedov *"$absdir:"*) ;; 6634*ae771770SStanislav Sedov *) func_append temp_rpath "$absdir:" ;; 66351c43270aSJacques Vidrine esac 66361c43270aSJacques Vidrine fi 66374137ff4cSJacques Vidrine 66384137ff4cSJacques Vidrine # Hardcode the library path. 66394137ff4cSJacques Vidrine # Skip directories that are in the system default run-time 66404137ff4cSJacques Vidrine # search path. 66414137ff4cSJacques Vidrine case " $sys_lib_dlsearch_path " in 66424137ff4cSJacques Vidrine *" $absdir "*) ;; 66434137ff4cSJacques Vidrine *) 66444137ff4cSJacques Vidrine case "$compile_rpath " in 66454137ff4cSJacques Vidrine *" $absdir "*) ;; 6646*ae771770SStanislav Sedov *) func_append compile_rpath " $absdir" ;; 66474137ff4cSJacques Vidrine esac 66484137ff4cSJacques Vidrine ;; 66494137ff4cSJacques Vidrine esac 66504137ff4cSJacques Vidrine case " $sys_lib_dlsearch_path " in 66514137ff4cSJacques Vidrine *" $libdir "*) ;; 66524137ff4cSJacques Vidrine *) 66534137ff4cSJacques Vidrine case "$finalize_rpath " in 66544137ff4cSJacques Vidrine *" $libdir "*) ;; 6655*ae771770SStanislav Sedov *) func_append finalize_rpath " $libdir" ;; 66564137ff4cSJacques Vidrine esac 66574137ff4cSJacques Vidrine ;; 66584137ff4cSJacques Vidrine esac 66594137ff4cSJacques Vidrine fi # $linkmode,$pass = prog,link... 66605e9cd1aeSAssar Westerlund 66615e9cd1aeSAssar Westerlund if test "$alldeplibs" = yes && 66625e9cd1aeSAssar Westerlund { test "$deplibs_check_method" = pass_all || 66635e9cd1aeSAssar Westerlund { test "$build_libtool_libs" = yes && 66645e9cd1aeSAssar Westerlund test -n "$library_names"; }; }; then 66655e9cd1aeSAssar Westerlund # We only need to search for static libraries 66665e9cd1aeSAssar Westerlund continue 66675e9cd1aeSAssar Westerlund fi 66681c43270aSJacques Vidrine fi 66695e9cd1aeSAssar Westerlund 66701c43270aSJacques Vidrine link_static=no # Whether the deplib will be linked statically 6671c19800e8SDoug Rabson use_static_libs=$prefer_static_libs 6672c19800e8SDoug Rabson if test "$use_static_libs" = built && test "$installed" = yes; then 6673c19800e8SDoug Rabson use_static_libs=no 6674c19800e8SDoug Rabson fi 66751c43270aSJacques Vidrine if test -n "$library_names" && 6676c19800e8SDoug Rabson { test "$use_static_libs" = no || test -z "$old_library"; }; then 6677*ae771770SStanislav Sedov case $host in 6678*ae771770SStanislav Sedov *cygwin* | *mingw* | *cegcc*) 6679*ae771770SStanislav Sedov # No point in relinking DLLs because paths are not encoded 6680*ae771770SStanislav Sedov func_append notinst_deplibs " $lib" 6681*ae771770SStanislav Sedov need_relink=no 6682*ae771770SStanislav Sedov ;; 6683*ae771770SStanislav Sedov *) 66845e9cd1aeSAssar Westerlund if test "$installed" = no; then 6685*ae771770SStanislav Sedov func_append notinst_deplibs " $lib" 66865e9cd1aeSAssar Westerlund need_relink=yes 66875e9cd1aeSAssar Westerlund fi 6688*ae771770SStanislav Sedov ;; 6689*ae771770SStanislav Sedov esac 66901c43270aSJacques Vidrine # This is a shared library 66911c43270aSJacques Vidrine 6692*ae771770SStanislav Sedov # Warn about portability, can't link against -module's on some 6693*ae771770SStanislav Sedov # systems (darwin). Don't bleat about dlopened modules though! 6694*ae771770SStanislav Sedov dlopenmodule="" 6695*ae771770SStanislav Sedov for dlpremoduletest in $dlprefiles; do 6696*ae771770SStanislav Sedov if test "X$dlpremoduletest" = "X$lib"; then 6697*ae771770SStanislav Sedov dlopenmodule="$dlpremoduletest" 6698*ae771770SStanislav Sedov break 66991c43270aSJacques Vidrine fi 6700*ae771770SStanislav Sedov done 6701*ae771770SStanislav Sedov if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 6702*ae771770SStanislav Sedov echo 6703*ae771770SStanislav Sedov if test "$linkmode" = prog; then 6704*ae771770SStanislav Sedov $ECHO "*** Warning: Linking the executable $output against the loadable module" 6705*ae771770SStanislav Sedov else 6706*ae771770SStanislav Sedov $ECHO "*** Warning: Linking the shared library $output against the loadable module" 6707*ae771770SStanislav Sedov fi 6708*ae771770SStanislav Sedov $ECHO "*** $linklib is not portable!" 67091c43270aSJacques Vidrine fi 67101c43270aSJacques Vidrine if test "$linkmode" = lib && 67111c43270aSJacques Vidrine test "$hardcode_into_libs" = yes; then 67121c43270aSJacques Vidrine # Hardcode the library path. 67131c43270aSJacques Vidrine # Skip directories that are in the system default run-time 67141c43270aSJacques Vidrine # search path. 67151c43270aSJacques Vidrine case " $sys_lib_dlsearch_path " in 67161c43270aSJacques Vidrine *" $absdir "*) ;; 67171c43270aSJacques Vidrine *) 67181c43270aSJacques Vidrine case "$compile_rpath " in 67191c43270aSJacques Vidrine *" $absdir "*) ;; 6720*ae771770SStanislav Sedov *) func_append compile_rpath " $absdir" ;; 67211c43270aSJacques Vidrine esac 67221c43270aSJacques Vidrine ;; 67231c43270aSJacques Vidrine esac 67241c43270aSJacques Vidrine case " $sys_lib_dlsearch_path " in 67251c43270aSJacques Vidrine *" $libdir "*) ;; 67261c43270aSJacques Vidrine *) 67271c43270aSJacques Vidrine case "$finalize_rpath " in 67281c43270aSJacques Vidrine *" $libdir "*) ;; 6729*ae771770SStanislav Sedov *) func_append finalize_rpath " $libdir" ;; 67301c43270aSJacques Vidrine esac 67311c43270aSJacques Vidrine ;; 67321c43270aSJacques Vidrine esac 67331c43270aSJacques Vidrine fi 67345e9cd1aeSAssar Westerlund 67355e9cd1aeSAssar Westerlund if test -n "$old_archive_from_expsyms_cmds"; then 67365e9cd1aeSAssar Westerlund # figure out the soname 67375e9cd1aeSAssar Westerlund set dummy $library_names 6738*ae771770SStanislav Sedov shift 6739*ae771770SStanislav Sedov realname="$1" 6740*ae771770SStanislav Sedov shift 6741*ae771770SStanislav Sedov libname=`eval "\\$ECHO \"$libname_spec\""` 67424137ff4cSJacques Vidrine # use dlname if we got it. it's perfectly good, no? 67434137ff4cSJacques Vidrine if test -n "$dlname"; then 67444137ff4cSJacques Vidrine soname="$dlname" 67454137ff4cSJacques Vidrine elif test -n "$soname_spec"; then 67464137ff4cSJacques Vidrine # bleh windows 67474137ff4cSJacques Vidrine case $host in 6748*ae771770SStanislav Sedov *cygwin* | mingw* | *cegcc*) 6749*ae771770SStanislav Sedov func_arith $current - $age 6750*ae771770SStanislav Sedov major=$func_arith_result 67514137ff4cSJacques Vidrine versuffix="-$major" 67524137ff4cSJacques Vidrine ;; 67534137ff4cSJacques Vidrine esac 67545e9cd1aeSAssar Westerlund eval soname=\"$soname_spec\" 67555e9cd1aeSAssar Westerlund else 67565e9cd1aeSAssar Westerlund soname="$realname" 67575e9cd1aeSAssar Westerlund fi 67585e9cd1aeSAssar Westerlund 67595e9cd1aeSAssar Westerlund # Make a new name for the extract_expsyms_cmds to use 67604137ff4cSJacques Vidrine soroot="$soname" 6761*ae771770SStanislav Sedov func_basename "$soroot" 6762*ae771770SStanislav Sedov soname="$func_basename_result" 6763*ae771770SStanislav Sedov func_stripname 'lib' '.dll' "$soname" 6764*ae771770SStanislav Sedov newlib=libimp-$func_stripname_result.a 67655e9cd1aeSAssar Westerlund 67665e9cd1aeSAssar Westerlund # If the library has no export list, then create one now 67675e9cd1aeSAssar Westerlund if test -f "$output_objdir/$soname-def"; then : 67685e9cd1aeSAssar Westerlund else 6769*ae771770SStanislav Sedov func_verbose "extracting exported symbol list from \`$soname'" 6770*ae771770SStanislav Sedov func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 67715e9cd1aeSAssar Westerlund fi 67725e9cd1aeSAssar Westerlund 67735e9cd1aeSAssar Westerlund # Create $newlib 67745e9cd1aeSAssar Westerlund if test -f "$output_objdir/$newlib"; then :; else 6775*ae771770SStanislav Sedov func_verbose "generating import library for \`$soname'" 6776*ae771770SStanislav Sedov func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 67775e9cd1aeSAssar Westerlund fi 67785e9cd1aeSAssar Westerlund # make sure the library variables are pointing to the new library 67795e9cd1aeSAssar Westerlund dir=$output_objdir 67805e9cd1aeSAssar Westerlund linklib=$newlib 67811c43270aSJacques Vidrine fi # test -n "$old_archive_from_expsyms_cmds" 67825e9cd1aeSAssar Westerlund 6783*ae771770SStanislav Sedov if test "$linkmode" = prog || test "$opt_mode" != relink; then 67845e9cd1aeSAssar Westerlund add_shlibpath= 67855e9cd1aeSAssar Westerlund add_dir= 67865e9cd1aeSAssar Westerlund add= 67875e9cd1aeSAssar Westerlund lib_linked=yes 67884137ff4cSJacques Vidrine case $hardcode_action in 67895e9cd1aeSAssar Westerlund immediate | unsupported) 67905e9cd1aeSAssar Westerlund if test "$hardcode_direct" = no; then 67915e9cd1aeSAssar Westerlund add="$dir/$linklib" 67921c43270aSJacques Vidrine case $host in 6793c19800e8SDoug Rabson *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 6794c19800e8SDoug Rabson *-*-sysv4*uw2*) add_dir="-L$dir" ;; 6795c19800e8SDoug Rabson *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 6796c19800e8SDoug Rabson *-*-unixware7*) add_dir="-L$dir" ;; 67971c43270aSJacques Vidrine *-*-darwin* ) 6798*ae771770SStanislav Sedov # if the lib is a (non-dlopened) module then we can not 6799*ae771770SStanislav Sedov # link against it, someone is ignoring the earlier warnings 6800c19800e8SDoug Rabson if /usr/bin/file -L $add 2> /dev/null | 6801*ae771770SStanislav Sedov $GREP ": [^:]* bundle" >/dev/null ; then 6802*ae771770SStanislav Sedov if test "X$dlopenmodule" != "X$lib"; then 6803*ae771770SStanislav Sedov $ECHO "*** Warning: lib $linklib is a module, not a shared library" 68041c43270aSJacques Vidrine if test -z "$old_library" ; then 6805*ae771770SStanislav Sedov echo 6806*ae771770SStanislav Sedov echo "*** And there doesn't seem to be a static archive available" 6807*ae771770SStanislav Sedov echo "*** The link will probably fail, sorry" 68081c43270aSJacques Vidrine else 68091c43270aSJacques Vidrine add="$dir/$old_library" 68101c43270aSJacques Vidrine fi 6811*ae771770SStanislav Sedov elif test -n "$old_library"; then 6812*ae771770SStanislav Sedov add="$dir/$old_library" 6813*ae771770SStanislav Sedov fi 68141c43270aSJacques Vidrine fi 68151c43270aSJacques Vidrine esac 68165e9cd1aeSAssar Westerlund elif test "$hardcode_minus_L" = no; then 68174137ff4cSJacques Vidrine case $host in 68185e9cd1aeSAssar Westerlund *-*-sunos*) add_shlibpath="$dir" ;; 68195e9cd1aeSAssar Westerlund esac 68205e9cd1aeSAssar Westerlund add_dir="-L$dir" 68215e9cd1aeSAssar Westerlund add="-l$name" 68225e9cd1aeSAssar Westerlund elif test "$hardcode_shlibpath_var" = no; then 68235e9cd1aeSAssar Westerlund add_shlibpath="$dir" 68245e9cd1aeSAssar Westerlund add="-l$name" 68255e9cd1aeSAssar Westerlund else 68265e9cd1aeSAssar Westerlund lib_linked=no 68275e9cd1aeSAssar Westerlund fi 68285e9cd1aeSAssar Westerlund ;; 68295e9cd1aeSAssar Westerlund relink) 6830*ae771770SStanislav Sedov if test "$hardcode_direct" = yes && 6831*ae771770SStanislav Sedov test "$hardcode_direct_absolute" = no; then 68325e9cd1aeSAssar Westerlund add="$dir/$linklib" 68335e9cd1aeSAssar Westerlund elif test "$hardcode_minus_L" = yes; then 68345e9cd1aeSAssar Westerlund add_dir="-L$dir" 68351c43270aSJacques Vidrine # Try looking first in the location we're being installed to. 68361c43270aSJacques Vidrine if test -n "$inst_prefix_dir"; then 6837c19800e8SDoug Rabson case $libdir in 68381c43270aSJacques Vidrine [\\/]*) 6839*ae771770SStanislav Sedov func_append add_dir " -L$inst_prefix_dir$libdir" 68401c43270aSJacques Vidrine ;; 68411c43270aSJacques Vidrine esac 68421c43270aSJacques Vidrine fi 68435e9cd1aeSAssar Westerlund add="-l$name" 68445e9cd1aeSAssar Westerlund elif test "$hardcode_shlibpath_var" = yes; then 68455e9cd1aeSAssar Westerlund add_shlibpath="$dir" 68465e9cd1aeSAssar Westerlund add="-l$name" 68475e9cd1aeSAssar Westerlund else 68485e9cd1aeSAssar Westerlund lib_linked=no 68495e9cd1aeSAssar Westerlund fi 68505e9cd1aeSAssar Westerlund ;; 68515e9cd1aeSAssar Westerlund *) lib_linked=no ;; 68525e9cd1aeSAssar Westerlund esac 68535e9cd1aeSAssar Westerlund 68545e9cd1aeSAssar Westerlund if test "$lib_linked" != yes; then 6855*ae771770SStanislav Sedov func_fatal_configuration "unsupported hardcode properties" 68565e9cd1aeSAssar Westerlund fi 68575e9cd1aeSAssar Westerlund 68585e9cd1aeSAssar Westerlund if test -n "$add_shlibpath"; then 68594137ff4cSJacques Vidrine case :$compile_shlibpath: in 68605e9cd1aeSAssar Westerlund *":$add_shlibpath:"*) ;; 6861*ae771770SStanislav Sedov *) func_append compile_shlibpath "$add_shlibpath:" ;; 68625e9cd1aeSAssar Westerlund esac 68635e9cd1aeSAssar Westerlund fi 68641c43270aSJacques Vidrine if test "$linkmode" = prog; then 68655e9cd1aeSAssar Westerlund test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 68665e9cd1aeSAssar Westerlund test -n "$add" && compile_deplibs="$add $compile_deplibs" 68675e9cd1aeSAssar Westerlund else 68685e9cd1aeSAssar Westerlund test -n "$add_dir" && deplibs="$add_dir $deplibs" 68695e9cd1aeSAssar Westerlund test -n "$add" && deplibs="$add $deplibs" 6870*ae771770SStanislav Sedov if test "$hardcode_direct" != yes && 6871*ae771770SStanislav Sedov test "$hardcode_minus_L" != yes && 68725e9cd1aeSAssar Westerlund test "$hardcode_shlibpath_var" = yes; then 68734137ff4cSJacques Vidrine case :$finalize_shlibpath: in 68745e9cd1aeSAssar Westerlund *":$libdir:"*) ;; 6875*ae771770SStanislav Sedov *) func_append finalize_shlibpath "$libdir:" ;; 68765e9cd1aeSAssar Westerlund esac 68775e9cd1aeSAssar Westerlund fi 68785e9cd1aeSAssar Westerlund fi 68795e9cd1aeSAssar Westerlund fi 68805e9cd1aeSAssar Westerlund 6881*ae771770SStanislav Sedov if test "$linkmode" = prog || test "$opt_mode" = relink; then 68825e9cd1aeSAssar Westerlund add_shlibpath= 68835e9cd1aeSAssar Westerlund add_dir= 68845e9cd1aeSAssar Westerlund add= 68855e9cd1aeSAssar Westerlund # Finalize command for both is simple: just hardcode it. 6886*ae771770SStanislav Sedov if test "$hardcode_direct" = yes && 6887*ae771770SStanislav Sedov test "$hardcode_direct_absolute" = no; then 68885e9cd1aeSAssar Westerlund add="$libdir/$linklib" 68895e9cd1aeSAssar Westerlund elif test "$hardcode_minus_L" = yes; then 68905e9cd1aeSAssar Westerlund add_dir="-L$libdir" 68915e9cd1aeSAssar Westerlund add="-l$name" 68925e9cd1aeSAssar Westerlund elif test "$hardcode_shlibpath_var" = yes; then 68934137ff4cSJacques Vidrine case :$finalize_shlibpath: in 68945e9cd1aeSAssar Westerlund *":$libdir:"*) ;; 6895*ae771770SStanislav Sedov *) func_append finalize_shlibpath "$libdir:" ;; 68965e9cd1aeSAssar Westerlund esac 68975e9cd1aeSAssar Westerlund add="-l$name" 68981c43270aSJacques Vidrine elif test "$hardcode_automatic" = yes; then 6899c19800e8SDoug Rabson if test -n "$inst_prefix_dir" && 6900c19800e8SDoug Rabson test -f "$inst_prefix_dir$libdir/$linklib" ; then 69011c43270aSJacques Vidrine add="$inst_prefix_dir$libdir/$linklib" 69021c43270aSJacques Vidrine else 69031c43270aSJacques Vidrine add="$libdir/$linklib" 69041c43270aSJacques Vidrine fi 69055e9cd1aeSAssar Westerlund else 69065e9cd1aeSAssar Westerlund # We cannot seem to hardcode it, guess we'll fake it. 69075e9cd1aeSAssar Westerlund add_dir="-L$libdir" 69081c43270aSJacques Vidrine # Try looking first in the location we're being installed to. 69091c43270aSJacques Vidrine if test -n "$inst_prefix_dir"; then 6910c19800e8SDoug Rabson case $libdir in 69111c43270aSJacques Vidrine [\\/]*) 6912*ae771770SStanislav Sedov func_append add_dir " -L$inst_prefix_dir$libdir" 69131c43270aSJacques Vidrine ;; 69141c43270aSJacques Vidrine esac 69151c43270aSJacques Vidrine fi 69165e9cd1aeSAssar Westerlund add="-l$name" 69175e9cd1aeSAssar Westerlund fi 69185e9cd1aeSAssar Westerlund 69191c43270aSJacques Vidrine if test "$linkmode" = prog; then 69205e9cd1aeSAssar Westerlund test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 69215e9cd1aeSAssar Westerlund test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 69225e9cd1aeSAssar Westerlund else 69235e9cd1aeSAssar Westerlund test -n "$add_dir" && deplibs="$add_dir $deplibs" 69244137ff4cSJacques Vidrine test -n "$add" && deplibs="$add $deplibs" 69255e9cd1aeSAssar Westerlund fi 69265e9cd1aeSAssar Westerlund fi 69271c43270aSJacques Vidrine elif test "$linkmode" = prog; then 69285e9cd1aeSAssar Westerlund # Here we assume that one of hardcode_direct or hardcode_minus_L 69295e9cd1aeSAssar Westerlund # is not unsupported. This is valid on all known static and 69305e9cd1aeSAssar Westerlund # shared platforms. 69315e9cd1aeSAssar Westerlund if test "$hardcode_direct" != unsupported; then 69325e9cd1aeSAssar Westerlund test -n "$old_library" && linklib="$old_library" 69335e9cd1aeSAssar Westerlund compile_deplibs="$dir/$linklib $compile_deplibs" 69345e9cd1aeSAssar Westerlund finalize_deplibs="$dir/$linklib $finalize_deplibs" 69355e9cd1aeSAssar Westerlund else 69365e9cd1aeSAssar Westerlund compile_deplibs="-l$name -L$dir $compile_deplibs" 69375e9cd1aeSAssar Westerlund finalize_deplibs="-l$name -L$dir $finalize_deplibs" 69385e9cd1aeSAssar Westerlund fi 69395e9cd1aeSAssar Westerlund elif test "$build_libtool_libs" = yes; then 69405e9cd1aeSAssar Westerlund # Not a shared library 69415e9cd1aeSAssar Westerlund if test "$deplibs_check_method" != pass_all; then 69425e9cd1aeSAssar Westerlund # We're trying link a shared library against a static one 69435e9cd1aeSAssar Westerlund # but the system doesn't support it. 69444137ff4cSJacques Vidrine 69455e9cd1aeSAssar Westerlund # Just print a warning and add the library to dependency_libs so 69465e9cd1aeSAssar Westerlund # that the program can be linked against the static library. 6947*ae771770SStanislav Sedov echo 6948*ae771770SStanislav Sedov $ECHO "*** Warning: This system can not link to static lib archive $lib." 6949*ae771770SStanislav Sedov echo "*** I have the capability to make that library automatically link in when" 6950*ae771770SStanislav Sedov echo "*** you link to this library. But I can only do this if you have a" 6951*ae771770SStanislav Sedov echo "*** shared version of the library, which you do not appear to have." 69524137ff4cSJacques Vidrine if test "$module" = yes; then 6953*ae771770SStanislav Sedov echo "*** But as you try to build a module library, libtool will still create " 6954*ae771770SStanislav Sedov echo "*** a static module, that should work as long as the dlopening application" 6955*ae771770SStanislav Sedov echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 69564137ff4cSJacques Vidrine if test -z "$global_symbol_pipe"; then 6957*ae771770SStanislav Sedov echo 6958*ae771770SStanislav Sedov echo "*** However, this would only work if libtool was able to extract symbol" 6959*ae771770SStanislav Sedov echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 6960*ae771770SStanislav Sedov echo "*** not find such a program. So, this module is probably useless." 6961*ae771770SStanislav Sedov echo "*** \`nm' from GNU binutils and a full rebuild may help." 69624137ff4cSJacques Vidrine fi 69634137ff4cSJacques Vidrine if test "$build_old_libs" = no; then 69644137ff4cSJacques Vidrine build_libtool_libs=module 69654137ff4cSJacques Vidrine build_old_libs=yes 69664137ff4cSJacques Vidrine else 69674137ff4cSJacques Vidrine build_libtool_libs=no 69684137ff4cSJacques Vidrine fi 69694137ff4cSJacques Vidrine fi 69705e9cd1aeSAssar Westerlund else 69715e9cd1aeSAssar Westerlund deplibs="$dir/$old_library $deplibs" 69725e9cd1aeSAssar Westerlund link_static=yes 69735e9cd1aeSAssar Westerlund fi 69744137ff4cSJacques Vidrine fi # link shared/static library? 69755e9cd1aeSAssar Westerlund 69761c43270aSJacques Vidrine if test "$linkmode" = lib; then 69775e9cd1aeSAssar Westerlund if test -n "$dependency_libs" && 6978c19800e8SDoug Rabson { test "$hardcode_into_libs" != yes || 6979c19800e8SDoug Rabson test "$build_old_libs" = yes || 69801c43270aSJacques Vidrine test "$link_static" = yes; }; then 69815e9cd1aeSAssar Westerlund # Extract -R from dependency_libs 69825e9cd1aeSAssar Westerlund temp_deplibs= 69835e9cd1aeSAssar Westerlund for libdir in $dependency_libs; do 69844137ff4cSJacques Vidrine case $libdir in 6985*ae771770SStanislav Sedov -R*) func_stripname '-R' '' "$libdir" 6986*ae771770SStanislav Sedov temp_xrpath=$func_stripname_result 69875e9cd1aeSAssar Westerlund case " $xrpath " in 69885e9cd1aeSAssar Westerlund *" $temp_xrpath "*) ;; 6989*ae771770SStanislav Sedov *) func_append xrpath " $temp_xrpath";; 69905e9cd1aeSAssar Westerlund esac;; 6991*ae771770SStanislav Sedov *) func_append temp_deplibs " $libdir";; 69925e9cd1aeSAssar Westerlund esac 69935e9cd1aeSAssar Westerlund done 69945e9cd1aeSAssar Westerlund dependency_libs="$temp_deplibs" 69955e9cd1aeSAssar Westerlund fi 69965e9cd1aeSAssar Westerlund 6997*ae771770SStanislav Sedov func_append newlib_search_path " $absdir" 69985e9cd1aeSAssar Westerlund # Link against this library 69995e9cd1aeSAssar Westerlund test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 70005e9cd1aeSAssar Westerlund # ... and its dependency_libs 70015e9cd1aeSAssar Westerlund tmp_libs= 70025e9cd1aeSAssar Westerlund for deplib in $dependency_libs; do 70035e9cd1aeSAssar Westerlund newdependency_libs="$deplib $newdependency_libs" 7004*ae771770SStanislav Sedov case $deplib in 7005*ae771770SStanislav Sedov -L*) func_stripname '-L' '' "$deplib" 7006*ae771770SStanislav Sedov func_resolve_sysroot "$func_stripname_result";; 7007*ae771770SStanislav Sedov *) func_resolve_sysroot "$deplib" ;; 7008*ae771770SStanislav Sedov esac 7009*ae771770SStanislav Sedov if $opt_preserve_dup_deps ; then 70105e9cd1aeSAssar Westerlund case "$tmp_libs " in 7011*ae771770SStanislav Sedov *" $func_resolve_sysroot_result "*) 7012*ae771770SStanislav Sedov func_append specialdeplibs " $func_resolve_sysroot_result" ;; 70135e9cd1aeSAssar Westerlund esac 70141c43270aSJacques Vidrine fi 7015*ae771770SStanislav Sedov func_append tmp_libs " $func_resolve_sysroot_result" 70165e9cd1aeSAssar Westerlund done 70175e9cd1aeSAssar Westerlund 70181c43270aSJacques Vidrine if test "$link_all_deplibs" != no; then 70195e9cd1aeSAssar Westerlund # Add the search paths of all dependency libraries 70205e9cd1aeSAssar Westerlund for deplib in $dependency_libs; do 7021*ae771770SStanislav Sedov path= 70224137ff4cSJacques Vidrine case $deplib in 70235e9cd1aeSAssar Westerlund -L*) path="$deplib" ;; 70245e9cd1aeSAssar Westerlund *.la) 7025*ae771770SStanislav Sedov func_resolve_sysroot "$deplib" 7026*ae771770SStanislav Sedov deplib=$func_resolve_sysroot_result 7027*ae771770SStanislav Sedov func_dirname "$deplib" "" "." 7028*ae771770SStanislav Sedov dir=$func_dirname_result 70295e9cd1aeSAssar Westerlund # We need an absolute path. 70304137ff4cSJacques Vidrine case $dir in 70315e9cd1aeSAssar Westerlund [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 70325e9cd1aeSAssar Westerlund *) 70335e9cd1aeSAssar Westerlund absdir=`cd "$dir" && pwd` 70345e9cd1aeSAssar Westerlund if test -z "$absdir"; then 7035*ae771770SStanislav Sedov func_warning "cannot determine absolute directory name of \`$dir'" 70365e9cd1aeSAssar Westerlund absdir="$dir" 70375e9cd1aeSAssar Westerlund fi 70385e9cd1aeSAssar Westerlund ;; 70395e9cd1aeSAssar Westerlund esac 7040*ae771770SStanislav Sedov if $GREP "^installed=no" $deplib > /dev/null; then 70411c43270aSJacques Vidrine case $host in 70421c43270aSJacques Vidrine *-*-darwin*) 7043*ae771770SStanislav Sedov depdepl= 70441c43270aSJacques Vidrine eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 70451c43270aSJacques Vidrine if test -n "$deplibrary_names" ; then 70461c43270aSJacques Vidrine for tmp in $deplibrary_names ; do 70471c43270aSJacques Vidrine depdepl=$tmp 70481c43270aSJacques Vidrine done 7049*ae771770SStanislav Sedov if test -f "$absdir/$objdir/$depdepl" ; then 7050*ae771770SStanislav Sedov depdepl="$absdir/$objdir/$depdepl" 7051*ae771770SStanislav Sedov darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7052*ae771770SStanislav Sedov if test -z "$darwin_install_name"; then 7053*ae771770SStanislav Sedov darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 70541c43270aSJacques Vidrine fi 7055*ae771770SStanislav Sedov func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 7056*ae771770SStanislav Sedov func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" 7057*ae771770SStanislav Sedov path= 70581c43270aSJacques Vidrine fi 7059*ae771770SStanislav Sedov fi 70601c43270aSJacques Vidrine ;; 70611c43270aSJacques Vidrine *) 7062*ae771770SStanislav Sedov path="-L$absdir/$objdir" 70631c43270aSJacques Vidrine ;; 70641c43270aSJacques Vidrine esac 7065*ae771770SStanislav Sedov else 7066*ae771770SStanislav Sedov eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 7067*ae771770SStanislav Sedov test -z "$libdir" && \ 7068*ae771770SStanislav Sedov func_fatal_error "\`$deplib' is not a valid libtool archive" 7069*ae771770SStanislav Sedov test "$absdir" != "$libdir" && \ 7070*ae771770SStanislav Sedov func_warning "\`$deplib' seems to be moved" 7071*ae771770SStanislav Sedov 7072*ae771770SStanislav Sedov path="-L$absdir" 70731c43270aSJacques Vidrine fi 70745e9cd1aeSAssar Westerlund ;; 70751c43270aSJacques Vidrine esac 70761c43270aSJacques Vidrine case " $deplibs " in 7077c19800e8SDoug Rabson *" $path "*) ;; 7078c19800e8SDoug Rabson *) deplibs="$path $deplibs" ;; 70791c43270aSJacques Vidrine esac 70805e9cd1aeSAssar Westerlund done 70814137ff4cSJacques Vidrine fi # link_all_deplibs != no 70824137ff4cSJacques Vidrine fi # linkmode = lib 70834137ff4cSJacques Vidrine done # for deplib in $libs 7084*ae771770SStanislav Sedov if test "$pass" = link; then 7085*ae771770SStanislav Sedov if test "$linkmode" = "prog"; then 7086*ae771770SStanislav Sedov compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 7087*ae771770SStanislav Sedov finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 7088*ae771770SStanislav Sedov else 7089*ae771770SStanislav Sedov compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7090*ae771770SStanislav Sedov fi 7091*ae771770SStanislav Sedov fi 70921c43270aSJacques Vidrine dependency_libs="$newdependency_libs" 70931c43270aSJacques Vidrine if test "$pass" = dlpreopen; then 70945e9cd1aeSAssar Westerlund # Link the dlpreopened libraries before other libraries 70955e9cd1aeSAssar Westerlund for deplib in $save_deplibs; do 70965e9cd1aeSAssar Westerlund deplibs="$deplib $deplibs" 70975e9cd1aeSAssar Westerlund done 70985e9cd1aeSAssar Westerlund fi 70991c43270aSJacques Vidrine if test "$pass" != dlopen; then 71001c43270aSJacques Vidrine if test "$pass" != conv; then 71015e9cd1aeSAssar Westerlund # Make sure lib_search_path contains only unique directories. 71025e9cd1aeSAssar Westerlund lib_search_path= 71035e9cd1aeSAssar Westerlund for dir in $newlib_search_path; do 71045e9cd1aeSAssar Westerlund case "$lib_search_path " in 71055e9cd1aeSAssar Westerlund *" $dir "*) ;; 7106*ae771770SStanislav Sedov *) func_append lib_search_path " $dir" ;; 71075e9cd1aeSAssar Westerlund esac 71085e9cd1aeSAssar Westerlund done 71095e9cd1aeSAssar Westerlund newlib_search_path= 71105e9cd1aeSAssar Westerlund fi 71115e9cd1aeSAssar Westerlund 71125e9cd1aeSAssar Westerlund if test "$linkmode,$pass" != "prog,link"; then 71135e9cd1aeSAssar Westerlund vars="deplibs" 71145e9cd1aeSAssar Westerlund else 71155e9cd1aeSAssar Westerlund vars="compile_deplibs finalize_deplibs" 71165e9cd1aeSAssar Westerlund fi 71175e9cd1aeSAssar Westerlund for var in $vars dependency_libs; do 71184137ff4cSJacques Vidrine # Add libraries to $var in reverse order 71195e9cd1aeSAssar Westerlund eval tmp_libs=\"\$$var\" 71205e9cd1aeSAssar Westerlund new_libs= 71215e9cd1aeSAssar Westerlund for deplib in $tmp_libs; do 71221c43270aSJacques Vidrine # FIXME: Pedantically, this is the right thing to do, so 71231c43270aSJacques Vidrine # that some nasty dependency loop isn't accidentally 71241c43270aSJacques Vidrine # broken: 71251c43270aSJacques Vidrine #new_libs="$deplib $new_libs" 71261c43270aSJacques Vidrine # Pragmatically, this seems to cause very few problems in 71271c43270aSJacques Vidrine # practice: 71284137ff4cSJacques Vidrine case $deplib in 71295e9cd1aeSAssar Westerlund -L*) new_libs="$deplib $new_libs" ;; 71301c43270aSJacques Vidrine -R*) ;; 71315e9cd1aeSAssar Westerlund *) 71321c43270aSJacques Vidrine # And here is the reason: when a library appears more 71331c43270aSJacques Vidrine # than once as an explicit dependence of a library, or 71341c43270aSJacques Vidrine # is implicitly linked in more than once by the 71351c43270aSJacques Vidrine # compiler, it is considered special, and multiple 71361c43270aSJacques Vidrine # occurrences thereof are not removed. Compare this 71371c43270aSJacques Vidrine # with having the same library being listed as a 71381c43270aSJacques Vidrine # dependency of multiple other libraries: in this case, 71391c43270aSJacques Vidrine # we know (pedantically, we assume) the library does not 71401c43270aSJacques Vidrine # need to be listed more than once, so we keep only the 71411c43270aSJacques Vidrine # last copy. This is not always right, but it is rare 71421c43270aSJacques Vidrine # enough that we require users that really mean to play 71431c43270aSJacques Vidrine # such unportable linking tricks to link the library 71441c43270aSJacques Vidrine # using -Wl,-lname, so that libtool does not consider it 71451c43270aSJacques Vidrine # for duplicate removal. 71465e9cd1aeSAssar Westerlund case " $specialdeplibs " in 71475e9cd1aeSAssar Westerlund *" $deplib "*) new_libs="$deplib $new_libs" ;; 71485e9cd1aeSAssar Westerlund *) 71495e9cd1aeSAssar Westerlund case " $new_libs " in 71505e9cd1aeSAssar Westerlund *" $deplib "*) ;; 71515e9cd1aeSAssar Westerlund *) new_libs="$deplib $new_libs" ;; 71525e9cd1aeSAssar Westerlund esac 71535e9cd1aeSAssar Westerlund ;; 71545e9cd1aeSAssar Westerlund esac 71555e9cd1aeSAssar Westerlund ;; 71565e9cd1aeSAssar Westerlund esac 71575e9cd1aeSAssar Westerlund done 71585e9cd1aeSAssar Westerlund tmp_libs= 71595e9cd1aeSAssar Westerlund for deplib in $new_libs; do 71604137ff4cSJacques Vidrine case $deplib in 71615e9cd1aeSAssar Westerlund -L*) 71625e9cd1aeSAssar Westerlund case " $tmp_libs " in 71635e9cd1aeSAssar Westerlund *" $deplib "*) ;; 7164*ae771770SStanislav Sedov *) func_append tmp_libs " $deplib" ;; 71655e9cd1aeSAssar Westerlund esac 71665e9cd1aeSAssar Westerlund ;; 7167*ae771770SStanislav Sedov *) func_append tmp_libs " $deplib" ;; 71685e9cd1aeSAssar Westerlund esac 71695e9cd1aeSAssar Westerlund done 71705e9cd1aeSAssar Westerlund eval $var=\"$tmp_libs\" 71714137ff4cSJacques Vidrine done # for var 71725e9cd1aeSAssar Westerlund fi 7173c19800e8SDoug Rabson # Last step: remove runtime libs from dependency_libs 7174c19800e8SDoug Rabson # (they stay in deplibs) 71751c43270aSJacques Vidrine tmp_libs= 71761c43270aSJacques Vidrine for i in $dependency_libs ; do 71771c43270aSJacques Vidrine case " $predeps $postdeps $compiler_lib_search_path " in 71781c43270aSJacques Vidrine *" $i "*) 71791c43270aSJacques Vidrine i="" 71801c43270aSJacques Vidrine ;; 71811c43270aSJacques Vidrine esac 71821c43270aSJacques Vidrine if test -n "$i" ; then 7183*ae771770SStanislav Sedov func_append tmp_libs " $i" 71844137ff4cSJacques Vidrine fi 71851c43270aSJacques Vidrine done 71861c43270aSJacques Vidrine dependency_libs=$tmp_libs 71874137ff4cSJacques Vidrine done # for pass 71881c43270aSJacques Vidrine if test "$linkmode" = prog; then 71895e9cd1aeSAssar Westerlund dlfiles="$newdlfiles" 7190*ae771770SStanislav Sedov fi 7191*ae771770SStanislav Sedov if test "$linkmode" = prog || test "$linkmode" = lib; then 71925e9cd1aeSAssar Westerlund dlprefiles="$newdlprefiles" 71935e9cd1aeSAssar Westerlund fi 71945e9cd1aeSAssar Westerlund 71955e9cd1aeSAssar Westerlund case $linkmode in 71965e9cd1aeSAssar Westerlund oldlib) 71975e9cd1aeSAssar Westerlund if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 7198*ae771770SStanislav Sedov func_warning "\`-dlopen' is ignored for archives" 7199b528cefcSMark Murray fi 7200b528cefcSMark Murray 7201*ae771770SStanislav Sedov case " $deplibs" in 7202*ae771770SStanislav Sedov *\ -l* | *\ -L*) 7203*ae771770SStanislav Sedov func_warning "\`-l' and \`-L' are ignored for archives" ;; 7204*ae771770SStanislav Sedov esac 7205b528cefcSMark Murray 7206*ae771770SStanislav Sedov test -n "$rpath" && \ 7207*ae771770SStanislav Sedov func_warning "\`-rpath' is ignored for archives" 72085e9cd1aeSAssar Westerlund 7209*ae771770SStanislav Sedov test -n "$xrpath" && \ 7210*ae771770SStanislav Sedov func_warning "\`-R' is ignored for archives" 7211b528cefcSMark Murray 7212*ae771770SStanislav Sedov test -n "$vinfo" && \ 7213*ae771770SStanislav Sedov func_warning "\`-version-info/-version-number' is ignored for archives" 7214b528cefcSMark Murray 7215*ae771770SStanislav Sedov test -n "$release" && \ 7216*ae771770SStanislav Sedov func_warning "\`-release' is ignored for archives" 7217*ae771770SStanislav Sedov 7218*ae771770SStanislav Sedov test -n "$export_symbols$export_symbols_regex" && \ 7219*ae771770SStanislav Sedov func_warning "\`-export-symbols' is ignored for archives" 7220b528cefcSMark Murray 7221b528cefcSMark Murray # Now set the variables for building old libraries. 7222b528cefcSMark Murray build_libtool_libs=no 7223b528cefcSMark Murray oldlibs="$output" 7224*ae771770SStanislav Sedov func_append objs "$old_deplibs" 7225b528cefcSMark Murray ;; 7226b528cefcSMark Murray 72275e9cd1aeSAssar Westerlund lib) 7228b528cefcSMark Murray # Make sure we only generate libraries of the form `libNAME.la'. 72294137ff4cSJacques Vidrine case $outputname in 72305e9cd1aeSAssar Westerlund lib*) 7231*ae771770SStanislav Sedov func_stripname 'lib' '.la' "$outputname" 7232*ae771770SStanislav Sedov name=$func_stripname_result 7233c19800e8SDoug Rabson eval shared_ext=\"$shrext_cmds\" 72345e9cd1aeSAssar Westerlund eval libname=\"$libname_spec\" 72355e9cd1aeSAssar Westerlund ;; 7236b528cefcSMark Murray *) 7237*ae771770SStanislav Sedov test "$module" = no && \ 7238*ae771770SStanislav Sedov func_fatal_help "libtool library \`$output' must begin with \`lib'" 7239*ae771770SStanislav Sedov 72405e9cd1aeSAssar Westerlund if test "$need_lib_prefix" != no; then 72415e9cd1aeSAssar Westerlund # Add the "lib" prefix for modules if required 7242*ae771770SStanislav Sedov func_stripname '' '.la' "$outputname" 7243*ae771770SStanislav Sedov name=$func_stripname_result 7244c19800e8SDoug Rabson eval shared_ext=\"$shrext_cmds\" 72455e9cd1aeSAssar Westerlund eval libname=\"$libname_spec\" 72465e9cd1aeSAssar Westerlund else 7247*ae771770SStanislav Sedov func_stripname '' '.la' "$outputname" 7248*ae771770SStanislav Sedov libname=$func_stripname_result 72495e9cd1aeSAssar Westerlund fi 7250b528cefcSMark Murray ;; 7251b528cefcSMark Murray esac 7252b528cefcSMark Murray 7253b528cefcSMark Murray if test -n "$objs"; then 72545e9cd1aeSAssar Westerlund if test "$deplibs_check_method" != pass_all; then 7255*ae771770SStanislav Sedov func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 72565e9cd1aeSAssar Westerlund else 7257*ae771770SStanislav Sedov echo 7258*ae771770SStanislav Sedov $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 7259*ae771770SStanislav Sedov $ECHO "*** objects $objs is not portable!" 7260*ae771770SStanislav Sedov func_append libobjs " $objs" 72615e9cd1aeSAssar Westerlund fi 7262b528cefcSMark Murray fi 7263b528cefcSMark Murray 7264*ae771770SStanislav Sedov test "$dlself" != no && \ 7265*ae771770SStanislav Sedov func_warning "\`-dlopen self' is ignored for libtool libraries" 7266b528cefcSMark Murray 7267b528cefcSMark Murray set dummy $rpath 7268*ae771770SStanislav Sedov shift 7269*ae771770SStanislav Sedov test "$#" -gt 1 && \ 7270*ae771770SStanislav Sedov func_warning "ignoring multiple \`-rpath's for a libtool library" 7271*ae771770SStanislav Sedov 7272*ae771770SStanislav Sedov install_libdir="$1" 7273b528cefcSMark Murray 7274b528cefcSMark Murray oldlibs= 7275b528cefcSMark Murray if test -z "$rpath"; then 72765e9cd1aeSAssar Westerlund if test "$build_libtool_libs" = yes; then 7277b528cefcSMark Murray # Building a libtool convenience library. 72781c43270aSJacques Vidrine # Some compilers have problems with a `.al' extension so 72791c43270aSJacques Vidrine # convenience libraries should have the same extension an 72801c43270aSJacques Vidrine # archive normally would. 7281b528cefcSMark Murray oldlibs="$output_objdir/$libname.$libext $oldlibs" 7282b528cefcSMark Murray build_libtool_libs=convenience 72835e9cd1aeSAssar Westerlund build_old_libs=yes 72845e9cd1aeSAssar Westerlund fi 7285b528cefcSMark Murray 7286*ae771770SStanislav Sedov test -n "$vinfo" && \ 7287*ae771770SStanislav Sedov func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 7288b528cefcSMark Murray 7289*ae771770SStanislav Sedov test -n "$release" && \ 7290*ae771770SStanislav Sedov func_warning "\`-release' is ignored for convenience libraries" 7291b528cefcSMark Murray else 7292b528cefcSMark Murray 7293b528cefcSMark Murray # Parse the version information argument. 72948373020dSJacques Vidrine save_ifs="$IFS"; IFS=':' 7295b528cefcSMark Murray set dummy $vinfo 0 0 0 7296*ae771770SStanislav Sedov shift 7297b528cefcSMark Murray IFS="$save_ifs" 7298b528cefcSMark Murray 7299*ae771770SStanislav Sedov test -n "$7" && \ 7300*ae771770SStanislav Sedov func_fatal_help "too many parameters to \`-version-info'" 7301b528cefcSMark Murray 73021c43270aSJacques Vidrine # convert absolute version numbers to libtool ages 73031c43270aSJacques Vidrine # this retains compatibility with .la files and attempts 73041c43270aSJacques Vidrine # to make the code below a bit more comprehensible 73051c43270aSJacques Vidrine 73061c43270aSJacques Vidrine case $vinfo_number in 73071c43270aSJacques Vidrine yes) 7308*ae771770SStanislav Sedov number_major="$1" 7309*ae771770SStanislav Sedov number_minor="$2" 7310*ae771770SStanislav Sedov number_revision="$3" 73111c43270aSJacques Vidrine # 73121c43270aSJacques Vidrine # There are really only two kinds -- those that 73131c43270aSJacques Vidrine # use the current revision as the major version 73141c43270aSJacques Vidrine # and those that subtract age and use age as 73151c43270aSJacques Vidrine # a minor version. But, then there is irix 73161c43270aSJacques Vidrine # which has an extra 1 added just for fun 73171c43270aSJacques Vidrine # 73181c43270aSJacques Vidrine case $version_type in 7319*ae771770SStanislav Sedov darwin|linux|osf|windows|none) 7320*ae771770SStanislav Sedov func_arith $number_major + $number_minor 7321*ae771770SStanislav Sedov current=$func_arith_result 73221c43270aSJacques Vidrine age="$number_minor" 73231c43270aSJacques Vidrine revision="$number_revision" 73241c43270aSJacques Vidrine ;; 7325*ae771770SStanislav Sedov freebsd-aout|freebsd-elf|qnx|sunos) 73261c43270aSJacques Vidrine current="$number_major" 73271c43270aSJacques Vidrine revision="$number_minor" 73281c43270aSJacques Vidrine age="0" 73291c43270aSJacques Vidrine ;; 73301c43270aSJacques Vidrine irix|nonstopux) 7331*ae771770SStanislav Sedov func_arith $number_major + $number_minor 7332*ae771770SStanislav Sedov current=$func_arith_result 73331c43270aSJacques Vidrine age="$number_minor" 73341c43270aSJacques Vidrine revision="$number_minor" 7335*ae771770SStanislav Sedov lt_irix_increment=no 73361c43270aSJacques Vidrine ;; 73371c43270aSJacques Vidrine esac 73381c43270aSJacques Vidrine ;; 73391c43270aSJacques Vidrine no) 7340*ae771770SStanislav Sedov current="$1" 7341*ae771770SStanislav Sedov revision="$2" 7342*ae771770SStanislav Sedov age="$3" 73431c43270aSJacques Vidrine ;; 73441c43270aSJacques Vidrine esac 7345b528cefcSMark Murray 7346b528cefcSMark Murray # Check that each of the things are valid numbers. 73474137ff4cSJacques Vidrine case $current in 7348c19800e8SDoug Rabson 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]) ;; 7349b528cefcSMark Murray *) 7350*ae771770SStanislav Sedov func_error "CURRENT \`$current' must be a nonnegative integer" 7351*ae771770SStanislav Sedov func_fatal_error "\`$vinfo' is not valid version information" 7352b528cefcSMark Murray ;; 7353b528cefcSMark Murray esac 7354b528cefcSMark Murray 73554137ff4cSJacques Vidrine case $revision in 7356c19800e8SDoug Rabson 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]) ;; 7357b528cefcSMark Murray *) 7358*ae771770SStanislav Sedov func_error "REVISION \`$revision' must be a nonnegative integer" 7359*ae771770SStanislav Sedov func_fatal_error "\`$vinfo' is not valid version information" 7360b528cefcSMark Murray ;; 7361b528cefcSMark Murray esac 7362b528cefcSMark Murray 73634137ff4cSJacques Vidrine case $age in 7364c19800e8SDoug Rabson 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]) ;; 7365b528cefcSMark Murray *) 7366*ae771770SStanislav Sedov func_error "AGE \`$age' must be a nonnegative integer" 7367*ae771770SStanislav Sedov func_fatal_error "\`$vinfo' is not valid version information" 7368b528cefcSMark Murray ;; 7369b528cefcSMark Murray esac 7370b528cefcSMark Murray 73711c43270aSJacques Vidrine if test "$age" -gt "$current"; then 7372*ae771770SStanislav Sedov func_error "AGE \`$age' is greater than the current interface number \`$current'" 7373*ae771770SStanislav Sedov func_fatal_error "\`$vinfo' is not valid version information" 7374b528cefcSMark Murray fi 7375b528cefcSMark Murray 7376b528cefcSMark Murray # Calculate the version variables. 7377b528cefcSMark Murray major= 7378b528cefcSMark Murray versuffix= 7379b528cefcSMark Murray verstring= 73804137ff4cSJacques Vidrine case $version_type in 7381b528cefcSMark Murray none) ;; 7382b528cefcSMark Murray 73834137ff4cSJacques Vidrine darwin) 73844137ff4cSJacques Vidrine # Like Linux, but with the current version available in 73854137ff4cSJacques Vidrine # verstring for coding it into the library header 7386*ae771770SStanislav Sedov func_arith $current - $age 7387*ae771770SStanislav Sedov major=.$func_arith_result 73884137ff4cSJacques Vidrine versuffix="$major.$age.$revision" 73894137ff4cSJacques Vidrine # Darwin ld doesn't like 0 for these options... 7390*ae771770SStanislav Sedov func_arith $current + 1 7391*ae771770SStanislav Sedov minor_current=$func_arith_result 7392*ae771770SStanislav Sedov xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 7393*ae771770SStanislav Sedov verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 73944137ff4cSJacques Vidrine ;; 73954137ff4cSJacques Vidrine 73964137ff4cSJacques Vidrine freebsd-aout) 73974137ff4cSJacques Vidrine major=".$current" 73984137ff4cSJacques Vidrine versuffix=".$current.$revision"; 73994137ff4cSJacques Vidrine ;; 74004137ff4cSJacques Vidrine 74014137ff4cSJacques Vidrine freebsd-elf) 74024137ff4cSJacques Vidrine major=".$current" 7403*ae771770SStanislav Sedov versuffix=".$current" 74044137ff4cSJacques Vidrine ;; 74054137ff4cSJacques Vidrine 74061c43270aSJacques Vidrine irix | nonstopux) 7407*ae771770SStanislav Sedov if test "X$lt_irix_increment" = "Xno"; then 7408*ae771770SStanislav Sedov func_arith $current - $age 7409*ae771770SStanislav Sedov else 7410*ae771770SStanislav Sedov func_arith $current - $age + 1 7411*ae771770SStanislav Sedov fi 7412*ae771770SStanislav Sedov major=$func_arith_result 74131c43270aSJacques Vidrine 74141c43270aSJacques Vidrine case $version_type in 74151c43270aSJacques Vidrine nonstopux) verstring_prefix=nonstopux ;; 74161c43270aSJacques Vidrine *) verstring_prefix=sgi ;; 74171c43270aSJacques Vidrine esac 74181c43270aSJacques Vidrine verstring="$verstring_prefix$major.$revision" 74195e9cd1aeSAssar Westerlund 74205e9cd1aeSAssar Westerlund # Add in all the interfaces that we are compatible with. 74215e9cd1aeSAssar Westerlund loop=$revision 74221c43270aSJacques Vidrine while test "$loop" -ne 0; do 7423*ae771770SStanislav Sedov func_arith $revision - $loop 7424*ae771770SStanislav Sedov iface=$func_arith_result 7425*ae771770SStanislav Sedov func_arith $loop - 1 7426*ae771770SStanislav Sedov loop=$func_arith_result 74271c43270aSJacques Vidrine verstring="$verstring_prefix$major.$iface:$verstring" 74285e9cd1aeSAssar Westerlund done 74294137ff4cSJacques Vidrine 74304137ff4cSJacques Vidrine # Before this point, $major must not contain `.'. 74314137ff4cSJacques Vidrine major=.$major 74324137ff4cSJacques Vidrine versuffix="$major.$revision" 74335e9cd1aeSAssar Westerlund ;; 74345e9cd1aeSAssar Westerlund 7435b528cefcSMark Murray linux) 7436*ae771770SStanislav Sedov func_arith $current - $age 7437*ae771770SStanislav Sedov major=.$func_arith_result 7438b528cefcSMark Murray versuffix="$major.$age.$revision" 7439b528cefcSMark Murray ;; 7440b528cefcSMark Murray 7441b528cefcSMark Murray osf) 7442*ae771770SStanislav Sedov func_arith $current - $age 7443*ae771770SStanislav Sedov major=.$func_arith_result 7444b528cefcSMark Murray versuffix=".$current.$age.$revision" 7445b528cefcSMark Murray verstring="$current.$age.$revision" 7446b528cefcSMark Murray 7447b528cefcSMark Murray # Add in all the interfaces that we are compatible with. 7448b528cefcSMark Murray loop=$age 74491c43270aSJacques Vidrine while test "$loop" -ne 0; do 7450*ae771770SStanislav Sedov func_arith $current - $loop 7451*ae771770SStanislav Sedov iface=$func_arith_result 7452*ae771770SStanislav Sedov func_arith $loop - 1 7453*ae771770SStanislav Sedov loop=$func_arith_result 7454b528cefcSMark Murray verstring="$verstring:${iface}.0" 7455b528cefcSMark Murray done 7456b528cefcSMark Murray 7457b528cefcSMark Murray # Make executables depend on our current version. 7458*ae771770SStanislav Sedov func_append verstring ":${current}.0" 7459*ae771770SStanislav Sedov ;; 7460*ae771770SStanislav Sedov 7461*ae771770SStanislav Sedov qnx) 7462*ae771770SStanislav Sedov major=".$current" 7463*ae771770SStanislav Sedov versuffix=".$current" 7464b528cefcSMark Murray ;; 7465b528cefcSMark Murray 7466b528cefcSMark Murray sunos) 7467b528cefcSMark Murray major=".$current" 7468b528cefcSMark Murray versuffix=".$current.$revision" 7469b528cefcSMark Murray ;; 7470b528cefcSMark Murray 7471b528cefcSMark Murray windows) 74724137ff4cSJacques Vidrine # Use '-' rather than '.', since we only want one 74734137ff4cSJacques Vidrine # extension on DOS 8.3 filesystems. 7474*ae771770SStanislav Sedov func_arith $current - $age 7475*ae771770SStanislav Sedov major=$func_arith_result 74764137ff4cSJacques Vidrine versuffix="-$major" 7477b528cefcSMark Murray ;; 7478b528cefcSMark Murray 7479b528cefcSMark Murray *) 7480*ae771770SStanislav Sedov func_fatal_configuration "unknown library version type \`$version_type'" 7481b528cefcSMark Murray ;; 7482b528cefcSMark Murray esac 7483b528cefcSMark Murray 7484b528cefcSMark Murray # Clear the version info if we defaulted, and they specified a release. 7485b528cefcSMark Murray if test -z "$vinfo" && test -n "$release"; then 7486b528cefcSMark Murray major= 74878373020dSJacques Vidrine case $version_type in 74888373020dSJacques Vidrine darwin) 74898373020dSJacques Vidrine # we can't check for "0.0" in archive_cmds due to quoting 74908373020dSJacques Vidrine # problems, so we reset it completely 74911c43270aSJacques Vidrine verstring= 74928373020dSJacques Vidrine ;; 74938373020dSJacques Vidrine *) 74948373020dSJacques Vidrine verstring="0.0" 74958373020dSJacques Vidrine ;; 74968373020dSJacques Vidrine esac 74975e9cd1aeSAssar Westerlund if test "$need_version" = no; then 74985e9cd1aeSAssar Westerlund versuffix= 74995e9cd1aeSAssar Westerlund else 7500b528cefcSMark Murray versuffix=".0.0" 75015e9cd1aeSAssar Westerlund fi 75025e9cd1aeSAssar Westerlund fi 75035e9cd1aeSAssar Westerlund 75045e9cd1aeSAssar Westerlund # Remove version info from name if versioning should be avoided 75055e9cd1aeSAssar Westerlund if test "$avoid_version" = yes && test "$need_version" = no; then 75065e9cd1aeSAssar Westerlund major= 75075e9cd1aeSAssar Westerlund versuffix= 75085e9cd1aeSAssar Westerlund verstring="" 7509b528cefcSMark Murray fi 7510b528cefcSMark Murray 7511b528cefcSMark Murray # Check to see if the archive will have undefined symbols. 7512b528cefcSMark Murray if test "$allow_undefined" = yes; then 7513b528cefcSMark Murray if test "$allow_undefined_flag" = unsupported; then 7514*ae771770SStanislav Sedov func_warning "undefined symbols not allowed in $host shared libraries" 7515b528cefcSMark Murray build_libtool_libs=no 7516b528cefcSMark Murray build_old_libs=yes 7517b528cefcSMark Murray fi 7518b528cefcSMark Murray else 7519b528cefcSMark Murray # Don't allow undefined symbols. 7520b528cefcSMark Murray allow_undefined_flag="$no_undefined_flag" 7521b528cefcSMark Murray fi 7522*ae771770SStanislav Sedov 7523b528cefcSMark Murray fi 7524b528cefcSMark Murray 7525*ae771770SStanislav Sedov func_generate_dlsyms "$libname" "$libname" "yes" 7526*ae771770SStanislav Sedov func_append libobjs " $symfileobj" 7527*ae771770SStanislav Sedov test "X$libobjs" = "X " && libobjs= 7528*ae771770SStanislav Sedov 7529*ae771770SStanislav Sedov if test "$opt_mode" != relink; then 75301c43270aSJacques Vidrine # Remove our outputs, but don't remove object files since they 75311c43270aSJacques Vidrine # may have been created when compiling PIC objects. 75321c43270aSJacques Vidrine removelist= 7533*ae771770SStanislav Sedov tempremovelist=`$ECHO "$output_objdir/*"` 75341c43270aSJacques Vidrine for p in $tempremovelist; do 75351c43270aSJacques Vidrine case $p in 7536*ae771770SStanislav Sedov *.$objext | *.gcno) 75371c43270aSJacques Vidrine ;; 75381c43270aSJacques Vidrine $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 7539c19800e8SDoug Rabson if test "X$precious_files_regex" != "X"; then 7540*ae771770SStanislav Sedov if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 75411c43270aSJacques Vidrine then 75421c43270aSJacques Vidrine continue 75431c43270aSJacques Vidrine fi 7544c19800e8SDoug Rabson fi 7545*ae771770SStanislav Sedov func_append removelist " $p" 75461c43270aSJacques Vidrine ;; 75471c43270aSJacques Vidrine *) ;; 75481c43270aSJacques Vidrine esac 75491c43270aSJacques Vidrine done 7550*ae771770SStanislav Sedov test -n "$removelist" && \ 7551*ae771770SStanislav Sedov func_show_eval "${RM}r \$removelist" 7552b528cefcSMark Murray fi 7553b528cefcSMark Murray 7554b528cefcSMark Murray # Now set the variables for building old libraries. 7555b528cefcSMark Murray if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 7556*ae771770SStanislav Sedov func_append oldlibs " $output_objdir/$libname.$libext" 7557b528cefcSMark Murray 7558b528cefcSMark Murray # Transform .lo files to .o files. 7559*ae771770SStanislav Sedov oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` 7560b528cefcSMark Murray fi 7561b528cefcSMark Murray 75625e9cd1aeSAssar Westerlund # Eliminate all temporary directories. 7563*ae771770SStanislav Sedov #for path in $notinst_path; do 7564*ae771770SStanislav Sedov # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 7565*ae771770SStanislav Sedov # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 7566*ae771770SStanislav Sedov # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 7567*ae771770SStanislav Sedov #done 75685e9cd1aeSAssar Westerlund 75695e9cd1aeSAssar Westerlund if test -n "$xrpath"; then 75705e9cd1aeSAssar Westerlund # If the user specified any rpath flags, then add them. 75715e9cd1aeSAssar Westerlund temp_xrpath= 75725e9cd1aeSAssar Westerlund for libdir in $xrpath; do 7573*ae771770SStanislav Sedov func_replace_sysroot "$libdir" 7574*ae771770SStanislav Sedov func_append temp_xrpath " -R$func_replace_sysroot_result" 75755e9cd1aeSAssar Westerlund case "$finalize_rpath " in 75765e9cd1aeSAssar Westerlund *" $libdir "*) ;; 7577*ae771770SStanislav Sedov *) func_append finalize_rpath " $libdir" ;; 75785e9cd1aeSAssar Westerlund esac 75795e9cd1aeSAssar Westerlund done 75801c43270aSJacques Vidrine if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 75815e9cd1aeSAssar Westerlund dependency_libs="$temp_xrpath $dependency_libs" 75825e9cd1aeSAssar Westerlund fi 75835e9cd1aeSAssar Westerlund fi 75845e9cd1aeSAssar Westerlund 75855e9cd1aeSAssar Westerlund # Make sure dlfiles contains only unique files that won't be dlpreopened 75865e9cd1aeSAssar Westerlund old_dlfiles="$dlfiles" 75875e9cd1aeSAssar Westerlund dlfiles= 75885e9cd1aeSAssar Westerlund for lib in $old_dlfiles; do 75895e9cd1aeSAssar Westerlund case " $dlprefiles $dlfiles " in 75905e9cd1aeSAssar Westerlund *" $lib "*) ;; 7591*ae771770SStanislav Sedov *) func_append dlfiles " $lib" ;; 75925e9cd1aeSAssar Westerlund esac 75935e9cd1aeSAssar Westerlund done 75945e9cd1aeSAssar Westerlund 75955e9cd1aeSAssar Westerlund # Make sure dlprefiles contains only unique files 75965e9cd1aeSAssar Westerlund old_dlprefiles="$dlprefiles" 75975e9cd1aeSAssar Westerlund dlprefiles= 75985e9cd1aeSAssar Westerlund for lib in $old_dlprefiles; do 75995e9cd1aeSAssar Westerlund case "$dlprefiles " in 76005e9cd1aeSAssar Westerlund *" $lib "*) ;; 7601*ae771770SStanislav Sedov *) func_append dlprefiles " $lib" ;; 76025e9cd1aeSAssar Westerlund esac 76035e9cd1aeSAssar Westerlund done 76045e9cd1aeSAssar Westerlund 7605b528cefcSMark Murray if test "$build_libtool_libs" = yes; then 76065e9cd1aeSAssar Westerlund if test -n "$rpath"; then 76074137ff4cSJacques Vidrine case $host in 7608*ae771770SStanislav Sedov *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 76095e9cd1aeSAssar Westerlund # these systems don't actually have a c library (as such)! 76105e9cd1aeSAssar Westerlund ;; 76114137ff4cSJacques Vidrine *-*-rhapsody* | *-*-darwin1.[012]) 76124137ff4cSJacques Vidrine # Rhapsody C library is in the System framework 7613*ae771770SStanislav Sedov func_append deplibs " System.ltframework" 76144137ff4cSJacques Vidrine ;; 76154137ff4cSJacques Vidrine *-*-netbsd*) 76164137ff4cSJacques Vidrine # Don't link with libc until the a.out ld.so is fixed. 76174137ff4cSJacques Vidrine ;; 7618c19800e8SDoug Rabson *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 76198373020dSJacques Vidrine # Do not include libc due to us having libc/libc_r. 7620c19800e8SDoug Rabson ;; 7621c19800e8SDoug Rabson *-*-sco3.2v5* | *-*-sco5v6*) 7622c19800e8SDoug Rabson # Causes problems with __ctype 7623c19800e8SDoug Rabson ;; 7624c19800e8SDoug Rabson *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7625c19800e8SDoug Rabson # Compiler inserts libc in the correct place for threads to work 76268373020dSJacques Vidrine ;; 76275e9cd1aeSAssar Westerlund *) 76284137ff4cSJacques Vidrine # Add libc to deplibs on all other systems if necessary. 76291c43270aSJacques Vidrine if test "$build_libtool_need_lc" = "yes"; then 7630*ae771770SStanislav Sedov func_append deplibs " -lc" 76314137ff4cSJacques Vidrine fi 76325e9cd1aeSAssar Westerlund ;; 76335e9cd1aeSAssar Westerlund esac 76345e9cd1aeSAssar Westerlund fi 76355e9cd1aeSAssar Westerlund 7636b528cefcSMark Murray # Transform deplibs into only deplibs that can be linked in shared. 7637b528cefcSMark Murray name_save=$name 7638b528cefcSMark Murray libname_save=$libname 7639b528cefcSMark Murray release_save=$release 7640b528cefcSMark Murray versuffix_save=$versuffix 7641b528cefcSMark Murray major_save=$major 7642b528cefcSMark Murray # I'm not sure if I'm treating the release correctly. I think 7643b528cefcSMark Murray # release should show up in the -l (ie -lgmp5) so we don't want to 7644b528cefcSMark Murray # add it in twice. Is that correct? 7645b528cefcSMark Murray release="" 7646b528cefcSMark Murray versuffix="" 7647b528cefcSMark Murray major="" 7648b528cefcSMark Murray newdeplibs= 76495e9cd1aeSAssar Westerlund droppeddeps=no 76504137ff4cSJacques Vidrine case $deplibs_check_method in 7651b528cefcSMark Murray pass_all) 76525e9cd1aeSAssar Westerlund # Don't check for shared/static. Everything works. 7653b528cefcSMark Murray # This might be a little naive. We might want to check 7654b528cefcSMark Murray # whether the library exists or not. But this is on 7655b528cefcSMark Murray # osf3 & osf4 and I'm not really sure... Just 76561c43270aSJacques Vidrine # implementing what was already the behavior. 76575e9cd1aeSAssar Westerlund newdeplibs=$deplibs 76585e9cd1aeSAssar Westerlund ;; 7659b528cefcSMark Murray test_compile) 7660b528cefcSMark Murray # This code stresses the "libraries are programs" paradigm to its 7661b528cefcSMark Murray # limits. Maybe even breaks it. We compile a program, linking it 7662b528cefcSMark Murray # against the deplibs as a proxy for the library. Then we can check 7663b528cefcSMark Murray # whether they linked in statically or dynamically with ldd. 7664*ae771770SStanislav Sedov $opt_dry_run || $RM conftest.c 7665b528cefcSMark Murray cat > conftest.c <<EOF 7666b528cefcSMark Murray int main() { return 0; } 7667b528cefcSMark MurrayEOF 7668*ae771770SStanislav Sedov $opt_dry_run || $RM conftest 7669*ae771770SStanislav Sedov if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 76705e9cd1aeSAssar Westerlund ldd_output=`ldd conftest` 7671b528cefcSMark Murray for i in $deplibs; do 7672*ae771770SStanislav Sedov case $i in 7673*ae771770SStanislav Sedov -l*) 7674*ae771770SStanislav Sedov func_stripname -l '' "$i" 7675*ae771770SStanislav Sedov name=$func_stripname_result 76761c43270aSJacques Vidrine if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 76771c43270aSJacques Vidrine case " $predeps $postdeps " in 76781c43270aSJacques Vidrine *" $i "*) 7679*ae771770SStanislav Sedov func_append newdeplibs " $i" 76801c43270aSJacques Vidrine i="" 76811c43270aSJacques Vidrine ;; 76821c43270aSJacques Vidrine esac 76831c43270aSJacques Vidrine fi 76841c43270aSJacques Vidrine if test -n "$i" ; then 7685*ae771770SStanislav Sedov libname=`eval "\\$ECHO \"$libname_spec\""` 7686*ae771770SStanislav Sedov deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7687*ae771770SStanislav Sedov set dummy $deplib_matches; shift 7688*ae771770SStanislav Sedov deplib_match=$1 7689b528cefcSMark Murray if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 7690*ae771770SStanislav Sedov func_append newdeplibs " $i" 7691b528cefcSMark Murray else 76925e9cd1aeSAssar Westerlund droppeddeps=yes 7693*ae771770SStanislav Sedov echo 7694*ae771770SStanislav Sedov $ECHO "*** Warning: dynamic linker does not accept needed library $i." 7695*ae771770SStanislav Sedov echo "*** I have the capability to make that library automatically link in when" 7696*ae771770SStanislav Sedov echo "*** you link to this library. But I can only do this if you have a" 7697*ae771770SStanislav Sedov echo "*** shared version of the library, which I believe you do not have" 7698*ae771770SStanislav Sedov echo "*** because a test_compile did reveal that the linker did not use it for" 7699*ae771770SStanislav Sedov echo "*** its dynamic dependency list that programs get resolved with at runtime." 77001c43270aSJacques Vidrine fi 7701b528cefcSMark Murray fi 7702*ae771770SStanislav Sedov ;; 7703*ae771770SStanislav Sedov *) 7704*ae771770SStanislav Sedov func_append newdeplibs " $i" 7705*ae771770SStanislav Sedov ;; 7706*ae771770SStanislav Sedov esac 7707b528cefcSMark Murray done 7708b528cefcSMark Murray else 77091c43270aSJacques Vidrine # Error occurred in the first compile. Let's try to salvage 77101c43270aSJacques Vidrine # the situation: Compile a separate program for each library. 7711b528cefcSMark Murray for i in $deplibs; do 7712*ae771770SStanislav Sedov case $i in 7713*ae771770SStanislav Sedov -l*) 7714*ae771770SStanislav Sedov func_stripname -l '' "$i" 7715*ae771770SStanislav Sedov name=$func_stripname_result 7716*ae771770SStanislav Sedov $opt_dry_run || $RM conftest 7717*ae771770SStanislav Sedov if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 77185e9cd1aeSAssar Westerlund ldd_output=`ldd conftest` 77191c43270aSJacques Vidrine if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 77201c43270aSJacques Vidrine case " $predeps $postdeps " in 77211c43270aSJacques Vidrine *" $i "*) 7722*ae771770SStanislav Sedov func_append newdeplibs " $i" 77231c43270aSJacques Vidrine i="" 77241c43270aSJacques Vidrine ;; 77251c43270aSJacques Vidrine esac 77261c43270aSJacques Vidrine fi 77271c43270aSJacques Vidrine if test -n "$i" ; then 7728*ae771770SStanislav Sedov libname=`eval "\\$ECHO \"$libname_spec\""` 7729*ae771770SStanislav Sedov deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7730*ae771770SStanislav Sedov set dummy $deplib_matches; shift 7731*ae771770SStanislav Sedov deplib_match=$1 7732b528cefcSMark Murray if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 7733*ae771770SStanislav Sedov func_append newdeplibs " $i" 7734b528cefcSMark Murray else 77355e9cd1aeSAssar Westerlund droppeddeps=yes 7736*ae771770SStanislav Sedov echo 7737*ae771770SStanislav Sedov $ECHO "*** Warning: dynamic linker does not accept needed library $i." 7738*ae771770SStanislav Sedov echo "*** I have the capability to make that library automatically link in when" 7739*ae771770SStanislav Sedov echo "*** you link to this library. But I can only do this if you have a" 7740*ae771770SStanislav Sedov echo "*** shared version of the library, which you do not appear to have" 7741*ae771770SStanislav Sedov echo "*** because a test_compile did reveal that the linker did not use this one" 7742*ae771770SStanislav Sedov echo "*** as a dynamic dependency that programs can get resolved with at runtime." 77431c43270aSJacques Vidrine fi 7744b528cefcSMark Murray fi 7745b528cefcSMark Murray else 77465e9cd1aeSAssar Westerlund droppeddeps=yes 7747*ae771770SStanislav Sedov echo 7748*ae771770SStanislav Sedov $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 7749*ae771770SStanislav Sedov echo "*** make it link in! You will probably need to install it or some" 7750*ae771770SStanislav Sedov echo "*** library that it depends on before this library will be fully" 7751*ae771770SStanislav Sedov echo "*** functional. Installing it before continuing would be even better." 7752b528cefcSMark Murray fi 7753*ae771770SStanislav Sedov ;; 7754*ae771770SStanislav Sedov *) 7755*ae771770SStanislav Sedov func_append newdeplibs " $i" 7756*ae771770SStanislav Sedov ;; 7757*ae771770SStanislav Sedov esac 7758b528cefcSMark Murray done 7759b528cefcSMark Murray fi 7760b528cefcSMark Murray ;; 77615e9cd1aeSAssar Westerlund file_magic*) 7762*ae771770SStanislav Sedov set dummy $deplibs_check_method; shift 7763*ae771770SStanislav Sedov file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7764b528cefcSMark Murray for a_deplib in $deplibs; do 7765*ae771770SStanislav Sedov case $a_deplib in 7766*ae771770SStanislav Sedov -l*) 7767*ae771770SStanislav Sedov func_stripname -l '' "$a_deplib" 7768*ae771770SStanislav Sedov name=$func_stripname_result 77691c43270aSJacques Vidrine if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 77701c43270aSJacques Vidrine case " $predeps $postdeps " in 77711c43270aSJacques Vidrine *" $a_deplib "*) 7772*ae771770SStanislav Sedov func_append newdeplibs " $a_deplib" 77731c43270aSJacques Vidrine a_deplib="" 77741c43270aSJacques Vidrine ;; 77751c43270aSJacques Vidrine esac 77761c43270aSJacques Vidrine fi 77771c43270aSJacques Vidrine if test -n "$a_deplib" ; then 7778*ae771770SStanislav Sedov libname=`eval "\\$ECHO \"$libname_spec\""` 7779*ae771770SStanislav Sedov if test -n "$file_magic_glob"; then 7780*ae771770SStanislav Sedov libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 7781*ae771770SStanislav Sedov else 7782*ae771770SStanislav Sedov libnameglob=$libname 7783*ae771770SStanislav Sedov fi 7784*ae771770SStanislav Sedov test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` 77855e9cd1aeSAssar Westerlund for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7786*ae771770SStanislav Sedov if test "$want_nocaseglob" = yes; then 7787*ae771770SStanislav Sedov shopt -s nocaseglob 7788*ae771770SStanislav Sedov potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 7789*ae771770SStanislav Sedov $nocaseglob 7790*ae771770SStanislav Sedov else 7791*ae771770SStanislav Sedov potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 7792*ae771770SStanislav Sedov fi 7793b528cefcSMark Murray for potent_lib in $potential_libs; do 77945e9cd1aeSAssar Westerlund # Follow soft links. 7795*ae771770SStanislav Sedov if ls -lLd "$potent_lib" 2>/dev/null | 7796*ae771770SStanislav Sedov $GREP " -> " >/dev/null; then 77975e9cd1aeSAssar Westerlund continue 77985e9cd1aeSAssar Westerlund fi 77995e9cd1aeSAssar Westerlund # The statement above tries to avoid entering an 78005e9cd1aeSAssar Westerlund # endless loop below, in case of cyclic links. 78015e9cd1aeSAssar Westerlund # We might still enter an endless loop, since a link 78025e9cd1aeSAssar Westerlund # loop can be closed while we follow links, 78035e9cd1aeSAssar Westerlund # but so what? 78045e9cd1aeSAssar Westerlund potlib="$potent_lib" 78055e9cd1aeSAssar Westerlund while test -h "$potlib" 2>/dev/null; do 78061c43270aSJacques Vidrine potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 78074137ff4cSJacques Vidrine case $potliblink in 78085e9cd1aeSAssar Westerlund [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 7809*ae771770SStanislav Sedov *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; 78105e9cd1aeSAssar Westerlund esac 78115e9cd1aeSAssar Westerlund done 7812*ae771770SStanislav Sedov if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 7813*ae771770SStanislav Sedov $SED -e 10q | 7814*ae771770SStanislav Sedov $EGREP "$file_magic_regex" > /dev/null; then 7815*ae771770SStanislav Sedov func_append newdeplibs " $a_deplib" 7816b528cefcSMark Murray a_deplib="" 7817b528cefcSMark Murray break 2 7818b528cefcSMark Murray fi 7819b528cefcSMark Murray done 7820b528cefcSMark Murray done 78211c43270aSJacques Vidrine fi 78225e9cd1aeSAssar Westerlund if test -n "$a_deplib" ; then 78235e9cd1aeSAssar Westerlund droppeddeps=yes 7824*ae771770SStanislav Sedov echo 7825*ae771770SStanislav Sedov $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 7826*ae771770SStanislav Sedov echo "*** I have the capability to make that library automatically link in when" 7827*ae771770SStanislav Sedov echo "*** you link to this library. But I can only do this if you have a" 7828*ae771770SStanislav Sedov echo "*** shared version of the library, which you do not appear to have" 7829*ae771770SStanislav Sedov echo "*** because I did check the linker path looking for a file starting" 78301c43270aSJacques Vidrine if test -z "$potlib" ; then 7831*ae771770SStanislav Sedov $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 78321c43270aSJacques Vidrine else 7833*ae771770SStanislav Sedov $ECHO "*** with $libname and none of the candidates passed a file format test" 7834*ae771770SStanislav Sedov $ECHO "*** using a file magic. Last file checked: $potlib" 78351c43270aSJacques Vidrine fi 7836b528cefcSMark Murray fi 7837*ae771770SStanislav Sedov ;; 7838*ae771770SStanislav Sedov *) 7839b528cefcSMark Murray # Add a -L argument. 7840*ae771770SStanislav Sedov func_append newdeplibs " $a_deplib" 7841*ae771770SStanislav Sedov ;; 7842*ae771770SStanislav Sedov esac 7843b528cefcSMark Murray done # Gone through all deplibs. 7844b528cefcSMark Murray ;; 78454137ff4cSJacques Vidrine match_pattern*) 7846*ae771770SStanislav Sedov set dummy $deplibs_check_method; shift 7847*ae771770SStanislav Sedov match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 78484137ff4cSJacques Vidrine for a_deplib in $deplibs; do 7849*ae771770SStanislav Sedov case $a_deplib in 7850*ae771770SStanislav Sedov -l*) 7851*ae771770SStanislav Sedov func_stripname -l '' "$a_deplib" 7852*ae771770SStanislav Sedov name=$func_stripname_result 78531c43270aSJacques Vidrine if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 78541c43270aSJacques Vidrine case " $predeps $postdeps " in 78551c43270aSJacques Vidrine *" $a_deplib "*) 7856*ae771770SStanislav Sedov func_append newdeplibs " $a_deplib" 78571c43270aSJacques Vidrine a_deplib="" 78581c43270aSJacques Vidrine ;; 78591c43270aSJacques Vidrine esac 78601c43270aSJacques Vidrine fi 78611c43270aSJacques Vidrine if test -n "$a_deplib" ; then 7862*ae771770SStanislav Sedov libname=`eval "\\$ECHO \"$libname_spec\""` 78634137ff4cSJacques Vidrine for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 78644137ff4cSJacques Vidrine potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 78654137ff4cSJacques Vidrine for potent_lib in $potential_libs; do 78661c43270aSJacques Vidrine potlib="$potent_lib" # see symlink-check above in file_magic test 7867*ae771770SStanislav Sedov if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 7868*ae771770SStanislav Sedov $EGREP "$match_pattern_regex" > /dev/null; then 7869*ae771770SStanislav Sedov func_append newdeplibs " $a_deplib" 78704137ff4cSJacques Vidrine a_deplib="" 78714137ff4cSJacques Vidrine break 2 78724137ff4cSJacques Vidrine fi 78734137ff4cSJacques Vidrine done 78744137ff4cSJacques Vidrine done 78751c43270aSJacques Vidrine fi 78764137ff4cSJacques Vidrine if test -n "$a_deplib" ; then 78774137ff4cSJacques Vidrine droppeddeps=yes 7878*ae771770SStanislav Sedov echo 7879*ae771770SStanislav Sedov $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 7880*ae771770SStanislav Sedov echo "*** I have the capability to make that library automatically link in when" 7881*ae771770SStanislav Sedov echo "*** you link to this library. But I can only do this if you have a" 7882*ae771770SStanislav Sedov echo "*** shared version of the library, which you do not appear to have" 7883*ae771770SStanislav Sedov echo "*** because I did check the linker path looking for a file starting" 78841c43270aSJacques Vidrine if test -z "$potlib" ; then 7885*ae771770SStanislav Sedov $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 78861c43270aSJacques Vidrine else 7887*ae771770SStanislav Sedov $ECHO "*** with $libname and none of the candidates passed a file format test" 7888*ae771770SStanislav Sedov $ECHO "*** using a regex pattern. Last file checked: $potlib" 78891c43270aSJacques Vidrine fi 78904137ff4cSJacques Vidrine fi 7891*ae771770SStanislav Sedov ;; 7892*ae771770SStanislav Sedov *) 78934137ff4cSJacques Vidrine # Add a -L argument. 7894*ae771770SStanislav Sedov func_append newdeplibs " $a_deplib" 7895*ae771770SStanislav Sedov ;; 7896*ae771770SStanislav Sedov esac 78974137ff4cSJacques Vidrine done # Gone through all deplibs. 78984137ff4cSJacques Vidrine ;; 78995e9cd1aeSAssar Westerlund none | unknown | *) 79005e9cd1aeSAssar Westerlund newdeplibs="" 7901*ae771770SStanislav Sedov tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 79021c43270aSJacques Vidrine if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 79031c43270aSJacques Vidrine for i in $predeps $postdeps ; do 79041c43270aSJacques Vidrine # can't use Xsed below, because $i might contain '/' 7905*ae771770SStanislav Sedov tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` 79061c43270aSJacques Vidrine done 79075e9cd1aeSAssar Westerlund fi 7908*ae771770SStanislav Sedov case $tmp_deplibs in 7909*ae771770SStanislav Sedov *[!\ \ ]*) 7910*ae771770SStanislav Sedov echo 79111c43270aSJacques Vidrine if test "X$deplibs_check_method" = "Xnone"; then 7912*ae771770SStanislav Sedov echo "*** Warning: inter-library dependencies are not supported in this platform." 79131c43270aSJacques Vidrine else 7914*ae771770SStanislav Sedov echo "*** Warning: inter-library dependencies are not known to be supported." 79151c43270aSJacques Vidrine fi 7916*ae771770SStanislav Sedov echo "*** All declared inter-library dependencies are being dropped." 79175e9cd1aeSAssar Westerlund droppeddeps=yes 7918*ae771770SStanislav Sedov ;; 7919*ae771770SStanislav Sedov esac 79205e9cd1aeSAssar Westerlund ;; 7921b528cefcSMark Murray esac 7922b528cefcSMark Murray versuffix=$versuffix_save 7923b528cefcSMark Murray major=$major_save 7924b528cefcSMark Murray release=$release_save 7925b528cefcSMark Murray libname=$libname_save 7926b528cefcSMark Murray name=$name_save 79275e9cd1aeSAssar Westerlund 79284137ff4cSJacques Vidrine case $host in 79294137ff4cSJacques Vidrine *-*-rhapsody* | *-*-darwin1.[012]) 7930*ae771770SStanislav Sedov # On Rhapsody replace the C library with the System framework 7931*ae771770SStanislav Sedov newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 79324137ff4cSJacques Vidrine ;; 79334137ff4cSJacques Vidrine esac 79344137ff4cSJacques Vidrine 79355e9cd1aeSAssar Westerlund if test "$droppeddeps" = yes; then 79365e9cd1aeSAssar Westerlund if test "$module" = yes; then 7937*ae771770SStanislav Sedov echo 7938*ae771770SStanislav Sedov echo "*** Warning: libtool could not satisfy all declared inter-library" 7939*ae771770SStanislav Sedov $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 7940*ae771770SStanislav Sedov echo "*** a static module, that should work as long as the dlopening" 7941*ae771770SStanislav Sedov echo "*** application is linked with the -dlopen flag." 79425e9cd1aeSAssar Westerlund if test -z "$global_symbol_pipe"; then 7943*ae771770SStanislav Sedov echo 7944*ae771770SStanislav Sedov echo "*** However, this would only work if libtool was able to extract symbol" 7945*ae771770SStanislav Sedov echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 7946*ae771770SStanislav Sedov echo "*** not find such a program. So, this module is probably useless." 7947*ae771770SStanislav Sedov echo "*** \`nm' from GNU binutils and a full rebuild may help." 79485e9cd1aeSAssar Westerlund fi 79495e9cd1aeSAssar Westerlund if test "$build_old_libs" = no; then 79505e9cd1aeSAssar Westerlund oldlibs="$output_objdir/$libname.$libext" 79515e9cd1aeSAssar Westerlund build_libtool_libs=module 79525e9cd1aeSAssar Westerlund build_old_libs=yes 79535e9cd1aeSAssar Westerlund else 79545e9cd1aeSAssar Westerlund build_libtool_libs=no 79555e9cd1aeSAssar Westerlund fi 79565e9cd1aeSAssar Westerlund else 7957*ae771770SStanislav Sedov echo "*** The inter-library dependencies that have been dropped here will be" 7958*ae771770SStanislav Sedov echo "*** automatically added whenever a program is linked with this library" 7959*ae771770SStanislav Sedov echo "*** or is declared to -dlopen it." 79604137ff4cSJacques Vidrine 79611c43270aSJacques Vidrine if test "$allow_undefined" = no; then 7962*ae771770SStanislav Sedov echo 7963*ae771770SStanislav Sedov echo "*** Since this library must not contain undefined symbols," 7964*ae771770SStanislav Sedov echo "*** because either the platform does not support them or" 7965*ae771770SStanislav Sedov echo "*** it was explicitly requested with -no-undefined," 7966*ae771770SStanislav Sedov echo "*** libtool will only create a static version of it." 79674137ff4cSJacques Vidrine if test "$build_old_libs" = no; then 79684137ff4cSJacques Vidrine oldlibs="$output_objdir/$libname.$libext" 79694137ff4cSJacques Vidrine build_libtool_libs=module 79704137ff4cSJacques Vidrine build_old_libs=yes 79714137ff4cSJacques Vidrine else 79724137ff4cSJacques Vidrine build_libtool_libs=no 79734137ff4cSJacques Vidrine fi 79744137ff4cSJacques Vidrine fi 79755e9cd1aeSAssar Westerlund fi 79765e9cd1aeSAssar Westerlund fi 7977b528cefcSMark Murray # Done checking deplibs! 79785e9cd1aeSAssar Westerlund deplibs=$newdeplibs 79795e9cd1aeSAssar Westerlund fi 7980*ae771770SStanislav Sedov # Time to change all our "foo.ltframework" stuff back to "-framework foo" 7981*ae771770SStanislav Sedov case $host in 7982*ae771770SStanislav Sedov *-*-darwin*) 7983*ae771770SStanislav Sedov newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7984*ae771770SStanislav Sedov new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7985*ae771770SStanislav Sedov deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7986*ae771770SStanislav Sedov ;; 7987*ae771770SStanislav Sedov esac 7988c19800e8SDoug Rabson 7989c19800e8SDoug Rabson # move library search paths that coincide with paths to not yet 7990c19800e8SDoug Rabson # installed libraries to the beginning of the library search list 7991c19800e8SDoug Rabson new_libs= 7992c19800e8SDoug Rabson for path in $notinst_path; do 7993c19800e8SDoug Rabson case " $new_libs " in 7994c19800e8SDoug Rabson *" -L$path/$objdir "*) ;; 7995c19800e8SDoug Rabson *) 7996c19800e8SDoug Rabson case " $deplibs " in 7997c19800e8SDoug Rabson *" -L$path/$objdir "*) 7998*ae771770SStanislav Sedov func_append new_libs " -L$path/$objdir" ;; 7999c19800e8SDoug Rabson esac 8000c19800e8SDoug Rabson ;; 8001c19800e8SDoug Rabson esac 8002c19800e8SDoug Rabson done 8003c19800e8SDoug Rabson for deplib in $deplibs; do 8004c19800e8SDoug Rabson case $deplib in 8005c19800e8SDoug Rabson -L*) 8006c19800e8SDoug Rabson case " $new_libs " in 8007c19800e8SDoug Rabson *" $deplib "*) ;; 8008*ae771770SStanislav Sedov *) func_append new_libs " $deplib" ;; 8009c19800e8SDoug Rabson esac 8010c19800e8SDoug Rabson ;; 8011*ae771770SStanislav Sedov *) func_append new_libs " $deplib" ;; 8012c19800e8SDoug Rabson esac 8013c19800e8SDoug Rabson done 8014c19800e8SDoug Rabson deplibs="$new_libs" 8015c19800e8SDoug Rabson 80165e9cd1aeSAssar Westerlund # All the library-specific variables (install_libdir is set above). 80175e9cd1aeSAssar Westerlund library_names= 80185e9cd1aeSAssar Westerlund old_library= 80195e9cd1aeSAssar Westerlund dlname= 80205e9cd1aeSAssar Westerlund 80215e9cd1aeSAssar Westerlund # Test again, we may have decided not to build it any more 80225e9cd1aeSAssar Westerlund if test "$build_libtool_libs" = yes; then 80231c43270aSJacques Vidrine if test "$hardcode_into_libs" = yes; then 80245e9cd1aeSAssar Westerlund # Hardcode the library paths 80255e9cd1aeSAssar Westerlund hardcode_libdirs= 80265e9cd1aeSAssar Westerlund dep_rpath= 80275e9cd1aeSAssar Westerlund rpath="$finalize_rpath" 8028*ae771770SStanislav Sedov test "$opt_mode" != relink && rpath="$compile_rpath$rpath" 80295e9cd1aeSAssar Westerlund for libdir in $rpath; do 80305e9cd1aeSAssar Westerlund if test -n "$hardcode_libdir_flag_spec"; then 80315e9cd1aeSAssar Westerlund if test -n "$hardcode_libdir_separator"; then 8032*ae771770SStanislav Sedov func_replace_sysroot "$libdir" 8033*ae771770SStanislav Sedov libdir=$func_replace_sysroot_result 80345e9cd1aeSAssar Westerlund if test -z "$hardcode_libdirs"; then 80355e9cd1aeSAssar Westerlund hardcode_libdirs="$libdir" 80365e9cd1aeSAssar Westerlund else 80375e9cd1aeSAssar Westerlund # Just accumulate the unique libdirs. 80384137ff4cSJacques Vidrine case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 80395e9cd1aeSAssar Westerlund *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 80405e9cd1aeSAssar Westerlund ;; 80415e9cd1aeSAssar Westerlund *) 8042*ae771770SStanislav Sedov func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 80435e9cd1aeSAssar Westerlund ;; 80445e9cd1aeSAssar Westerlund esac 80455e9cd1aeSAssar Westerlund fi 80465e9cd1aeSAssar Westerlund else 80475e9cd1aeSAssar Westerlund eval flag=\"$hardcode_libdir_flag_spec\" 8048*ae771770SStanislav Sedov func_append dep_rpath " $flag" 80495e9cd1aeSAssar Westerlund fi 80505e9cd1aeSAssar Westerlund elif test -n "$runpath_var"; then 80515e9cd1aeSAssar Westerlund case "$perm_rpath " in 80525e9cd1aeSAssar Westerlund *" $libdir "*) ;; 8053*ae771770SStanislav Sedov *) func_apped perm_rpath " $libdir" ;; 80545e9cd1aeSAssar Westerlund esac 80555e9cd1aeSAssar Westerlund fi 80565e9cd1aeSAssar Westerlund done 80575e9cd1aeSAssar Westerlund # Substitute the hardcoded libdirs into the rpath. 80585e9cd1aeSAssar Westerlund if test -n "$hardcode_libdir_separator" && 80595e9cd1aeSAssar Westerlund test -n "$hardcode_libdirs"; then 80605e9cd1aeSAssar Westerlund libdir="$hardcode_libdirs" 80611c43270aSJacques Vidrine if test -n "$hardcode_libdir_flag_spec_ld"; then 80621c43270aSJacques Vidrine eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" 80631c43270aSJacques Vidrine else 80645e9cd1aeSAssar Westerlund eval dep_rpath=\"$hardcode_libdir_flag_spec\" 80655e9cd1aeSAssar Westerlund fi 80661c43270aSJacques Vidrine fi 80675e9cd1aeSAssar Westerlund if test -n "$runpath_var" && test -n "$perm_rpath"; then 80685e9cd1aeSAssar Westerlund # We should set the runpath_var. 80695e9cd1aeSAssar Westerlund rpath= 80705e9cd1aeSAssar Westerlund for dir in $perm_rpath; do 8071*ae771770SStanislav Sedov func_append rpath "$dir:" 80725e9cd1aeSAssar Westerlund done 80735e9cd1aeSAssar Westerlund eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 80745e9cd1aeSAssar Westerlund fi 80755e9cd1aeSAssar Westerlund test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 80765e9cd1aeSAssar Westerlund fi 80775e9cd1aeSAssar Westerlund 80785e9cd1aeSAssar Westerlund shlibpath="$finalize_shlibpath" 8079*ae771770SStanislav Sedov test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 80805e9cd1aeSAssar Westerlund if test -n "$shlibpath"; then 80815e9cd1aeSAssar Westerlund eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 80825e9cd1aeSAssar Westerlund fi 8083b528cefcSMark Murray 8084b528cefcSMark Murray # Get the real and link names of the library. 8085c19800e8SDoug Rabson eval shared_ext=\"$shrext_cmds\" 8086b528cefcSMark Murray eval library_names=\"$library_names_spec\" 8087b528cefcSMark Murray set dummy $library_names 8088*ae771770SStanislav Sedov shift 8089*ae771770SStanislav Sedov realname="$1" 8090*ae771770SStanislav Sedov shift 8091b528cefcSMark Murray 8092b528cefcSMark Murray if test -n "$soname_spec"; then 8093b528cefcSMark Murray eval soname=\"$soname_spec\" 8094b528cefcSMark Murray else 8095b528cefcSMark Murray soname="$realname" 8096b528cefcSMark Murray fi 80971c43270aSJacques Vidrine if test -z "$dlname"; then 80981c43270aSJacques Vidrine dlname=$soname 80991c43270aSJacques Vidrine fi 8100b528cefcSMark Murray 8101b528cefcSMark Murray lib="$output_objdir/$realname" 8102c19800e8SDoug Rabson linknames= 8103b528cefcSMark Murray for link 8104b528cefcSMark Murray do 8105*ae771770SStanislav Sedov func_append linknames " $link" 8106b528cefcSMark Murray done 8107b528cefcSMark Murray 81085e9cd1aeSAssar Westerlund # Use standard objects if they are pic 8109*ae771770SStanislav Sedov test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 8110*ae771770SStanislav Sedov test "X$libobjs" = "X " && libobjs= 8111*ae771770SStanislav Sedov 8112*ae771770SStanislav Sedov delfiles= 8113*ae771770SStanislav Sedov if test -n "$export_symbols" && test -n "$include_expsyms"; then 8114*ae771770SStanislav Sedov $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 8115*ae771770SStanislav Sedov export_symbols="$output_objdir/$libname.uexp" 8116*ae771770SStanislav Sedov func_append delfiles " $export_symbols" 8117*ae771770SStanislav Sedov fi 8118*ae771770SStanislav Sedov 8119*ae771770SStanislav Sedov orig_export_symbols= 8120*ae771770SStanislav Sedov case $host_os in 8121*ae771770SStanislav Sedov cygwin* | mingw* | cegcc*) 8122*ae771770SStanislav Sedov if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 8123*ae771770SStanislav Sedov # exporting using user supplied symfile 8124*ae771770SStanislav Sedov if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 8125*ae771770SStanislav Sedov # and it's NOT already a .def file. Must figure out 8126*ae771770SStanislav Sedov # which of the given symbols are data symbols and tag 8127*ae771770SStanislav Sedov # them as such. So, trigger use of export_symbols_cmds. 8128*ae771770SStanislav Sedov # export_symbols gets reassigned inside the "prepare 8129*ae771770SStanislav Sedov # the list of exported symbols" if statement, so the 8130*ae771770SStanislav Sedov # include_expsyms logic still works. 8131*ae771770SStanislav Sedov orig_export_symbols="$export_symbols" 8132*ae771770SStanislav Sedov export_symbols= 8133*ae771770SStanislav Sedov always_export_symbols=yes 8134*ae771770SStanislav Sedov fi 8135*ae771770SStanislav Sedov fi 8136*ae771770SStanislav Sedov ;; 8137*ae771770SStanislav Sedov esac 81385e9cd1aeSAssar Westerlund 81395e9cd1aeSAssar Westerlund # Prepare the list of exported symbols 81405e9cd1aeSAssar Westerlund if test -z "$export_symbols"; then 81415e9cd1aeSAssar Westerlund if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 8142*ae771770SStanislav Sedov func_verbose "generating symbol list for \`$libname.la'" 81435e9cd1aeSAssar Westerlund export_symbols="$output_objdir/$libname.exp" 8144*ae771770SStanislav Sedov $opt_dry_run || $RM $export_symbols 81451c43270aSJacques Vidrine cmds=$export_symbols_cmds 81468373020dSJacques Vidrine save_ifs="$IFS"; IFS='~' 8147*ae771770SStanislav Sedov for cmd1 in $cmds; do 81485e9cd1aeSAssar Westerlund IFS="$save_ifs" 8149*ae771770SStanislav Sedov # Take the normal branch if the nm_file_list_spec branch 8150*ae771770SStanislav Sedov # doesn't work or if tool conversion is not needed. 8151*ae771770SStanislav Sedov case $nm_file_list_spec~$to_tool_file_cmd in 8152*ae771770SStanislav Sedov *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 8153*ae771770SStanislav Sedov try_normal_branch=yes 8154*ae771770SStanislav Sedov eval cmd=\"$cmd1\" 8155*ae771770SStanislav Sedov func_len " $cmd" 8156*ae771770SStanislav Sedov len=$func_len_result 8157*ae771770SStanislav Sedov ;; 8158*ae771770SStanislav Sedov *) 8159*ae771770SStanislav Sedov try_normal_branch=no 8160*ae771770SStanislav Sedov ;; 8161*ae771770SStanislav Sedov esac 8162*ae771770SStanislav Sedov if test "$try_normal_branch" = yes \ 8163*ae771770SStanislav Sedov && { test "$len" -lt "$max_cmd_len" \ 8164*ae771770SStanislav Sedov || test "$max_cmd_len" -le -1; } 8165*ae771770SStanislav Sedov then 8166*ae771770SStanislav Sedov func_show_eval "$cmd" 'exit $?' 8167*ae771770SStanislav Sedov skipped_export=false 8168*ae771770SStanislav Sedov elif test -n "$nm_file_list_spec"; then 8169*ae771770SStanislav Sedov func_basename "$output" 8170*ae771770SStanislav Sedov output_la=$func_basename_result 8171*ae771770SStanislav Sedov save_libobjs=$libobjs 8172*ae771770SStanislav Sedov save_output=$output 8173*ae771770SStanislav Sedov output=${output_objdir}/${output_la}.nm 8174*ae771770SStanislav Sedov func_to_tool_file "$output" 8175*ae771770SStanislav Sedov libobjs=$nm_file_list_spec$func_to_tool_file_result 8176*ae771770SStanislav Sedov func_append delfiles " $output" 8177*ae771770SStanislav Sedov func_verbose "creating $NM input file list: $output" 8178*ae771770SStanislav Sedov for obj in $save_libobjs; do 8179*ae771770SStanislav Sedov func_to_tool_file "$obj" 8180*ae771770SStanislav Sedov $ECHO "$func_to_tool_file_result" 8181*ae771770SStanislav Sedov done > "$output" 8182*ae771770SStanislav Sedov eval cmd=\"$cmd1\" 8183*ae771770SStanislav Sedov func_show_eval "$cmd" 'exit $?' 8184*ae771770SStanislav Sedov output=$save_output 8185*ae771770SStanislav Sedov libobjs=$save_libobjs 81861c43270aSJacques Vidrine skipped_export=false 81871c43270aSJacques Vidrine else 81881c43270aSJacques Vidrine # The command line is too long to execute in one step. 8189*ae771770SStanislav Sedov func_verbose "using reloadable object file for export list..." 81901c43270aSJacques Vidrine skipped_export=: 8191c19800e8SDoug Rabson # Break out early, otherwise skipped_export may be 8192c19800e8SDoug Rabson # set to false by a later but shorter cmd. 8193c19800e8SDoug Rabson break 81941c43270aSJacques Vidrine fi 81955e9cd1aeSAssar Westerlund done 81965e9cd1aeSAssar Westerlund IFS="$save_ifs" 8197*ae771770SStanislav Sedov if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 8198*ae771770SStanislav Sedov func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8199*ae771770SStanislav Sedov func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 82005e9cd1aeSAssar Westerlund fi 82015e9cd1aeSAssar Westerlund fi 82025e9cd1aeSAssar Westerlund fi 82035e9cd1aeSAssar Westerlund 82045e9cd1aeSAssar Westerlund if test -n "$export_symbols" && test -n "$include_expsyms"; then 8205*ae771770SStanislav Sedov tmp_export_symbols="$export_symbols" 8206*ae771770SStanislav Sedov test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 8207*ae771770SStanislav Sedov $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8208*ae771770SStanislav Sedov fi 8209*ae771770SStanislav Sedov 8210*ae771770SStanislav Sedov if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 8211*ae771770SStanislav Sedov # The given exports_symbols file has to be filtered, so filter it. 8212*ae771770SStanislav Sedov func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8213*ae771770SStanislav Sedov # FIXME: $output_objdir/$libname.filter potentially contains lots of 8214*ae771770SStanislav Sedov # 's' commands which not all seds can handle. GNU sed should be fine 8215*ae771770SStanislav Sedov # though. Also, the filter scales superlinearly with the number of 8216*ae771770SStanislav Sedov # global variables. join(1) would be nice here, but unfortunately 8217*ae771770SStanislav Sedov # isn't a blessed tool. 8218*ae771770SStanislav Sedov $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 8219*ae771770SStanislav Sedov func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8220*ae771770SStanislav Sedov export_symbols=$output_objdir/$libname.def 8221*ae771770SStanislav Sedov $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 82225e9cd1aeSAssar Westerlund fi 82235e9cd1aeSAssar Westerlund 82241c43270aSJacques Vidrine tmp_deplibs= 82251c43270aSJacques Vidrine for test_deplib in $deplibs; do 82261c43270aSJacques Vidrine case " $convenience " in 82271c43270aSJacques Vidrine *" $test_deplib "*) ;; 82281c43270aSJacques Vidrine *) 8229*ae771770SStanislav Sedov func_append tmp_deplibs " $test_deplib" 82301c43270aSJacques Vidrine ;; 82311c43270aSJacques Vidrine esac 82321c43270aSJacques Vidrine done 82331c43270aSJacques Vidrine deplibs="$tmp_deplibs" 82341c43270aSJacques Vidrine 82355e9cd1aeSAssar Westerlund if test -n "$convenience"; then 8236*ae771770SStanislav Sedov if test -n "$whole_archive_flag_spec" && 8237*ae771770SStanislav Sedov test "$compiler_needs_object" = yes && 8238*ae771770SStanislav Sedov test -z "$libobjs"; then 8239*ae771770SStanislav Sedov # extract the archives, so we have objects to list. 8240*ae771770SStanislav Sedov # TODO: could optimize this to just extract one archive. 8241*ae771770SStanislav Sedov whole_archive_flag_spec= 8242*ae771770SStanislav Sedov fi 82435e9cd1aeSAssar Westerlund if test -n "$whole_archive_flag_spec"; then 82441c43270aSJacques Vidrine save_libobjs=$libobjs 82455e9cd1aeSAssar Westerlund eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8246*ae771770SStanislav Sedov test "X$libobjs" = "X " && libobjs= 82475e9cd1aeSAssar Westerlund else 82485e9cd1aeSAssar Westerlund gentop="$output_objdir/${outputname}x" 8249*ae771770SStanislav Sedov func_append generated " $gentop" 82505e9cd1aeSAssar Westerlund 8251c19800e8SDoug Rabson func_extract_archives $gentop $convenience 8252*ae771770SStanislav Sedov func_append libobjs " $func_extract_archives_result" 8253*ae771770SStanislav Sedov test "X$libobjs" = "X " && libobjs= 8254b528cefcSMark Murray fi 82555e9cd1aeSAssar Westerlund fi 82565e9cd1aeSAssar Westerlund 82575e9cd1aeSAssar Westerlund if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 82585e9cd1aeSAssar Westerlund eval flag=\"$thread_safe_flag_spec\" 8259*ae771770SStanislav Sedov func_append linker_flags " $flag" 82605e9cd1aeSAssar Westerlund fi 82615e9cd1aeSAssar Westerlund 82625e9cd1aeSAssar Westerlund # Make a backup of the uninstalled library when relinking 8263*ae771770SStanislav Sedov if test "$opt_mode" = relink; then 8264*ae771770SStanislav Sedov $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 82655e9cd1aeSAssar Westerlund fi 8266b528cefcSMark Murray 8267b528cefcSMark Murray # Do each of the archive commands. 82681c43270aSJacques Vidrine if test "$module" = yes && test -n "$module_cmds" ; then 82691c43270aSJacques Vidrine if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 82701c43270aSJacques Vidrine eval test_cmds=\"$module_expsym_cmds\" 82711c43270aSJacques Vidrine cmds=$module_expsym_cmds 8272b528cefcSMark Murray else 82731c43270aSJacques Vidrine eval test_cmds=\"$module_cmds\" 82741c43270aSJacques Vidrine cmds=$module_cmds 82751c43270aSJacques Vidrine fi 82761c43270aSJacques Vidrine else 82771c43270aSJacques Vidrine if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 82781c43270aSJacques Vidrine eval test_cmds=\"$archive_expsym_cmds\" 82791c43270aSJacques Vidrine cmds=$archive_expsym_cmds 82801c43270aSJacques Vidrine else 82811c43270aSJacques Vidrine eval test_cmds=\"$archive_cmds\" 82821c43270aSJacques Vidrine cmds=$archive_cmds 82831c43270aSJacques Vidrine fi 82841c43270aSJacques Vidrine fi 82851c43270aSJacques Vidrine 8286c19800e8SDoug Rabson if test "X$skipped_export" != "X:" && 8287*ae771770SStanislav Sedov func_len " $test_cmds" && 8288*ae771770SStanislav Sedov len=$func_len_result && 8289*ae771770SStanislav Sedov test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 82901c43270aSJacques Vidrine : 82911c43270aSJacques Vidrine else 8292*ae771770SStanislav Sedov # The command line is too long to link in one step, link piecewise 8293*ae771770SStanislav Sedov # or, if using GNU ld and skipped_export is not :, use a linker 8294*ae771770SStanislav Sedov # script. 82951c43270aSJacques Vidrine 82961c43270aSJacques Vidrine # Save the value of $output and $libobjs because we want to 82971c43270aSJacques Vidrine # use them later. If we have whole_archive_flag_spec, we 82981c43270aSJacques Vidrine # want to use save_libobjs as it was before 82991c43270aSJacques Vidrine # whole_archive_flag_spec was expanded, because we can't 83001c43270aSJacques Vidrine # assume the linker understands whole_archive_flag_spec. 83011c43270aSJacques Vidrine # This may have to be revisited, in case too many 83021c43270aSJacques Vidrine # convenience libraries get linked in and end up exceeding 83031c43270aSJacques Vidrine # the spec. 83041c43270aSJacques Vidrine if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 83051c43270aSJacques Vidrine save_libobjs=$libobjs 83061c43270aSJacques Vidrine fi 83071c43270aSJacques Vidrine save_output=$output 8308*ae771770SStanislav Sedov func_basename "$output" 8309*ae771770SStanislav Sedov output_la=$func_basename_result 83101c43270aSJacques Vidrine 83111c43270aSJacques Vidrine # Clear the reloadable object creation command queue and 83121c43270aSJacques Vidrine # initialize k to one. 83131c43270aSJacques Vidrine test_cmds= 83141c43270aSJacques Vidrine concat_cmds= 83151c43270aSJacques Vidrine objlist= 83161c43270aSJacques Vidrine last_robj= 83171c43270aSJacques Vidrine k=1 8318*ae771770SStanislav Sedov 8319*ae771770SStanislav Sedov if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 8320*ae771770SStanislav Sedov output=${output_objdir}/${output_la}.lnkscript 8321*ae771770SStanislav Sedov func_verbose "creating GNU ld script: $output" 8322*ae771770SStanislav Sedov echo 'INPUT (' > $output 8323*ae771770SStanislav Sedov for obj in $save_libobjs 8324*ae771770SStanislav Sedov do 8325*ae771770SStanislav Sedov func_to_tool_file "$obj" 8326*ae771770SStanislav Sedov $ECHO "$func_to_tool_file_result" >> $output 8327*ae771770SStanislav Sedov done 8328*ae771770SStanislav Sedov echo ')' >> $output 8329*ae771770SStanislav Sedov func_append delfiles " $output" 8330*ae771770SStanislav Sedov func_to_tool_file "$output" 8331*ae771770SStanislav Sedov output=$func_to_tool_file_result 8332*ae771770SStanislav Sedov elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 8333*ae771770SStanislav Sedov output=${output_objdir}/${output_la}.lnk 8334*ae771770SStanislav Sedov func_verbose "creating linker input file list: $output" 8335*ae771770SStanislav Sedov : > $output 8336*ae771770SStanislav Sedov set x $save_libobjs 8337*ae771770SStanislav Sedov shift 8338*ae771770SStanislav Sedov firstobj= 8339*ae771770SStanislav Sedov if test "$compiler_needs_object" = yes; then 8340*ae771770SStanislav Sedov firstobj="$1 " 8341*ae771770SStanislav Sedov shift 8342*ae771770SStanislav Sedov fi 8343*ae771770SStanislav Sedov for obj 8344*ae771770SStanislav Sedov do 8345*ae771770SStanislav Sedov func_to_tool_file "$obj" 8346*ae771770SStanislav Sedov $ECHO "$func_to_tool_file_result" >> $output 8347*ae771770SStanislav Sedov done 8348*ae771770SStanislav Sedov func_append delfiles " $output" 8349*ae771770SStanislav Sedov func_to_tool_file "$output" 8350*ae771770SStanislav Sedov output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 8351*ae771770SStanislav Sedov else 8352*ae771770SStanislav Sedov if test -n "$save_libobjs"; then 8353*ae771770SStanislav Sedov func_verbose "creating reloadable object files..." 8354c19800e8SDoug Rabson output=$output_objdir/$output_la-${k}.$objext 8355*ae771770SStanislav Sedov eval test_cmds=\"$reload_cmds\" 8356*ae771770SStanislav Sedov func_len " $test_cmds" 8357*ae771770SStanislav Sedov len0=$func_len_result 8358*ae771770SStanislav Sedov len=$len0 8359*ae771770SStanislav Sedov 83601c43270aSJacques Vidrine # Loop over the list of objects to be linked. 83611c43270aSJacques Vidrine for obj in $save_libobjs 83621c43270aSJacques Vidrine do 8363*ae771770SStanislav Sedov func_len " $obj" 8364*ae771770SStanislav Sedov func_arith $len + $func_len_result 8365*ae771770SStanislav Sedov len=$func_arith_result 83661c43270aSJacques Vidrine if test "X$objlist" = X || 8367*ae771770SStanislav Sedov test "$len" -lt "$max_cmd_len"; then 8368*ae771770SStanislav Sedov func_append objlist " $obj" 83691c43270aSJacques Vidrine else 83701c43270aSJacques Vidrine # The command $test_cmds is almost too long, add a 83711c43270aSJacques Vidrine # command to the queue. 83721c43270aSJacques Vidrine if test "$k" -eq 1 ; then 83731c43270aSJacques Vidrine # The first file doesn't have a previous command to add. 8374*ae771770SStanislav Sedov reload_objs=$objlist 8375*ae771770SStanislav Sedov eval concat_cmds=\"$reload_cmds\" 83761c43270aSJacques Vidrine else 83771c43270aSJacques Vidrine # All subsequent reloadable object files will link in 83781c43270aSJacques Vidrine # the last one created. 8379*ae771770SStanislav Sedov reload_objs="$objlist $last_robj" 8380*ae771770SStanislav Sedov eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 83811c43270aSJacques Vidrine fi 8382c19800e8SDoug Rabson last_robj=$output_objdir/$output_la-${k}.$objext 8383*ae771770SStanislav Sedov func_arith $k + 1 8384*ae771770SStanislav Sedov k=$func_arith_result 8385c19800e8SDoug Rabson output=$output_objdir/$output_la-${k}.$objext 8386*ae771770SStanislav Sedov objlist=" $obj" 8387*ae771770SStanislav Sedov func_len " $last_robj" 8388*ae771770SStanislav Sedov func_arith $len0 + $func_len_result 8389*ae771770SStanislav Sedov len=$func_arith_result 83901c43270aSJacques Vidrine fi 83911c43270aSJacques Vidrine done 83921c43270aSJacques Vidrine # Handle the remaining objects by creating one last 83931c43270aSJacques Vidrine # reloadable object file. All subsequent reloadable object 83941c43270aSJacques Vidrine # files will link in the last one created. 83951c43270aSJacques Vidrine test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8396*ae771770SStanislav Sedov reload_objs="$objlist $last_robj" 8397*ae771770SStanislav Sedov eval concat_cmds=\"\${concat_cmds}$reload_cmds\" 8398*ae771770SStanislav Sedov if test -n "$last_robj"; then 8399*ae771770SStanislav Sedov eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 8400*ae771770SStanislav Sedov fi 8401*ae771770SStanislav Sedov func_append delfiles " $output" 84021c43270aSJacques Vidrine 8403*ae771770SStanislav Sedov else 8404*ae771770SStanislav Sedov output= 84051c43270aSJacques Vidrine fi 84061c43270aSJacques Vidrine 8407*ae771770SStanislav Sedov if ${skipped_export-false}; then 8408*ae771770SStanislav Sedov func_verbose "generating symbol list for \`$libname.la'" 8409*ae771770SStanislav Sedov export_symbols="$output_objdir/$libname.exp" 8410*ae771770SStanislav Sedov $opt_dry_run || $RM $export_symbols 8411*ae771770SStanislav Sedov libobjs=$output 8412*ae771770SStanislav Sedov # Append the command to create the export file. 8413*ae771770SStanislav Sedov test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8414*ae771770SStanislav Sedov eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 8415*ae771770SStanislav Sedov if test -n "$last_robj"; then 8416*ae771770SStanislav Sedov eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 8417*ae771770SStanislav Sedov fi 8418*ae771770SStanislav Sedov fi 84191c43270aSJacques Vidrine 8420*ae771770SStanislav Sedov test -n "$save_libobjs" && 8421*ae771770SStanislav Sedov func_verbose "creating a temporary reloadable object file: $output" 84221c43270aSJacques Vidrine 84231c43270aSJacques Vidrine # Loop through the commands generated above and execute them. 84241c43270aSJacques Vidrine save_ifs="$IFS"; IFS='~' 84251c43270aSJacques Vidrine for cmd in $concat_cmds; do 84261c43270aSJacques Vidrine IFS="$save_ifs" 8427*ae771770SStanislav Sedov $opt_silent || { 8428*ae771770SStanislav Sedov func_quote_for_expand "$cmd" 8429*ae771770SStanislav Sedov eval "func_echo $func_quote_for_expand_result" 8430*ae771770SStanislav Sedov } 8431*ae771770SStanislav Sedov $opt_dry_run || eval "$cmd" || { 8432*ae771770SStanislav Sedov lt_exit=$? 8433*ae771770SStanislav Sedov 8434*ae771770SStanislav Sedov # Restore the uninstalled library and exit 8435*ae771770SStanislav Sedov if test "$opt_mode" = relink; then 8436*ae771770SStanislav Sedov ( cd "$output_objdir" && \ 8437*ae771770SStanislav Sedov $RM "${realname}T" && \ 8438*ae771770SStanislav Sedov $MV "${realname}U" "$realname" ) 8439*ae771770SStanislav Sedov fi 8440*ae771770SStanislav Sedov 8441*ae771770SStanislav Sedov exit $lt_exit 8442*ae771770SStanislav Sedov } 84431c43270aSJacques Vidrine done 84441c43270aSJacques Vidrine IFS="$save_ifs" 84451c43270aSJacques Vidrine 8446*ae771770SStanislav Sedov if test -n "$export_symbols_regex" && ${skipped_export-false}; then 8447*ae771770SStanislav Sedov func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8448*ae771770SStanislav Sedov func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8449*ae771770SStanislav Sedov fi 8450*ae771770SStanislav Sedov fi 8451*ae771770SStanislav Sedov 8452*ae771770SStanislav Sedov if ${skipped_export-false}; then 8453*ae771770SStanislav Sedov if test -n "$export_symbols" && test -n "$include_expsyms"; then 8454*ae771770SStanislav Sedov tmp_export_symbols="$export_symbols" 8455*ae771770SStanislav Sedov test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 8456*ae771770SStanislav Sedov $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8457*ae771770SStanislav Sedov fi 8458*ae771770SStanislav Sedov 8459*ae771770SStanislav Sedov if test -n "$orig_export_symbols"; then 8460*ae771770SStanislav Sedov # The given exports_symbols file has to be filtered, so filter it. 8461*ae771770SStanislav Sedov func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8462*ae771770SStanislav Sedov # FIXME: $output_objdir/$libname.filter potentially contains lots of 8463*ae771770SStanislav Sedov # 's' commands which not all seds can handle. GNU sed should be fine 8464*ae771770SStanislav Sedov # though. Also, the filter scales superlinearly with the number of 8465*ae771770SStanislav Sedov # global variables. join(1) would be nice here, but unfortunately 8466*ae771770SStanislav Sedov # isn't a blessed tool. 8467*ae771770SStanislav Sedov $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 8468*ae771770SStanislav Sedov func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8469*ae771770SStanislav Sedov export_symbols=$output_objdir/$libname.def 8470*ae771770SStanislav Sedov $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8471*ae771770SStanislav Sedov fi 8472*ae771770SStanislav Sedov fi 8473*ae771770SStanislav Sedov 84741c43270aSJacques Vidrine libobjs=$output 84751c43270aSJacques Vidrine # Restore the value of output. 84761c43270aSJacques Vidrine output=$save_output 84771c43270aSJacques Vidrine 84781c43270aSJacques Vidrine if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 84791c43270aSJacques Vidrine eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8480*ae771770SStanislav Sedov test "X$libobjs" = "X " && libobjs= 84811c43270aSJacques Vidrine fi 84821c43270aSJacques Vidrine # Expand the library linking commands again to reset the 84831c43270aSJacques Vidrine # value of $libobjs for piecewise linking. 84841c43270aSJacques Vidrine 84851c43270aSJacques Vidrine # Do each of the archive commands. 84861c43270aSJacques Vidrine if test "$module" = yes && test -n "$module_cmds" ; then 84871c43270aSJacques Vidrine if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 84881c43270aSJacques Vidrine cmds=$module_expsym_cmds 84891c43270aSJacques Vidrine else 84901c43270aSJacques Vidrine cmds=$module_cmds 84911c43270aSJacques Vidrine fi 84921c43270aSJacques Vidrine else 84931c43270aSJacques Vidrine if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 84941c43270aSJacques Vidrine cmds=$archive_expsym_cmds 84951c43270aSJacques Vidrine else 84961c43270aSJacques Vidrine cmds=$archive_cmds 84971c43270aSJacques Vidrine fi 84981c43270aSJacques Vidrine fi 8499b528cefcSMark Murray fi 8500*ae771770SStanislav Sedov 8501*ae771770SStanislav Sedov if test -n "$delfiles"; then 8502*ae771770SStanislav Sedov # Append the command to remove temporary files to $cmds. 8503*ae771770SStanislav Sedov eval cmds=\"\$cmds~\$RM $delfiles\" 8504*ae771770SStanislav Sedov fi 8505*ae771770SStanislav Sedov 8506*ae771770SStanislav Sedov # Add any objects from preloaded convenience libraries 8507*ae771770SStanislav Sedov if test -n "$dlprefiles"; then 8508*ae771770SStanislav Sedov gentop="$output_objdir/${outputname}x" 8509*ae771770SStanislav Sedov func_append generated " $gentop" 8510*ae771770SStanislav Sedov 8511*ae771770SStanislav Sedov func_extract_archives $gentop $dlprefiles 8512*ae771770SStanislav Sedov func_append libobjs " $func_extract_archives_result" 8513*ae771770SStanislav Sedov test "X$libobjs" = "X " && libobjs= 8514*ae771770SStanislav Sedov fi 8515*ae771770SStanislav Sedov 85168373020dSJacques Vidrine save_ifs="$IFS"; IFS='~' 8517b528cefcSMark Murray for cmd in $cmds; do 8518b528cefcSMark Murray IFS="$save_ifs" 85191c43270aSJacques Vidrine eval cmd=\"$cmd\" 8520*ae771770SStanislav Sedov $opt_silent || { 8521*ae771770SStanislav Sedov func_quote_for_expand "$cmd" 8522*ae771770SStanislav Sedov eval "func_echo $func_quote_for_expand_result" 8523*ae771770SStanislav Sedov } 8524*ae771770SStanislav Sedov $opt_dry_run || eval "$cmd" || { 8525c19800e8SDoug Rabson lt_exit=$? 8526c19800e8SDoug Rabson 8527c19800e8SDoug Rabson # Restore the uninstalled library and exit 8528*ae771770SStanislav Sedov if test "$opt_mode" = relink; then 8529*ae771770SStanislav Sedov ( cd "$output_objdir" && \ 8530*ae771770SStanislav Sedov $RM "${realname}T" && \ 8531*ae771770SStanislav Sedov $MV "${realname}U" "$realname" ) 8532c19800e8SDoug Rabson fi 8533c19800e8SDoug Rabson 8534c19800e8SDoug Rabson exit $lt_exit 8535c19800e8SDoug Rabson } 8536b528cefcSMark Murray done 8537b528cefcSMark Murray IFS="$save_ifs" 8538b528cefcSMark Murray 85395e9cd1aeSAssar Westerlund # Restore the uninstalled library and exit 8540*ae771770SStanislav Sedov if test "$opt_mode" = relink; then 8541*ae771770SStanislav Sedov $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 8542c19800e8SDoug Rabson 8543c19800e8SDoug Rabson if test -n "$convenience"; then 8544c19800e8SDoug Rabson if test -z "$whole_archive_flag_spec"; then 8545*ae771770SStanislav Sedov func_show_eval '${RM}r "$gentop"' 8546c19800e8SDoug Rabson fi 8547c19800e8SDoug Rabson fi 8548c19800e8SDoug Rabson 8549c19800e8SDoug Rabson exit $EXIT_SUCCESS 85505e9cd1aeSAssar Westerlund fi 85515e9cd1aeSAssar Westerlund 8552b528cefcSMark Murray # Create links to the real library. 8553b528cefcSMark Murray for linkname in $linknames; do 8554b528cefcSMark Murray if test "$realname" != "$linkname"; then 8555*ae771770SStanislav Sedov func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 8556b528cefcSMark Murray fi 8557b528cefcSMark Murray done 8558b528cefcSMark Murray 8559b528cefcSMark Murray # If -module or -export-dynamic was specified, set the dlname. 8560b528cefcSMark Murray if test "$module" = yes || test "$export_dynamic" = yes; then 8561b528cefcSMark Murray # On all known operating systems, these are identical. 8562b528cefcSMark Murray dlname="$soname" 8563b528cefcSMark Murray fi 8564b528cefcSMark Murray fi 8565b528cefcSMark Murray ;; 8566b528cefcSMark Murray 85675e9cd1aeSAssar Westerlund obj) 85685e9cd1aeSAssar Westerlund if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 8569*ae771770SStanislav Sedov func_warning "\`-dlopen' is ignored for objects" 8570b528cefcSMark Murray fi 8571b528cefcSMark Murray 8572*ae771770SStanislav Sedov case " $deplibs" in 8573*ae771770SStanislav Sedov *\ -l* | *\ -L*) 8574*ae771770SStanislav Sedov func_warning "\`-l' and \`-L' are ignored for objects" ;; 8575*ae771770SStanislav Sedov esac 8576b528cefcSMark Murray 8577*ae771770SStanislav Sedov test -n "$rpath" && \ 8578*ae771770SStanislav Sedov func_warning "\`-rpath' is ignored for objects" 85795e9cd1aeSAssar Westerlund 8580*ae771770SStanislav Sedov test -n "$xrpath" && \ 8581*ae771770SStanislav Sedov func_warning "\`-R' is ignored for objects" 8582b528cefcSMark Murray 8583*ae771770SStanislav Sedov test -n "$vinfo" && \ 8584*ae771770SStanislav Sedov func_warning "\`-version-info' is ignored for objects" 8585*ae771770SStanislav Sedov 8586*ae771770SStanislav Sedov test -n "$release" && \ 8587*ae771770SStanislav Sedov func_warning "\`-release' is ignored for objects" 8588b528cefcSMark Murray 85894137ff4cSJacques Vidrine case $output in 8590b528cefcSMark Murray *.lo) 8591*ae771770SStanislav Sedov test -n "$objs$old_deplibs" && \ 8592*ae771770SStanislav Sedov func_fatal_error "cannot build library object \`$output' from non-libtool objects" 8593*ae771770SStanislav Sedov 8594*ae771770SStanislav Sedov libobj=$output 8595*ae771770SStanislav Sedov func_lo2o "$libobj" 8596*ae771770SStanislav Sedov obj=$func_lo2o_result 8597b528cefcSMark Murray ;; 8598b528cefcSMark Murray *) 8599b528cefcSMark Murray libobj= 8600b528cefcSMark Murray obj="$output" 8601b528cefcSMark Murray ;; 8602b528cefcSMark Murray esac 8603b528cefcSMark Murray 8604b528cefcSMark Murray # Delete the old objects. 8605*ae771770SStanislav Sedov $opt_dry_run || $RM $obj $libobj 8606b528cefcSMark Murray 86075e9cd1aeSAssar Westerlund # Objects from convenience libraries. This assumes 86085e9cd1aeSAssar Westerlund # single-version convenience libraries. Whenever we create 86095e9cd1aeSAssar Westerlund # different ones for PIC/non-PIC, this we'll have to duplicate 86105e9cd1aeSAssar Westerlund # the extraction. 86115e9cd1aeSAssar Westerlund reload_conv_objs= 86125e9cd1aeSAssar Westerlund gentop= 86135e9cd1aeSAssar Westerlund # reload_cmds runs $LD directly, so let us get rid of 8614*ae771770SStanislav Sedov # -Wl from whole_archive_flag_spec and hope we can get by with 8615*ae771770SStanislav Sedov # turning comma into space.. 86165e9cd1aeSAssar Westerlund wl= 86175e9cd1aeSAssar Westerlund 86185e9cd1aeSAssar Westerlund if test -n "$convenience"; then 86195e9cd1aeSAssar Westerlund if test -n "$whole_archive_flag_spec"; then 8620*ae771770SStanislav Sedov eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 8621*ae771770SStanislav Sedov reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 86225e9cd1aeSAssar Westerlund else 86235e9cd1aeSAssar Westerlund gentop="$output_objdir/${obj}x" 8624*ae771770SStanislav Sedov func_append generated " $gentop" 86255e9cd1aeSAssar Westerlund 8626c19800e8SDoug Rabson func_extract_archives $gentop $convenience 8627c19800e8SDoug Rabson reload_conv_objs="$reload_objs $func_extract_archives_result" 86285e9cd1aeSAssar Westerlund fi 86295e9cd1aeSAssar Westerlund fi 86305e9cd1aeSAssar Westerlund 8631*ae771770SStanislav Sedov # If we're not building shared, we need to use non_pic_objs 8632*ae771770SStanislav Sedov test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" 8633*ae771770SStanislav Sedov 8634b528cefcSMark Murray # Create the old-style object. 8635*ae771770SStanislav Sedov reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 8636b528cefcSMark Murray 8637b528cefcSMark Murray output="$obj" 8638*ae771770SStanislav Sedov func_execute_cmds "$reload_cmds" 'exit $?' 8639b528cefcSMark Murray 8640b528cefcSMark Murray # Exit if we aren't doing a library object file. 86415e9cd1aeSAssar Westerlund if test -z "$libobj"; then 86425e9cd1aeSAssar Westerlund if test -n "$gentop"; then 8643*ae771770SStanislav Sedov func_show_eval '${RM}r "$gentop"' 86445e9cd1aeSAssar Westerlund fi 86455e9cd1aeSAssar Westerlund 8646c19800e8SDoug Rabson exit $EXIT_SUCCESS 86475e9cd1aeSAssar Westerlund fi 8648b528cefcSMark Murray 8649b528cefcSMark Murray if test "$build_libtool_libs" != yes; then 86505e9cd1aeSAssar Westerlund if test -n "$gentop"; then 8651*ae771770SStanislav Sedov func_show_eval '${RM}r "$gentop"' 86525e9cd1aeSAssar Westerlund fi 86535e9cd1aeSAssar Westerlund 8654b528cefcSMark Murray # Create an invalid libtool object if no PIC, so that we don't 8655b528cefcSMark Murray # accidentally link it into a program. 86561c43270aSJacques Vidrine # $show "echo timestamp > $libobj" 8657*ae771770SStanislav Sedov # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 8658c19800e8SDoug Rabson exit $EXIT_SUCCESS 8659b528cefcSMark Murray fi 8660b528cefcSMark Murray 86615e9cd1aeSAssar Westerlund if test -n "$pic_flag" || test "$pic_mode" != default; then 8662b528cefcSMark Murray # Only do commands if we really have different PIC objects. 86635e9cd1aeSAssar Westerlund reload_objs="$libobjs $reload_conv_objs" 8664b528cefcSMark Murray output="$libobj" 8665*ae771770SStanislav Sedov func_execute_cmds "$reload_cmds" 'exit $?' 86665e9cd1aeSAssar Westerlund fi 86675e9cd1aeSAssar Westerlund 86685e9cd1aeSAssar Westerlund if test -n "$gentop"; then 8669*ae771770SStanislav Sedov func_show_eval '${RM}r "$gentop"' 8670b528cefcSMark Murray fi 8671b528cefcSMark Murray 8672c19800e8SDoug Rabson exit $EXIT_SUCCESS 8673b528cefcSMark Murray ;; 8674b528cefcSMark Murray 86755e9cd1aeSAssar Westerlund prog) 86764137ff4cSJacques Vidrine case $host in 8677*ae771770SStanislav Sedov *cygwin*) func_stripname '' '.exe' "$output" 8678*ae771770SStanislav Sedov output=$func_stripname_result.exe;; 86794137ff4cSJacques Vidrine esac 8680*ae771770SStanislav Sedov test -n "$vinfo" && \ 8681*ae771770SStanislav Sedov func_warning "\`-version-info' is ignored for programs" 8682b528cefcSMark Murray 8683*ae771770SStanislav Sedov test -n "$release" && \ 8684*ae771770SStanislav Sedov func_warning "\`-release' is ignored for programs" 8685b528cefcSMark Murray 8686*ae771770SStanislav Sedov test "$preload" = yes \ 8687*ae771770SStanislav Sedov && test "$dlopen_support" = unknown \ 8688*ae771770SStanislav Sedov && test "$dlopen_self" = unknown \ 8689*ae771770SStanislav Sedov && test "$dlopen_self_static" = unknown && \ 8690*ae771770SStanislav Sedov func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 86915e9cd1aeSAssar Westerlund 86924137ff4cSJacques Vidrine case $host in 86934137ff4cSJacques Vidrine *-*-rhapsody* | *-*-darwin1.[012]) 86944137ff4cSJacques Vidrine # On Rhapsody replace the C library is the System framework 8695*ae771770SStanislav Sedov compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 8696*ae771770SStanislav Sedov finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 86974137ff4cSJacques Vidrine ;; 86984137ff4cSJacques Vidrine esac 86994137ff4cSJacques Vidrine 87001c43270aSJacques Vidrine case $host in 8701*ae771770SStanislav Sedov *-*-darwin*) 87021c43270aSJacques Vidrine # Don't allow lazy linking, it breaks C++ global constructors 8703*ae771770SStanislav Sedov # But is supposedly fixed on 10.4 or later (yay!). 87041c43270aSJacques Vidrine if test "$tagname" = CXX ; then 8705*ae771770SStanislav Sedov case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 8706*ae771770SStanislav Sedov 10.[0123]) 8707*ae771770SStanislav Sedov func_append compile_command " ${wl}-bind_at_load" 8708*ae771770SStanislav Sedov func_append finalize_command " ${wl}-bind_at_load" 8709*ae771770SStanislav Sedov ;; 8710*ae771770SStanislav Sedov esac 87111c43270aSJacques Vidrine fi 8712*ae771770SStanislav Sedov # Time to change all our "foo.ltframework" stuff back to "-framework foo" 8713*ae771770SStanislav Sedov compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8714*ae771770SStanislav Sedov finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 87151c43270aSJacques Vidrine ;; 87161c43270aSJacques Vidrine esac 87171c43270aSJacques Vidrine 8718c19800e8SDoug Rabson 8719c19800e8SDoug Rabson # move library search paths that coincide with paths to not yet 8720c19800e8SDoug Rabson # installed libraries to the beginning of the library search list 8721c19800e8SDoug Rabson new_libs= 8722c19800e8SDoug Rabson for path in $notinst_path; do 8723c19800e8SDoug Rabson case " $new_libs " in 8724c19800e8SDoug Rabson *" -L$path/$objdir "*) ;; 8725c19800e8SDoug Rabson *) 8726c19800e8SDoug Rabson case " $compile_deplibs " in 8727c19800e8SDoug Rabson *" -L$path/$objdir "*) 8728*ae771770SStanislav Sedov func_append new_libs " -L$path/$objdir" ;; 8729c19800e8SDoug Rabson esac 8730c19800e8SDoug Rabson ;; 8731c19800e8SDoug Rabson esac 8732c19800e8SDoug Rabson done 8733c19800e8SDoug Rabson for deplib in $compile_deplibs; do 8734c19800e8SDoug Rabson case $deplib in 8735c19800e8SDoug Rabson -L*) 8736c19800e8SDoug Rabson case " $new_libs " in 8737c19800e8SDoug Rabson *" $deplib "*) ;; 8738*ae771770SStanislav Sedov *) func_append new_libs " $deplib" ;; 8739c19800e8SDoug Rabson esac 8740c19800e8SDoug Rabson ;; 8741*ae771770SStanislav Sedov *) func_append new_libs " $deplib" ;; 8742c19800e8SDoug Rabson esac 8743c19800e8SDoug Rabson done 8744c19800e8SDoug Rabson compile_deplibs="$new_libs" 8745c19800e8SDoug Rabson 8746c19800e8SDoug Rabson 8747*ae771770SStanislav Sedov func_append compile_command " $compile_deplibs" 8748*ae771770SStanislav Sedov func_append finalize_command " $finalize_deplibs" 87495e9cd1aeSAssar Westerlund 87505e9cd1aeSAssar Westerlund if test -n "$rpath$xrpath"; then 8751b528cefcSMark Murray # If the user specified any rpath flags, then add them. 87525e9cd1aeSAssar Westerlund for libdir in $rpath $xrpath; do 87535e9cd1aeSAssar Westerlund # This is the magic to use -rpath. 87545e9cd1aeSAssar Westerlund case "$finalize_rpath " in 87555e9cd1aeSAssar Westerlund *" $libdir "*) ;; 8756*ae771770SStanislav Sedov *) func_append finalize_rpath " $libdir" ;; 87575e9cd1aeSAssar Westerlund esac 87585e9cd1aeSAssar Westerlund done 87595e9cd1aeSAssar Westerlund fi 87605e9cd1aeSAssar Westerlund 87615e9cd1aeSAssar Westerlund # Now hardcode the library paths 87625e9cd1aeSAssar Westerlund rpath= 87635e9cd1aeSAssar Westerlund hardcode_libdirs= 87645e9cd1aeSAssar Westerlund for libdir in $compile_rpath $finalize_rpath; do 8765b528cefcSMark Murray if test -n "$hardcode_libdir_flag_spec"; then 8766b528cefcSMark Murray if test -n "$hardcode_libdir_separator"; then 8767b528cefcSMark Murray if test -z "$hardcode_libdirs"; then 8768b528cefcSMark Murray hardcode_libdirs="$libdir" 8769b528cefcSMark Murray else 8770b528cefcSMark Murray # Just accumulate the unique libdirs. 87714137ff4cSJacques Vidrine case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8772b528cefcSMark Murray *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8773b528cefcSMark Murray ;; 8774b528cefcSMark Murray *) 8775*ae771770SStanislav Sedov func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8776b528cefcSMark Murray ;; 8777b528cefcSMark Murray esac 8778b528cefcSMark Murray fi 87795e9cd1aeSAssar Westerlund else 8780b528cefcSMark Murray eval flag=\"$hardcode_libdir_flag_spec\" 8781*ae771770SStanislav Sedov func_append rpath " $flag" 8782b528cefcSMark Murray fi 8783b528cefcSMark Murray elif test -n "$runpath_var"; then 8784b528cefcSMark Murray case "$perm_rpath " in 8785b528cefcSMark Murray *" $libdir "*) ;; 8786*ae771770SStanislav Sedov *) func_append perm_rpath " $libdir" ;; 8787b528cefcSMark Murray esac 8788b528cefcSMark Murray fi 87894137ff4cSJacques Vidrine case $host in 8790*ae771770SStanislav Sedov *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 8791*ae771770SStanislav Sedov testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 87924137ff4cSJacques Vidrine case :$dllsearchpath: in 87935e9cd1aeSAssar Westerlund *":$libdir:"*) ;; 8794*ae771770SStanislav Sedov ::) dllsearchpath=$libdir;; 8795*ae771770SStanislav Sedov *) func_append dllsearchpath ":$libdir";; 87965e9cd1aeSAssar Westerlund esac 8797c19800e8SDoug Rabson case :$dllsearchpath: in 8798c19800e8SDoug Rabson *":$testbindir:"*) ;; 8799*ae771770SStanislav Sedov ::) dllsearchpath=$testbindir;; 8800*ae771770SStanislav Sedov *) func_append dllsearchpath ":$testbindir";; 8801c19800e8SDoug Rabson esac 88025e9cd1aeSAssar Westerlund ;; 88035e9cd1aeSAssar Westerlund esac 8804b528cefcSMark Murray done 88055e9cd1aeSAssar Westerlund # Substitute the hardcoded libdirs into the rpath. 88065e9cd1aeSAssar Westerlund if test -n "$hardcode_libdir_separator" && 88075e9cd1aeSAssar Westerlund test -n "$hardcode_libdirs"; then 88085e9cd1aeSAssar Westerlund libdir="$hardcode_libdirs" 88095e9cd1aeSAssar Westerlund eval rpath=\" $hardcode_libdir_flag_spec\" 8810b528cefcSMark Murray fi 88115e9cd1aeSAssar Westerlund compile_rpath="$rpath" 8812b528cefcSMark Murray 88135e9cd1aeSAssar Westerlund rpath= 88145e9cd1aeSAssar Westerlund hardcode_libdirs= 88155e9cd1aeSAssar Westerlund for libdir in $finalize_rpath; do 88165e9cd1aeSAssar Westerlund if test -n "$hardcode_libdir_flag_spec"; then 8817b528cefcSMark Murray if test -n "$hardcode_libdir_separator"; then 88185e9cd1aeSAssar Westerlund if test -z "$hardcode_libdirs"; then 88195e9cd1aeSAssar Westerlund hardcode_libdirs="$libdir" 8820b528cefcSMark Murray else 88215e9cd1aeSAssar Westerlund # Just accumulate the unique libdirs. 88224137ff4cSJacques Vidrine case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 88235e9cd1aeSAssar Westerlund *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 88245e9cd1aeSAssar Westerlund ;; 88255e9cd1aeSAssar Westerlund *) 8826*ae771770SStanislav Sedov func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 88275e9cd1aeSAssar Westerlund ;; 88285e9cd1aeSAssar Westerlund esac 8829b528cefcSMark Murray fi 88305e9cd1aeSAssar Westerlund else 88315e9cd1aeSAssar Westerlund eval flag=\"$hardcode_libdir_flag_spec\" 8832*ae771770SStanislav Sedov func_append rpath " $flag" 88335e9cd1aeSAssar Westerlund fi 88345e9cd1aeSAssar Westerlund elif test -n "$runpath_var"; then 88355e9cd1aeSAssar Westerlund case "$finalize_perm_rpath " in 88365e9cd1aeSAssar Westerlund *" $libdir "*) ;; 8837*ae771770SStanislav Sedov *) func_append finalize_perm_rpath " $libdir" ;; 88385e9cd1aeSAssar Westerlund esac 88395e9cd1aeSAssar Westerlund fi 88405e9cd1aeSAssar Westerlund done 88415e9cd1aeSAssar Westerlund # Substitute the hardcoded libdirs into the rpath. 88425e9cd1aeSAssar Westerlund if test -n "$hardcode_libdir_separator" && 88435e9cd1aeSAssar Westerlund test -n "$hardcode_libdirs"; then 88445e9cd1aeSAssar Westerlund libdir="$hardcode_libdirs" 88455e9cd1aeSAssar Westerlund eval rpath=\" $hardcode_libdir_flag_spec\" 88465e9cd1aeSAssar Westerlund fi 88475e9cd1aeSAssar Westerlund finalize_rpath="$rpath" 8848b528cefcSMark Murray 8849b528cefcSMark Murray if test -n "$libobjs" && test "$build_old_libs" = yes; then 8850b528cefcSMark Murray # Transform all the library objects into standard objects. 8851*ae771770SStanislav Sedov compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 8852*ae771770SStanislav Sedov finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 8853b528cefcSMark Murray fi 8854b528cefcSMark Murray 8855*ae771770SStanislav Sedov func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 8856*ae771770SStanislav Sedov 8857*ae771770SStanislav Sedov # template prelinking step 8858*ae771770SStanislav Sedov if test -n "$prelink_cmds"; then 8859*ae771770SStanislav Sedov func_execute_cmds "$prelink_cmds" 'exit $?' 8860b528cefcSMark Murray fi 8861b528cefcSMark Murray 8862*ae771770SStanislav Sedov wrappers_required=yes 8863c19800e8SDoug Rabson case $host in 8864*ae771770SStanislav Sedov *cegcc* | *mingw32ce*) 8865*ae771770SStanislav Sedov # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 8866*ae771770SStanislav Sedov wrappers_required=no 8867c19800e8SDoug Rabson ;; 8868c19800e8SDoug Rabson *cygwin* | *mingw* ) 8869*ae771770SStanislav Sedov if test "$build_libtool_libs" != yes; then 8870*ae771770SStanislav Sedov wrappers_required=no 8871c19800e8SDoug Rabson fi 8872c19800e8SDoug Rabson ;; 8873c19800e8SDoug Rabson *) 88741c43270aSJacques Vidrine if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 8875*ae771770SStanislav Sedov wrappers_required=no 8876*ae771770SStanislav Sedov fi 8877*ae771770SStanislav Sedov ;; 8878*ae771770SStanislav Sedov esac 8879*ae771770SStanislav Sedov if test "$wrappers_required" = no; then 8880b528cefcSMark Murray # Replace the output file specification. 8881*ae771770SStanislav Sedov compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 88825e9cd1aeSAssar Westerlund link_command="$compile_command$compile_rpath" 8883b528cefcSMark Murray 8884b528cefcSMark Murray # We have no uninstalled library dependencies, so finalize right now. 8885*ae771770SStanislav Sedov exit_status=0 8886*ae771770SStanislav Sedov func_show_eval "$link_command" 'exit_status=$?' 8887*ae771770SStanislav Sedov 8888*ae771770SStanislav Sedov if test -n "$postlink_cmds"; then 8889*ae771770SStanislav Sedov func_to_tool_file "$output" 8890*ae771770SStanislav Sedov postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 8891*ae771770SStanislav Sedov func_execute_cmds "$postlink_cmds" 'exit $?' 8892*ae771770SStanislav Sedov fi 88935e9cd1aeSAssar Westerlund 88945e9cd1aeSAssar Westerlund # Delete the generated files. 8895*ae771770SStanislav Sedov if test -f "$output_objdir/${outputname}S.${objext}"; then 8896*ae771770SStanislav Sedov func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 8897b528cefcSMark Murray fi 88985e9cd1aeSAssar Westerlund 8899c19800e8SDoug Rabson exit $exit_status 8900b528cefcSMark Murray fi 8901b528cefcSMark Murray 89025e9cd1aeSAssar Westerlund if test -n "$compile_shlibpath$finalize_shlibpath"; then 89035e9cd1aeSAssar Westerlund compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 8904b528cefcSMark Murray fi 8905b528cefcSMark Murray if test -n "$finalize_shlibpath"; then 8906b528cefcSMark Murray finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 8907b528cefcSMark Murray fi 8908b528cefcSMark Murray 89095e9cd1aeSAssar Westerlund compile_var= 89105e9cd1aeSAssar Westerlund finalize_var= 89115e9cd1aeSAssar Westerlund if test -n "$runpath_var"; then 89125e9cd1aeSAssar Westerlund if test -n "$perm_rpath"; then 8913b528cefcSMark Murray # We should set the runpath_var. 8914b528cefcSMark Murray rpath= 8915b528cefcSMark Murray for dir in $perm_rpath; do 8916*ae771770SStanislav Sedov func_append rpath "$dir:" 8917b528cefcSMark Murray done 89185e9cd1aeSAssar Westerlund compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 89195e9cd1aeSAssar Westerlund fi 89205e9cd1aeSAssar Westerlund if test -n "$finalize_perm_rpath"; then 89215e9cd1aeSAssar Westerlund # We should set the runpath_var. 89225e9cd1aeSAssar Westerlund rpath= 89235e9cd1aeSAssar Westerlund for dir in $finalize_perm_rpath; do 8924*ae771770SStanislav Sedov func_append rpath "$dir:" 89255e9cd1aeSAssar Westerlund done 89265e9cd1aeSAssar Westerlund finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 89275e9cd1aeSAssar Westerlund fi 8928b528cefcSMark Murray fi 8929b528cefcSMark Murray 89305e9cd1aeSAssar Westerlund if test "$no_install" = yes; then 89315e9cd1aeSAssar Westerlund # We don't need to create a wrapper script. 89325e9cd1aeSAssar Westerlund link_command="$compile_var$compile_command$compile_rpath" 89335e9cd1aeSAssar Westerlund # Replace the output file specification. 8934*ae771770SStanislav Sedov link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 89355e9cd1aeSAssar Westerlund # Delete the old output file. 8936*ae771770SStanislav Sedov $opt_dry_run || $RM $output 89375e9cd1aeSAssar Westerlund # Link the executable and exit 8938*ae771770SStanislav Sedov func_show_eval "$link_command" 'exit $?' 8939*ae771770SStanislav Sedov 8940*ae771770SStanislav Sedov if test -n "$postlink_cmds"; then 8941*ae771770SStanislav Sedov func_to_tool_file "$output" 8942*ae771770SStanislav Sedov postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 8943*ae771770SStanislav Sedov func_execute_cmds "$postlink_cmds" 'exit $?' 8944*ae771770SStanislav Sedov fi 8945*ae771770SStanislav Sedov 8946c19800e8SDoug Rabson exit $EXIT_SUCCESS 89475e9cd1aeSAssar Westerlund fi 89485e9cd1aeSAssar Westerlund 89494137ff4cSJacques Vidrine if test "$hardcode_action" = relink; then 89505e9cd1aeSAssar Westerlund # Fast installation is not supported 89515e9cd1aeSAssar Westerlund link_command="$compile_var$compile_command$compile_rpath" 89525e9cd1aeSAssar Westerlund relink_command="$finalize_var$finalize_command$finalize_rpath" 89535e9cd1aeSAssar Westerlund 8954*ae771770SStanislav Sedov func_warning "this platform does not like uninstalled shared libraries" 8955*ae771770SStanislav Sedov func_warning "\`$output' will be relinked during installation" 89565e9cd1aeSAssar Westerlund else 89575e9cd1aeSAssar Westerlund if test "$fast_install" != no; then 89585e9cd1aeSAssar Westerlund link_command="$finalize_var$compile_command$finalize_rpath" 89595e9cd1aeSAssar Westerlund if test "$fast_install" = yes; then 8960*ae771770SStanislav Sedov relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 89615e9cd1aeSAssar Westerlund else 89625e9cd1aeSAssar Westerlund # fast_install is set to needless 89635e9cd1aeSAssar Westerlund relink_command= 89645e9cd1aeSAssar Westerlund fi 89655e9cd1aeSAssar Westerlund else 89665e9cd1aeSAssar Westerlund link_command="$compile_var$compile_command$compile_rpath" 89675e9cd1aeSAssar Westerlund relink_command="$finalize_var$finalize_command$finalize_rpath" 89685e9cd1aeSAssar Westerlund fi 8969b528cefcSMark Murray fi 8970b528cefcSMark Murray 89715e9cd1aeSAssar Westerlund # Replace the output file specification. 8972*ae771770SStanislav Sedov link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 89735e9cd1aeSAssar Westerlund 89745e9cd1aeSAssar Westerlund # Delete the old output files. 8975*ae771770SStanislav Sedov $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 89765e9cd1aeSAssar Westerlund 8977*ae771770SStanislav Sedov func_show_eval "$link_command" 'exit $?' 8978*ae771770SStanislav Sedov 8979*ae771770SStanislav Sedov if test -n "$postlink_cmds"; then 8980*ae771770SStanislav Sedov func_to_tool_file "$output_objdir/$outputname" 8981*ae771770SStanislav Sedov 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'` 8982*ae771770SStanislav Sedov func_execute_cmds "$postlink_cmds" 'exit $?' 8983*ae771770SStanislav Sedov fi 8984b528cefcSMark Murray 8985b528cefcSMark Murray # Now create the wrapper script. 8986*ae771770SStanislav Sedov func_verbose "creating $output" 8987b528cefcSMark Murray 89885e9cd1aeSAssar Westerlund # Quote the relink command for shipping. 89895e9cd1aeSAssar Westerlund if test -n "$relink_command"; then 89905e9cd1aeSAssar Westerlund # Preserve any variables that may affect compiler behavior 89915e9cd1aeSAssar Westerlund for var in $variables_saved_for_relink; do 89924137ff4cSJacques Vidrine if eval test -z \"\${$var+set}\"; then 8993*ae771770SStanislav Sedov relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 89944137ff4cSJacques Vidrine elif eval var_value=\$$var; test -z "$var_value"; then 89954137ff4cSJacques Vidrine relink_command="$var=; export $var; $relink_command" 89964137ff4cSJacques Vidrine else 8997*ae771770SStanislav Sedov func_quote_for_eval "$var_value" 8998*ae771770SStanislav Sedov relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 89994137ff4cSJacques Vidrine fi 90005e9cd1aeSAssar Westerlund done 90011c43270aSJacques Vidrine relink_command="(cd `pwd`; $relink_command)" 9002*ae771770SStanislav Sedov relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 90035e9cd1aeSAssar Westerlund fi 9004b528cefcSMark Murray 9005*ae771770SStanislav Sedov # Only actually do things if not in dry run mode. 9006*ae771770SStanislav Sedov $opt_dry_run || { 90075e9cd1aeSAssar Westerlund # win32 will think the script is a binary if it has 90085e9cd1aeSAssar Westerlund # a .exe suffix, so we strip it off here. 90095e9cd1aeSAssar Westerlund case $output in 9010*ae771770SStanislav Sedov *.exe) func_stripname '' '.exe' "$output" 9011*ae771770SStanislav Sedov output=$func_stripname_result ;; 90125e9cd1aeSAssar Westerlund esac 90134137ff4cSJacques Vidrine # test for cygwin because mv fails w/o .exe extensions 90144137ff4cSJacques Vidrine case $host in 90151c43270aSJacques Vidrine *cygwin*) 90161c43270aSJacques Vidrine exeext=.exe 9017*ae771770SStanislav Sedov func_stripname '' '.exe' "$outputname" 9018*ae771770SStanislav Sedov outputname=$func_stripname_result ;; 90194137ff4cSJacques Vidrine *) exeext= ;; 90204137ff4cSJacques Vidrine esac 90211c43270aSJacques Vidrine case $host in 90221c43270aSJacques Vidrine *cygwin* | *mingw* ) 9023*ae771770SStanislav Sedov func_dirname_and_basename "$output" "" "." 9024*ae771770SStanislav Sedov output_name=$func_basename_result 9025*ae771770SStanislav Sedov output_path=$func_dirname_result 9026c19800e8SDoug Rabson cwrappersource="$output_path/$objdir/lt-$output_name.c" 9027c19800e8SDoug Rabson cwrapper="$output_path/$output_name.exe" 9028*ae771770SStanislav Sedov $RM $cwrappersource $cwrapper 9029*ae771770SStanislav Sedov trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 90301c43270aSJacques Vidrine 9031*ae771770SStanislav Sedov func_emit_cwrapperexe_src > $cwrappersource 90321c43270aSJacques Vidrine 9033*ae771770SStanislav Sedov # The wrapper executable is built using the $host compiler, 9034*ae771770SStanislav Sedov # because it contains $host paths and files. If cross- 9035*ae771770SStanislav Sedov # compiling, it, like the target executable, must be 9036*ae771770SStanislav Sedov # executed on the $host or under an emulation environment. 9037*ae771770SStanislav Sedov $opt_dry_run || { 9038*ae771770SStanislav Sedov $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 9039*ae771770SStanislav Sedov $STRIP $cwrapper 9040c19800e8SDoug Rabson } 9041c19800e8SDoug Rabson 9042*ae771770SStanislav Sedov # Now, create the wrapper script for func_source use: 9043*ae771770SStanislav Sedov func_ltwrapper_scriptname $cwrapper 9044*ae771770SStanislav Sedov $RM $func_ltwrapper_scriptname_result 9045*ae771770SStanislav Sedov trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 9046*ae771770SStanislav Sedov $opt_dry_run || { 9047*ae771770SStanislav Sedov # note: this script will not be executed, so do not chmod. 9048*ae771770SStanislav Sedov if test "x$build" = "x$host" ; then 9049*ae771770SStanislav Sedov $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 9050*ae771770SStanislav Sedov else 9051*ae771770SStanislav Sedov func_emit_wrapper no > $func_ltwrapper_scriptname_result 9052*ae771770SStanislav Sedov fi 9053*ae771770SStanislav Sedov } 9054c19800e8SDoug Rabson ;; 9055c19800e8SDoug Rabson * ) 9056*ae771770SStanislav Sedov $RM $output 9057*ae771770SStanislav Sedov trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 90581c43270aSJacques Vidrine 9059*ae771770SStanislav Sedov func_emit_wrapper no > $output 9060b528cefcSMark Murray chmod +x $output 9061*ae771770SStanislav Sedov ;; 9062*ae771770SStanislav Sedov esac 9063*ae771770SStanislav Sedov } 9064c19800e8SDoug Rabson exit $EXIT_SUCCESS 9065b528cefcSMark Murray ;; 9066b528cefcSMark Murray esac 9067b528cefcSMark Murray 9068b528cefcSMark Murray # See if we need to build an old-fashioned archive. 9069b528cefcSMark Murray for oldlib in $oldlibs; do 9070b528cefcSMark Murray 9071b528cefcSMark Murray if test "$build_libtool_libs" = convenience; then 9072*ae771770SStanislav Sedov oldobjs="$libobjs_save $symfileobj" 9073b528cefcSMark Murray addlibs="$convenience" 9074b528cefcSMark Murray build_libtool_libs=no 9075b528cefcSMark Murray else 90765e9cd1aeSAssar Westerlund if test "$build_libtool_libs" = module; then 90775e9cd1aeSAssar Westerlund oldobjs="$libobjs_save" 90785e9cd1aeSAssar Westerlund build_libtool_libs=no 90795e9cd1aeSAssar Westerlund else 90801c43270aSJacques Vidrine oldobjs="$old_deplibs $non_pic_objects" 9081*ae771770SStanislav Sedov if test "$preload" = yes && test -f "$symfileobj"; then 9082*ae771770SStanislav Sedov func_append oldobjs " $symfileobj" 9083*ae771770SStanislav Sedov fi 90845e9cd1aeSAssar Westerlund fi 9085b528cefcSMark Murray addlibs="$old_convenience" 9086b528cefcSMark Murray fi 9087b528cefcSMark Murray 90885e9cd1aeSAssar Westerlund if test -n "$addlibs"; then 90895e9cd1aeSAssar Westerlund gentop="$output_objdir/${outputname}x" 9090*ae771770SStanislav Sedov func_append generated " $gentop" 90915e9cd1aeSAssar Westerlund 9092c19800e8SDoug Rabson func_extract_archives $gentop $addlibs 9093*ae771770SStanislav Sedov func_append oldobjs " $func_extract_archives_result" 90945e9cd1aeSAssar Westerlund fi 9095b528cefcSMark Murray 9096b528cefcSMark Murray # Do each command in the archive commands. 9097b528cefcSMark Murray if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 90981c43270aSJacques Vidrine cmds=$old_archive_from_new_cmds 9099b528cefcSMark Murray else 9100*ae771770SStanislav Sedov 9101*ae771770SStanislav Sedov # Add any objects from preloaded convenience libraries 9102*ae771770SStanislav Sedov if test -n "$dlprefiles"; then 9103*ae771770SStanislav Sedov gentop="$output_objdir/${outputname}x" 9104*ae771770SStanislav Sedov func_append generated " $gentop" 9105*ae771770SStanislav Sedov 9106*ae771770SStanislav Sedov func_extract_archives $gentop $dlprefiles 9107*ae771770SStanislav Sedov func_append oldobjs " $func_extract_archives_result" 9108*ae771770SStanislav Sedov fi 9109*ae771770SStanislav Sedov 9110c19800e8SDoug Rabson # POSIX demands no paths to be encoded in archives. We have 9111c19800e8SDoug Rabson # to avoid creating archives with duplicate basenames if we 9112c19800e8SDoug Rabson # might have to extract them afterwards, e.g., when creating a 9113c19800e8SDoug Rabson # static archive out of a convenience library, or when linking 9114c19800e8SDoug Rabson # the entirety of a libtool archive into another (currently 9115c19800e8SDoug Rabson # not supported by libtool). 9116c19800e8SDoug Rabson if (for obj in $oldobjs 9117c19800e8SDoug Rabson do 9118*ae771770SStanislav Sedov func_basename "$obj" 9119*ae771770SStanislav Sedov $ECHO "$func_basename_result" 9120c19800e8SDoug Rabson done | sort | sort -uc >/dev/null 2>&1); then 9121c19800e8SDoug Rabson : 9122c19800e8SDoug Rabson else 9123*ae771770SStanislav Sedov echo "copying selected object files to avoid basename conflicts..." 9124c19800e8SDoug Rabson gentop="$output_objdir/${outputname}x" 9125*ae771770SStanislav Sedov func_append generated " $gentop" 9126*ae771770SStanislav Sedov func_mkdir_p "$gentop" 9127c19800e8SDoug Rabson save_oldobjs=$oldobjs 9128c19800e8SDoug Rabson oldobjs= 9129c19800e8SDoug Rabson counter=1 9130c19800e8SDoug Rabson for obj in $save_oldobjs 9131c19800e8SDoug Rabson do 9132*ae771770SStanislav Sedov func_basename "$obj" 9133*ae771770SStanislav Sedov objbase="$func_basename_result" 9134c19800e8SDoug Rabson case " $oldobjs " in 9135c19800e8SDoug Rabson " ") oldobjs=$obj ;; 9136c19800e8SDoug Rabson *[\ /]"$objbase "*) 9137c19800e8SDoug Rabson while :; do 9138c19800e8SDoug Rabson # Make sure we don't pick an alternate name that also 9139c19800e8SDoug Rabson # overlaps. 9140c19800e8SDoug Rabson newobj=lt$counter-$objbase 9141*ae771770SStanislav Sedov func_arith $counter + 1 9142*ae771770SStanislav Sedov counter=$func_arith_result 9143c19800e8SDoug Rabson case " $oldobjs " in 9144c19800e8SDoug Rabson *[\ /]"$newobj "*) ;; 9145c19800e8SDoug Rabson *) if test ! -f "$gentop/$newobj"; then break; fi ;; 9146c19800e8SDoug Rabson esac 9147c19800e8SDoug Rabson done 9148*ae771770SStanislav Sedov func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 9149*ae771770SStanislav Sedov func_append oldobjs " $gentop/$newobj" 9150c19800e8SDoug Rabson ;; 9151*ae771770SStanislav Sedov *) func_append oldobjs " $obj" ;; 9152c19800e8SDoug Rabson esac 9153c19800e8SDoug Rabson done 9154c19800e8SDoug Rabson fi 91551c43270aSJacques Vidrine eval cmds=\"$old_archive_cmds\" 91561c43270aSJacques Vidrine 9157*ae771770SStanislav Sedov func_len " $cmds" 9158*ae771770SStanislav Sedov len=$func_len_result 9159*ae771770SStanislav Sedov if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 9160*ae771770SStanislav Sedov cmds=$old_archive_cmds 9161*ae771770SStanislav Sedov elif test -n "$archiver_list_spec"; then 9162*ae771770SStanislav Sedov func_verbose "using command file archive linking..." 9163*ae771770SStanislav Sedov for obj in $oldobjs 9164*ae771770SStanislav Sedov do 9165*ae771770SStanislav Sedov func_to_tool_file "$obj" 9166*ae771770SStanislav Sedov $ECHO "$func_to_tool_file_result" 9167*ae771770SStanislav Sedov done > $output_objdir/$libname.libcmd 9168*ae771770SStanislav Sedov func_to_tool_file "$output_objdir/$libname.libcmd" 9169*ae771770SStanislav Sedov oldobjs=" $archiver_list_spec$func_to_tool_file_result" 91701c43270aSJacques Vidrine cmds=$old_archive_cmds 91715e9cd1aeSAssar Westerlund else 91721c43270aSJacques Vidrine # the command line is too long to link in one step, link in parts 9173*ae771770SStanislav Sedov func_verbose "using piecewise archive linking..." 91741c43270aSJacques Vidrine save_RANLIB=$RANLIB 91751c43270aSJacques Vidrine RANLIB=: 91761c43270aSJacques Vidrine objlist= 91771c43270aSJacques Vidrine concat_cmds= 91781c43270aSJacques Vidrine save_oldobjs=$oldobjs 9179*ae771770SStanislav Sedov oldobjs= 91801c43270aSJacques Vidrine # Is there a better way of finding the last object in the list? 91811c43270aSJacques Vidrine for obj in $save_oldobjs 91821c43270aSJacques Vidrine do 91831c43270aSJacques Vidrine last_oldobj=$obj 91841c43270aSJacques Vidrine done 9185*ae771770SStanislav Sedov eval test_cmds=\"$old_archive_cmds\" 9186*ae771770SStanislav Sedov func_len " $test_cmds" 9187*ae771770SStanislav Sedov len0=$func_len_result 9188*ae771770SStanislav Sedov len=$len0 91891c43270aSJacques Vidrine for obj in $save_oldobjs 91901c43270aSJacques Vidrine do 9191*ae771770SStanislav Sedov func_len " $obj" 9192*ae771770SStanislav Sedov func_arith $len + $func_len_result 9193*ae771770SStanislav Sedov len=$func_arith_result 9194*ae771770SStanislav Sedov func_append objlist " $obj" 9195*ae771770SStanislav Sedov if test "$len" -lt "$max_cmd_len"; then 91961c43270aSJacques Vidrine : 91971c43270aSJacques Vidrine else 91981c43270aSJacques Vidrine # the above command should be used before it gets too long 91991c43270aSJacques Vidrine oldobjs=$objlist 92001c43270aSJacques Vidrine if test "$obj" = "$last_oldobj" ; then 92011c43270aSJacques Vidrine RANLIB=$save_RANLIB 92021c43270aSJacques Vidrine fi 92031c43270aSJacques Vidrine test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 92041c43270aSJacques Vidrine eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 92051c43270aSJacques Vidrine objlist= 9206*ae771770SStanislav Sedov len=$len0 92075e9cd1aeSAssar Westerlund fi 92085e9cd1aeSAssar Westerlund done 92091c43270aSJacques Vidrine RANLIB=$save_RANLIB 92101c43270aSJacques Vidrine oldobjs=$objlist 92111c43270aSJacques Vidrine if test "X$oldobjs" = "X" ; then 92121c43270aSJacques Vidrine eval cmds=\"\$concat_cmds\" 92131c43270aSJacques Vidrine else 92141c43270aSJacques Vidrine eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 92151c43270aSJacques Vidrine fi 92161c43270aSJacques Vidrine fi 9217b528cefcSMark Murray fi 9218*ae771770SStanislav Sedov func_execute_cmds "$cmds" 'exit $?' 9219b528cefcSMark Murray done 9220b528cefcSMark Murray 9221*ae771770SStanislav Sedov test -n "$generated" && \ 9222*ae771770SStanislav Sedov func_show_eval "${RM}r$generated" 9223b528cefcSMark Murray 9224b528cefcSMark Murray # Now create the libtool archive. 92254137ff4cSJacques Vidrine case $output in 9226b528cefcSMark Murray *.la) 9227b528cefcSMark Murray old_library= 9228b528cefcSMark Murray test "$build_old_libs" = yes && old_library="$libname.$libext" 9229*ae771770SStanislav Sedov func_verbose "creating $output" 9230b528cefcSMark Murray 92315e9cd1aeSAssar Westerlund # Preserve any variables that may affect compiler behavior 92325e9cd1aeSAssar Westerlund for var in $variables_saved_for_relink; do 92334137ff4cSJacques Vidrine if eval test -z \"\${$var+set}\"; then 9234*ae771770SStanislav Sedov relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 92354137ff4cSJacques Vidrine elif eval var_value=\$$var; test -z "$var_value"; then 92364137ff4cSJacques Vidrine relink_command="$var=; export $var; $relink_command" 92374137ff4cSJacques Vidrine else 9238*ae771770SStanislav Sedov func_quote_for_eval "$var_value" 9239*ae771770SStanislav Sedov relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 92404137ff4cSJacques Vidrine fi 92415e9cd1aeSAssar Westerlund done 92425e9cd1aeSAssar Westerlund # Quote the link command for shipping. 9243c19800e8SDoug Rabson relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 9244*ae771770SStanislav Sedov relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 92451c43270aSJacques Vidrine if test "$hardcode_automatic" = yes ; then 92461c43270aSJacques Vidrine relink_command= 92471c43270aSJacques Vidrine fi 9248c19800e8SDoug Rabson 9249b528cefcSMark Murray # Only create the output if not a dry run. 9250*ae771770SStanislav Sedov $opt_dry_run || { 92515e9cd1aeSAssar Westerlund for installed in no yes; do 92525e9cd1aeSAssar Westerlund if test "$installed" = yes; then 92535e9cd1aeSAssar Westerlund if test -z "$install_libdir"; then 92545e9cd1aeSAssar Westerlund break 92555e9cd1aeSAssar Westerlund fi 92565e9cd1aeSAssar Westerlund output="$output_objdir/$outputname"i 92575e9cd1aeSAssar Westerlund # Replace all uninstalled libtool libraries with the installed ones 92585e9cd1aeSAssar Westerlund newdependency_libs= 92595e9cd1aeSAssar Westerlund for deplib in $dependency_libs; do 92604137ff4cSJacques Vidrine case $deplib in 92615e9cd1aeSAssar Westerlund *.la) 9262*ae771770SStanislav Sedov func_basename "$deplib" 9263*ae771770SStanislav Sedov name="$func_basename_result" 92641c43270aSJacques Vidrine eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 9265*ae771770SStanislav Sedov test -z "$libdir" && \ 9266*ae771770SStanislav Sedov func_fatal_error "\`$deplib' is not a valid libtool archive" 9267*ae771770SStanislav Sedov func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 92685e9cd1aeSAssar Westerlund ;; 9269*ae771770SStanislav Sedov -L*) 9270*ae771770SStanislav Sedov func_stripname -L '' "$deplib" 9271*ae771770SStanislav Sedov func_replace_sysroot "$func_stripname_result" 9272*ae771770SStanislav Sedov func_append newdependency_libs " -L$func_replace_sysroot_result" 9273*ae771770SStanislav Sedov ;; 9274*ae771770SStanislav Sedov -R*) 9275*ae771770SStanislav Sedov func_stripname -R '' "$deplib" 9276*ae771770SStanislav Sedov func_replace_sysroot "$func_stripname_result" 9277*ae771770SStanislav Sedov func_append newdependency_libs " -R$func_replace_sysroot_result" 9278*ae771770SStanislav Sedov ;; 9279*ae771770SStanislav Sedov *) func_append newdependency_libs " $deplib" ;; 92805e9cd1aeSAssar Westerlund esac 92815e9cd1aeSAssar Westerlund done 92825e9cd1aeSAssar Westerlund dependency_libs="$newdependency_libs" 92835e9cd1aeSAssar Westerlund newdlfiles= 9284*ae771770SStanislav Sedov 92855e9cd1aeSAssar Westerlund for lib in $dlfiles; do 9286*ae771770SStanislav Sedov case $lib in 9287*ae771770SStanislav Sedov *.la) 9288*ae771770SStanislav Sedov func_basename "$lib" 9289*ae771770SStanislav Sedov name="$func_basename_result" 92901c43270aSJacques Vidrine eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9291*ae771770SStanislav Sedov test -z "$libdir" && \ 9292*ae771770SStanislav Sedov func_fatal_error "\`$lib' is not a valid libtool archive" 9293*ae771770SStanislav Sedov func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 9294*ae771770SStanislav Sedov ;; 9295*ae771770SStanislav Sedov *) func_append newdlfiles " $lib" ;; 9296*ae771770SStanislav Sedov esac 92975e9cd1aeSAssar Westerlund done 92985e9cd1aeSAssar Westerlund dlfiles="$newdlfiles" 92995e9cd1aeSAssar Westerlund newdlprefiles= 93005e9cd1aeSAssar Westerlund for lib in $dlprefiles; do 9301*ae771770SStanislav Sedov case $lib in 9302*ae771770SStanislav Sedov *.la) 9303*ae771770SStanislav Sedov # Only pass preopened files to the pseudo-archive (for 9304*ae771770SStanislav Sedov # eventual linking with the app. that links it) if we 9305*ae771770SStanislav Sedov # didn't already link the preopened objects directly into 9306*ae771770SStanislav Sedov # the library: 9307*ae771770SStanislav Sedov func_basename "$lib" 9308*ae771770SStanislav Sedov name="$func_basename_result" 93091c43270aSJacques Vidrine eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9310*ae771770SStanislav Sedov test -z "$libdir" && \ 9311*ae771770SStanislav Sedov func_fatal_error "\`$lib' is not a valid libtool archive" 9312*ae771770SStanislav Sedov func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 9313*ae771770SStanislav Sedov ;; 9314*ae771770SStanislav Sedov esac 93155e9cd1aeSAssar Westerlund done 93165e9cd1aeSAssar Westerlund dlprefiles="$newdlprefiles" 93171c43270aSJacques Vidrine else 93181c43270aSJacques Vidrine newdlfiles= 93191c43270aSJacques Vidrine for lib in $dlfiles; do 93201c43270aSJacques Vidrine case $lib in 93211c43270aSJacques Vidrine [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 93221c43270aSJacques Vidrine *) abs=`pwd`"/$lib" ;; 93231c43270aSJacques Vidrine esac 9324*ae771770SStanislav Sedov func_append newdlfiles " $abs" 93251c43270aSJacques Vidrine done 93261c43270aSJacques Vidrine dlfiles="$newdlfiles" 93271c43270aSJacques Vidrine newdlprefiles= 93281c43270aSJacques Vidrine for lib in $dlprefiles; do 93291c43270aSJacques Vidrine case $lib in 93301c43270aSJacques Vidrine [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 93311c43270aSJacques Vidrine *) abs=`pwd`"/$lib" ;; 93321c43270aSJacques Vidrine esac 9333*ae771770SStanislav Sedov func_append newdlprefiles " $abs" 93341c43270aSJacques Vidrine done 93351c43270aSJacques Vidrine dlprefiles="$newdlprefiles" 93365e9cd1aeSAssar Westerlund fi 9337*ae771770SStanislav Sedov $RM $output 93384137ff4cSJacques Vidrine # place dlname in correct position for cygwin 9339*ae771770SStanislav Sedov # In fact, it would be nice if we could use this code for all target 9340*ae771770SStanislav Sedov # systems that can't hard-code library paths into their executables 9341*ae771770SStanislav Sedov # and that have no shared library path variable independent of PATH, 9342*ae771770SStanislav Sedov # but it turns out we can't easily determine that from inspecting 9343*ae771770SStanislav Sedov # libtool variables, so we have to hard-code the OSs to which it 9344*ae771770SStanislav Sedov # applies here; at the moment, that means platforms that use the PE 9345*ae771770SStanislav Sedov # object format with DLL files. See the long comment at the top of 9346*ae771770SStanislav Sedov # tests/bindir.at for full details. 93474137ff4cSJacques Vidrine tdlname=$dlname 93484137ff4cSJacques Vidrine case $host,$output,$installed,$module,$dlname in 9349*ae771770SStanislav Sedov *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 9350*ae771770SStanislav Sedov # If a -bindir argument was supplied, place the dll there. 9351*ae771770SStanislav Sedov if test "x$bindir" != x ; 9352*ae771770SStanislav Sedov then 9353*ae771770SStanislav Sedov func_relative_path "$install_libdir" "$bindir" 9354*ae771770SStanislav Sedov tdlname=$func_relative_path_result$dlname 9355*ae771770SStanislav Sedov else 9356*ae771770SStanislav Sedov # Otherwise fall back on heuristic. 9357*ae771770SStanislav Sedov tdlname=../bin/$dlname 9358*ae771770SStanislav Sedov fi 9359*ae771770SStanislav Sedov ;; 93604137ff4cSJacques Vidrine esac 9361*ae771770SStanislav Sedov $ECHO > $output "\ 93625e9cd1aeSAssar Westerlund# $outputname - a libtool library file 9363*ae771770SStanislav Sedov# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 93645e9cd1aeSAssar Westerlund# 93655e9cd1aeSAssar Westerlund# Please DO NOT delete this file! 93665e9cd1aeSAssar Westerlund# It is necessary for linking the library. 9367b528cefcSMark Murray 9368b528cefcSMark Murray# The name that we can dlopen(3). 93694137ff4cSJacques Vidrinedlname='$tdlname' 9370b528cefcSMark Murray 9371b528cefcSMark Murray# Names of this library. 9372b528cefcSMark Murraylibrary_names='$library_names' 9373b528cefcSMark Murray 9374b528cefcSMark Murray# The name of the static archive. 9375b528cefcSMark Murrayold_library='$old_library' 9376b528cefcSMark Murray 9377*ae771770SStanislav Sedov# Linker flags that can not go in dependency_libs. 9378*ae771770SStanislav Sedovinherited_linker_flags='$new_inherited_linker_flags' 9379*ae771770SStanislav Sedov 9380b528cefcSMark Murray# Libraries that this one depends upon. 9381b528cefcSMark Murraydependency_libs='$dependency_libs' 9382b528cefcSMark Murray 9383*ae771770SStanislav Sedov# Names of additional weak libraries provided by this library 9384*ae771770SStanislav Sedovweak_library_names='$weak_libs' 9385*ae771770SStanislav Sedov 9386b528cefcSMark Murray# Version information for $libname. 9387b528cefcSMark Murraycurrent=$current 9388b528cefcSMark Murrayage=$age 9389b528cefcSMark Murrayrevision=$revision 9390b528cefcSMark Murray 9391b528cefcSMark Murray# Is this an already installed library? 93925e9cd1aeSAssar Westerlundinstalled=$installed 93935e9cd1aeSAssar Westerlund 93941c43270aSJacques Vidrine# Should we warn about portability when linking against -modules? 93951c43270aSJacques Vidrineshouldnotlink=$module 93961c43270aSJacques Vidrine 93975e9cd1aeSAssar Westerlund# Files to dlopen/dlpreopen 93985e9cd1aeSAssar Westerlunddlopen='$dlfiles' 93995e9cd1aeSAssar Westerlunddlpreopen='$dlprefiles' 9400b528cefcSMark Murray 9401b528cefcSMark Murray# Directory that this library needs to be installed in: 94025e9cd1aeSAssar Westerlundlibdir='$install_libdir'" 94031c43270aSJacques Vidrine if test "$installed" = no && test "$need_relink" = yes; then 9404*ae771770SStanislav Sedov $ECHO >> $output "\ 94055e9cd1aeSAssar Westerlundrelink_command=\"$relink_command\"" 94065e9cd1aeSAssar Westerlund fi 94075e9cd1aeSAssar Westerlund done 9408*ae771770SStanislav Sedov } 9409b528cefcSMark Murray 9410b528cefcSMark Murray # Do a symbolic link so that the libtool archive can be found in 9411b528cefcSMark Murray # LD_LIBRARY_PATH before the program is installed. 9412*ae771770SStanislav Sedov func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 9413b528cefcSMark Murray ;; 9414b528cefcSMark Murray esac 9415c19800e8SDoug Rabson exit $EXIT_SUCCESS 9416c19800e8SDoug Rabson} 9417b528cefcSMark Murray 9418*ae771770SStanislav Sedov{ test "$opt_mode" = link || test "$opt_mode" = relink; } && 9419*ae771770SStanislav Sedov func_mode_link ${1+"$@"} 9420b528cefcSMark Murray 9421b528cefcSMark Murray 9422*ae771770SStanislav Sedov# func_mode_uninstall arg... 9423*ae771770SStanislav Sedovfunc_mode_uninstall () 9424*ae771770SStanislav Sedov{ 9425*ae771770SStanislav Sedov $opt_debug 9426*ae771770SStanislav Sedov RM="$nonopt" 9427b528cefcSMark Murray files= 94284137ff4cSJacques Vidrine rmforce= 94294137ff4cSJacques Vidrine exit_status=0 9430b528cefcSMark Murray 94315e9cd1aeSAssar Westerlund # This variable tells wrapper scripts just to set variables rather 94325e9cd1aeSAssar Westerlund # than running their programs. 94335e9cd1aeSAssar Westerlund libtool_install_magic="$magic" 94345e9cd1aeSAssar Westerlund 9435b528cefcSMark Murray for arg 9436b528cefcSMark Murray do 94374137ff4cSJacques Vidrine case $arg in 9438*ae771770SStanislav Sedov -f) func_append RM " $arg"; rmforce=yes ;; 9439*ae771770SStanislav Sedov -*) func_append RM " $arg" ;; 9440*ae771770SStanislav Sedov *) func_append files " $arg" ;; 9441b528cefcSMark Murray esac 9442b528cefcSMark Murray done 9443b528cefcSMark Murray 9444*ae771770SStanislav Sedov test -z "$RM" && \ 9445*ae771770SStanislav Sedov func_fatal_help "you must specify an RM program" 9446b528cefcSMark Murray 94474137ff4cSJacques Vidrine rmdirs= 94484137ff4cSJacques Vidrine 9449b528cefcSMark Murray for file in $files; do 9450*ae771770SStanislav Sedov func_dirname "$file" "" "." 9451*ae771770SStanislav Sedov dir="$func_dirname_result" 9452*ae771770SStanislav Sedov if test "X$dir" = X.; then 9453*ae771770SStanislav Sedov odir="$objdir" 94545e9cd1aeSAssar Westerlund else 9455*ae771770SStanislav Sedov odir="$dir/$objdir" 94565e9cd1aeSAssar Westerlund fi 9457*ae771770SStanislav Sedov func_basename "$file" 9458*ae771770SStanislav Sedov name="$func_basename_result" 9459*ae771770SStanislav Sedov test "$opt_mode" = uninstall && odir="$dir" 9460b528cefcSMark Murray 9461*ae771770SStanislav Sedov # Remember odir for removal later, being careful to avoid duplicates 9462*ae771770SStanislav Sedov if test "$opt_mode" = clean; then 94634137ff4cSJacques Vidrine case " $rmdirs " in 9464*ae771770SStanislav Sedov *" $odir "*) ;; 9465*ae771770SStanislav Sedov *) func_append rmdirs " $odir" ;; 94664137ff4cSJacques Vidrine esac 94674137ff4cSJacques Vidrine fi 94684137ff4cSJacques Vidrine 94694137ff4cSJacques Vidrine # Don't error if the file doesn't exist and rm -f was used. 9470*ae771770SStanislav Sedov if { test -L "$file"; } >/dev/null 2>&1 || 9471*ae771770SStanislav Sedov { test -h "$file"; } >/dev/null 2>&1 || 9472*ae771770SStanislav Sedov test -f "$file"; then 94734137ff4cSJacques Vidrine : 94744137ff4cSJacques Vidrine elif test -d "$file"; then 94754137ff4cSJacques Vidrine exit_status=1 94764137ff4cSJacques Vidrine continue 94774137ff4cSJacques Vidrine elif test "$rmforce" = yes; then 94784137ff4cSJacques Vidrine continue 94794137ff4cSJacques Vidrine fi 94804137ff4cSJacques Vidrine 9481b528cefcSMark Murray rmfiles="$file" 9482b528cefcSMark Murray 94834137ff4cSJacques Vidrine case $name in 9484b528cefcSMark Murray *.la) 9485b528cefcSMark Murray # Possibly a libtool archive, so verify it. 9486*ae771770SStanislav Sedov if func_lalib_p "$file"; then 9487*ae771770SStanislav Sedov func_source $dir/$name 9488b528cefcSMark Murray 9489b528cefcSMark Murray # Delete the libtool libraries and symlinks. 9490b528cefcSMark Murray for n in $library_names; do 9491*ae771770SStanislav Sedov func_append rmfiles " $odir/$n" 9492b528cefcSMark Murray done 9493*ae771770SStanislav Sedov test -n "$old_library" && func_append rmfiles " $odir/$old_library" 9494b528cefcSMark Murray 9495*ae771770SStanislav Sedov case "$opt_mode" in 9496c19800e8SDoug Rabson clean) 9497c19800e8SDoug Rabson case " $library_names " in 9498c19800e8SDoug Rabson *" $dlname "*) ;; 9499*ae771770SStanislav Sedov *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 9500c19800e8SDoug Rabson esac 9501*ae771770SStanislav Sedov test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 9502c19800e8SDoug Rabson ;; 9503c19800e8SDoug Rabson uninstall) 9504b528cefcSMark Murray if test -n "$library_names"; then 9505b528cefcSMark Murray # Do each command in the postuninstall commands. 9506*ae771770SStanislav Sedov func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9507b528cefcSMark Murray fi 9508b528cefcSMark Murray 9509b528cefcSMark Murray if test -n "$old_library"; then 9510b528cefcSMark Murray # Do each command in the old_postuninstall commands. 9511*ae771770SStanislav Sedov func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9512b528cefcSMark Murray fi 9513b528cefcSMark Murray # FIXME: should reinstall the best remaining shared library. 9514c19800e8SDoug Rabson ;; 9515c19800e8SDoug Rabson esac 95165e9cd1aeSAssar Westerlund fi 9517b528cefcSMark Murray ;; 9518b528cefcSMark Murray 9519b528cefcSMark Murray *.lo) 95201c43270aSJacques Vidrine # Possibly a libtool object, so verify it. 9521*ae771770SStanislav Sedov if func_lalib_p "$file"; then 95221c43270aSJacques Vidrine 95231c43270aSJacques Vidrine # Read the .lo file 9524*ae771770SStanislav Sedov func_source $dir/$name 95251c43270aSJacques Vidrine 95261c43270aSJacques Vidrine # Add PIC object to the list of files to remove. 9527*ae771770SStanislav Sedov if test -n "$pic_object" && 9528*ae771770SStanislav Sedov test "$pic_object" != none; then 9529*ae771770SStanislav Sedov func_append rmfiles " $dir/$pic_object" 95301c43270aSJacques Vidrine fi 95311c43270aSJacques Vidrine 95321c43270aSJacques Vidrine # Add non-PIC object to the list of files to remove. 9533*ae771770SStanislav Sedov if test -n "$non_pic_object" && 9534*ae771770SStanislav Sedov test "$non_pic_object" != none; then 9535*ae771770SStanislav Sedov func_append rmfiles " $dir/$non_pic_object" 95361c43270aSJacques Vidrine fi 9537b528cefcSMark Murray fi 9538b528cefcSMark Murray ;; 9539b528cefcSMark Murray 9540b528cefcSMark Murray *) 9541*ae771770SStanislav Sedov if test "$opt_mode" = clean ; then 95421c43270aSJacques Vidrine noexename=$name 95431c43270aSJacques Vidrine case $file in 95441c43270aSJacques Vidrine *.exe) 9545*ae771770SStanislav Sedov func_stripname '' '.exe' "$file" 9546*ae771770SStanislav Sedov file=$func_stripname_result 9547*ae771770SStanislav Sedov func_stripname '' '.exe' "$name" 9548*ae771770SStanislav Sedov noexename=$func_stripname_result 95491c43270aSJacques Vidrine # $file with .exe has already been added to rmfiles, 95501c43270aSJacques Vidrine # add $file without .exe 9551*ae771770SStanislav Sedov func_append rmfiles " $file" 95521c43270aSJacques Vidrine ;; 95531c43270aSJacques Vidrine esac 95545e9cd1aeSAssar Westerlund # Do a test to see if this is a libtool program. 9555*ae771770SStanislav Sedov if func_ltwrapper_p "$file"; then 9556*ae771770SStanislav Sedov if func_ltwrapper_executable_p "$file"; then 9557*ae771770SStanislav Sedov func_ltwrapper_scriptname "$file" 95585e9cd1aeSAssar Westerlund relink_command= 9559*ae771770SStanislav Sedov func_source $func_ltwrapper_scriptname_result 9560*ae771770SStanislav Sedov func_append rmfiles " $func_ltwrapper_scriptname_result" 9561*ae771770SStanislav Sedov else 9562*ae771770SStanislav Sedov relink_command= 9563*ae771770SStanislav Sedov func_source $dir/$noexename 9564*ae771770SStanislav Sedov fi 95655e9cd1aeSAssar Westerlund 95661c43270aSJacques Vidrine # note $name still contains .exe if it was in $file originally 95671c43270aSJacques Vidrine # as does the version of $file that was added into $rmfiles 9568*ae771770SStanislav Sedov func_append rmfiles " $odir/$name $odir/${name}S.${objext}" 95695e9cd1aeSAssar Westerlund if test "$fast_install" = yes && test -n "$relink_command"; then 9570*ae771770SStanislav Sedov func_append rmfiles " $odir/lt-$name" 95715e9cd1aeSAssar Westerlund fi 95721c43270aSJacques Vidrine if test "X$noexename" != "X$name" ; then 9573*ae771770SStanislav Sedov func_append rmfiles " $odir/lt-${noexename}.c" 95741c43270aSJacques Vidrine fi 95751c43270aSJacques Vidrine fi 95765e9cd1aeSAssar Westerlund fi 9577b528cefcSMark Murray ;; 9578b528cefcSMark Murray esac 9579*ae771770SStanislav Sedov func_show_eval "$RM $rmfiles" 'exit_status=1' 9580b528cefcSMark Murray done 95814137ff4cSJacques Vidrine 95824137ff4cSJacques Vidrine # Try to remove the ${objdir}s in the directories where we deleted files 95834137ff4cSJacques Vidrine for dir in $rmdirs; do 95844137ff4cSJacques Vidrine if test -d "$dir"; then 9585*ae771770SStanislav Sedov func_show_eval "rmdir $dir >/dev/null 2>&1" 95864137ff4cSJacques Vidrine fi 95874137ff4cSJacques Vidrine done 95884137ff4cSJacques Vidrine 95894137ff4cSJacques Vidrine exit $exit_status 9590*ae771770SStanislav Sedov} 9591b528cefcSMark Murray 9592*ae771770SStanislav Sedov{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && 9593*ae771770SStanislav Sedov func_mode_uninstall ${1+"$@"} 9594b528cefcSMark Murray 9595*ae771770SStanislav Sedovtest -z "$opt_mode" && { 9596*ae771770SStanislav Sedov help="$generic_help" 9597*ae771770SStanislav Sedov func_fatal_help "you must specify a MODE" 9598*ae771770SStanislav Sedov} 9599*ae771770SStanislav Sedov 9600*ae771770SStanislav Sedovtest -z "$exec_cmd" && \ 9601*ae771770SStanislav Sedov func_fatal_help "invalid operation mode \`$opt_mode'" 9602b528cefcSMark Murray 96038373020dSJacques Vidrineif test -n "$exec_cmd"; then 9604*ae771770SStanislav Sedov eval exec "$exec_cmd" 9605c19800e8SDoug Rabson exit $EXIT_FAILURE 96068373020dSJacques Vidrinefi 96078373020dSJacques Vidrine 9608*ae771770SStanislav Sedovexit $exit_status 9609b528cefcSMark Murray 9610b528cefcSMark Murray 96111c43270aSJacques Vidrine# The TAGs below are defined such that we never get into a situation 96121c43270aSJacques Vidrine# in which we disable both kinds of libraries. Given conflicting 96131c43270aSJacques Vidrine# choices, we go for a static library, that is the most portable, 96141c43270aSJacques Vidrine# since we can't tell whether shared libraries were disabled because 96151c43270aSJacques Vidrine# the user asked for that or because the platform doesn't support 96161c43270aSJacques Vidrine# them. This is particularly important on AIX, because we don't 96171c43270aSJacques Vidrine# support having both static and shared libraries enabled at the same 96181c43270aSJacques Vidrine# time on that platform, so we default to a shared-only configuration. 96191c43270aSJacques Vidrine# If a disable-shared tag is given, we'll fallback to a static-only 96201c43270aSJacques Vidrine# configuration. But we'll never go from static-only to shared-only. 96211c43270aSJacques Vidrine 96221c43270aSJacques Vidrine# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 9623*ae771770SStanislav Sedovbuild_libtool_libs=no 9624*ae771770SStanislav Sedovbuild_old_libs=yes 96251c43270aSJacques Vidrine# ### END LIBTOOL TAG CONFIG: disable-shared 96261c43270aSJacques Vidrine 96271c43270aSJacques Vidrine# ### BEGIN LIBTOOL TAG CONFIG: disable-static 9628*ae771770SStanislav Sedovbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 96291c43270aSJacques Vidrine# ### END LIBTOOL TAG CONFIG: disable-static 96301c43270aSJacques Vidrine 9631b528cefcSMark Murray# Local Variables: 9632b528cefcSMark Murray# mode:shell-script 9633b528cefcSMark Murray# sh-indentation:2 9634b528cefcSMark Murray# End: 9635*ae771770SStanislav Sedov# vi:sw=2 9636*ae771770SStanislav Sedov 9637