13aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Generated from ltmain.m4sh. 23aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 33aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# ltmain.sh (GNU libtool) 2.2.6 43aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 53aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 63aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. 73aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# This is free software; see the source for copying conditions. There is NO 83aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 93aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# GNU Libtool is free software; you can redistribute it and/or modify 113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# it under the terms of the GNU General Public License as published by 123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# the Free Software Foundation; either version 2 of the License, or 133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# (at your option) any later version. 143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# As a special exception to the GNU General Public License, 163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# if you distribute this file as part of a program or library that 173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# is built using GNU Libtool, you may include this file under the 183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# same distribution terms that you use for the rest of that program. 193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# GNU Libtool is distributed in the hope that it will be useful, but 213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# WITHOUT ANY WARRANTY; without even the implied warranty of 223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# General Public License for more details. 243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# You should have received a copy of the GNU General Public License 263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# along with GNU Libtool; see the file COPYING. If not, a copy 273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# can be downloaded from http://www.gnu.org/licenses/gpl.html, 283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# or obtained by writing to the Free Software Foundation, Inc., 293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Usage: $progname [OPTION]... [MODE-ARG]... 323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Provide generalized library-building support services. 343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# --config show all configuration variables 363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# --debug enable verbose shell tracing 373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# -n, --dry-run display commands without modifying any files 383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# --features display basic configuration information and exit 393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# --mode=MODE use operation mode MODE 403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# --preserve-dup-deps don't remove duplicate dependency libraries 413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# --quiet, --silent don't print informational messages 423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# --tag=TAG use configuration variables from tag TAG 433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# -v, --verbose print informational messages (default) 443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# --version print version information 453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# -h, --help print short or long help message 463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# MODE must be one of the following: 483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# clean remove files from the build directory 503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# compile compile a source file into a libtool object 513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# execute automatically set library path, then run a program 523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# finish complete the installation of libtool libraries 533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# install install libraries or executables 543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# link create a library or an executable 553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# uninstall remove libraries from an installed directory 563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# MODE-ARGS vary depending on the MODE. 583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# When reporting a bug, please describe a test case to reproduce it and 613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# include the following information: 623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# host-triplet: $host 643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# shell: $SHELL 653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# compiler: $LTCC 663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# compiler flags: $LTCFLAGS 673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# linker: $LD (gnu? $with_gnu_ld) 683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# $progname: (GNU libtool) 2.2.6 693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# automake: $automake_version 703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# autoconf: $autoconf_version 713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Report bugs to <bug-libtool@gnu.org>. 733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 743aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevPROGRAM=ltmain.sh 753aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevPACKAGE=libtool 763aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevVERSION=2.2.6 773aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevTIMESTAMP="" 783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevpackage_revision=1.3012 793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Be Bourne compatible 813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev emulate sh 833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev NULLCMD=: 843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # is contrary to our usage. Disable this feature. 863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev alias -g '${1+"$@"}'='"$@"' 873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev setopt NO_GLOB_SUBST 883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevelse 893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfi 913aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevBIN_SH=xpg4; export BIN_SH # for Tru64 923aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevDUALCASE=1; export DUALCASE # for MKS sh 933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# NLS nuisances: We save the old values to restore during execute mode. 953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Only set LANG and LC_ALL to C if already set. 963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# These must not be set unconditionally because not all systems understand 973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# e.g. LANG=C (notably SCO). 983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevlt_user_locale= 993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevlt_safe_locale= 1003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 1013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevdo 1023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "if test \"\${$lt_var+set}\" = set; then 1033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev save_$lt_var=\$$lt_var 1043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $lt_var=C 1053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev export $lt_var 1063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 1073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 1083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi" 1093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevdone 1103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev$lt_unset CDPATH 1123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev: ${CP="cp -f"} 1183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev: ${ECHO="echo"} 1193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev: ${EGREP="/bin/grep -E"} 1203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev: ${FGREP="/bin/grep -F"} 1213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev: ${GREP="/bin/grep"} 1223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev: ${LN_S="ln -s"} 1233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev: ${MAKE="make"} 1243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev: ${MKDIR="mkdir"} 1253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev: ${MV="mv -f"} 1263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev: ${RM="rm -f"} 1273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev: ${SED="/bin/sed"} 1283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 1293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev: ${Xsed="$SED -e 1s/^X//"} 1303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Global variables: 1323aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEXIT_SUCCESS=0 1333aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEXIT_FAILURE=1 1343aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 1353aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 1363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevexit_status=$EXIT_SUCCESS 1383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Make sure IFS has a sensible default 1403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevlt_nl=' 1413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev' 1423aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevIFS=" $lt_nl" 1433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevdirname="s,/[^/]*$,," 1453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevbasename="s,^.*/,," 1463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_dirname_and_basename file append nondir_replacement 1483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# perform func_basename and func_dirname in a single function 1493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# call: 1503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# dirname: Compute the dirname of FILE. If nonempty, 1513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# add APPEND to the result, otherwise set result 1523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# to NONDIR_REPLACEMENT. 1533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# value returned in "$func_dirname_result" 1543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# basename: Compute filename of FILE. 1553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# value retuned in "$func_basename_result" 1563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Implementation must be kept synchronized with func_dirname 1573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# and func_basename. For efficiency, we do not delegate to 1583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# those functions but instead duplicate the functionality here. 1593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_dirname_and_basename () 1603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 1613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Extract subdirectory from the argument. 1623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` 1633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$func_dirname_result" = "X${1}"; then 1643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_dirname_result="${3}" 1653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 1663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_dirname_result="$func_dirname_result${2}" 1673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 1683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` 1693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 1703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Generated shell functions inserted here. 1723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 1743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# is ksh but when the shell is invoked as "sh" and the current value of 1753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# the _XPG environment variable is not equal to 1 (one), the special 1763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# positional parameter $0, within a function call, is the name of the 1773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# function. 1783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevprogpath="$0" 1793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# The name of this program: 1813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# In the unlikely event $progname began with a '-', it would play havoc with 1823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_echo (imagine progname=-n), so we prepend ./ in that case: 1833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_dirname_and_basename "$progpath" 1843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevprogname=$func_basename_result 1853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevcase $progname in 1863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -*) progname=./$progname ;; 1873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevesac 1883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Make sure we have an absolute path for reexecution: 1903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevcase $progpath in 1913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev [\\/]*|[A-Za-z]:\\*) ;; 1923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *[\\/]*) 1933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev progdir=$func_dirname_result 1943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev progdir=`cd "$progdir" && pwd` 1953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev progpath="$progdir/$progname" 1963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 1973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 1983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev save_IFS="$IFS" 1993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS=: 2003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for progdir in $PATH; do 2013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS="$save_IFS" 2023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -x "$progdir/$progname" && break 2033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 2043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS="$save_IFS" 2053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$progdir" || progdir=`pwd` 2063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev progpath="$progdir/$progname" 2073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 2083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevesac 2093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 2103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Sed substitution that helps us do robust quoting. It backslashifies 2113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# metacharacters that are still active within double-quoted strings. 2123aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevXsed="${SED}"' -e 1s/^X//' 2133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 2143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 2153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Same as above, but do not quote variable references. 2163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 2173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 2183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Re-`\' parameter expansions in output of double_quote_subst that were 2193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 2203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# in input to double_quote_subst, that '$' was protected from expansion. 2213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Since each input `\' is now two `\'s, look for any number of runs of 2223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 2233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevbs='\\' 2243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevbs2='\\\\' 2253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevbs4='\\\\\\\\' 2263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevdollar='\$' 2273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevsed_double_backslash="\ 2283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s/$bs4/&\\ 2293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/g 2303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s/^$bs2$dollar/$bs&/ 2313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 2323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s/\n//g" 2333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 2343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Standard options: 2353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevopt_dry_run=false 2363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevopt_help=false 2373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevopt_quiet=false 2383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevopt_verbose=false 2393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevopt_warning=: 2403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 2413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_echo arg... 2423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Echo program name prefixed message, along with the current mode 2433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# name if it has been set yet. 2443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_echo () 2453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 2463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "$progname${mode+: }$mode: $*" 2473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 2483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 2493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_verbose arg... 2503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Echo program name prefixed message in verbose mode only. 2513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_verbose () 2523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 2533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_verbose && func_echo ${1+"$@"} 2543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 2553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # A bug in bash halts the script if the last line of a function 2563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # fails when set -e is in force, so we need another command to 2573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # work around that: 2583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev : 2593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 2603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 2613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_error arg... 2623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Echo program name prefixed message to standard error. 2633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_error () 2643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 2653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 2663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 2673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 2683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_warning arg... 2693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Echo program name prefixed warning message to standard error. 2703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_warning () 2713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 2723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 2733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 2743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # bash bug again: 2753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev : 2763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 2773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 2783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_fatal_error arg... 2793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Echo program name prefixed message to standard error, and exit. 2803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_fatal_error () 2813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 2823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_error ${1+"$@"} 2833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $EXIT_FAILURE 2843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 2853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 2863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_fatal_help arg... 2873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Echo program name prefixed message to standard error, followed by 2883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# a help hint, and exit. 2893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_fatal_help () 2903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 2913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_error ${1+"$@"} 2923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "$help" 2933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 2943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevhelp="Try \`$progname --help' for more information." ## default 2953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 2963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 2973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_grep expression filename 2983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Check whether EXPRESSION matches any line of FILENAME, without output. 2993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_grep () 3003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 3013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $GREP "$1" "$2" >/dev/null 2>&1 3023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 3033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_mkdir_p directory-path 3063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Make sure the entire path to DIRECTORY-PATH is available. 3073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_mkdir_p () 3083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 3093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_directory_path="$1" 3103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_dir_list= 3113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 3133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Protect directory names starting with `-' 3153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $my_directory_path in 3163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -*) my_directory_path="./$my_directory_path" ;; 3173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 3183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # While some portion of DIR does not yet exist... 3203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev while test ! -d "$my_directory_path"; do 3213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # ...make a list in topmost first order. Use a colon delimited 3223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # list incase some portion of path contains whitespace. 3233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_dir_list="$my_directory_path:$my_dir_list" 3243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # If the last portion added has no slash in it, the list is done 3263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $my_directory_path in */*) ;; *) break ;; esac 3273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # ...otherwise throw away the child directory and loop 3293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` 3303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 3313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` 3323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev save_mkdir_p_IFS="$IFS"; IFS=':' 3343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for my_dir in $my_dir_list; do 3353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS="$save_mkdir_p_IFS" 3363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # mkdir can fail with a `File exist' error if two processes 3373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # try to create one of the directories concurrently. Don't 3383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # stop in that case! 3393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $MKDIR "$my_dir" 2>/dev/null || : 3403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 3413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS="$save_mkdir_p_IFS" 3423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Bail out if we (or some other process) failed to create a directory. 3443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -d "$my_directory_path" || \ 3453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "Failed to create \`$1'" 3463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 3473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 3483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_mktempdir [string] 3513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Make a temporary directory that won't clash with other running 3523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# libtool processes, and avoids race conditions if possible. If 3533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# given, STRING is the basename for that directory. 3543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_mktempdir () 3553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 3563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_template="${TMPDIR-/tmp}/${1-$progname}" 3573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$opt_dry_run" = ":"; then 3593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Return a directory name, but don't create it in dry-run mode 3603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_tmpdir="${my_template}-$$" 3613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 3623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # If mktemp works, use that first and foremost 3643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 3653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test ! -d "$my_tmpdir"; then 3673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Failing that, at least try and use $RANDOM to avoid a race 3683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_tmpdir="${my_template}-${RANDOM-0}$$" 3693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev save_mktempdir_umask=`umask` 3713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev umask 0077 3723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $MKDIR "$my_tmpdir" 3733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev umask $save_mktempdir_umask 3743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 3753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # If we're not in dry-run mode, bomb out on failure 3773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -d "$my_tmpdir" || \ 3783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 3793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 3803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "X$my_tmpdir" | $Xsed 3823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 3833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_quote_for_eval arg 3863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Aesthetically quote ARG to be evaled later. 3873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 3883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# is double-quoted, suitable for a subsequent eval, whereas 3893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 3903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# which are still active within double quotes backslashified. 3913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_quote_for_eval () 3923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 3933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $1 in 3943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *[\\\`\"\$]*) 3953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; 3963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 3973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_eval_unquoted_result="$1" ;; 3983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 3993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $func_quote_for_eval_unquoted_result in 4013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Double-quote args containing shell metacharacters to delay 4023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # word splitting, command substitution and and variable 4033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # expansion for a subsequent eval. 4043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Many Bourne shells cannot handle close brackets correctly 4053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # in scan sets, so we specify it separately. 4063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 4073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 4083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 4093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 4103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 4113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 4123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 4133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_quote_for_expand arg 4163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Aesthetically quote ARG to be evaled later; same as above, 4173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# but do not quote variable references. 4183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_quote_for_expand () 4193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 4203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $1 in 4213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *[\\\`\"]*) 4223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_arg=`$ECHO "X$1" | $Xsed \ 4233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 4243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 4253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_arg="$1" ;; 4263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 4273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $my_arg in 4293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Double-quote args containing shell metacharacters to delay 4303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # word splitting and command substitution for a subsequent eval. 4313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Many Bourne shells cannot handle close brackets correctly 4323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # in scan sets, so we specify it separately. 4333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 4343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_arg="\"$my_arg\"" 4353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 4363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 4373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_expand_result="$my_arg" 4393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 4403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_show_eval cmd [fail_exp] 4433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 4443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 4453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# is given, then evaluate it. 4463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_show_eval () 4473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 4483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_cmd="$1" 4493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_fail_exp="${2-:}" 4503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ${opt_silent-false} || { 4523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_expand "$my_cmd" 4533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "func_echo $func_quote_for_expand_result" 4543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 4553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if ${opt_dry_run-false}; then :; else 4573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "$my_cmd" 4583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_status=$? 4593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$my_status" -eq 0; then :; else 4603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "(exit $my_status); $my_fail_exp" 4613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 4623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 4633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 4643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_show_eval_locale cmd [fail_exp] 4673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 4683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 4693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# is given, then evaluate it. Use the saved locale for evaluation. 4703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_show_eval_locale () 4713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 4723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_cmd="$1" 4733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_fail_exp="${2-:}" 4743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ${opt_silent-false} || { 4763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_expand "$my_cmd" 4773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "func_echo $func_quote_for_expand_result" 4783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 4793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if ${opt_dry_run-false}; then :; else 4813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "$lt_user_locale 4823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $my_cmd" 4833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_status=$? 4843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "$lt_safe_locale" 4853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$my_status" -eq 0; then :; else 4863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "(exit $my_status); $my_fail_exp" 4873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 4883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 4893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 4903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_version 4963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Echo version message to standard output and exit. 4973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_version () 4983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 4993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { 5003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s/^# // 5013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s/^# *$// 5023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 5033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev p 5043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev }' < "$progpath" 5053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $? 5063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 5073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 5083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_usage 5093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Echo short help message to standard output and exit. 5103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_usage () 5113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 5123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $SED -n '/^# Usage:/,/# -h/ { 5133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s/^# // 5143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s/^# *$// 5153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s/\$progname/'$progname'/ 5163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev p 5173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev }' < "$progpath" 5183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO 5193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "run \`$progname --help | more' for full usage" 5203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $? 5213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 5223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 5233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_help 5243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Echo long help message to standard output and exit. 5253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_help () 5263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 5273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $SED -n '/^# Usage:/,/# Report bugs to/ { 5283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s/^# // 5293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s/^# *$// 5303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s*\$progname*'$progname'* 5313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s*\$host*'"$host"'* 5323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s*\$SHELL*'"$SHELL"'* 5333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s*\$LTCC*'"$LTCC"'* 5343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s*\$LTCFLAGS*'"$LTCFLAGS"'* 5353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s*\$LD*'"$LD"'* 5363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s/\$with_gnu_ld/'"$with_gnu_ld"'/ 5373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ 5383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ 5393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev p 5403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev }' < "$progpath" 5413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $? 5423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 5433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 5443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_missing_arg argname 5453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Echo program name prefixed message to standard error and set global 5463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# exit_cmd. 5473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_missing_arg () 5483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 5493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_error "missing argument for $1" 5503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit_cmd=exit 5513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 5523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 5533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevexit_cmd=: 5543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 5553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 5563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 5573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 5583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 5593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Check that we have a working $ECHO. 5603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevif test "X$1" = X--no-reexec; then 5613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Discard the --no-reexec flag, and continue. 5623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 5633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevelif test "X$1" = X--fallback-echo; then 5643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Avoid inline document here, it may be left over 5653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev : 5663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevelif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then 5673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Yippee, $ECHO works! 5683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev : 5693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevelse 5703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Restart under the correct shell, and then maybe $ECHO will work. 5713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exec $SHELL "$progpath" --no-reexec ${1+"$@"} 5723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfi 5733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 5743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevif test "X$1" = X--fallback-echo; then 5753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # used as fallback echo 5763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 5773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat <<EOF 5783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev$* 5793aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF 5803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $EXIT_SUCCESS 5813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfi 5823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 5833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevmagic="%%%MAGIC variable%%%" 5843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevmagic_exe="%%%MAGIC EXE variable%%%" 5853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 5863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Global variables. 5873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# $mode is unset 5883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevnonopt= 5893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevexecute_dlfiles= 5903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevpreserve_args= 5913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevlo2o="s/\\.lo\$/.${objext}/" 5923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevo2lo="s/\\.${objext}\$/.lo/" 5933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevextracted_archives= 5943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevextracted_serial=0 5953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 5963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevopt_dry_run=false 5973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevopt_duplicate_deps=false 5983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevopt_silent=false 5993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevopt_debug=: 6003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 6013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# If this variable is set in any of the actions, the command in it 6023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# will be execed at the end. This prevents here-documents from being 6033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# left over by shells. 6043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevexec_cmd= 6053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 6063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_fatal_configuration arg... 6073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Echo program name prefixed message to standard error, followed by 6083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# a configuration failure hint, and exit. 6093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_fatal_configuration () 6103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 6113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_error ${1+"$@"} 6123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_error "See the $PACKAGE documentation for more information." 6133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "Fatal configuration error." 6143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 6153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 6163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 6173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_config 6183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Display the configuration for all the tags in this script. 6193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_config () 6203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 6213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev re_begincf='^# ### BEGIN LIBTOOL' 6223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev re_endcf='^# ### END LIBTOOL' 6233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 6243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Default configuration. 6253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 6263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 6273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Now print the configurations for the tags. 6283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for tagname in $taglist; do 6293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 6303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 6313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 6323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $? 6333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 6343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 6353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_features 6363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Display the features supported by this script. 6373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_features () 6383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 6393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "host: $host" 6403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_libtool_libs" = yes; then 6413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "enable shared libraries" 6423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 6433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "disable shared libraries" 6443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 6453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_old_libs" = yes; then 6463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "enable static libraries" 6473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 6483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "disable static libraries" 6493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 6503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 6513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $? 6523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 6533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 6543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_enable_tag tagname 6553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Verify that TAGNAME is valid, and either flag an error and exit, or 6563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 6573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# variable here. 6583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_enable_tag () 6593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 6603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Global variable: 6613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tagname="$1" 6623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 6633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 6643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 6653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sed_extractcf="/$re_begincf/,/$re_endcf/p" 6663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 6673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Validate tagname. 6683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $tagname in 6693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *[!-_A-Za-z0-9,/]*) 6703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "invalid tag name: $tagname" 6713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 6723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 6733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 6743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Don't test for the "default" C tag, as we know it's 6753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # there but not specially marked. 6763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $tagname in 6773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev CC) ;; 6783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 6793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 6803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev taglist="$taglist $tagname" 6813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 6823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Evaluate the configuration. Be careful to quote the path 6833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # and the sed script, to avoid splitting on whitespace, but 6843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # also don't use non-portable quotes within backquotes within 6853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # quotes we have to do it in 2 steps: 6863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 6873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "$extractedcf" 6883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 6893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_error "ignoring unknown tag $tagname" 6903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 6913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 6923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 6933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 6943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 6953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Parse options once, thoroughly. This comes as soon as possible in 6963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# the script to make things like `libtool --version' happen quickly. 6973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 6983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 6993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Shorthand for --mode=foo, only valid as the first argument 7003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $1 in 7013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev clean|clea|cle|cl) 7023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift; set dummy --mode clean ${1+"$@"}; shift 7033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 7043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile|compil|compi|comp|com|co|c) 7053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift; set dummy --mode compile ${1+"$@"}; shift 7063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 7073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev execute|execut|execu|exec|exe|ex|e) 7083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift; set dummy --mode execute ${1+"$@"}; shift 7093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 7103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finish|finis|fini|fin|fi|f) 7113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift; set dummy --mode finish ${1+"$@"}; shift 7123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 7133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev install|instal|insta|inst|ins|in|i) 7143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift; set dummy --mode install ${1+"$@"}; shift 7153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 7163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev link|lin|li|l) 7173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift; set dummy --mode link ${1+"$@"}; shift 7183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 7193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 7203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift; set dummy --mode uninstall ${1+"$@"}; shift 7213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 7223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 7233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 7243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Parse non-mode specific arguments: 7253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev while test "$#" -gt 0; do 7263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev opt="$1" 7273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 7283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 7293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $opt in 7303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev --config) func_config ;; 7313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 7323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev --debug) preserve_args="$preserve_args $opt" 7333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_echo "enabling shell trace mode" 7343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev opt_debug='set -x' 7353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_debug 7363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 7373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 7383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break 7393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev execute_dlfiles="$execute_dlfiles $1" 7403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 7413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 7423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 7433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev --dry-run | -n) opt_dry_run=: ;; 7443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev --features) func_features ;; 7453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev --finish) mode="finish" ;; 7463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 7473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break 7483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $1 in 7493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Valid mode arguments: 7503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev clean) ;; 7513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile) ;; 7523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev execute) ;; 7533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finish) ;; 7543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev install) ;; 7553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev link) ;; 7563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink) ;; 7573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev uninstall) ;; 7583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 7593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Catch anything else as an error 7603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) func_error "invalid argument for $opt" 7613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit_cmd=exit 7623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev break 7633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 7643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 7653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 7663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev mode="$1" 7673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 7683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 7693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 7703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev --preserve-dup-deps) 7713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev opt_duplicate_deps=: ;; 7723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 7733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev --quiet|--silent) preserve_args="$preserve_args $opt" 7743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev opt_silent=: 7753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 7763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 7773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev --verbose| -v) preserve_args="$preserve_args $opt" 7783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev opt_silent=false 7793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 7803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 7813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break 7823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev preserve_args="$preserve_args $opt $1" 7833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_enable_tag "$1" # tagname is set here 7843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 7853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 7863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 7873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Separate optargs to long options: 7883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -dlopen=*|--mode=*|--tag=*) 7893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_opt_split "$opt" 7903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} 7913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 7923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 7933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 7943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -\?|-h) func_usage ;; 7953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev --help) opt_help=: ;; 7963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev --version) func_version ;; 7973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 7983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -*) func_fatal_help "unrecognized option \`$opt'" ;; 7993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 8003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) nonopt="$opt" 8013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev break 8023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 8033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 8043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 8053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 8063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 8073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 8083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *cygwin* | *mingw* | *pw32* | *cegcc*) 8093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # don't eliminate duplications in $postdeps and $predeps 8103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev opt_duplicate_compiler_generated_deps=: 8113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 8123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 8133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev opt_duplicate_compiler_generated_deps=$opt_duplicate_deps 8143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 8153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 8163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 8173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Having warned about all mis-specified options, bail out if 8183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # anything was wrong. 8193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $exit_cmd $EXIT_FAILURE 8203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 8213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 8223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_check_version_match 8233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Ensure that we are using m4 macros, and libtool script from the same 8243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# release of libtool. 8253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_check_version_match () 8263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 8273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$package_revision" != "$macro_revision"; then 8283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$VERSION" != "$macro_version"; then 8293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$macro_version"; then 8303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat >&2 <<_LT_EOF 8313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 8323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev$progname: definition of this LT_INIT comes from an older release. 8333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 8343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev$progname: and run autoconf again. 8353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev_LT_EOF 8363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 8373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat >&2 <<_LT_EOF 8383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 8393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 8403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 8413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev$progname: and run autoconf again. 8423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev_LT_EOF 8433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 8443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 8453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat >&2 <<_LT_EOF 8463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 8473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev$progname: but the definition of this LT_INIT comes from revision $macro_revision. 8483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev$progname: You should recreate aclocal.m4 with macros from revision $package_revision 8493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev$progname: of $PACKAGE $VERSION and run autoconf again. 8503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev_LT_EOF 8513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 8523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 8533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $EXIT_MISMATCH 8543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 8553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 8563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 8573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 8583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## ----------- ## 8593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## Main. ## 8603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## ----------- ## 8613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 8623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev$opt_help || { 8633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Sanity checks first: 8643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_check_version_match 8653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 8663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 8673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_configuration "not configured to build any kind of library" 8683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 8693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 8703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -z "$mode" && func_fatal_error "error: you must specify a MODE." 8713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 8723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 8733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Darwin sucks 8743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval std_shrext=\"$shrext_cmds\" 8753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 8763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 8773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Only execute mode is allowed to have -dlopen flags. 8783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$execute_dlfiles" && test "$mode" != execute; then 8793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_error "unrecognized option \`-dlopen'" 8803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "$help" 1>&2 8813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $EXIT_FAILURE 8823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 8833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 8843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Change the help message to a mode-specific one. 8853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev generic_help="$help" 8863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev help="Try \`$progname --help --mode=$mode' for more information." 8873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 8883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 8893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 8903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_lalib_p file 8913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# True iff FILE is a libtool `.la' library or `.lo' object file. 8923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# This function is only a basic sanity check; it will hardly flush out 8933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# determined imposters. 8943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_lalib_p () 8953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 8963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -f "$1" && 8973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $SED -e 4q "$1" 2>/dev/null \ 8983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 8993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 9003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 9013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_lalib_unsafe_p file 9023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# True iff FILE is a libtool `.la' library or `.lo' object file. 9033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# This function implements the same check as func_lalib_p without 9043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# resorting to external programs. To this end, it redirects stdin and 9053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# closes it afterwards, without saving the original file descriptor. 9063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# As a safety measure, use it only where a negative result would be 9073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# fatal anyway. Works if `file' does not exist. 9083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_lalib_unsafe_p () 9093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 9103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lalib_p=no 9113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 9123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for lalib_p_l in 1 2 3 4 9133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 9143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev read lalib_p_line 9153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$lalib_p_line" in 9163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 9173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 9183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 9193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exec 0<&5 5<&- 9203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 9213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$lalib_p" = yes 9223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 9233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 9243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_ltwrapper_script_p file 9253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# True iff FILE is a libtool wrapper script 9263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# This function is only a basic sanity check; it will hardly flush out 9273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# determined imposters. 9283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_ltwrapper_script_p () 9293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 9303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_lalib_p "$1" 9313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 9323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 9333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_ltwrapper_executable_p file 9343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# True iff FILE is a libtool wrapper executable 9353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# This function is only a basic sanity check; it will hardly flush out 9363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# determined imposters. 9373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_ltwrapper_executable_p () 9383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 9393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_ltwrapper_exec_suffix= 9403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $1 in 9413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.exe) ;; 9423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) func_ltwrapper_exec_suffix=.exe ;; 9433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 9443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 9453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 9463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 9473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_ltwrapper_scriptname file 9483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Assumes file is an ltwrapper_executable 9493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# uses $file to determine the appropriate filename for a 9503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# temporary ltwrapper_script. 9513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_ltwrapper_scriptname () 9523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 9533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_ltwrapper_scriptname_result="" 9543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if func_ltwrapper_executable_p "$1"; then 9553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_dirname_and_basename "$1" "" "." 9563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname '' '.exe' "$func_basename_result" 9573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 9583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 9593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 9603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 9613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_ltwrapper_p file 9623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# True iff FILE is a libtool wrapper script or wrapper executable 9633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# This function is only a basic sanity check; it will hardly flush out 9643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# determined imposters. 9653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_ltwrapper_p () 9663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 9673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 9683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 9693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 9703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 9713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_execute_cmds commands fail_cmd 9723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Execute tilde-delimited COMMANDS. 9733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# If FAIL_CMD is given, eval that upon failure. 9743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# FAIL_CMD may read-access the current command in variable CMD! 9753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_execute_cmds () 9763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 9773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_debug 9783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev save_ifs=$IFS; IFS='~' 9793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for cmd in $1; do 9803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS=$save_ifs 9813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval cmd=\"$cmd\" 9823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval "$cmd" "${2-:}" 9833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 9843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS=$save_ifs 9853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 9863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 9873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 9883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_source file 9893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Source FILE, adding directory component if necessary. 9903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Note that it is not necessary on cygwin/mingw to append a dot to 9913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 9923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# behavior happens only for exec(3), not for open(2)! Also, sourcing 9933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# `FILE.' does not work on cygwin managed mounts. 9943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_source () 9953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 9963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_debug 9973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $1 in 9983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev */* | *\\*) . "$1" ;; 9993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) . "./$1" ;; 10003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 10013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 10023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 10033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 10043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_infer_tag arg 10053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Infer tagged configuration to use if any are available and 10063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# if one wasn't chosen via the "--tag" command line option. 10073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Only attempt this if the compiler in the base compile 10083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# command doesn't match the default compiler. 10093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# arg is usually of the form 'gcc ...' 10103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_infer_tag () 10113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 10123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_debug 10133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$available_tags" && test -z "$tagname"; then 10143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev CC_quoted= 10153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for arg in $CC; do 10163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_eval "$arg" 10173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev CC_quoted="$CC_quoted $func_quote_for_eval_result" 10183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 10193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $@ in 10203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Blanks in the command may have been stripped by the calling shell, 10213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # but not from the CC environment variable when configure was run. 10223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; 10233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Blanks at the start of $base_compile will cause this to fail 10243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # if we don't check for them as well. 10253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 10263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for z in $available_tags; do 10273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 10283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Evaluate the configuration. 10293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 10303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev CC_quoted= 10313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for arg in $CC; do 10323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Double-quote args containing other shell metacharacters. 10333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_eval "$arg" 10343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev CC_quoted="$CC_quoted $func_quote_for_eval_result" 10353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 10363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$@ " in 10373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) 10383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The compiler in the base compile command matches 10393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # the one in the tagged configuration. 10403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Assume this is the tagged configuration we want. 10413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tagname=$z 10423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev break 10433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 10443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 10453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 10463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 10473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # If $tagname still isn't set, then no tagged configuration 10483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # was found and let the user know that the "--tag" command 10493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # line option must be used. 10503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$tagname"; then 10513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_echo "unable to infer tagged configuration" 10523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "specify a tag with \`--tag'" 10533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# else 10543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_verbose "using $tagname tagged configuration" 10553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 10563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 10573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 10583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 10593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 10603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 10613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 10623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 10633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_write_libtool_object output_name pic_name nonpic_name 10643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Create a libtool object file (analogous to a ".la" file), 10653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# but don't create it if we're doing a dry run. 10663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_write_libtool_object () 10673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 10683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev write_libobj=${1} 10693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_libtool_libs" = yes; then 10703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev write_lobj=\'${2}\' 10713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 10723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev write_lobj=none 10733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 10743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 10753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_old_libs" = yes; then 10763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev write_oldobj=\'${3}\' 10773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 10783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev write_oldobj=none 10793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 10803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 10813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || { 10823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat >${write_libobj}T <<EOF 10833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# $write_libobj - a libtool object file 10843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 10853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 10863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Please DO NOT delete this file! 10873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# It is necessary for linking the library. 10883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 10893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Name of the PIC object. 10903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevpic_object=$write_lobj 10913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 10923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Name of the non-PIC object 10933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevnon_pic_object=$write_oldobj 10943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 10953aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF 10963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $MV "${write_libobj}T" "${write_libobj}" 10973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 10983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 10993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 11003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_mode_compile arg... 11013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_mode_compile () 11023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 11033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_debug 11043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Get the compilation command and the source file. 11053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev base_compile= 11063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev srcfile="$nonopt" # always keep a non-empty value in "srcfile" 11073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev suppress_opt=yes 11083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev suppress_output= 11093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg_mode=normal 11103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libobj= 11113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev later= 11123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev pie_flag= 11133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 11143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for arg 11153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 11163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $arg_mode in 11173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg ) 11183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # do not "continue". Instead, add this to base_compile 11193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lastarg="$arg" 11203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg_mode=normal 11213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 11223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 11233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev target ) 11243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libobj="$arg" 11253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg_mode=normal 11263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 11273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 11283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 11293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev normal ) 11303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Accept any command-line options. 11313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $arg in 11323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -o) 11333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$libobj" && \ 11343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "you cannot specify \`-o' more than once" 11353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg_mode=target 11363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 11373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 11383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 11393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -pie | -fpie | -fPIE) 11403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev pie_flag="$pie_flag $arg" 11413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 11423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 11433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 11443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -shared | -static | -prefer-pic | -prefer-non-pic) 11453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev later="$later $arg" 11463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 11473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 11483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 11493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -no-suppress) 11503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev suppress_opt=no 11513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 11523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 11533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 11543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -Xcompiler) 11553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg_mode=arg # the next one goes into the "base_compile" arg list 11563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue # The current "srcfile" will either be retained or 11573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; # replaced later. I would guess that would be a bug. 11583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 11593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -Wc,*) 11603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname '-Wc,' '' "$arg" 11613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev args=$func_stripname_result 11623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lastarg= 11633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev save_ifs="$IFS"; IFS=',' 11643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for arg in $args; do 11653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS="$save_ifs" 11663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_eval "$arg" 11673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lastarg="$lastarg $func_quote_for_eval_result" 11683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 11693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS="$save_ifs" 11703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname ' ' '' "$lastarg" 11713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lastarg=$func_stripname_result 11723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 11733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Add the arguments to base_compile. 11743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev base_compile="$base_compile $lastarg" 11753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 11763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 11773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 11783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 11793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Accept the current argument as the source file. 11803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The previous "srcfile" becomes the current argument. 11813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # 11823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lastarg="$srcfile" 11833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev srcfile="$arg" 11843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 11853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac # case $arg 11863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 11873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac # case $arg_mode 11883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 11893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Aesthetically quote the previous argument. 11903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_eval "$lastarg" 11913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev base_compile="$base_compile $func_quote_for_eval_result" 11923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done # for arg 11933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 11943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $arg_mode in 11953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg) 11963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "you must specify an argument for -Xcompile" 11973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 11983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev target) 11993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "you must specify a target with \`-o'" 12003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 12013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 12023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Get the name of the library object. 12033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -z "$libobj" && { 12043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_basename "$srcfile" 12053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libobj="$func_basename_result" 12063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 12073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 12083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 12093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 12103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Recognize several different file suffixes. 12113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # If the user specifies -o file.o, it is replaced with file.lo 12123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $libobj in 12133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.[cCFSifmso] | \ 12143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.ada | *.adb | *.ads | *.asm | \ 12153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 12163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.[fF][09]? | *.for | *.java | *.obj | *.sx) 12173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_xform "$libobj" 12183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libobj=$func_xform_result 12193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 12203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 12213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 12223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $libobj in 12233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 12243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 12253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "cannot determine name of library object from \`$libobj'" 12263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 12273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 12283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 12293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_infer_tag $base_compile 12303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 12313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for arg in $later; do 12323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $arg in 12333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -shared) 12343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$build_libtool_libs" != yes && \ 12353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_configuration "can not build a shared library" 12363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev build_old_libs=no 12373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 12383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 12393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 12403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -static) 12413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev build_libtool_libs=no 12423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev build_old_libs=yes 12433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 12443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 12453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 12463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -prefer-pic) 12473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev pic_mode=yes 12483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 12493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 12503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 12513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -prefer-non-pic) 12523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev pic_mode=no 12533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 12543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 12553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 12563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 12573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 12583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_eval "$libobj" 12593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "X$libobj" != "X$func_quote_for_eval_result" \ 12603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 12613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev && func_warning "libobj name \`$libobj' may not contain shell special characters." 12623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_dirname_and_basename "$obj" "/" "" 12633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev objname="$func_basename_result" 12643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev xdir="$func_dirname_result" 12653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lobj=${xdir}$objdir/$objname 12663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 12673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -z "$base_compile" && \ 12683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_help "you must specify a compilation command" 12693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 12703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Delete any leftover library objects. 12713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_old_libs" = yes; then 12723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev removelist="$obj $lobj $libobj ${libobj}T" 12733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 12743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev removelist="$lobj $libobj ${libobj}T" 12753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 12763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 12773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # On Cygwin there's no "real" PIC flag so we must build both object types 12783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host_os in 12793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cygwin* | mingw* | pw32* | os2* | cegcc*) 12803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev pic_mode=default 12813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 12823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 12833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 12843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # non-PIC code in shared libraries is not supported 12853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev pic_mode=default 12863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 12873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 12883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Calculate the filename of the output object if compiler does 12893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # not support -o with -c 12903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$compiler_c_o" = no; then 12913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} 12923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lockfile="$output_obj.lock" 12933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 12943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev output_obj= 12953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev need_locks=no 12963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lockfile= 12973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 12983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 12993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Lock this critical section if it is needed 13003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # We use this script file to make the link, it avoids creating a new file 13013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$need_locks" = yes; then 13023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 13033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_echo "Waiting for $lockfile to be removed" 13043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sleep 2 13053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 13063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test "$need_locks" = warn; then 13073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -f "$lockfile"; then 13083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "\ 13093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev*** ERROR, $lockfile exists and contains: 13103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev`cat $lockfile 2>/dev/null` 13113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 13123aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevThis indicates that another process is trying to use the same 13133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtemporary object file, and libtool could not work around it because 13143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevyour compiler does not support \`-c' and \`-o' together. If you 13153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevrepeat this compilation, it may succeed, by chance, but you had better 13163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevavoid parallel builds (make -j) in this platform, or get a better 13173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevcompiler." 13183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 13193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || $RM $removelist 13203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $EXIT_FAILURE 13213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 13223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev removelist="$removelist $output_obj" 13233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "$srcfile" > "$lockfile" 13243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 13253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 13263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || $RM $removelist 13273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev removelist="$removelist $lockfile" 13283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 13293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 13303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$fix_srcfile_path"; then 13313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval srcfile=\"$fix_srcfile_path\" 13323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 13333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_eval "$srcfile" 13343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev qsrcfile=$func_quote_for_eval_result 13353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 13363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Only build a PIC object if we are building libtool libraries. 13373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_libtool_libs" = yes; then 13383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Without this assignment, base_compile gets emptied. 13393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fbsd_hideous_sh_bug=$base_compile 13403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 13413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$pic_mode" != no; then 13423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev command="$base_compile $qsrcfile $pic_flag" 13433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 13443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Don't build PIC code 13453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev command="$base_compile $qsrcfile" 13463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 13473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 13483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_mkdir_p "$xdir$objdir" 13493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 13503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$output_obj"; then 13513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Place PIC objects in $objdir 13523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev command="$command -o $lobj" 13533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 13543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 13553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval_locale "$command" \ 13563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 13573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 13583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$need_locks" = warn && 13593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 13603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "\ 13613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev*** ERROR, $lockfile contains: 13623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev`cat $lockfile 2>/dev/null` 13633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 13643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevbut it should contain: 13653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev$srcfile 13663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 13673aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevThis indicates that another process is trying to use the same 13683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtemporary object file, and libtool could not work around it because 13693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevyour compiler does not support \`-c' and \`-o' together. If you 13703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevrepeat this compilation, it may succeed, by chance, but you had better 13713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevavoid parallel builds (make -j) in this platform, or get a better 13723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevcompiler." 13733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 13743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || $RM $removelist 13753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $EXIT_FAILURE 13763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 13773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 13783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Just move the object if needed, then go on to compile the next one 13793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 13803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval '$MV "$output_obj" "$lobj"' \ 13813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 13823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 13833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 13843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Allow error messages only from the first compilation. 13853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$suppress_opt" = yes; then 13863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev suppress_output=' >/dev/null 2>&1' 13873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 13883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 13893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 13903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Only build a position-dependent object if we build old libraries. 13913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_old_libs" = yes; then 13923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$pic_mode" != yes; then 13933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Don't build PIC code 13943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev command="$base_compile $qsrcfile$pie_flag" 13953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 13963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev command="$base_compile $qsrcfile $pic_flag" 13973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 13983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$compiler_c_o" = yes; then 13993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev command="$command -o $obj" 14003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 14013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 14023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Suppress compiler output if we already did a PIC compilation. 14033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev command="$command$suppress_output" 14043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval_locale "$command" \ 14053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 14063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 14073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$need_locks" = warn && 14083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 14093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "\ 14103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev*** ERROR, $lockfile contains: 14113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev`cat $lockfile 2>/dev/null` 14123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 14133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevbut it should contain: 14143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev$srcfile 14153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 14163aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevThis indicates that another process is trying to use the same 14173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtemporary object file, and libtool could not work around it because 14183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevyour compiler does not support \`-c' and \`-o' together. If you 14193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevrepeat this compilation, it may succeed, by chance, but you had better 14203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevavoid parallel builds (make -j) in this platform, or get a better 14213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevcompiler." 14223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 14233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || $RM $removelist 14243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $EXIT_FAILURE 14253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 14263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 14273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Just move the object if needed 14283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 14293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval '$MV "$output_obj" "$obj"' \ 14303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 14313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 14323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 14333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 14343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || { 14353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 14363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 14373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Unlock the critical section if it was locked 14383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$need_locks" != no; then 14393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev removelist=$lockfile 14403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $RM "$lockfile" 14413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 14423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 14433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 14443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $EXIT_SUCCESS 14453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 14463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 14473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev$opt_help || { 14483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtest "$mode" = compile && func_mode_compile ${1+"$@"} 14493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 14503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 14513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_mode_help () 14523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 14533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # We need to display help for each of the modes. 14543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $mode in 14553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev "") 14563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Generic help is extracted from the usage comments 14573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # at the start of this file. 14583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_help 14593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 14603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 14613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev clean) 14623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO \ 14633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 14643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 14653aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevRemove files from the build directory. 14663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 14673aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevRM is the name of the program to use to delete files associated with each FILE 14683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 14693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevto RM. 14703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 14713aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevIf FILE is a libtool library, object or program, all the files associated 14723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevwith it are deleted. Otherwise, only FILE itself is deleted using RM." 14733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 14743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 14753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile) 14763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO \ 14773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 14783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 14793aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevCompile a source file into a libtool library object. 14803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 14813aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevThis mode accepts the following additional options: 14823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 14833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -o OUTPUT-FILE set the output file name to OUTPUT-FILE 14843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -no-suppress do not suppress compiler output for multiple passes 14853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -prefer-pic try to building PIC objects only 14863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -prefer-non-pic try to building non-PIC objects only 14873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -shared do not build a \`.o' file suitable for static linking 14883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -static only build a \`.o' file suitable for static linking 14893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 14903aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 14913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfrom the given SOURCEFILE. 14923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 14933aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevThe output file name is determined by removing the directory component from 14943aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevSOURCEFILE, then substituting the C source code suffix \`.c' with the 14953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevlibrary object suffix, \`.lo'." 14963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 14973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 14983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev execute) 14993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO \ 15003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 15013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15023aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevAutomatically set library path, then run a program. 15033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15043aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevThis mode accepts the following additional options: 15053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -dlopen FILE add the directory containing FILE to the library path 15073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15083aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevThis mode sets the library path environment variable according to \`-dlopen' 15093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevflags. 15103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15113aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevIf any of the ARGS are libtool executable wrappers, then they are translated 15123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevinto their corresponding uninstalled binary, and any of their required library 15133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevdirectories are added to the library path. 15143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15153aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevThen, COMMAND is executed, with ARGS as arguments." 15163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 15173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finish) 15193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO \ 15203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 15213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15223aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevComplete the installation of libtool libraries. 15233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15243aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEach LIBDIR is a directory that contains libtool libraries. 15253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15263aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevThe commands that this mode executes may require superuser privileges. Use 15273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevthe \`--dry-run' option if you just want to see what would be executed." 15283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 15293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev install) 15313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO \ 15323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 15333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15343aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevInstall executables or libraries. 15353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15363aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevINSTALL-COMMAND is the installation command. The first component should be 15373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulisheveither the \`install' or \`cp' program. 15383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15393aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevThe following components of INSTALL-COMMAND are treated specially: 15403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation 15423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15433aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevThe rest of the components are interpreted as arguments to that command (only 15443aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevBSD-compatible install options are recognized)." 15453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 15463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev link) 15483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO \ 15493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 15503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15513aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevLink object files or libraries together to form another library, or to 15523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevcreate an executable program. 15533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15543aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevLINK-COMMAND is a command using the C compiler that you would use to create 15553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulisheva program from several object files. 15563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15573aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevThe following components of LINK-COMMAND are treated specially: 15583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -all-static do not do any dynamic linking at all 15603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -avoid-version do not add a version suffix if possible 15613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 15623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 15633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 15643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -export-symbols SYMFILE 15653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev try to export only the symbols listed in SYMFILE 15663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -export-symbols-regex REGEX 15673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev try to export only the symbols matching REGEX 15683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -LLIBDIR search LIBDIR for required installed libraries 15693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -lNAME OUTPUT-FILE requires the installed library libNAME 15703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -module build a library that can dlopened 15713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -no-fast-install disable the fast-install mode 15723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -no-install link a not-installable executable 15733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -no-undefined declare that a library does not refer to external symbols 15743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 15753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -objectlist FILE Use a list of object files found in FILE to specify objects 15763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -precious-files-regex REGEX 15773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev don't remove output files matching REGEX 15783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -release RELEASE specify package release information 15793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -rpath LIBDIR the created library will eventually be installed in LIBDIR 15803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 15813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -shared only do dynamic linking of libtool libraries 15823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -shrext SUFFIX override the standard shared library file extension 15833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -static do not do any dynamic linking of uninstalled libtool libraries 15843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -static-libtool-libs 15853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do not do any dynamic linking of libtool libraries 15863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -version-info CURRENT[:REVISION[:AGE]] 15873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev specify library version info [each variable defaults to 0] 15883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -weak LIBNAME declare that the target provides the LIBNAME interface 15893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15903aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevAll other options (arguments beginning with \`-') are ignored. 15913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15923aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEvery other argument is treated as a filename. Files ending in \`.la' are 15933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtreated as uninstalled libtool libraries, other files are standard or library 15943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevobject files. 15953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 15963aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 15973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevonly library objects (\`.lo' files) may be specified, and \`-rpath' is 15983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevrequired, except when creating a convenience library. 15993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 16003aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 16013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevusing \`ar' and \`ranlib', or on Windows using \`lib'. 16023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 16033aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 16043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevis created, otherwise an executable program is created." 16053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 16063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 16073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev uninstall) 16083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO \ 16093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 16103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 16113aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevRemove libraries from an installation directory. 16123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 16133aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevRM is the name of the program to use to delete files associated with each FILE 16143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 16153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevto RM. 16163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 16173aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevIf FILE is a libtool library, all the files associated with it are deleted. 16183aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevOtherwise, only FILE itself is deleted using RM." 16193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 16203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 16213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 16223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_help "invalid operation mode \`$mode'" 16233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 16243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 16253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 16263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO 16273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "Try \`$progname --help' for more information about other modes." 16283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 16293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $? 16303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 16313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 16323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Now that we've collected a possible --mode arg, show help if necessary 16333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_help && func_mode_help 16343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 16353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 16363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_mode_execute arg... 16373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_mode_execute () 16383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 16393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_debug 16403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The first argument is the command name. 16413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cmd="$nonopt" 16423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -z "$cmd" && \ 16433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_help "you must specify a COMMAND" 16443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 16453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Handle -dlopen flags immediately. 16463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for file in $execute_dlfiles; do 16473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -f "$file" \ 16483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev || func_fatal_help "\`$file' is not a file" 16493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 16503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dir= 16513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $file in 16523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.la) 16533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Check to see that this really is a libtool archive. 16543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_lalib_unsafe_p "$file" \ 16553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev || func_fatal_help "\`$lib' is not a valid libtool archive" 16563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 16573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Read the libtool library. 16583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlname= 16593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev library_names= 16603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_source "$file" 16613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 16623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Skip this library if it cannot be dlopened. 16633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$dlname"; then 16643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Warn if it was a shared library. 16653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$library_names" && \ 16663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`$file' was not linked with \`-export-dynamic'" 16673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 16683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 16693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 16703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_dirname "$file" "" "." 16713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dir="$func_dirname_result" 16723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 16733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -f "$dir/$objdir/$dlname"; then 16743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dir="$dir/$objdir" 16753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 16763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test ! -f "$dir/$dlname"; then 16773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 16783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 16793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 16803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 16813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 16823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.lo) 16833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Just add the directory containing the .lo file. 16843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_dirname "$file" "" "." 16853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dir="$func_dirname_result" 16863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 16873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 16883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 16893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 16903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 16913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 16923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 16933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 16943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Get the absolute pathname. 16953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev absdir=`cd "$dir" && pwd` 16963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$absdir" && dir="$absdir" 16973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 16983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Now add the directory to shlibpath_var. 16993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if eval "test -z \"\$$shlibpath_var\""; then 17003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "$shlibpath_var=\"\$dir\"" 17013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 17023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 17033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 17043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 17053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 17063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # This variable tells wrapper scripts just to set shlibpath_var 17073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # rather than running their programs. 17083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libtool_execute_magic="$magic" 17093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 17103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Check if any of the arguments is a wrapper script. 17113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev args= 17123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for file 17133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 17143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $file in 17153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -*) ;; 17163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 17173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Do a test to see if this is really a libtool program. 17183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if func_ltwrapper_script_p "$file"; then 17193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_source "$file" 17203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Transform arg to wrapped name. 17213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev file="$progdir/$program" 17223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif func_ltwrapper_executable_p "$file"; then 17233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_ltwrapper_scriptname "$file" 17243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_source "$func_ltwrapper_scriptname_result" 17253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Transform arg to wrapped name. 17263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev file="$progdir/$program" 17273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 17283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 17293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 17303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Quote arguments (to preserve shell metacharacters). 17313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_eval "$file" 17323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev args="$args $func_quote_for_eval_result" 17333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 17343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 17353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$opt_dry_run" = Xfalse; then 17363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$shlibpath_var"; then 17373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Export the shlibpath_var. 17383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "export $shlibpath_var" 17393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 17403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 17413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Restore saved environment variables 17423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 17433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 17443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "if test \"\${save_$lt_var+set}\" = set; then 17453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $lt_var=\$save_$lt_var; export $lt_var 17463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 17473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $lt_unset $lt_var 17483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi" 17493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 17503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 17513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Now prepare to actually exec the command. 17523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exec_cmd="\$cmd$args" 17533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 17543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Display what would be done. 17553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$shlibpath_var"; then 17563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 17573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "export $shlibpath_var" 17583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 17593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "$cmd$args" 17603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $EXIT_SUCCESS 17613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 17623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 17633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 17643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtest "$mode" = execute && func_mode_execute ${1+"$@"} 17653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 17663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 17673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_mode_finish arg... 17683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_mode_finish () 17693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 17703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_debug 17713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libdirs="$nonopt" 17723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev admincmds= 17733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 17743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 17753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for dir 17763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 17773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libdirs="$libdirs $dir" 17783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 17793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 17803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for libdir in $libdirs; do 17813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$finish_cmds"; then 17823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Do each command in the finish commands. 17833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 17843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev'"$cmd"'"' 17853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 17863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$finish_eval"; then 17873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Do the single finish_eval. 17883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval cmds=\"$finish_eval\" 17893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || eval "$cmds" || admincmds="$admincmds 17903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $cmds" 17913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 17923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 17933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 17943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 17953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Exit here if they wanted silent mode. 17963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_silent && exit $EXIT_SUCCESS 17973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 17983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "X----------------------------------------------------------------------" | $Xsed 17993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "Libraries have been installed in:" 18003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for libdir in $libdirs; do 18013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO " $libdir" 18023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 18033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO 18043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "If you ever happen to want to link against installed libraries" 18053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "in a given directory, LIBDIR, you must either use libtool, and" 18063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" 18073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "flag during linking and do at least one of the following:" 18083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$shlibpath_var"; then 18093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" 18103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO " during execution" 18113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 18123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$runpath_var"; then 18133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" 18143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO " during linking" 18153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 18163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$hardcode_libdir_flag_spec"; then 18173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libdir=LIBDIR 18183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval flag=\"$hardcode_libdir_flag_spec\" 18193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 18203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO " - use the \`$flag' linker flag" 18213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 18223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$admincmds"; then 18233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO " - have your system administrator run these commands:$admincmds" 18243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 18253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -f /etc/ld.so.conf; then 18263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 18273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 18283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO 18293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 18303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "See any operating system documentation about shared libraries for" 18313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 18323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev solaris2.[6789]|solaris2.1[0-9]) 18333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" 18343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "pages." 18353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 18363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 18373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." 18383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 18393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 18403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "X----------------------------------------------------------------------" | $Xsed 18413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $EXIT_SUCCESS 18423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 18433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 18443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtest "$mode" = finish && func_mode_finish ${1+"$@"} 18453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 18463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 18473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_mode_install arg... 18483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_mode_install () 18493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 18503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_debug 18513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # There may be an optional sh(1) argument at the beginning of 18523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # install_prog (especially on Windows NT). 18533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 18543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Allow the use of GNU shtool's install command. 18553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "X$nonopt" | $GREP shtool >/dev/null; then 18563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Aesthetically quote it. 18573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_eval "$nonopt" 18583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev install_prog="$func_quote_for_eval_result " 18593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg=$1 18603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 18613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 18623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev install_prog= 18633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg=$nonopt 18643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 18653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 18663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The real first argument should be the name of the installation program. 18673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Aesthetically quote it. 18683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_eval "$arg" 18693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev install_prog="$install_prog$func_quote_for_eval_result" 18703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 18713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # We need to accept at least all the BSD install flags. 18723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dest= 18733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev files= 18743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev opts= 18753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 18763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev install_type= 18773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev isdir=no 18783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev stripme= 18793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for arg 18803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 18813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$dest"; then 18823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev files="$files $dest" 18833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dest=$arg 18843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 18853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 18863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 18873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $arg in 18883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -d) isdir=yes ;; 18893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -f) 18903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $install_prog " in 18913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *[\\\ /]cp\ *) ;; 18923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) prev=$arg ;; 18933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 18943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 18953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -g | -m | -o) 18963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev=$arg 18973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 18983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -s) 18993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev stripme=" -s" 19003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 19013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 19023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -*) 19033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 19043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 19053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # If the previous option needed an argument, then skip it. 19063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$prev"; then 19073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 19083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 19093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dest=$arg 19103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 19113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 19123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 19133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 19143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 19153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Aesthetically quote the argument. 19163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_eval "$arg" 19173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev install_prog="$install_prog $func_quote_for_eval_result" 19183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 19193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 19203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -z "$install_prog" && \ 19213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_help "you must specify an install program" 19223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 19233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$prev" && \ 19243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_help "the \`$prev' option requires an argument" 19253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 19263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$files"; then 19273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$dest"; then 19283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_help "no file or destination specified" 19293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 19303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_help "you must specify a destination" 19313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 19323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 19333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 19343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Strip any trailing slash from the destination. 19353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname '' '/' "$dest" 19363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dest=$func_stripname_result 19373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 19383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Check to see that the destination is a directory. 19393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -d "$dest" && isdir=yes 19403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$isdir" = yes; then 19413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev destdir="$dest" 19423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev destname= 19433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 19443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_dirname_and_basename "$dest" "" "." 19453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev destdir="$func_dirname_result" 19463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev destname="$func_basename_result" 19473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 19483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Not a directory, so check to see that there is only one file specified. 19493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev set dummy $files; shift 19503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$#" -gt 1 && \ 19513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_help "\`$dest' is not a directory" 19523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 19533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $destdir in 19543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev [\\/]* | [A-Za-z]:[\\/]*) ;; 19553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 19563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for file in $files; do 19573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $file in 19583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.lo) ;; 19593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 19603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_help "\`$destdir' must be an absolute directory name" 19613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 19623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 19633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 19643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 19653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 19663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 19673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # This variable tells wrapper scripts just to set variables rather 19683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # than running their programs. 19693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libtool_install_magic="$magic" 19703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 19713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev staticlibs= 19723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev future_libdirs= 19733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev current_libdirs= 19743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for file in $files; do 19753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 19763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Do each installation. 19773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $file in 19783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.$libext) 19793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Do the static libraries later. 19803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev staticlibs="$staticlibs $file" 19813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 19823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 19833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.la) 19843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Check to see that this really is a libtool archive. 19853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_lalib_unsafe_p "$file" \ 19863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev || func_fatal_help "\`$file' is not a valid libtool archive" 19873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 19883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev library_names= 19893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev old_library= 19903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink_command= 19913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_source "$file" 19923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 19933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Add the libdir to current_libdirs if it is the destination. 19943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$destdir" = "X$libdir"; then 19953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$current_libdirs " in 19963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $libdir "*) ;; 19973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) current_libdirs="$current_libdirs $libdir" ;; 19983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 19993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 20003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Note the libdir as a future libdir. 20013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$future_libdirs " in 20023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $libdir "*) ;; 20033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) future_libdirs="$future_libdirs $libdir" ;; 20043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 20053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 20063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 20073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_dirname "$file" "/" "" 20083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dir="$func_dirname_result" 20093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dir="$dir$objdir" 20103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 20113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$relink_command"; then 20123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Determine the prefix the user has applied to our future dir. 20133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` 20143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 20153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Don't allow the user to place us outside of our expected 20163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # location b/c this prevents finding dependent libraries that 20173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # are installed to the same prefix. 20183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # At present, this check doesn't affect windows .dll's that 20193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # are installed into $libdir/../bin (currently, that works fine) 20203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # but it's something to keep an eye on. 20213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$inst_prefix_dir" = "$destdir" && \ 20223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 20233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 20243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$inst_prefix_dir"; then 20253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Stick the inst_prefix_dir data into the link command. 20263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 20273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 20283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` 20293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 20303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 20313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "relinking \`$file'" 20323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval "$relink_command" \ 20333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 20343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 20353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 20363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # See the names of the shared library. 20373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev set dummy $library_names; shift 20383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$1"; then 20393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev realname="$1" 20403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 20413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 20423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev srcname="$realname" 20433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$relink_command" && srcname="$realname"T 20443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 20453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Install the shared library and build the symlinks. 20463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ 20473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 'exit $?' 20483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tstripme="$stripme" 20493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host_os in 20503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cygwin* | mingw* | pw32* | cegcc*) 20513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $realname in 20523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.dll.a) 20533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tstripme="" 20543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 20553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 20563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 20573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 20583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$tstripme" && test -n "$striplib"; then 20593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval "$striplib $destdir/$realname" 'exit $?' 20603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 20613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 20623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$#" -gt 0; then 20633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Delete the old symlinks, and create new ones. 20643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Try `ln -sf' first, because the `ln' binary might depend on 20653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # the symlink we replace! Solaris /bin/ln does not understand -f, 20663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # so we also need to try rm && ln -s. 20673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for linkname 20683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 20693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$linkname" != "$realname" \ 20703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 20713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 20723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 20733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 20743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Do each command in the postinstall commands. 20753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lib="$destdir/$realname" 20763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_execute_cmds "$postinstall_cmds" 'exit $?' 20773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 20783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 20793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Install the pseudo-library for information purposes. 20803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_basename "$file" 20813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev name="$func_basename_result" 20823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev instname="$dir/$name"i 20833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 20843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 20853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Maybe install the static library, too. 20863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" 20873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 20883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 20893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.lo) 20903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Install (i.e. copy) a libtool object. 20913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 20923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Figure out destination file name, if it wasn't already specified. 20933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$destname"; then 20943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev destfile="$destdir/$destname" 20953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 20963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_basename "$file" 20973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev destfile="$func_basename_result" 20983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev destfile="$destdir/$destfile" 20993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 21003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 21013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Deduce the name of the destination old-style object file. 21023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $destfile in 21033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.lo) 21043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_lo2o "$destfile" 21053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev staticdest=$func_lo2o_result 21063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 21073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.$objext) 21083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev staticdest="$destfile" 21093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev destfile= 21103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 21113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 21123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_help "cannot copy a libtool object to \`$destfile'" 21133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 21143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 21153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 21163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Install the libtool object if requested. 21173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$destfile" && \ 21183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval "$install_prog $file $destfile" 'exit $?' 21193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 21203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Install the old object if enabled. 21213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_old_libs" = yes; then 21223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Deduce the name of the old-style object file. 21233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_lo2o "$file" 21243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev staticobj=$func_lo2o_result 21253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 21263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 21273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $EXIT_SUCCESS 21283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 21293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 21303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 21313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Figure out destination file name, if it wasn't already specified. 21323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$destname"; then 21333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev destfile="$destdir/$destname" 21343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 21353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_basename "$file" 21363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev destfile="$func_basename_result" 21373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev destfile="$destdir/$destfile" 21383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 21393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 21403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # If the file is missing, and there is a .exe on the end, strip it 21413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # because it is most likely a libtool script we actually want to 21423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # install 21433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev stripped_ext="" 21443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $file in 21453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.exe) 21463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test ! -f "$file"; then 21473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname '' '.exe' "$file" 21483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev file=$func_stripname_result 21493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev stripped_ext=".exe" 21503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 21513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 21523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 21533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 21543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Do a test to see if this is really a libtool program. 21553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 21563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *cygwin* | *mingw*) 21573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if func_ltwrapper_executable_p "$file"; then 21583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_ltwrapper_scriptname "$file" 21593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev wrapper=$func_ltwrapper_scriptname_result 21603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 21613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname '' '.exe' "$file" 21623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev wrapper=$func_stripname_result 21633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 21643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 21653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 21663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev wrapper=$file 21673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 21683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 21693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if func_ltwrapper_script_p "$wrapper"; then 21703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev notinst_deplibs= 21713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink_command= 21723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 21733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_source "$wrapper" 21743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 21753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Check the variables that should have been set. 21763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -z "$generated_by_libtool_version" && \ 21773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "invalid libtool wrapper script \`$wrapper'" 21783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 21793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize=yes 21803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for lib in $notinst_deplibs; do 21813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Check to see that each library is installed. 21823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libdir= 21833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -f "$lib"; then 21843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_source "$lib" 21853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 21863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test 21873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$libdir" && test ! -f "$libfile"; then 21883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`$lib' has not been installed in \`$libdir'" 21893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize=no 21903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 21913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 21923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 21933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink_command= 21943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_source "$wrapper" 21953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 21963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev outputname= 21973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$fast_install" = no && test -n "$relink_command"; then 21983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || { 21993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$finalize" = yes; then 22003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmpdir=`func_mktempdir` 22013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_basename "$file$stripped_ext" 22023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev file="$func_basename_result" 22033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev outputname="$tmpdir/$file" 22043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Replace the output file specification. 22053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` 22063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 22073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_silent || { 22083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_expand "$relink_command" 22093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "func_echo $func_quote_for_expand_result" 22103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 22113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if eval "$relink_command"; then : 22123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 22133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_error "error: relink \`$file' with the above command before installing it" 22143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || ${RM}r "$tmpdir" 22153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 22163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 22173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev file="$outputname" 22183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 22193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "cannot relink \`$file'" 22203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 22213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 22223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 22233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Install the binary that we compiled earlier. 22243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` 22253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 22263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 22273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 22283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # remove .exe since cygwin /usr/bin/install will append another 22293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # one anyway 22303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $install_prog,$host in 22313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev */usr/bin/install*,*cygwin*) 22323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $file:$destfile in 22333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.exe:*.exe) 22343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # this is ok 22353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 22363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.exe:*) 22373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev destfile=$destfile.exe 22383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 22393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *:*.exe) 22403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname '' '.exe' "$destfile" 22413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev destfile=$func_stripname_result 22423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 22433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 22443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 22453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 22463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 22473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || if test -n "$outputname"; then 22483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ${RM}r "$tmpdir" 22493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 22503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 22513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 22523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 22533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 22543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for file in $staticlibs; do 22553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_basename "$file" 22563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev name="$func_basename_result" 22573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 22583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Set up the ranlib parameters. 22593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev oldlib="$destdir/$name" 22603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 22613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 22623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 22633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$stripme" && test -n "$old_striplib"; then 22643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval "$old_striplib $oldlib" 'exit $?' 22653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 22663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 22673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Do each command in the postinstall commands. 22683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_execute_cmds "$old_postinstall_cmds" 'exit $?' 22693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 22703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 22713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$future_libdirs" && \ 22723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "remember to run \`$progname --finish$future_libdirs'" 22733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 22743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$current_libdirs"; then 22753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Maybe just do a dry run. 22763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run && current_libdirs=" -n$current_libdirs" 22773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 22783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 22793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $EXIT_SUCCESS 22803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 22813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 22823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 22833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtest "$mode" = install && func_mode_install ${1+"$@"} 22843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 22853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 22863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_generate_dlsyms outputname originator pic_p 22873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Extract symbols from dlprefiles and create ${outputname}S.o with 22883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# a dlpreopen symbol table. 22893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_generate_dlsyms () 22903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 22913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_debug 22923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_outputname="$1" 22933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_originator="$2" 22943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_pic_p="${3-no}" 22953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 22963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_dlsyms= 22973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 22983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 22993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$NM" && test -n "$global_symbol_pipe"; then 23003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_dlsyms="${my_outputname}S.c" 23013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 23023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_error "not configured to extract global symbols from dlpreopened files" 23033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 23043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 23053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 23063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$my_dlsyms"; then 23073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $my_dlsyms in 23083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev "") ;; 23093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.c) 23103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Discover the nlist of each of the dlfiles. 23113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev nlist="$output_objdir/${my_outputname}.nm" 23123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 23133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 23143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 23153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Parse the name list into a source file. 23163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_verbose "creating $output_objdir/$my_dlsyms" 23173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 23183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 23193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 23203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 23213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 23223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifdef __cplusplus 23233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevextern \"C\" { 23243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif 23253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 23263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* External symbol declarations for the compiler. */\ 23273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev" 23283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 23293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$dlself" = yes; then 23303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_verbose "generating symbol list for \`$output'" 23313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 23323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 23333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 23343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Add our own program objects to the symbol list. 23353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 23363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for progfile in $progfiles; do 23373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_verbose "extracting global C symbols from \`$progfile'" 23383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" 23393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 23403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 23413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$exclude_expsyms"; then 23423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || { 23433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 23443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval '$MV "$nlist"T "$nlist"' 23453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 23463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 23473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 23483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$export_symbols_regex"; then 23493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || { 23503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 23513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval '$MV "$nlist"T "$nlist"' 23523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 23533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 23543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 23553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Prepare the list of exported symbols 23563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$export_symbols"; then 23573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev export_symbols="$output_objdir/$outputname.exp" 23583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || { 23593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $RM $export_symbols 23603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 23613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 23623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *cygwin* | *mingw* | *cegcc* ) 23633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 23643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 23653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 23663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 23673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 23683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 23693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || { 23703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 23713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 23723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval '$MV "$nlist"T "$nlist"' 23733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 23743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *cygwin | *mingw* | *cegcc* ) 23753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 23763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 23773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 23783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 23793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 23803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 23813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 23823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 23833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for dlprefile in $dlprefiles; do 23843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_verbose "extracting global C symbols from \`$dlprefile'" 23853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_basename "$dlprefile" 23863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev name="$func_basename_result" 23873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || { 23883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval '$ECHO ": $name " >> "$nlist"' 23893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" 23903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 23913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 23923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 23933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || { 23943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Make sure we have at least an empty file. 23953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -f "$nlist" || : > "$nlist" 23963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 23973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$exclude_expsyms"; then 23983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 23993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $MV "$nlist"T "$nlist" 24003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 24013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 24023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Try sorting and uniquifying the output. 24033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if $GREP -v "^: " < "$nlist" | 24043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if sort -k 3 </dev/null >/dev/null 2>&1; then 24053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sort -k 3 24063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 24073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sort +2 24083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi | 24093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev uniq > "$nlist"S; then 24103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev : 24113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 24123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $GREP -v "^: " < "$nlist" > "$nlist"S 24133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 24143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 24153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -f "$nlist"S; then 24163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 24173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 24183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" 24193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 24203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 24213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO >> "$output_objdir/$my_dlsyms" "\ 24223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 24233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* The mapping between symbol names and symbols. */ 24243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct { 24253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev const char *name; 24263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev void *address; 24273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} lt_dlsymlist; 24283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev" 24293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 24303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *cygwin* | *mingw* | *cegcc* ) 24313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO >> "$output_objdir/$my_dlsyms" "\ 24323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* DATA imports from DLLs on WIN32 con't be const, because 24333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev runtime relocations are performed -- see ld's documentation 24343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev on pseudo-relocs. */" 24353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_dlsym_const= ;; 24363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *osf5*) 24373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo >> "$output_objdir/$my_dlsyms" "\ 24383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* This system does not cope well with relocations in const data */" 24393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_dlsym_const= ;; 24403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 24413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_dlsym_const=const ;; 24423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 24433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 24443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO >> "$output_objdir/$my_dlsyms" "\ 24453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevextern $lt_dlsym_const lt_dlsymlist 24463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevlt_${my_prefix}_LTX_preloaded_symbols[]; 24473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev$lt_dlsym_const lt_dlsymlist 24483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevlt_${my_prefix}_LTX_preloaded_symbols[] = 24493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{\ 24503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { \"$my_originator\", (void *) 0 }," 24513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 24523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $need_lib_prefix in 24533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev no) 24543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 24553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 24563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 24573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 24583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 24593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 24603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO >> "$output_objdir/$my_dlsyms" "\ 24613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev {0, (void *) 0} 24623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev}; 24633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 24643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* This works around a problem in FreeBSD linker */ 24653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifdef FREEBSD_WORKAROUND 24663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstatic const void *lt_preloaded_setup() { 24673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return lt_${my_prefix}_LTX_preloaded_symbols; 24683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 24693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif 24703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 24713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifdef __cplusplus 24723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 24733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif\ 24743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev" 24753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } # !$opt_dry_run 24763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 24773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev pic_flag_for_symtable= 24783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$compile_command " in 24793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" -static "*) ;; 24803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 24813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 24823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # compiling the symbol table file with pic_flag works around 24833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # a FreeBSD bug that causes programs to crash when -lm is 24843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # linked before any other PIC object. But we must not use 24853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # pic_flag when linking with -static. The problem exists in 24863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 24873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 24883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 24893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-hpux*) 24903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev pic_flag_for_symtable=" $pic_flag" ;; 24913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 24923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$my_pic_p" != Xno; then 24933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev pic_flag_for_symtable=" $pic_flag" 24943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 24953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 24963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 24973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 24983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 24993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev symtab_cflags= 25003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for arg in $LTCFLAGS; do 25013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $arg in 25023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -pie | -fpie | -fPIE) ;; 25033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) symtab_cflags="$symtab_cflags $arg" ;; 25043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 25053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 25063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 25073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Now compile the dynamic symbol file. 25083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 25093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 25103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Clean up the generated files. 25113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 25123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 25133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Transform the symbol file into the correct name. 25143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev symfileobj="$output_objdir/${my_outputname}S.$objext" 25153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 25163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *cygwin* | *mingw* | *cegcc* ) 25173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -f "$output_objdir/$my_outputname.def"; then 25183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 25193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 25203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 25213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 25223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 25233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 25243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 25253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 25263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 25273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 25283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 25293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 25303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 25313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 25323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "unknown suffix for \`$my_dlsyms'" 25333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 25343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 25353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 25363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # We keep going just in case the user didn't refer to 25373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 25383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # really was required. 25393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 25403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Nullify the symbol file. 25413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` 25423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` 25433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 25443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 25453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 25463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_win32_libid arg 25473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# return the library type of file 'arg' 25483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 25493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Need a lot of goo to handle *both* DLLs and import libs 25503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Has to be a shell function in order to 'eat' the argument 25513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# that is supplied when $file_magic_command is called. 25523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_win32_libid () 25533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 25543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_debug 25553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev win32_libid_type="unknown" 25563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev win32_fileres=`file -L $1 2>/dev/null` 25573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $win32_fileres in 25583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *ar\ archive\ import\ library*) # definitely import 25593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev win32_libid_type="x86 archive import" 25603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 25613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *ar\ archive*) # could be an import, or static 25623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 25633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then 25643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev win32_nmres=`eval $NM -f posix -A $1 | 25653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $SED -n -e ' 25663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1,100{ 25673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev / I /{ 25683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s,.*,import, 25693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev p 25703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev q 25713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 25723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev }'` 25733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $win32_nmres in 25743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev import*) win32_libid_type="x86 archive import";; 25753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) win32_libid_type="x86 archive static";; 25763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 25773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 25783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 25793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *DLL*) 25803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev win32_libid_type="x86 DLL" 25813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 25823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *executable*) # but shell scripts are "executable" too... 25833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $win32_fileres in 25843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *MS\ Windows\ PE\ Intel*) 25853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev win32_libid_type="x86 DLL" 25863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 25873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 25883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 25893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 25903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "$win32_libid_type" 25913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 25923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 25933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 25943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 25953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_extract_an_archive dir oldlib 25963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_extract_an_archive () 25973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 25983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_debug 25993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev f_ex_an_ar_dir="$1"; shift 26003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev f_ex_an_ar_oldlib="$1" 26013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' 26023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 26033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev : 26043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 26053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 26063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 26073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 26083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 26093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 26103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_extract_archives gentop oldlib ... 26113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_extract_archives () 26123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 26133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_debug 26143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_gentop="$1"; shift 26153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_oldlibs=${1+"$@"} 26163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_oldobjs="" 26173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_xlib="" 26183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_xabs="" 26193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_xdir="" 26203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 26213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for my_xlib in $my_oldlibs; do 26223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Extract the objects. 26233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $my_xlib in 26243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 26253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) my_xabs=`pwd`"/$my_xlib" ;; 26263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 26273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_basename "$my_xlib" 26283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_xlib="$func_basename_result" 26293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_xlib_u=$my_xlib 26303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev while :; do 26313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $extracted_archives " in 26323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $my_xlib_u "*) 26333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_arith $extracted_serial + 1 26343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev extracted_serial=$func_arith_result 26353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_xlib_u=lt$extracted_serial-$my_xlib ;; 26363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) break ;; 26373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 26383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 26393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev extracted_archives="$extracted_archives $my_xlib_u" 26403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_xdir="$my_gentop/$my_xlib_u" 26413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 26423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_mkdir_p "$my_xdir" 26433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 26443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 26453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-darwin*) 26463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_verbose "Extracting $my_xabs" 26473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Do not bother doing anything if just a dry run 26483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || { 26493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev darwin_orig_dir=`pwd` 26503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cd $my_xdir || exit $? 26513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev darwin_archive=$my_xabs 26523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev darwin_curdir=`pwd` 26533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev darwin_base_archive=`basename "$darwin_archive"` 26543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 26553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$darwin_arches"; then 26563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 26573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev darwin_arch= 26583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 26593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for darwin_arch in $darwin_arches ; do 26603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 26613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 26623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 26633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_extract_an_archive "`pwd`" "${darwin_base_archive}" 26643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cd "$darwin_curdir" 26653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 26663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done # $darwin_arches 26673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ## Okay now we've a bunch of thin objects, gotta fatten them up :) 26683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 26693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev darwin_file= 26703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev darwin_files= 26713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for darwin_file in $darwin_filelist; do 26723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` 26733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $LIPO -create -output "$darwin_file" $darwin_files 26743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done # $darwin_filelist 26753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $RM -rf unfat-$$ 26763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cd "$darwin_orig_dir" 26773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 26783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cd $darwin_orig_dir 26793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_extract_an_archive "$my_xdir" "$my_xabs" 26803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi # $darwin_arches 26813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } # !$opt_dry_run 26823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 26833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 26843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_extract_an_archive "$my_xdir" "$my_xabs" 26853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 26863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 26873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` 26883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 26893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 26903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_extract_archives_result="$my_oldobjs" 26913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 26923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 26933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 26943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 26953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_emit_wrapper_part1 [arg=no] 26963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 26973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Emit the first part of a libtool wrapper script on stdout. 26983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# For more information, see the description associated with 26993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_emit_wrapper(), below. 27003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_emit_wrapper_part1 () 27013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 27023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_emit_wrapper_part1_arg1=no 27033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$1" ; then 27043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_emit_wrapper_part1_arg1=$1 27053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 27063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 27073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "\ 27083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#! $SHELL 27093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 27103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# $output - temporary wrapper script for $objdir/$outputname 27113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 27123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 27133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# The $output program cannot be directly executed until all the libtool 27143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# libraries that it depends on are installed. 27153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 27163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# This wrapper script should never be moved out of the build directory. 27173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# If it is, it will not operate correctly. 27183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 27193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Sed substitution that helps us do robust quoting. It backslashifies 27203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# metacharacters that are still active within double-quoted strings. 27213aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevXsed='${SED} -e 1s/^X//' 27223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevsed_quote_subst='$sed_quote_subst' 27233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 27243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Be Bourne compatible 27253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 27263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev emulate sh 27273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev NULLCMD=: 27283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 27293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # is contrary to our usage. Disable this feature. 27303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev alias -g '\${1+\"\$@\"}'='\"\$@\"' 27313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev setopt NO_GLOB_SUBST 27323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevelse 27333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 27343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfi 27353aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevBIN_SH=xpg4; export BIN_SH # for Tru64 27363aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevDUALCASE=1; export DUALCASE # for MKS sh 27373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 27383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# The HP-UX ksh and POSIX shell print the target directory to stdout 27393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# if CDPATH is set. 27403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 27413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 27423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevrelink_command=\"$relink_command\" 27433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 27443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# This environment variable determines our operation mode. 27453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevif test \"\$libtool_install_magic\" = \"$magic\"; then 27463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # install mode needs the following variables: 27473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev generated_by_libtool_version='$macro_version' 27483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev notinst_deplibs='$notinst_deplibs' 27493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevelse 27503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # When we are sourced in execute mode, \$file and \$ECHO are already set. 27513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test \"\$libtool_execute_magic\" != \"$magic\"; then 27523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ECHO=\"$qecho\" 27533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev file=\"\$0\" 27543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Make sure echo works. 27553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test \"X\$1\" = X--no-reexec; then 27563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Discard the --no-reexec flag, and continue. 27573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 27583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then 27593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Yippee, \$ECHO works! 27603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev : 27613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 27623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Restart under the correct shell, and then maybe \$ECHO will work. 27633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} 27643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 27653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi\ 27663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev" 27673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "\ 27683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 27693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Find the directory that this script lives in. 27703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` 27713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test \"x\$thisdir\" = \"x\$file\" && thisdir=. 27723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 27733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Follow symbolic links until we get to the real thisdir. 27743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` 27753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev while test -n \"\$file\"; do 27763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` 27773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 27783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # If there was a directory component, then change thisdir. 27793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test \"x\$destdir\" != \"x\$file\"; then 27803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case \"\$destdir\" in 27813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 27823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) thisdir=\"\$thisdir/\$destdir\" ;; 27833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 27843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 27853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 27863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` 27873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` 27883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 27893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev" 27903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 27913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# end: func_emit_wrapper_part1 27923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 27933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_emit_wrapper_part2 [arg=no] 27943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 27953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Emit the second part of a libtool wrapper script on stdout. 27963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# For more information, see the description associated with 27973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_emit_wrapper(), below. 27983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_emit_wrapper_part2 () 27993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 28003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_emit_wrapper_part2_arg1=no 28013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$1" ; then 28023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_emit_wrapper_part2_arg1=$1 28033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 28043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 28053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "\ 28063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 28073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Usually 'no', except on cygwin/mingw when embedded into 28083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # the cwrapper. 28093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 28103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 28113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # special case for '.' 28123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test \"\$thisdir\" = \".\"; then 28133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev thisdir=\`pwd\` 28143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 28153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # remove .libs from thisdir 28163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case \"\$thisdir\" in 28173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; 28183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $objdir ) thisdir=. ;; 28193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 28203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 28213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 28223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Try to get the absolute directory name. 28233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev absdir=\`cd \"\$thisdir\" && pwd\` 28243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n \"\$absdir\" && thisdir=\"\$absdir\" 28253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev" 28263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 28273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$fast_install" = yes; then 28283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "\ 28293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev program=lt-'$outputname'$exeext 28303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev progdir=\"\$thisdir/$objdir\" 28313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 28323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test ! -f \"\$progdir/\$program\" || 28333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 28343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test \"X\$file\" != \"X\$progdir/\$program\"; }; then 28353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 28363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev file=\"\$\$-\$program\" 28373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 28383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test ! -d \"\$progdir\"; then 28393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $MKDIR \"\$progdir\" 28403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 28413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $RM \"\$progdir/\$file\" 28423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi" 28433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 28443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "\ 28453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 28463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # relink executable if necessary 28473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n \"\$relink_command\"; then 28483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if relink_command_output=\`eval \$relink_command 2>&1\`; then : 28493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 28503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO \"\$relink_command_output\" >&2 28513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $RM \"\$progdir/\$file\" 28523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit 1 28533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 28543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 28553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 28563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 28573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { $RM \"\$progdir/\$program\"; 28583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 28593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $RM \"\$progdir/\$file\" 28603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi" 28613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 28623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "\ 28633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev program='$outputname' 28643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev progdir=\"\$thisdir/$objdir\" 28653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev" 28663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 28673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 28683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "\ 28693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 28703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -f \"\$progdir/\$program\"; then" 28713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 28723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Export our shlibpath_var if we have one. 28733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 28743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "\ 28753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Add our own library path to $shlibpath_var 28763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 28773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 28783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Some systems cannot cope with colon-terminated $shlibpath_var 28793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The second colon is a workaround for a bug in BeOS R4 sed 28803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` 28813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 28823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev export $shlibpath_var 28833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev" 28843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 28853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 28863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # fixup the dll searchpath if we need to. 28873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$dllsearchpath"; then 28883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "\ 28893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Add the dll search path components to the executable PATH 28903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev PATH=$dllsearchpath:\$PATH 28913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev" 28923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 28933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 28943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "\ 28953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test \"\$libtool_execute_magic\" != \"$magic\"; then 28963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Run the actual program with our arguments. 28973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev" 28983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 28993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Backslashes separate directories on plain windows 29003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-mingw | *-*-os2* | *-cegcc*) 29013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "\ 29023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 29033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev" 29043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 29053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 29063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 29073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "\ 29083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exec \"\$progdir/\$program\" \${1+\"\$@\"} 29093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev" 29103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 29113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 29123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "\ 29133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 29143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit 1 29153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 29163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 29173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The program doesn't exist. 29183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 29193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 29203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 29213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit 1 29223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 29233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfi\ 29243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev" 29253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 29263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# end: func_emit_wrapper_part2 29273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 29283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 29293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_emit_wrapper [arg=no] 29303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 29313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Emit a libtool wrapper script on stdout. 29323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Don't directly open a file because we may want to 29333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# incorporate the script contents within a cygwin/mingw 29343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# wrapper executable. Must ONLY be called from within 29353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_mode_link because it depends on a number of variables 29363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# set therein. 29373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 29383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 29393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# variable will take. If 'yes', then the emitted script 29403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# will assume that the directory in which it is stored is 29413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# the $objdir directory. This is a cygwin/mingw-specific 29423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# behavior. 29433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_emit_wrapper () 29443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 29453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_emit_wrapper_arg1=no 29463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$1" ; then 29473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_emit_wrapper_arg1=$1 29483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 29493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 29503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # split this up so that func_emit_cwrapperexe_src 29513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # can call each part independently. 29523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" 29533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" 29543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 29553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 29563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 29573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_to_host_path arg 29583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 29593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Convert paths to host format when used with build tools. 29603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Intended for use with "native" mingw (where libtool itself 29613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# is running under the msys shell), or in the following cross- 29623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# build environments: 29633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# $build $host 29643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# mingw (msys) mingw [e.g. native] 29653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# cygwin mingw 29663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# *nix + wine mingw 29673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# where wine is equipped with the `winepath' executable. 29683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# In the native mingw case, the (msys) shell automatically 29693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# converts paths for any non-msys applications it launches, 29703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# but that facility isn't available from inside the cwrapper. 29713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Similar accommodations are necessary for $host mingw and 29723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# $build cygwin. Calling this function does no harm for other 29733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# $host/$build combinations not listed above. 29743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 29753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# ARG is the path (on $build) that should be converted to 29763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# the proper representation for $host. The result is stored 29773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# in $func_to_host_path_result. 29783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_to_host_path () 29793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 29803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_path_result="$1" 29813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$1" ; then 29823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 29833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *mingw* ) 29843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 29853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $build in 29863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *mingw* ) # actually, msys 29873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # awkward: cmd appends spaces to result 29883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_sed_strip_trailing_spaces="s/[ ]*\$//" 29893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_path_tmp1=`( cmd //c echo "$1" |\ 29903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` 29913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 29923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $SED -e "$lt_sed_naive_backslashify"` 29933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 29943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *cygwin* ) 29953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_path_tmp1=`cygpath -w "$1"` 29963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 29973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $SED -e "$lt_sed_naive_backslashify"` 29983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 29993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ) 30003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Unfortunately, winepath does not exit with a non-zero 30013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # error code, so we are forced to check the contents of 30023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # stdout. On the other hand, if the command is not 30033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # found, the shell will set an exit code of 127 and print 30043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # *an error message* to stdout. So we must check for both 30053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # error code of zero AND non-empty stdout, which explains 30063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # the odd construction: 30073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` 30083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then 30093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 30103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $SED -e "$lt_sed_naive_backslashify"` 30113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 30123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Allow warning below. 30133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_path_result="" 30143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 30153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 30163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 30173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$func_to_host_path_result" ; then 30183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_error "Could not determine host path corresponding to" 30193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_error " '$1'" 30203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_error "Continuing, but uninstalled executables may not work." 30213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Fallback: 30223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_path_result="$1" 30233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 30243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 30253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 30263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 30273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 30283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# end: func_to_host_path 30293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 30303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_to_host_pathlist arg 30313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 30323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Convert pathlists to host format when used with build tools. 30333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# See func_to_host_path(), above. This function supports the 30343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# following $build/$host combinations (but does no harm for 30353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# combinations not listed here): 30363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# $build $host 30373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# mingw (msys) mingw [e.g. native] 30383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# cygwin mingw 30393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# *nix + wine mingw 30403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 30413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Path separators are also converted from $build format to 30423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# $host format. If ARG begins or ends with a path separator 30433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# character, it is preserved (but converted to $host format) 30443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# on output. 30453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 30463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# ARG is a pathlist (on $build) that should be converted to 30473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# the proper representation on $host. The result is stored 30483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# in $func_to_host_pathlist_result. 30493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_to_host_pathlist () 30503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 30513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_pathlist_result="$1" 30523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$1" ; then 30533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 30543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *mingw* ) 30553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 30563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Remove leading and trailing path separator characters from 30573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # ARG. msys behavior is inconsistent here, cygpath turns them 30583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # into '.;' and ';.', and winepath ignores them completely. 30593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_pathlist_tmp2="$1" 30603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Once set for this call, this variable should not be 30613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # reassigned. It is used in tha fallback case. 30623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ 30633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $SED -e 's|^:*||' -e 's|:*$||'` 30643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $build in 30653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *mingw* ) # Actually, msys. 30663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Awkward: cmd appends spaces to result. 30673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_sed_strip_trailing_spaces="s/[ ]*\$//" 30683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ 30693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` 30703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ 30713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $SED -e "$lt_sed_naive_backslashify"` 30723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 30733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *cygwin* ) 30743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` 30753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ 30763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $SED -e "$lt_sed_naive_backslashify"` 30773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 30783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ) 30793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # unfortunately, winepath doesn't convert pathlists 30803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_pathlist_result="" 30813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_pathlist_oldIFS=$IFS 30823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS=: 30833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do 30843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS=$func_to_host_pathlist_oldIFS 30853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$func_to_host_pathlist_f" ; then 30863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_path "$func_to_host_pathlist_f" 30873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$func_to_host_path_result" ; then 30883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$func_to_host_pathlist_result" ; then 30893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_pathlist_result="$func_to_host_path_result" 30903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 30913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" 30923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 30933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 30943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 30953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS=: 30963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 30973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS=$func_to_host_pathlist_oldIFS 30983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 30993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 31003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$func_to_host_pathlist_result" ; then 31013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_error "Could not determine the host path(s) corresponding to" 31023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_error " '$1'" 31033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_error "Continuing, but uninstalled executables may not work." 31043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Fallback. This may break if $1 contains DOS-style drive 31053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # specifications. The fix is not to complicate the expression 31063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # below, but for the user to provide a working wine installation 31073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # with winepath so that path translation in the cross-to-mingw 31083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # case works properly. 31093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_replace_pathsep_nix_to_dos="s|:|;|g" 31103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ 31113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $SED -e "$lt_replace_pathsep_nix_to_dos"` 31123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 31133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Now, add the leading and trailing path separators back 31143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$1" in 31153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" 31163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 31173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 31183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$1" in 31193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" 31203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 31213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 31223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 31233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 31243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 31253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 31263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# end: func_to_host_pathlist 31273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 31283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_emit_cwrapperexe_src 31293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# emit the source code for a wrapper executable on stdout 31303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Must ONLY be called from within func_mode_link because 31313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# it depends on a number of variable set therein. 31323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_emit_cwrapperexe_src () 31333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 31343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat <<EOF 31353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 31363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 31373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 31383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 31393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev The $output program cannot be directly executed until all the libtool 31403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libraries that it depends on are installed. 31413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 31423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev This wrapper executable should never be moved out of the build directory. 31433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev If it is, it will not operate correctly. 31443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 31453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev Currently, it simply execs the wrapper *script* "$SHELL $output", 31463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev but could eventually absorb all of the scripts functionality and 31473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exec $objdir/$outputname directly. 31483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev*/ 31493aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF 31503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat <<"EOF" 31513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include <stdio.h> 31523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include <stdlib.h> 31533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifdef _MSC_VER 31543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# include <direct.h> 31553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# include <process.h> 31563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# include <io.h> 31573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define setmode _setmode 31583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#else 31593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# include <unistd.h> 31603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# include <stdint.h> 31613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# ifdef __CYGWIN__ 31623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# include <io.h> 31633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define HAVE_SETENV 31643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# ifdef __STRICT_ANSI__ 31653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevchar *realpath (const char *, char *); 31663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevint putenv (char *); 31673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevint setenv (const char *, const char *, int); 31683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# endif 31693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# endif 31703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif 31713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include <malloc.h> 31723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include <stdarg.h> 31733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include <assert.h> 31743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include <string.h> 31753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include <ctype.h> 31763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include <errno.h> 31773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include <fcntl.h> 31783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include <sys/stat.h> 31793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 31803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#if defined(PATH_MAX) 31813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define LT_PATHMAX PATH_MAX 31823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#elif defined(MAXPATHLEN) 31833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define LT_PATHMAX MAXPATHLEN 31843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#else 31853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define LT_PATHMAX 1024 31863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif 31873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 31883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifndef S_IXOTH 31893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define S_IXOTH 0 31903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif 31913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifndef S_IXGRP 31923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define S_IXGRP 0 31933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif 31943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 31953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifdef _MSC_VER 31963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define S_IXUSR _S_IEXEC 31973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define stat _stat 31983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# ifndef _INTPTR_T_DEFINED 31993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define intptr_t int 32003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# endif 32013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif 32023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 32033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifndef DIR_SEPARATOR 32043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define DIR_SEPARATOR '/' 32053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define PATH_SEPARATOR ':' 32063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif 32073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 32083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 32093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev defined (__OS2__) 32103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define HAVE_DOS_BASED_FILE_SYSTEM 32113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define FOPEN_WB "wb" 32123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# ifndef DIR_SEPARATOR_2 32133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define DIR_SEPARATOR_2 '\\' 32143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# endif 32153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# ifndef PATH_SEPARATOR_2 32163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define PATH_SEPARATOR_2 ';' 32173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# endif 32183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif 32193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 32203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifndef DIR_SEPARATOR_2 32213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 32223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#else /* DIR_SEPARATOR_2 */ 32233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define IS_DIR_SEPARATOR(ch) \ 32243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 32253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif /* DIR_SEPARATOR_2 */ 32263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 32273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifndef PATH_SEPARATOR_2 32283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 32293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#else /* PATH_SEPARATOR_2 */ 32303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 32313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif /* PATH_SEPARATOR_2 */ 32323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 32333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifdef __CYGWIN__ 32343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define FOPEN_WB "wb" 32353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif 32363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 32373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifndef FOPEN_WB 32383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define FOPEN_WB "w" 32393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif 32403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifndef _O_BINARY 32413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define _O_BINARY 0 32423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif 32433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 32443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 32453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define XFREE(stale) do { \ 32463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (stale) { free ((void *) stale); stale = 0; } \ 32473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} while (0) 32483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 32493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#undef LTWRAPPER_DEBUGPRINTF 32503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#if defined DEBUGWRAPPER 32513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args 32523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstatic void 32533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevltwrapper_debugprintf (const char *fmt, ...) 32543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 32553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev va_list args; 32563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev va_start (args, fmt); 32573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev (void) vfprintf (stderr, fmt, args); 32583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev va_end (args); 32593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 32603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#else 32613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# define LTWRAPPER_DEBUGPRINTF(args) 32623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif 32633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 32643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevconst char *program_name = NULL; 32653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 32663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid *xmalloc (size_t num); 32673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevchar *xstrdup (const char *string); 32683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevconst char *base_name (const char *name); 32693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevchar *find_executable (const char *wrapper); 32703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevchar *chase_symlinks (const char *pathspec); 32713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevint make_executable (const char *path); 32723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevint check_executable (const char *path); 32733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevchar *strendzap (char *str, const char *pat); 32743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid lt_fatal (const char *message, ...); 32753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid lt_setenv (const char *name, const char *value); 32763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 32773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid lt_opt_process_env_set (const char *arg); 32783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid lt_opt_process_env_prepend (const char *arg); 32793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid lt_opt_process_env_append (const char *arg); 32803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevint lt_split_name_value (const char *arg, char** name, char** value); 32813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid lt_update_exe_path (const char *name, const char *value); 32823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid lt_update_lib_path (const char *name, const char *value); 32833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 32843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstatic const char *script_text_part1 = 32853aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF 32863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 32873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_emit_wrapper_part1 yes | 32883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $SED -e 's/\([\\"]\)/\\\1/g' \ 32893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -e 's/^/ "/' -e 's/$/\\n"/' 32903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo ";" 32913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat <<EOF 32923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 32933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstatic const char *script_text_part2 = 32943aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF 32953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_emit_wrapper_part2 yes | 32963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $SED -e 's/\([\\"]\)/\\\1/g' \ 32973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -e 's/^/ "/' -e 's/$/\\n"/' 32983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo ";" 32993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 33003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat <<EOF 33013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevconst char * MAGIC_EXE = "$magic_exe"; 33023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 33033aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF 33043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 33053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 33063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_pathlist "$temp_rpath" 33073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat <<EOF 33083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevconst char * LIB_PATH_VALUE = "$func_to_host_pathlist_result"; 33093aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF 33103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 33113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat <<"EOF" 33123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevconst char * LIB_PATH_VALUE = ""; 33133aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF 33143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 33153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 33163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$dllsearchpath"; then 33173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_to_host_pathlist "$dllsearchpath:" 33183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat <<EOF 33193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevconst char * EXE_PATH_VARNAME = "PATH"; 33203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevconst char * EXE_PATH_VALUE = "$func_to_host_pathlist_result"; 33213aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF 33223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 33233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat <<"EOF" 33243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevconst char * EXE_PATH_VARNAME = ""; 33253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevconst char * EXE_PATH_VALUE = ""; 33263aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF 33273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 33283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 33293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$fast_install" = yes; then 33303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat <<EOF 33313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 33323aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF 33333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 33343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat <<EOF 33353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 33363aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF 33373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 33383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 33393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 33403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat <<"EOF" 33413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 33423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define LTWRAPPER_OPTION_PREFIX "--lt-" 33433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define LTWRAPPER_OPTION_PREFIX_LENGTH 5 33443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 33453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstatic const size_t opt_prefix_len = LTWRAPPER_OPTION_PREFIX_LENGTH; 33463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 33473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 33483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 33493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 33503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstatic const size_t env_set_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 7; 33513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstatic const char *env_set_opt = LTWRAPPER_OPTION_PREFIX "env-set"; 33523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* argument is putenv-style "foo=bar", value of foo is set to bar */ 33533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 33543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstatic const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11; 33553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstatic const char *env_prepend_opt = LTWRAPPER_OPTION_PREFIX "env-prepend"; 33563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */ 33573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 33583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstatic const size_t env_append_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 10; 33593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstatic const char *env_append_opt = LTWRAPPER_OPTION_PREFIX "env-append"; 33603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */ 33613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 33623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevint 33633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevmain (int argc, char *argv[]) 33643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 33653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char **newargz; 33663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev int newargc; 33673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *tmp_pathspec; 33683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *actual_cwrapper_path; 33693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *actual_cwrapper_name; 33703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *target_name; 33713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *lt_argv_zero; 33723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev intptr_t rval = 127; 33733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 33743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev int i; 33753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 33763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev program_name = (char *) xstrdup (base_name (argv[0])); 33773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev LTWRAPPER_DEBUGPRINTF (("(main) argv[0] : %s\n", argv[0])); 33783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name)); 33793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 33803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* very simple arg parsing; don't want to rely on getopt */ 33813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for (i = 1; i < argc; i++) 33823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 33833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (strcmp (argv[i], dumpscript_opt) == 0) 33843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 33853aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF 33863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$host" in 33873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *mingw* | *cygwin* ) 33883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # make stdout use "unix" line endings 33893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo " setmode(1,_O_BINARY);" 33903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 33913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 33923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 33933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat <<"EOF" 33943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev printf ("%s", script_text_part1); 33953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev printf ("%s", script_text_part2); 33963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return 0; 33973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 33983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 33993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 34003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newargz = XMALLOC (char *, argc + 1); 34013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_pathspec = find_executable (argv[0]); 34023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (tmp_pathspec == NULL) 34033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_fatal ("Couldn't find %s", argv[0]); 34043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n", 34053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_pathspec)); 34063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 34073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev actual_cwrapper_path = chase_symlinks (tmp_pathspec); 34083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n", 34093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev actual_cwrapper_path)); 34103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (tmp_pathspec); 34113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 34123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path)); 34133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev strendzap (actual_cwrapper_path, actual_cwrapper_name); 34143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 34153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* wrapper name transforms */ 34163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev strendzap (actual_cwrapper_name, ".exe"); 34173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 34183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (actual_cwrapper_name); 34193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev actual_cwrapper_name = tmp_pathspec; 34203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_pathspec = 0; 34213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 34223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* target_name transforms -- use actual target program name; might have lt- prefix */ 34233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 34243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev strendzap (target_name, ".exe"); 34253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 34263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (target_name); 34273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev target_name = tmp_pathspec; 34283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_pathspec = 0; 34293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 34303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n", 34313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev target_name)); 34323aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF 34333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 34343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat <<EOF 34353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newargz[0] = 34363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XMALLOC (char, (strlen (actual_cwrapper_path) + 34373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 34383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev strcpy (newargz[0], actual_cwrapper_path); 34393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev strcat (newargz[0], "$objdir"); 34403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev strcat (newargz[0], "/"); 34413aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF 34423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 34433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat <<"EOF" 34443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* stop here, and copy so we don't have to do this twice */ 34453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_pathspec = xstrdup (newargz[0]); 34463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 34473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 34483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev strcat (newargz[0], actual_cwrapper_name); 34493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 34503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* DO want the lt- prefix here if it exists, so use target_name */ 34513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 34523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (tmp_pathspec); 34533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_pathspec = NULL; 34543aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF 34553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 34563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host_os in 34573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev mingw*) 34583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat <<"EOF" 34593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 34603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char* p; 34613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev while ((p = strchr (newargz[0], '\\')) != NULL) 34623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 34633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *p = '/'; 34643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 34653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev while ((p = strchr (lt_argv_zero, '\\')) != NULL) 34663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 34673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *p = '/'; 34683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 34693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 34703aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF 34713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 34723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 34733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 34743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat <<"EOF" 34753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (target_name); 34763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (actual_cwrapper_path); 34773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (actual_cwrapper_name); 34783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 34793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 34803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 34813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 34823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 34833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 34843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newargc=0; 34853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for (i = 1; i < argc; i++) 34863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 34873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0) 34883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 34893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (argv[i][env_set_opt_len] == '=') 34903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 34913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev const char *p = argv[i] + env_set_opt_len + 1; 34923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_opt_process_env_set (p); 34933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 34943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc) 34953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 34963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_opt_process_env_set (argv[++i]); /* don't copy */ 34973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 34983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 34993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_fatal ("%s missing required argument", env_set_opt); 35003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue; 35013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 35023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0) 35033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 35043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (argv[i][env_prepend_opt_len] == '=') 35053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 35063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev const char *p = argv[i] + env_prepend_opt_len + 1; 35073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_opt_process_env_prepend (p); 35083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 35093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc) 35103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 35113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_opt_process_env_prepend (argv[++i]); /* don't copy */ 35123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 35133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 35143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_fatal ("%s missing required argument", env_prepend_opt); 35153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue; 35163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 35173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0) 35183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 35193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (argv[i][env_append_opt_len] == '=') 35203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 35213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev const char *p = argv[i] + env_append_opt_len + 1; 35223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_opt_process_env_append (p); 35233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 35243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc) 35253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 35263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_opt_process_env_append (argv[++i]); /* don't copy */ 35273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 35283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 35293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_fatal ("%s missing required argument", env_append_opt); 35303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue; 35313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 35323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0) 35333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 35343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 35353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev namespace, but it is not one of the ones we know about and 35363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev have already dealt with, above (inluding dump-script), then 35373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev report an error. Otherwise, targets might begin to believe 35383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 35393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev namespace. The first time any user complains about this, we'll 35403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev need to make LTWRAPPER_OPTION_PREFIX a configure-time option 35413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev or a configure.ac-settable value. 35423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev */ 35433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_fatal ("Unrecognized option in %s namespace: '%s'", 35443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ltwrapper_option_prefix, argv[i]); 35453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 35463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* otherwise ... */ 35473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newargz[++newargc] = xstrdup (argv[i]); 35483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 35493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newargz[++newargc] = NULL; 35503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 35513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev LTWRAPPER_DEBUGPRINTF (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>"))); 35523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for (i = 0; i < newargc; i++) 35533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 35543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>"))); 35553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 35563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 35573aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF 35583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 35593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host_os in 35603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev mingw*) 35613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat <<"EOF" 35623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* execv doesn't actually work on mingw as expected on unix */ 35633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 35643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (rval == -1) 35653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 35663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* failed to start process */ 35673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); 35683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return 127; 35693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 35703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return rval; 35713aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF 35723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 35733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 35743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat <<"EOF" 35753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev execv (lt_argv_zero, newargz); 35763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return rval; /* =127, but avoids unused variable warning */ 35773aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF 35783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 35793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 35803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 35813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat <<"EOF" 35823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 35833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 35843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid * 35853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevxmalloc (size_t num) 35863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 35873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev void *p = (void *) malloc (num); 35883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (!p) 35893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_fatal ("Memory exhausted"); 35903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 35913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return p; 35923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 35933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 35943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevchar * 35953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevxstrdup (const char *string) 35963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 35973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 35983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev string) : NULL; 35993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 36003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 36013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevconst char * 36023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevbase_name (const char *name) 36033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 36043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev const char *base; 36053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 36063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 36073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* Skip over the disk name in MSDOS pathnames. */ 36083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (isalpha ((unsigned char) name[0]) && name[1] == ':') 36093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev name += 2; 36103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif 36113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 36123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for (base = name; *name; name++) 36133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (IS_DIR_SEPARATOR (*name)) 36143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev base = name + 1; 36153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return base; 36163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 36173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 36183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevint 36193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevcheck_executable (const char *path) 36203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 36213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev struct stat st; 36223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 36233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", 36243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev path ? (*path ? path : "EMPTY!") : "NULL!")); 36253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if ((!path) || (!*path)) 36263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return 0; 36273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 36283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if ((stat (path, &st) >= 0) 36293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 36303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return 1; 36313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 36323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return 0; 36333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 36343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 36353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevint 36363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevmake_executable (const char *path) 36373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 36383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev int rval = 0; 36393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev struct stat st; 36403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 36413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", 36423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev path ? (*path ? path : "EMPTY!") : "NULL!")); 36433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if ((!path) || (!*path)) 36443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return 0; 36453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 36463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (stat (path, &st) >= 0) 36473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 36483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 36493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 36503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return rval; 36513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 36523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 36533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Searches for the full path of the wrapper. Returns 36543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newly allocated full path name if found, NULL otherwise 36553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev Does not chase symlinks, even on platforms that support them. 36563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev*/ 36573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevchar * 36583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfind_executable (const char *wrapper) 36593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 36603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev int has_slash = 0; 36613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev const char *p; 36623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev const char *p_next; 36633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* static buffer for getcwd */ 36643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char tmp[LT_PATHMAX + 1]; 36653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev int tmp_len; 36663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *concat_name; 36673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 36683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", 36693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); 36703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 36713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if ((wrapper == NULL) || (*wrapper == '\0')) 36723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return NULL; 36733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 36743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* Absolute path? */ 36753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 36763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 36773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 36783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev concat_name = xstrdup (wrapper); 36793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (check_executable (concat_name)) 36803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return concat_name; 36813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (concat_name); 36823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 36833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 36843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 36853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif 36863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (IS_DIR_SEPARATOR (wrapper[0])) 36873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 36883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev concat_name = xstrdup (wrapper); 36893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (check_executable (concat_name)) 36903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return concat_name; 36913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (concat_name); 36923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 36933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 36943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 36953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif 36963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 36973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for (p = wrapper; *p; p++) 36983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (*p == '/') 36993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 37003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev has_slash = 1; 37013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev break; 37023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 37033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (!has_slash) 37043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 37053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* no slashes; search PATH */ 37063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev const char *path = getenv ("PATH"); 37073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (path != NULL) 37083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 37093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for (p = path; *p; p = p_next) 37103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 37113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev const char *q; 37123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev size_t p_len; 37133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for (q = p; *q; q++) 37143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (IS_PATH_SEPARATOR (*q)) 37153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev break; 37163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev p_len = q - p; 37173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev p_next = (*q == '\0' ? q : q + 1); 37183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (p_len == 0) 37193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 37203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* empty path: current directory */ 37213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (getcwd (tmp, LT_PATHMAX) == NULL) 37223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_fatal ("getcwd failed"); 37233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_len = strlen (tmp); 37243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev concat_name = 37253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 37263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev memcpy (concat_name, tmp, tmp_len); 37273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev concat_name[tmp_len] = '/'; 37283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev strcpy (concat_name + tmp_len + 1, wrapper); 37293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 37303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 37313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 37323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev concat_name = 37333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 37343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev memcpy (concat_name, p, p_len); 37353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev concat_name[p_len] = '/'; 37363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev strcpy (concat_name + p_len + 1, wrapper); 37373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 37383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (check_executable (concat_name)) 37393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return concat_name; 37403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (concat_name); 37413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 37423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 37433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* not found in PATH; assume curdir */ 37443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 37453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* Relative path | not found in path: prepend cwd */ 37463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (getcwd (tmp, LT_PATHMAX) == NULL) 37473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_fatal ("getcwd failed"); 37483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_len = strlen (tmp); 37493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 37503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev memcpy (concat_name, tmp, tmp_len); 37513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev concat_name[tmp_len] = '/'; 37523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev strcpy (concat_name + tmp_len + 1, wrapper); 37533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 37543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (check_executable (concat_name)) 37553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return concat_name; 37563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (concat_name); 37573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return NULL; 37583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 37593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 37603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevchar * 37613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevchase_symlinks (const char *pathspec) 37623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 37633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifndef S_ISLNK 37643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return xstrdup (pathspec); 37653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#else 37663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char buf[LT_PATHMAX]; 37673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev struct stat s; 37683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *tmp_pathspec = xstrdup (pathspec); 37693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *p; 37703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev int has_symlinks = 0; 37713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev while (strlen (tmp_pathspec) && !has_symlinks) 37723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 37733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", 37743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_pathspec)); 37753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (lstat (tmp_pathspec, &s) == 0) 37763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 37773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (S_ISLNK (s.st_mode) != 0) 37783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 37793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev has_symlinks = 1; 37803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev break; 37813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 37823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 37833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* search backwards for last DIR_SEPARATOR */ 37843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev p = tmp_pathspec + strlen (tmp_pathspec) - 1; 37853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 37863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev p--; 37873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 37883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 37893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* no more DIR_SEPARATORS left */ 37903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev break; 37913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 37923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *p = '\0'; 37933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 37943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 37953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 37963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *errstr = strerror (errno); 37973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); 37983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 37993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 38003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (tmp_pathspec); 38013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 38023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (!has_symlinks) 38033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 38043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return xstrdup (pathspec); 38053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 38063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 38073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_pathspec = realpath (pathspec, buf); 38083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (tmp_pathspec == 0) 38093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 38103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_fatal ("Could not follow symlinks for %s", pathspec); 38113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 38123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return xstrdup (tmp_pathspec); 38133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif 38143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 38153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 38163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevchar * 38173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstrendzap (char *str, const char *pat) 38183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 38193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev size_t len, patlen; 38203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 38213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev assert (str != NULL); 38223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev assert (pat != NULL); 38233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 38243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev len = strlen (str); 38253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev patlen = strlen (pat); 38263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 38273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (patlen <= len) 38283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 38293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev str += len - patlen; 38303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (strcmp (str, pat) == 0) 38313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *str = '\0'; 38323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 38333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return str; 38343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 38353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 38363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstatic void 38373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevlt_error_core (int exit_status, const char *mode, 38383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev const char *message, va_list ap) 38393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 38403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fprintf (stderr, "%s: %s: ", program_name, mode); 38413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev vfprintf (stderr, message, ap); 38423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fprintf (stderr, ".\n"); 38433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 38443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (exit_status >= 0) 38453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit (exit_status); 38463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 38473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 38483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid 38493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevlt_fatal (const char *message, ...) 38503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 38513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev va_list ap; 38523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev va_start (ap, message); 38533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_error_core (EXIT_FAILURE, "FATAL", message, ap); 38543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev va_end (ap); 38553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 38563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 38573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid 38583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevlt_setenv (const char *name, const char *value) 38593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 38603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", 38613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev (name ? name : "<NULL>"), 38623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev (value ? value : "<NULL>"))); 38633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 38643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifdef HAVE_SETENV 38653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* always make a copy, for consistency with !HAVE_SETENV */ 38663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *str = xstrdup (value); 38673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev setenv (name, str, 1); 38683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#else 38693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev int len = strlen (name) + 1 + strlen (value) + 1; 38703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *str = XMALLOC (char, len); 38713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sprintf (str, "%s=%s", name, value); 38723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (putenv (str) != EXIT_SUCCESS) 38733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 38743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (str); 38753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 38763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif 38773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 38783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 38793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 38803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevchar * 38813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevlt_extend_str (const char *orig_value, const char *add, int to_end) 38823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 38833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *new_value; 38843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (orig_value && *orig_value) 38853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 38863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev int orig_value_len = strlen (orig_value); 38873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev int add_len = strlen (add); 38883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev new_value = XMALLOC (char, add_len + orig_value_len + 1); 38893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (to_end) 38903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 38913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev strcpy (new_value, orig_value); 38923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev strcpy (new_value + orig_value_len, add); 38933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 38943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 38953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 38963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev strcpy (new_value, add); 38973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev strcpy (new_value + add_len, orig_value); 38983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 38993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 39003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 39013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 39023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev new_value = xstrdup (add); 39033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 39043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return new_value; 39053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 39063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 39073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevint 39083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevlt_split_name_value (const char *arg, char** name, char** value) 39093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 39103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev const char *p; 39113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev int len; 39123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (!arg || !*arg) 39133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return 1; 39143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 39153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev p = strchr (arg, (int)'='); 39163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 39173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (!p) 39183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return 1; 39193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 39203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *value = xstrdup (++p); 39213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 39223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev len = strlen (arg) - strlen (*value); 39233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *name = XMALLOC (char, len); 39243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev strncpy (*name, arg, len-1); 39253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev (*name)[len - 1] = '\0'; 39263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 39273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return 0; 39283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 39293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 39303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid 39313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevlt_opt_process_env_set (const char *arg) 39323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 39333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *name = NULL; 39343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *value = NULL; 39353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 39363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (lt_split_name_value (arg, &name, &value) != 0) 39373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 39383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (name); 39393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (value); 39403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); 39413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 39423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 39433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_setenv (name, value); 39443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (name); 39453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (value); 39463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 39473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 39483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid 39493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevlt_opt_process_env_prepend (const char *arg) 39503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 39513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *name = NULL; 39523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *value = NULL; 39533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *new_value = NULL; 39543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 39553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (lt_split_name_value (arg, &name, &value) != 0) 39563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 39573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (name); 39583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (value); 39593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); 39603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 39613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 39623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev new_value = lt_extend_str (getenv (name), value, 0); 39633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_setenv (name, new_value); 39643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (new_value); 39653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (name); 39663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (value); 39673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 39683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 39693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid 39703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevlt_opt_process_env_append (const char *arg) 39713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 39723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *name = NULL; 39733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *value = NULL; 39743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *new_value = NULL; 39753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 39763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (lt_split_name_value (arg, &name, &value) != 0) 39773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 39783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (name); 39793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (value); 39803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); 39813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 39823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 39833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev new_value = lt_extend_str (getenv (name), value, 1); 39843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_setenv (name, new_value); 39853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (new_value); 39863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (name); 39873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (value); 39883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 39893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 39903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid 39913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevlt_update_exe_path (const char *name, const char *value) 39923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 39933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 39943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev (name ? name : "<NULL>"), 39953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev (value ? value : "<NULL>"))); 39963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 39973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (name && *name && value && *value) 39983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 39993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *new_value = lt_extend_str (getenv (name), value, 0); 40003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* some systems can't cope with a ':'-terminated path #' */ 40013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev int len = strlen (new_value); 40023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 40033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 40043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev new_value[len-1] = '\0'; 40053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 40063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_setenv (name, new_value); 40073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (new_value); 40083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 40093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 40103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 40113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid 40123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevlt_update_lib_path (const char *name, const char *value) 40133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 40143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 40153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev (name ? name : "<NULL>"), 40163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev (value ? value : "<NULL>"))); 40173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 40183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (name && *name && value && *value) 40193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { 40203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *new_value = lt_extend_str (getenv (name), value, 0); 40213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_setenv (name, new_value); 40223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev XFREE (new_value); 40233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 40243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 40253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 40263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 40273aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF 40283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 40293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# end: func_emit_cwrapperexe_src 40303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 40313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_mode_link arg... 40323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_mode_link () 40333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 40343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_debug 40353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 40363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 40373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # It is impossible to link a dll without this setting, and 40383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # we shouldn't force the makefile maintainer to figure out 40393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # which system we are compiling for in order to pass an extra 40403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # flag for every libtool invocation. 40413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # allow_undefined=no 40423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 40433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # FIXME: Unfortunately, there are problems with the above when trying 40443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # to make a dll which has undefined symbols, in which case not 40453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # even a static library is built. For now, we need to specify 40463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # -no-undefined on the libtool link line when we can be certain 40473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # that all symbols are satisfied, otherwise we get a static library. 40483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev allow_undefined=yes 40493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 40503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 40513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev allow_undefined=yes 40523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 40533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 40543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libtool_args=$nonopt 40553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev base_compile="$nonopt $@" 40563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_command=$nonopt 40573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_command=$nonopt 40583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 40593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_rpath= 40603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_rpath= 40613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_shlibpath= 40623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_shlibpath= 40633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev convenience= 40643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev old_convenience= 40653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs= 40663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev old_deplibs= 40673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compiler_flags= 40683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev linker_flags= 40693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dllsearchpath= 40703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lib_search_path=`pwd` 40713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev inst_prefix_dir= 40723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev new_inherited_linker_flags= 40733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 40743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev avoid_version=no 40753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlfiles= 40763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlprefiles= 40773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlself=no 40783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev export_dynamic=no 40793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev export_symbols= 40803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev export_symbols_regex= 40813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev generated= 40823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libobjs= 40833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ltlibs= 40843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev module=no 40853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev no_install=no 40863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev objs= 40873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev non_pic_objects= 40883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev precious_files_regex= 40893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prefer_static_libs=no 40903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev preload=no 40913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 40923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prevarg= 40933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev release= 40943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rpath= 40953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev xrpath= 40963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev perm_rpath= 40973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev temp_rpath= 40983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev thread_safe=no 40993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev vinfo= 41003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev vinfo_number=no 41013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev weak_libs= 41023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev single_module="${wl}-single_module" 41033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_infer_tag $base_compile 41043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 41053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # We need to know -static, to get the right output filenames. 41063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for arg 41073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 41083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $arg in 41093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -shared) 41103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$build_libtool_libs" != yes && \ 41113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_configuration "can not build a shared library" 41123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev build_old_libs=no 41133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev break 41143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 41153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -all-static | -static | -static-libtool-libs) 41163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $arg in 41173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -all-static) 41183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 41193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "complete static linking is impossible in this configuration" 41203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 41213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$link_static_flag"; then 41223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlopen_self=$dlopen_self_static 41233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 41243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prefer_static_libs=yes 41253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 41263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -static) 41273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$pic_flag" && test -n "$link_static_flag"; then 41283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlopen_self=$dlopen_self_static 41293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 41303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prefer_static_libs=built 41313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 41323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -static-libtool-libs) 41333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$pic_flag" && test -n "$link_static_flag"; then 41343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlopen_self=$dlopen_self_static 41353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 41363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prefer_static_libs=yes 41373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 41383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 41393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev build_libtool_libs=no 41403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev build_old_libs=yes 41413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev break 41423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 41433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 41443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 41453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 41463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # See if our shared archives depend on static archives. 41473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$old_archive_from_new_cmds" && build_old_libs=yes 41483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 41493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Go through the arguments, transforming them on the way. 41503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev while test "$#" -gt 0; do 41513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg="$1" 41523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 41533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_eval "$arg" 41543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev qarg=$func_quote_for_eval_unquoted_result 41553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append libtool_args " $func_quote_for_eval_result" 41563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 41573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # If the previous option needs an argument, assign it. 41583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$prev"; then 41593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $prev in 41603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev output) 41613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append compile_command " @OUTPUT@" 41623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append finalize_command " @OUTPUT@" 41633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 41643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 41653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 41663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $prev in 41673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlfiles|dlprefiles) 41683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$preload" = no; then 41693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Add the symbol object into the linking commands. 41703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append compile_command " @SYMFILE@" 41713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append finalize_command " @SYMFILE@" 41723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev preload=yes 41733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 41743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $arg in 41753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.la | *.lo) ;; # We handle these cases below. 41763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev force) 41773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$dlself" = no; then 41783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlself=needless 41793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev export_dynamic=yes 41803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 41813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 41823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 41833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 41843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev self) 41853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$prev" = dlprefiles; then 41863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlself=yes 41873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 41883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlself=yes 41893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 41903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlself=needless 41913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev export_dynamic=yes 41923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 41933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 41943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 41953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 41963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 41973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$prev" = dlfiles; then 41983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlfiles="$dlfiles $arg" 41993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 42003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlprefiles="$dlprefiles $arg" 42013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 42023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 42033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 42043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 42053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 42063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 42073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev expsyms) 42083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev export_symbols="$arg" 42093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -f "$arg" \ 42103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev || func_fatal_error "symbol file \`$arg' does not exist" 42113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 42123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 42133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 42143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev expsyms_regex) 42153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev export_symbols_regex="$arg" 42163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 42173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 42183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 42193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev framework) 42203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 42213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-darwin*) 42223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$deplibs " in 42233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $qarg.ltframework "*) ;; 42243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) deplibs="$deplibs $qarg.ltframework" # this is fixed later 42253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 42263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 42273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 42283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 42293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 42303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 42313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 42323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev inst_prefix) 42333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev inst_prefix_dir="$arg" 42343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 42353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 42363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 42373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev objectlist) 42383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -f "$arg"; then 42393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev save_arg=$arg 42403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev moreargs= 42413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for fil in `cat "$save_arg"` 42423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 42433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# moreargs="$moreargs $fil" 42443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg=$fil 42453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # A libtool-controlled object. 42463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 42473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Check to see that this really is a libtool object. 42483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if func_lalib_unsafe_p "$arg"; then 42493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev pic_object= 42503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev non_pic_object= 42513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 42523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Read the .lo file 42533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_source "$arg" 42543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 42553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$pic_object" || 42563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -z "$non_pic_object" || 42573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$pic_object" = none && 42583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$non_pic_object" = none; then 42593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "cannot find name of object for \`$arg'" 42603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 42613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 42623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Extract subdirectory from the argument. 42633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_dirname "$arg" "/" "" 42643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev xdir="$func_dirname_result" 42653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 42663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$pic_object" != none; then 42673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Prepend the subdirectory the object is found in. 42683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev pic_object="$xdir$pic_object" 42693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 42703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$prev" = dlfiles; then 42713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 42723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlfiles="$dlfiles $pic_object" 42733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 42743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 42753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 42763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # If libtool objects are unsupported, then we need to preload. 42773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev=dlprefiles 42783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 42793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 42803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 42813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # CHECK ME: I think I busted this. -Ossama 42823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$prev" = dlprefiles; then 42833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Preload the old-style object. 42843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlprefiles="$dlprefiles $pic_object" 42853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 42863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 42873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 42883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # A PIC object. 42893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append libobjs " $pic_object" 42903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg="$pic_object" 42913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 42923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 42933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Non-PIC object. 42943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$non_pic_object" != none; then 42953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Prepend the subdirectory the object is found in. 42963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev non_pic_object="$xdir$non_pic_object" 42973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 42983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # A standard non-PIC object 42993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append non_pic_objects " $non_pic_object" 43003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$pic_object" || test "$pic_object" = none ; then 43013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg="$non_pic_object" 43023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 43033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 43043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # If the PIC object exists, use it instead. 43053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # $xdir was prepended to $pic_object above. 43063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev non_pic_object="$pic_object" 43073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append non_pic_objects " $non_pic_object" 43083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 43093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 43103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Only an error if not doing a dry-run. 43113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if $opt_dry_run; then 43123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Extract subdirectory from the argument. 43133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_dirname "$arg" "/" "" 43143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev xdir="$func_dirname_result" 43153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 43163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_lo2o "$arg" 43173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev pic_object=$xdir$objdir/$func_lo2o_result 43183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev non_pic_object=$xdir$func_lo2o_result 43193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append libobjs " $pic_object" 43203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append non_pic_objects " $non_pic_object" 43213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 43223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "\`$arg' is not a valid libtool object" 43233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 43243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 43253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 43263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 43273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "link input file \`$arg' does not exist" 43283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 43293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg=$save_arg 43303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 43313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 43323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 43333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev precious_regex) 43343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev precious_files_regex="$arg" 43353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 43363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 43373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 43383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev release) 43393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev release="-$arg" 43403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 43413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 43423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 43433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rpath | xrpath) 43443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # We need an absolute path. 43453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $arg in 43463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev [\\/]* | [A-Za-z]:[\\/]*) ;; 43473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 43483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "only absolute run-paths are allowed" 43493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 43503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 43513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$prev" = rpath; then 43523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$rpath " in 43533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $arg "*) ;; 43543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) rpath="$rpath $arg" ;; 43553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 43563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 43573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$xrpath " in 43583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $arg "*) ;; 43593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) xrpath="$xrpath $arg" ;; 43603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 43613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 43623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 43633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 43643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 43653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shrext) 43663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shrext_cmds="$arg" 43673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 43683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 43693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 43703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev weak) 43713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev weak_libs="$weak_libs $arg" 43723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 43733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 43743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 43753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev xcclinker) 43763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev linker_flags="$linker_flags $qarg" 43773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compiler_flags="$compiler_flags $qarg" 43783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 43793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append compile_command " $qarg" 43803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append finalize_command " $qarg" 43813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 43823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 43833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev xcompiler) 43843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compiler_flags="$compiler_flags $qarg" 43853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 43863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append compile_command " $qarg" 43873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append finalize_command " $qarg" 43883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 43893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 43903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev xlinker) 43913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev linker_flags="$linker_flags $qarg" 43923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compiler_flags="$compiler_flags $wl$qarg" 43933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 43943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append compile_command " $wl$qarg" 43953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append finalize_command " $wl$qarg" 43963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 43973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 43983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 43993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "$prev=\"\$arg\"" 44003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 44013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 44023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 44033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 44043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi # test -n "$prev" 44053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 44063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prevarg="$arg" 44073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 44083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $arg in 44093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -all-static) 44103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$link_static_flag"; then 44113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # See comment for -static flag below, for more details. 44123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append compile_command " $link_static_flag" 44133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append finalize_command " $link_static_flag" 44143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 44153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 44163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 44173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 44183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -allow-undefined) 44193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # FIXME: remove this flag sometime in the future. 44203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "\`-allow-undefined' must not be used because it is the default" 44213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 44223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 44233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -avoid-version) 44243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev avoid_version=yes 44253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 44263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 44273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 44283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -dlopen) 44293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev=dlfiles 44303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 44313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 44323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 44333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -dlpreopen) 44343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev=dlprefiles 44353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 44363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 44373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 44383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -export-dynamic) 44393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev export_dynamic=yes 44403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 44413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 44423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 44433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -export-symbols | -export-symbols-regex) 44443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 44453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "more than one -exported-symbols argument is not allowed" 44463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 44473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$arg" = "X-export-symbols"; then 44483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev=expsyms 44493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 44503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev=expsyms_regex 44513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 44523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 44533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 44543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 44553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -framework) 44563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev=framework 44573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 44583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 44593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 44603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -inst-prefix-dir) 44613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev=inst_prefix 44623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 44633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 44643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 44653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 44663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # so, if we see these flags be careful not to treat them like -L 44673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -L[A-Z][A-Z]*:*) 44683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $with_gcc/$host in 44693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev no/*-*-irix* | /*-*-irix*) 44703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append compile_command " $arg" 44713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append finalize_command " $arg" 44723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 44733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 44743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 44753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 44763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 44773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -L*) 44783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname '-L' '' "$arg" 44793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dir=$func_stripname_result 44803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$dir"; then 44813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$#" -gt 0; then 44823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "require no space between \`-L' and \`$1'" 44833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 44843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "need path for \`-L' option" 44853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 44863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 44873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # We need an absolute path. 44883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $dir in 44893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev [\\/]* | [A-Za-z]:[\\/]*) ;; 44903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 44913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev absdir=`cd "$dir" && pwd` 44923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -z "$absdir" && \ 44933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "cannot determine absolute directory name of \`$dir'" 44943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dir="$absdir" 44953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 44963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 44973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$deplibs " in 44983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" -L$dir "*) ;; 44993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 45003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$deplibs -L$dir" 45013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lib_search_path="$lib_search_path $dir" 45023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 45033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 45043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 45053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 45063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` 45073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case :$dllsearchpath: in 45083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *":$dir:"*) ;; 45093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ::) dllsearchpath=$dir;; 45103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) dllsearchpath="$dllsearchpath:$dir";; 45113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 45123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case :$dllsearchpath: in 45133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *":$testbindir:"*) ;; 45143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ::) dllsearchpath=$testbindir;; 45153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) dllsearchpath="$dllsearchpath:$testbindir";; 45163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 45173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 45183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 45193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 45203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 45213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 45223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -l*) 45233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 45243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 45253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) 45263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # These systems don't actually have a C or math library (as such) 45273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 45283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 45293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-os2*) 45303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # These systems don't actually have a C library (as such) 45313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "X$arg" = "X-lc" && continue 45323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 45333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 45343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Do not include libc due to us having libc/libc_r. 45353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "X$arg" = "X-lc" && continue 45363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 45373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-rhapsody* | *-*-darwin1.[012]) 45383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Rhapsody C and math libraries are in the System framework 45393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$deplibs System.ltframework" 45403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 45413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 45423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-sco3.2v5* | *-*-sco5v6*) 45433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Causes problems with __ctype 45443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "X$arg" = "X-lc" && continue 45453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 45463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 45473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Compiler inserts libc in the correct place for threads to work 45483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "X$arg" = "X-lc" && continue 45493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 45503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 45513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test "X$arg" = "X-lc_r"; then 45523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 45533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 45543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Do not include libc_r directly, use -pthread flag. 45553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 45563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 45573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 45583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 45593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$deplibs $arg" 45603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 45613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 45623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 45633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -module) 45643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev module=yes 45653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 45663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 45673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 45683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Tru64 UNIX uses -model [arg] to determine the layout of C++ 45693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # classes, name mangling, and exception handling. 45703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Darwin uses the -arch flag to determine output architecture. 45713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -model|-arch|-isysroot) 45723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compiler_flags="$compiler_flags $arg" 45733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append compile_command " $arg" 45743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append finalize_command " $arg" 45753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev=xcompiler 45763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 45773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 45783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 45793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 45803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compiler_flags="$compiler_flags $arg" 45813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append compile_command " $arg" 45823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append finalize_command " $arg" 45833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$new_inherited_linker_flags " in 45843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $arg "*) ;; 45853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; 45863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 45873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 45883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 45893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 45903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -multi_module) 45913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev single_module="${wl}-multi_module" 45923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 45933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 45943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 45953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -no-fast-install) 45963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fast_install=no 45973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 45983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 45993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 46003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -no-install) 46013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 46023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 46033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The PATH hackery in wrapper scripts is required on Windows 46043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # and Darwin in order for the loader to find any dlls it needs. 46053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`-no-install' is ignored for $host" 46063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "assuming \`-no-fast-install' instead" 46073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fast_install=no 46083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 46093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) no_install=yes ;; 46103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 46113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 46123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 46133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 46143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -no-undefined) 46153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev allow_undefined=no 46163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 46173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 46183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 46193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -objectlist) 46203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev=objectlist 46213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 46223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 46233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 46243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -o) prev=output ;; 46253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 46263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -precious-files-regex) 46273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev=precious_regex 46283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 46293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 46303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 46313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -release) 46323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev=release 46333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 46343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 46353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 46363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -rpath) 46373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev=rpath 46383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 46393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 46403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 46413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -R) 46423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev=xrpath 46433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 46443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 46453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 46463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -R*) 46473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname '-R' '' "$arg" 46483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dir=$func_stripname_result 46493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # We need an absolute path. 46503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $dir in 46513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev [\\/]* | [A-Za-z]:[\\/]*) ;; 46523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 46533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "only absolute run-paths are allowed" 46543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 46553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 46563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$xrpath " in 46573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $dir "*) ;; 46583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) xrpath="$xrpath $dir" ;; 46593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 46603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 46613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 46623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 46633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -shared) 46643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The effects of -shared are defined in a previous loop. 46653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 46663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 46673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 46683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -shrext) 46693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev=shrext 46703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 46713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 46723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 46733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -static | -static-libtool-libs) 46743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The effects of -static are defined in a previous loop. 46753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # We used to do the same as -all-static on platforms that 46763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # didn't have a PIC flag, but the assumption that the effects 46773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # would be equivalent was wrong. It would break on at least 46783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Digital Unix and AIX. 46793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 46803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 46813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 46823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -thread-safe) 46833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev thread_safe=yes 46843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 46853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 46863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 46873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -version-info) 46883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev=vinfo 46893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 46903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 46913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 46923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -version-number) 46933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev=vinfo 46943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev vinfo_number=yes 46953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 46963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 46973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 46983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -weak) 46993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev=weak 47003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 47013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 47023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 47033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -Wc,*) 47043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname '-Wc,' '' "$arg" 47053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev args=$func_stripname_result 47063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg= 47073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev save_ifs="$IFS"; IFS=',' 47083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for flag in $args; do 47093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS="$save_ifs" 47103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_eval "$flag" 47113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg="$arg $wl$func_quote_for_eval_result" 47123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compiler_flags="$compiler_flags $func_quote_for_eval_result" 47133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 47143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS="$save_ifs" 47153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname ' ' '' "$arg" 47163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg=$func_stripname_result 47173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 47183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 47193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -Wl,*) 47203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname '-Wl,' '' "$arg" 47213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev args=$func_stripname_result 47223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg= 47233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev save_ifs="$IFS"; IFS=',' 47243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for flag in $args; do 47253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS="$save_ifs" 47263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_eval "$flag" 47273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg="$arg $wl$func_quote_for_eval_result" 47283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" 47293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev linker_flags="$linker_flags $func_quote_for_eval_result" 47303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 47313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS="$save_ifs" 47323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname ' ' '' "$arg" 47333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg=$func_stripname_result 47343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 47353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 47363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -Xcompiler) 47373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev=xcompiler 47383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 47393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 47403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 47413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -Xlinker) 47423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev=xlinker 47433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 47443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 47453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 47463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -XCClinker) 47473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev=xcclinker 47483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 47493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 47503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 47513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # -msg_* for osf cc 47523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -msg_*) 47533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_eval "$arg" 47543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg="$func_quote_for_eval_result" 47553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 47563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 47573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # -64, -mips[0-9] enable 64-bit mode on the SGI compiler 47583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # -r[0-9][0-9]* specifies the processor on the SGI compiler 47593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler 47603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # +DA*, +DD* enable 64-bit mode on the HP compiler 47613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # -q* pass through compiler args for the IBM compiler 47623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # -m*, -t[45]*, -txscale* pass through architecture-specific 47633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # compiler args for GCC 47643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # -F/path gives path to uninstalled frameworks, gcc on darwin 47653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC 47663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # @file GCC response files 47673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 47683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) 47693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_eval "$arg" 47703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg="$func_quote_for_eval_result" 47713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append compile_command " $arg" 47723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append finalize_command " $arg" 47733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compiler_flags="$compiler_flags $arg" 47743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 47753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 47763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 47773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Some other compiler flag. 47783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -* | +*) 47793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_eval "$arg" 47803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg="$func_quote_for_eval_result" 47813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 47823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 47833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.$objext) 47843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # A standard object. 47853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev objs="$objs $arg" 47863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 47873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 47883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.lo) 47893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # A libtool-controlled object. 47903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 47913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Check to see that this really is a libtool object. 47923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if func_lalib_unsafe_p "$arg"; then 47933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev pic_object= 47943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev non_pic_object= 47953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 47963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Read the .lo file 47973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_source "$arg" 47983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 47993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$pic_object" || 48003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -z "$non_pic_object" || 48013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$pic_object" = none && 48023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$non_pic_object" = none; then 48033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "cannot find name of object for \`$arg'" 48043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 48053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 48063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Extract subdirectory from the argument. 48073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_dirname "$arg" "/" "" 48083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev xdir="$func_dirname_result" 48093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 48103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$pic_object" != none; then 48113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Prepend the subdirectory the object is found in. 48123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev pic_object="$xdir$pic_object" 48133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 48143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$prev" = dlfiles; then 48153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 48163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlfiles="$dlfiles $pic_object" 48173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 48183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 48193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 48203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # If libtool objects are unsupported, then we need to preload. 48213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev=dlprefiles 48223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 48233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 48243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 48253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # CHECK ME: I think I busted this. -Ossama 48263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$prev" = dlprefiles; then 48273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Preload the old-style object. 48283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlprefiles="$dlprefiles $pic_object" 48293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 48303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 48313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 48323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # A PIC object. 48333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append libobjs " $pic_object" 48343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg="$pic_object" 48353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 48363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 48373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Non-PIC object. 48383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$non_pic_object" != none; then 48393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Prepend the subdirectory the object is found in. 48403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev non_pic_object="$xdir$non_pic_object" 48413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 48423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # A standard non-PIC object 48433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append non_pic_objects " $non_pic_object" 48443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$pic_object" || test "$pic_object" = none ; then 48453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg="$non_pic_object" 48463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 48473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 48483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # If the PIC object exists, use it instead. 48493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # $xdir was prepended to $pic_object above. 48503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev non_pic_object="$pic_object" 48513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append non_pic_objects " $non_pic_object" 48523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 48533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 48543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Only an error if not doing a dry-run. 48553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if $opt_dry_run; then 48563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Extract subdirectory from the argument. 48573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_dirname "$arg" "/" "" 48583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev xdir="$func_dirname_result" 48593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 48603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_lo2o "$arg" 48613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev pic_object=$xdir$objdir/$func_lo2o_result 48623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev non_pic_object=$xdir$func_lo2o_result 48633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append libobjs " $pic_object" 48643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append non_pic_objects " $non_pic_object" 48653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 48663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "\`$arg' is not a valid libtool object" 48673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 48683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 48693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 48703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 48713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.$libext) 48723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # An archive. 48733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$deplibs $arg" 48743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev old_deplibs="$old_deplibs $arg" 48753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 48763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 48773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 48783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.la) 48793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # A libtool-controlled library. 48803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 48813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$prev" = dlfiles; then 48823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # This library was specified with -dlopen. 48833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlfiles="$dlfiles $arg" 48843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 48853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test "$prev" = dlprefiles; then 48863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The library was specified with -dlpreopen. 48873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlprefiles="$dlprefiles $arg" 48883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prev= 48893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 48903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$deplibs $arg" 48913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 48923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 48933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 48943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 48953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Some other compiler argument. 48963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 48973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Unknown arguments in both finalize_command and compile_command need 48983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # to be aesthetically quoted because they are evaled later. 48993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_eval "$arg" 49003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev arg="$func_quote_for_eval_result" 49013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 49023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac # arg 49033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 49043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Now actually substitute the argument into the commands. 49053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$arg"; then 49063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append compile_command " $arg" 49073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append finalize_command " $arg" 49083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 49093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done # argument parsing loop 49103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 49113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$prev" && \ 49123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_help "the \`$prevarg' option requires an argument" 49133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 49143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 49153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval arg=\"$export_dynamic_flag_spec\" 49163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append compile_command " $arg" 49173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append finalize_command " $arg" 49183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 49193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 49203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev oldlibs= 49213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # calculate the name of the file, without its directory 49223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_basename "$output" 49233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev outputname="$func_basename_result" 49243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libobjs_save="$libobjs" 49253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 49263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$shlibpath_var"; then 49273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # get the directories listed in $shlibpath_var 49283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` 49293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 49303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shlib_search_path= 49313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 49323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 49333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 49343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 49353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_dirname "$output" "/" "" 49363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev output_objdir="$func_dirname_result$objdir" 49373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Create the object directory. 49383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_mkdir_p "$output_objdir" 49393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 49403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Determine the type of output 49413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $output in 49423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev "") 49433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_help "you must specify an output file" 49443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 49453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.$libext) linkmode=oldlib ;; 49463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.lo | *.$objext) linkmode=obj ;; 49473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.la) linkmode=lib ;; 49483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) linkmode=prog ;; # Anything else should be a program. 49493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 49503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 49513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev specialdeplibs= 49523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 49533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libs= 49543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Find all interdependent deplibs by searching for libraries 49553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # that are linked more than once (e.g. -la -lb -la) 49563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for deplib in $deplibs; do 49573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if $opt_duplicate_deps ; then 49583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$libs " in 49593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 49603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 49613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 49623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libs="$libs $deplib" 49633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 49643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 49653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode" = lib; then 49663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libs="$predeps $libs $compiler_lib_search_path $postdeps" 49673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 49683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Compute libraries that are listed more than once in $predeps 49693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # $postdeps and mark them as special (i.e., whose duplicates are 49703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # not to be eliminated). 49713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev pre_post_deps= 49723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if $opt_duplicate_compiler_generated_deps; then 49733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for pre_post_dep in $predeps $postdeps; do 49743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$pre_post_deps " in 49753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; 49763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 49773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev pre_post_deps="$pre_post_deps $pre_post_dep" 49783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 49793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 49803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev pre_post_deps= 49813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 49823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 49833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs= 49843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdependency_libs= 49853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newlib_search_path= 49863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev need_relink=no # whether we're linking any uninstalled libtool libraries 49873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev notinst_deplibs= # not-installed libtool libraries 49883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev notinst_path= # paths that contain not-installed libtool libraries 49893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 49903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $linkmode in 49913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lib) 49923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev passes="conv dlpreopen link" 49933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for file in $dlfiles $dlprefiles; do 49943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $file in 49953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.la) ;; 49963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 49973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 49983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 49993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 50003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 50013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 50023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prog) 50033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_deplibs= 50043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_deplibs= 50053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev alldeplibs=no 50063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdlfiles= 50073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdlprefiles= 50083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev passes="conv scan dlopen dlpreopen link" 50093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 50103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) passes="conv" 50113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 50123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 50133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 50143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for pass in $passes; do 50153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The preopen pass in lib mode reverses $deplibs; put it back here 50163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # so that -L comes before libs that need it for instance... 50173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode,$pass" = "lib,link"; then 50183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ## FIXME: Find the place where the list is rebuilt in the wrong 50193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ## order, and fix it there properly 50203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_deplibs= 50213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for deplib in $deplibs; do 50223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_deplibs="$deplib $tmp_deplibs" 50233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 50243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$tmp_deplibs" 50253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 50263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 50273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode,$pass" = "lib,link" || 50283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$linkmode,$pass" = "prog,scan"; then 50293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libs="$deplibs" 50303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs= 50313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 50323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode" = prog; then 50333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $pass in 50343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlopen) libs="$dlfiles" ;; 50353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlpreopen) libs="$dlprefiles" ;; 50363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 50373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 50383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 50393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode,$pass" = "lib,dlpreopen"; then 50403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Collect and forward deplibs of preopened libtool libs 50413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for lib in $dlprefiles; do 50423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Ignore non-libtool-libs 50433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dependency_libs= 50443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $lib in 50453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.la) func_source "$lib" ;; 50463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 50473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 50483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Collect preopened libtool deplibs, except any this library 50493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # has declared as weak libs 50503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for deplib in $dependency_libs; do 50513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` 50523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $weak_libs " in 50533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $deplib_base "*) ;; 50543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) deplibs="$deplibs $deplib" ;; 50553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 50563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 50573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 50583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libs="$dlprefiles" 50593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 50603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$pass" = dlopen; then 50613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Collect dlpreopened libraries 50623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev save_deplibs="$deplibs" 50633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs= 50643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 50653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 50663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for deplib in $libs; do 50673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lib= 50683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev found=no 50693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $deplib in 50703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 50713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode,$pass" = "prog,link"; then 50723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_deplibs="$deplib $compile_deplibs" 50733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_deplibs="$deplib $finalize_deplibs" 50743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 50753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compiler_flags="$compiler_flags $deplib" 50763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode" = lib ; then 50773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$new_inherited_linker_flags " in 50783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $deplib "*) ;; 50793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 50803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 50813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 50823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 50833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 50843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 50853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -l*) 50863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode" != lib && test "$linkmode" != prog; then 50873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`-l' is ignored for archives/objects" 50883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 50893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 50903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname '-l' '' "$deplib" 50913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev name=$func_stripname_result 50923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode" = lib; then 50933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 50943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 50953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 50963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 50973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for searchdir in $searchdirs; do 50983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for search_ext in .la $std_shrext .so .a; do 50993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Search the libtool library 51003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lib="$searchdir/lib${name}${search_ext}" 51013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -f "$lib"; then 51023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$search_ext" = ".la"; then 51033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev found=yes 51043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 51053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev found=no 51063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 51073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev break 2 51083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 51093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 51103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 51113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$found" != yes; then 51123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # deplib doesn't seem to be a libtool library 51133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode,$pass" = "prog,link"; then 51143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_deplibs="$deplib $compile_deplibs" 51153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_deplibs="$deplib $finalize_deplibs" 51163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 51173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$deplib $deplibs" 51183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 51193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 51203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 51213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else # deplib is a libtool library 51223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 51233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # We need to do some special things here, and not later. 51243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 51253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $predeps $postdeps " in 51263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $deplib "*) 51273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if func_lalib_p "$lib"; then 51283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev library_names= 51293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev old_library= 51303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_source "$lib" 51313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for l in $old_library $library_names; do 51323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ll="$l" 51333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 51343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$ll" = "X$old_library" ; then # only static version available 51353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev found=no 51363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_dirname "$lib" "" "." 51373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ladir="$func_dirname_result" 51383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lib=$ladir/$old_library 51393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode,$pass" = "prog,link"; then 51403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_deplibs="$deplib $compile_deplibs" 51413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_deplibs="$deplib $finalize_deplibs" 51423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 51433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$deplib $deplibs" 51443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 51453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 51463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 51473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 51483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 51493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 51503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) ;; 51513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 51523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 51533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 51543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; # -l 51553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.ltframework) 51563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode,$pass" = "prog,link"; then 51573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_deplibs="$deplib $compile_deplibs" 51583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_deplibs="$deplib $finalize_deplibs" 51593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 51603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$deplib $deplibs" 51613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode" = lib ; then 51623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$new_inherited_linker_flags " in 51633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $deplib "*) ;; 51643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 51653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 51663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 51673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 51683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 51693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 51703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -L*) 51713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $linkmode in 51723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lib) 51733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$deplib $deplibs" 51743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$pass" = conv && continue 51753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdependency_libs="$deplib $newdependency_libs" 51763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname '-L' '' "$deplib" 51773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newlib_search_path="$newlib_search_path $func_stripname_result" 51783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 51793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prog) 51803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$pass" = conv; then 51813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$deplib $deplibs" 51823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 51833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 51843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$pass" = scan; then 51853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$deplib $deplibs" 51863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 51873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_deplibs="$deplib $compile_deplibs" 51883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_deplibs="$deplib $finalize_deplibs" 51893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 51903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname '-L' '' "$deplib" 51913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newlib_search_path="$newlib_search_path $func_stripname_result" 51923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 51933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 51943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`-L' is ignored for archives/objects" 51953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 51963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac # linkmode 51973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 51983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; # -L 51993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -R*) 52003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$pass" = link; then 52013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname '-R' '' "$deplib" 52023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dir=$func_stripname_result 52033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Make sure the xrpath contains only unique directories. 52043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$xrpath " in 52053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $dir "*) ;; 52063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) xrpath="$xrpath $dir" ;; 52073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 52083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 52093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$deplib $deplibs" 52103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 52113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 52123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.la) lib="$deplib" ;; 52133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.$libext) 52143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$pass" = conv; then 52153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$deplib $deplibs" 52163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 52173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 52183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $linkmode in 52193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lib) 52203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Linking convenience modules into shared libraries is allowed, 52213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # but linking other static libraries is non-portable. 52223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $dlpreconveniencelibs " in 52233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $deplib "*) ;; 52243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 52253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev valid_a_lib=no 52263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $deplibs_check_method in 52273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev match_pattern*) 52283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev set dummy $deplibs_check_method; shift 52293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 52303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ 52313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev | $EGREP "$match_pattern_regex" > /dev/null; then 52323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev valid_a_lib=yes 52333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 52343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 52353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev pass_all) 52363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev valid_a_lib=yes 52373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 52383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 52393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$valid_a_lib" != yes; then 52403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO 52413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** Warning: Trying to link with static lib archive $deplib." 52423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** I have the capability to make that library automatically link in when" 52433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** you link to this library. But I can only do this if you have a" 52443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** shared version of the library, which you do not appear to have" 52453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** because the file extensions .$libext of this argument makes me believe" 52463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** that it is just a static archive that I should not use here." 52473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 52483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO 52493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** Warning: Linking the shared library $output against the" 52503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** static library $deplib is not portable!" 52513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$deplib $deplibs" 52523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 52533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 52543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 52553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 52563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 52573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prog) 52583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$pass" != link; then 52593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$deplib $deplibs" 52603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 52613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_deplibs="$deplib $compile_deplibs" 52623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_deplibs="$deplib $finalize_deplibs" 52633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 52643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 52653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 52663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac # linkmode 52673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; # *.$libext 52683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.lo | *.$objext) 52693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$pass" = conv; then 52703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$deplib $deplibs" 52713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test "$linkmode" = prog; then 52723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 52733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # If there is no dlopen support or we're linking statically, 52743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # we need to preload. 52753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdlprefiles="$newdlprefiles $deplib" 52763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_deplibs="$deplib $compile_deplibs" 52773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_deplibs="$deplib $finalize_deplibs" 52783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 52793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdlfiles="$newdlfiles $deplib" 52803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 52813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 52823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 52833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 52843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev %DEPLIBS%) 52853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev alldeplibs=yes 52863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 52873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 52883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac # case $deplib 52893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 52903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$found" = yes || test -f "$lib"; then : 52913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 52923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 52933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 52943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 52953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Check to see that this really is a libtool archive. 52963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_lalib_unsafe_p "$lib" \ 52973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev || func_fatal_error "\`$lib' is not a valid libtool archive" 52983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 52993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_dirname "$lib" "" "." 53003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ladir="$func_dirname_result" 53013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 53023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlname= 53033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlopen= 53043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlpreopen= 53053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libdir= 53063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev library_names= 53073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev old_library= 53083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev inherited_linker_flags= 53093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # If the library was installed with an old release of libtool, 53103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # it will not redefine variables installed, or shouldnotlink 53113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev installed=yes 53123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shouldnotlink=no 53133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev avoidtemprpath= 53143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 53153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 53163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Read the .la file 53173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_source "$lib" 53183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 53193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Convert "-framework foo" to "foo.ltframework" 53203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$inherited_linker_flags"; then 53213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` 53223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 53233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $new_inherited_linker_flags " in 53243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $tmp_inherited_linker_flag "*) ;; 53253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; 53263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 53273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 53283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 53293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 53303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode,$pass" = "lib,link" || 53313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$linkmode,$pass" = "prog,scan" || 53323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { test "$linkmode" != prog && test "$linkmode" != lib; }; then 53333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$dlopen" && dlfiles="$dlfiles $dlopen" 53343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" 53353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 53363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 53373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$pass" = conv; then 53383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Only check for convenience libraries 53393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$lib $deplibs" 53403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$libdir"; then 53413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$old_library"; then 53423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "cannot find name of link library for \`$lib'" 53433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 53443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # It is a libtool convenience library, so add in its objects. 53453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev convenience="$convenience $ladir/$objdir/$old_library" 53463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev old_convenience="$old_convenience $ladir/$objdir/$old_library" 53473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test "$linkmode" != prog && test "$linkmode" != lib; then 53483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "\`$lib' is not a convenience library" 53493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 53503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_libs= 53513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for deplib in $dependency_libs; do 53523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$deplib $deplibs" 53533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if $opt_duplicate_deps ; then 53543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$tmp_libs " in 53553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 53563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 53573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 53583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_libs="$tmp_libs $deplib" 53593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 53603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 53613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi # $pass = conv 53623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 53633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 53643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Get the name of the library we link against. 53653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev linklib= 53663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for l in $old_library $library_names; do 53673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev linklib="$l" 53683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 53693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$linklib"; then 53703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "cannot find name of link library for \`$lib'" 53713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 53723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 53733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # This library was specified with -dlopen. 53743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$pass" = dlopen; then 53753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$libdir"; then 53763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 53773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 53783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$dlname" || 53793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$dlopen_support" != yes || 53803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$build_libtool_libs" = no; then 53813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # If there is no dlname, no dlopen support or we're linking 53823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # statically, we need to preload. We also need to preload any 53833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # dependent libraries so libltdl's deplib preloader doesn't 53843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # bomb out in the load deplibs phase. 53853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlprefiles="$dlprefiles $lib $dependency_libs" 53863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 53873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdlfiles="$newdlfiles $lib" 53883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 53893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 53903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi # $pass = dlopen 53913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 53923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # We need an absolute path. 53933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $ladir in 53943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 53953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 53963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev abs_ladir=`cd "$ladir" && pwd` 53973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$abs_ladir"; then 53983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "cannot determine absolute directory name of \`$ladir'" 53993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "passing it literally to the linker, although it might fail" 54003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev abs_ladir="$ladir" 54013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 54023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 54033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 54043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_basename "$lib" 54053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev laname="$func_basename_result" 54063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 54073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Find the relevant object directory and library name. 54083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$installed" = Xyes; then 54093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 54103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "library \`$lib' was moved." 54113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dir="$ladir" 54123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev absdir="$abs_ladir" 54133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libdir="$abs_ladir" 54143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 54153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dir="$libdir" 54163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev absdir="$libdir" 54173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 54183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 54193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 54203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 54213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dir="$ladir" 54223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev absdir="$abs_ladir" 54233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Remove this search path later 54243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev notinst_path="$notinst_path $abs_ladir" 54253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 54263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dir="$ladir/$objdir" 54273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev absdir="$abs_ladir/$objdir" 54283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Remove this search path later 54293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev notinst_path="$notinst_path $abs_ladir" 54303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 54313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi # $installed = yes 54323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname 'lib' '.la' "$laname" 54333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev name=$func_stripname_result 54343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 54353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # This library was specified with -dlpreopen. 54363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$pass" = dlpreopen; then 54373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$libdir" && test "$linkmode" = prog; then 54383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 54393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 54403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Prefer using a static library (so that no silly _DYNAMIC symbols 54413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # are required to link). 54423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$old_library"; then 54433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdlprefiles="$newdlprefiles $dir/$old_library" 54443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Keep a list of preopened convenience libraries to check 54453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # that they are being used correctly in the link pass. 54463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -z "$libdir" && \ 54473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" 54483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Otherwise, use the dlname, so that lt_dlopen finds it. 54493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test -n "$dlname"; then 54503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdlprefiles="$newdlprefiles $dir/$dlname" 54513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 54523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdlprefiles="$newdlprefiles $dir/$linklib" 54533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 54543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi # $pass = dlpreopen 54553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 54563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$libdir"; then 54573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Link the convenience library 54583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode" = lib; then 54593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$dir/$old_library $deplibs" 54603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test "$linkmode,$pass" = "prog,link"; then 54613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_deplibs="$dir/$old_library $compile_deplibs" 54623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_deplibs="$dir/$old_library $finalize_deplibs" 54633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 54643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$lib $deplibs" # used for prog,scan pass 54653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 54663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 54673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 54683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 54693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 54703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode" = prog && test "$pass" != link; then 54713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newlib_search_path="$newlib_search_path $ladir" 54723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$lib $deplibs" 54733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 54743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev linkalldeplibs=no 54753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$link_all_deplibs" != no || test -z "$library_names" || 54763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$build_libtool_libs" = no; then 54773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev linkalldeplibs=yes 54783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 54793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 54803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_libs= 54813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for deplib in $dependency_libs; do 54823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $deplib in 54833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -L*) func_stripname '-L' '' "$deplib" 54843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newlib_search_path="$newlib_search_path $func_stripname_result" 54853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 54863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 54873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Need to link against all dependency_libs? 54883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkalldeplibs" = yes; then 54893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$deplib $deplibs" 54903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 54913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Need to hardcode shared library paths 54923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # or/and link against static libraries 54933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdependency_libs="$deplib $newdependency_libs" 54943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 54953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if $opt_duplicate_deps ; then 54963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$tmp_libs " in 54973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 54983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 54993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 55003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_libs="$tmp_libs $deplib" 55013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done # for deplib 55023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 55033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi # $linkmode = prog... 55043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 55053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode,$pass" = "prog,link"; then 55063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$library_names" && 55073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { { test "$prefer_static_libs" = no || 55083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$prefer_static_libs,$installed" = "built,yes"; } || 55093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -z "$old_library"; }; then 55103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # We need to hardcode the library path 55113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 55123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Make sure the rpath contains only unique directories. 55133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$temp_rpath:" in 55143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *"$absdir:"*) ;; 55153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) temp_rpath="$temp_rpath$absdir:" ;; 55163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 55173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 55183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 55193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Hardcode the library path. 55203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Skip directories that are in the system default run-time 55213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # search path. 55223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $sys_lib_dlsearch_path " in 55233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $absdir "*) ;; 55243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 55253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$compile_rpath " in 55263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $absdir "*) ;; 55273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) compile_rpath="$compile_rpath $absdir" 55283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 55293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 55303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 55313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $sys_lib_dlsearch_path " in 55323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $libdir "*) ;; 55333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 55343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$finalize_rpath " in 55353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $libdir "*) ;; 55363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) finalize_rpath="$finalize_rpath $libdir" 55373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 55383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 55393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 55403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi # $linkmode,$pass = prog,link... 55413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 55423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$alldeplibs" = yes && 55433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { test "$deplibs_check_method" = pass_all || 55443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { test "$build_libtool_libs" = yes && 55453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$library_names"; }; }; then 55463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # We only need to search for static libraries 55473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 55483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 55493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 55503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 55513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev link_static=no # Whether the deplib will be linked statically 55523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev use_static_libs=$prefer_static_libs 55533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$use_static_libs" = built && test "$installed" = yes; then 55543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev use_static_libs=no 55553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 55563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$library_names" && 55573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { test "$use_static_libs" = no || test -z "$old_library"; }; then 55583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 55593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *cygwin* | *mingw* | *cegcc*) 55603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # No point in relinking DLLs because paths are not encoded 55613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev notinst_deplibs="$notinst_deplibs $lib" 55623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev need_relink=no 55633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 55643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 55653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$installed" = no; then 55663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev notinst_deplibs="$notinst_deplibs $lib" 55673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev need_relink=yes 55683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 55693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 55703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 55713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # This is a shared library 55723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 55733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Warn about portability, can't link against -module's on some 55743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # systems (darwin). Don't bleat about dlopened modules though! 55753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlopenmodule="" 55763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for dlpremoduletest in $dlprefiles; do 55773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$dlpremoduletest" = "X$lib"; then 55783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlopenmodule="$dlpremoduletest" 55793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev break 55803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 55813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 55823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 55833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO 55843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode" = prog; then 55853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** Warning: Linking the executable $output against the loadable module" 55863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 55873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** Warning: Linking the shared library $output against the loadable module" 55883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 55893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** $linklib is not portable!" 55903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 55913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode" = lib && 55923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$hardcode_into_libs" = yes; then 55933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Hardcode the library path. 55943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Skip directories that are in the system default run-time 55953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # search path. 55963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $sys_lib_dlsearch_path " in 55973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $absdir "*) ;; 55983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 55993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$compile_rpath " in 56003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $absdir "*) ;; 56013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) compile_rpath="$compile_rpath $absdir" 56023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 56033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 56043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 56053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $sys_lib_dlsearch_path " in 56063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $libdir "*) ;; 56073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 56083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$finalize_rpath " in 56093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $libdir "*) ;; 56103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) finalize_rpath="$finalize_rpath $libdir" 56113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 56123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 56133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 56143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 56153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 56163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$old_archive_from_expsyms_cmds"; then 56173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # figure out the soname 56183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev set dummy $library_names 56193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 56203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev realname="$1" 56213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 56223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libname=`eval "\\$ECHO \"$libname_spec\""` 56233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # use dlname if we got it. it's perfectly good, no? 56243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$dlname"; then 56253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev soname="$dlname" 56263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test -n "$soname_spec"; then 56273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # bleh windows 56283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 56293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *cygwin* | mingw* | *cegcc*) 56303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_arith $current - $age 56313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev major=$func_arith_result 56323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev versuffix="-$major" 56333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 56343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 56353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval soname=\"$soname_spec\" 56363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 56373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev soname="$realname" 56383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 56393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 56403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Make a new name for the extract_expsyms_cmds to use 56413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev soroot="$soname" 56423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_basename "$soroot" 56433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev soname="$func_basename_result" 56443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname 'lib' '.dll' "$soname" 56453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newlib=libimp-$func_stripname_result.a 56463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 56473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # If the library has no export list, then create one now 56483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -f "$output_objdir/$soname-def"; then : 56493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 56503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_verbose "extracting exported symbol list from \`$soname'" 56513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 56523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 56533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 56543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Create $newlib 56553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -f "$output_objdir/$newlib"; then :; else 56563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_verbose "generating import library for \`$soname'" 56573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 56583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 56593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # make sure the library variables are pointing to the new library 56603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dir=$output_objdir 56613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev linklib=$newlib 56623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi # test -n "$old_archive_from_expsyms_cmds" 56633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 56643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode" = prog || test "$mode" != relink; then 56653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add_shlibpath= 56663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add_dir= 56673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add= 56683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lib_linked=yes 56693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $hardcode_action in 56703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev immediate | unsupported) 56713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$hardcode_direct" = no; then 56723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add="$dir/$linklib" 56733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 56743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 56753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-sysv4*uw2*) add_dir="-L$dir" ;; 56763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 56773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-unixware7*) add_dir="-L$dir" ;; 56783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-darwin* ) 56793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # if the lib is a (non-dlopened) module then we can not 56803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # link against it, someone is ignoring the earlier warnings 56813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if /usr/bin/file -L $add 2> /dev/null | 56823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $GREP ": [^:]* bundle" >/dev/null ; then 56833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$dlopenmodule" != "X$lib"; then 56843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** Warning: lib $linklib is a module, not a shared library" 56853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$old_library" ; then 56863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO 56873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** And there doesn't seem to be a static archive available" 56883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** The link will probably fail, sorry" 56893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 56903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add="$dir/$old_library" 56913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 56923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test -n "$old_library"; then 56933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add="$dir/$old_library" 56943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 56953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 56963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 56973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test "$hardcode_minus_L" = no; then 56983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 56993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-sunos*) add_shlibpath="$dir" ;; 57003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 57013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add_dir="-L$dir" 57023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add="-l$name" 57033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test "$hardcode_shlibpath_var" = no; then 57043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add_shlibpath="$dir" 57053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add="-l$name" 57063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 57073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lib_linked=no 57083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 57093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 57103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink) 57113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$hardcode_direct" = yes && 57123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$hardcode_direct_absolute" = no; then 57133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add="$dir/$linklib" 57143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test "$hardcode_minus_L" = yes; then 57153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add_dir="-L$dir" 57163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Try looking first in the location we're being installed to. 57173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$inst_prefix_dir"; then 57183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $libdir in 57193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev [\\/]*) 57203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add_dir="$add_dir -L$inst_prefix_dir$libdir" 57213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 57223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 57233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 57243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add="-l$name" 57253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test "$hardcode_shlibpath_var" = yes; then 57263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add_shlibpath="$dir" 57273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add="-l$name" 57283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 57293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lib_linked=no 57303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 57313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 57323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) lib_linked=no ;; 57333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 57343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 57353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$lib_linked" != yes; then 57363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_configuration "unsupported hardcode properties" 57373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 57383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 57393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$add_shlibpath"; then 57403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case :$compile_shlibpath: in 57413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *":$add_shlibpath:"*) ;; 57423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; 57433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 57443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 57453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode" = prog; then 57463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 57473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$add" && compile_deplibs="$add $compile_deplibs" 57483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 57493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$add_dir" && deplibs="$add_dir $deplibs" 57503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$add" && deplibs="$add $deplibs" 57513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$hardcode_direct" != yes && 57523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$hardcode_minus_L" != yes && 57533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$hardcode_shlibpath_var" = yes; then 57543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case :$finalize_shlibpath: in 57553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *":$libdir:"*) ;; 57563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 57573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 57583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 57593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 57603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 57613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 57623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode" = prog || test "$mode" = relink; then 57633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add_shlibpath= 57643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add_dir= 57653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add= 57663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Finalize command for both is simple: just hardcode it. 57673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$hardcode_direct" = yes && 57683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$hardcode_direct_absolute" = no; then 57693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add="$libdir/$linklib" 57703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test "$hardcode_minus_L" = yes; then 57713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add_dir="-L$libdir" 57723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add="-l$name" 57733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test "$hardcode_shlibpath_var" = yes; then 57743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case :$finalize_shlibpath: in 57753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *":$libdir:"*) ;; 57763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 57773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 57783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add="-l$name" 57793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test "$hardcode_automatic" = yes; then 57803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$inst_prefix_dir" && 57813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -f "$inst_prefix_dir$libdir/$linklib" ; then 57823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add="$inst_prefix_dir$libdir/$linklib" 57833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 57843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add="$libdir/$linklib" 57853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 57863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 57873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # We cannot seem to hardcode it, guess we'll fake it. 57883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add_dir="-L$libdir" 57893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Try looking first in the location we're being installed to. 57903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$inst_prefix_dir"; then 57913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $libdir in 57923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev [\\/]*) 57933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add_dir="$add_dir -L$inst_prefix_dir$libdir" 57943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 57953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 57963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 57973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev add="-l$name" 57983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 57993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 58003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode" = prog; then 58013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 58023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 58033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 58043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$add_dir" && deplibs="$add_dir $deplibs" 58053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$add" && deplibs="$add $deplibs" 58063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 58073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 58083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test "$linkmode" = prog; then 58093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Here we assume that one of hardcode_direct or hardcode_minus_L 58103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # is not unsupported. This is valid on all known static and 58113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # shared platforms. 58123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$hardcode_direct" != unsupported; then 58133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$old_library" && linklib="$old_library" 58143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_deplibs="$dir/$linklib $compile_deplibs" 58153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_deplibs="$dir/$linklib $finalize_deplibs" 58163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 58173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_deplibs="-l$name -L$dir $compile_deplibs" 58183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_deplibs="-l$name -L$dir $finalize_deplibs" 58193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 58203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test "$build_libtool_libs" = yes; then 58213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Not a shared library 58223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$deplibs_check_method" != pass_all; then 58233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # We're trying link a shared library against a static one 58243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # but the system doesn't support it. 58253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 58263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Just print a warning and add the library to dependency_libs so 58273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # that the program can be linked against the static library. 58283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO 58293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** Warning: This system can not link to static lib archive $lib." 58303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** I have the capability to make that library automatically link in when" 58313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** you link to this library. But I can only do this if you have a" 58323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** shared version of the library, which you do not appear to have." 58333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$module" = yes; then 58343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** But as you try to build a module library, libtool will still create " 58353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** a static module, that should work as long as the dlopening application" 58363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." 58373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$global_symbol_pipe"; then 58383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO 58393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** However, this would only work if libtool was able to extract symbol" 58403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" 58413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** not find such a program. So, this module is probably useless." 58423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." 58433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 58443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_old_libs" = no; then 58453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev build_libtool_libs=module 58463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev build_old_libs=yes 58473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 58483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev build_libtool_libs=no 58493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 58503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 58513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 58523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$dir/$old_library $deplibs" 58533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev link_static=yes 58543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 58553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi # link shared/static library? 58563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 58573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode" = lib; then 58583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$dependency_libs" && 58593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { test "$hardcode_into_libs" != yes || 58603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$build_old_libs" = yes || 58613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$link_static" = yes; }; then 58623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Extract -R from dependency_libs 58633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev temp_deplibs= 58643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for libdir in $dependency_libs; do 58653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $libdir in 58663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -R*) func_stripname '-R' '' "$libdir" 58673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev temp_xrpath=$func_stripname_result 58683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $xrpath " in 58693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $temp_xrpath "*) ;; 58703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) xrpath="$xrpath $temp_xrpath";; 58713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac;; 58723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) temp_deplibs="$temp_deplibs $libdir";; 58733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 58743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 58753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dependency_libs="$temp_deplibs" 58763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 58773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 58783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newlib_search_path="$newlib_search_path $absdir" 58793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Link against this library 58803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 58813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # ... and its dependency_libs 58823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_libs= 58833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for deplib in $dependency_libs; do 58843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdependency_libs="$deplib $newdependency_libs" 58853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if $opt_duplicate_deps ; then 58863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$tmp_libs " in 58873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 58883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 58893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 58903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_libs="$tmp_libs $deplib" 58913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 58923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 58933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$link_all_deplibs" != no; then 58943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Add the search paths of all dependency libraries 58953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for deplib in $dependency_libs; do 58963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $deplib in 58973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -L*) path="$deplib" ;; 58983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.la) 58993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_dirname "$deplib" "" "." 59003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dir="$func_dirname_result" 59013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # We need an absolute path. 59023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $dir in 59033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 59043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 59053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev absdir=`cd "$dir" && pwd` 59063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$absdir"; then 59073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "cannot determine absolute directory name of \`$dir'" 59083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev absdir="$dir" 59093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 59103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 59113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 59123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if $GREP "^installed=no" $deplib > /dev/null; then 59133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 59143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-darwin*) 59153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev depdepl= 59163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 59173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$deplibrary_names" ; then 59183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for tmp in $deplibrary_names ; do 59193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev depdepl=$tmp 59203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 59213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -f "$absdir/$objdir/$depdepl" ; then 59223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev depdepl="$absdir/$objdir/$depdepl" 59233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 59243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$darwin_install_name"; then 59253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 59263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 59273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 59283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" 59293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev path= 59303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 59313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 59323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 59333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 59343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev path="-L$absdir/$objdir" 59353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 59363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 59373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 59383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 59393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -z "$libdir" && \ 59403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "\`$deplib' is not a valid libtool archive" 59413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$absdir" != "$libdir" && \ 59423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`$deplib' seems to be moved" 59433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 59443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev path="-L$absdir" 59453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 59463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 59473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 59483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $deplibs " in 59493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $path "*) ;; 59503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) deplibs="$path $deplibs" ;; 59513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 59523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 59533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi # link_all_deplibs != no 59543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi # linkmode = lib 59553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done # for deplib in $libs 59563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$pass" = link; then 59573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode" = "prog"; then 59583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 59593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 59603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 59613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 59623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 59633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 59643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dependency_libs="$newdependency_libs" 59653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$pass" = dlpreopen; then 59663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Link the dlpreopened libraries before other libraries 59673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for deplib in $save_deplibs; do 59683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$deplib $deplibs" 59693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 59703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 59713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$pass" != dlopen; then 59723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$pass" != conv; then 59733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Make sure lib_search_path contains only unique directories. 59743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lib_search_path= 59753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for dir in $newlib_search_path; do 59763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$lib_search_path " in 59773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $dir "*) ;; 59783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) lib_search_path="$lib_search_path $dir" ;; 59793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 59803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 59813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newlib_search_path= 59823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 59833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 59843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode,$pass" != "prog,link"; then 59853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev vars="deplibs" 59863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 59873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev vars="compile_deplibs finalize_deplibs" 59883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 59893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for var in $vars dependency_libs; do 59903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Add libraries to $var in reverse order 59913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval tmp_libs=\"\$$var\" 59923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev new_libs= 59933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for deplib in $tmp_libs; do 59943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # FIXME: Pedantically, this is the right thing to do, so 59953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # that some nasty dependency loop isn't accidentally 59963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # broken: 59973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev #new_libs="$deplib $new_libs" 59983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Pragmatically, this seems to cause very few problems in 59993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # practice: 60003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $deplib in 60013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -L*) new_libs="$deplib $new_libs" ;; 60023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -R*) ;; 60033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 60043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # And here is the reason: when a library appears more 60053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # than once as an explicit dependence of a library, or 60063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # is implicitly linked in more than once by the 60073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # compiler, it is considered special, and multiple 60083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # occurrences thereof are not removed. Compare this 60093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # with having the same library being listed as a 60103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # dependency of multiple other libraries: in this case, 60113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # we know (pedantically, we assume) the library does not 60123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # need to be listed more than once, so we keep only the 60133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # last copy. This is not always right, but it is rare 60143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # enough that we require users that really mean to play 60153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # such unportable linking tricks to link the library 60163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # using -Wl,-lname, so that libtool does not consider it 60173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # for duplicate removal. 60183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $specialdeplibs " in 60193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $deplib "*) new_libs="$deplib $new_libs" ;; 60203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 60213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $new_libs " in 60223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $deplib "*) ;; 60233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) new_libs="$deplib $new_libs" ;; 60243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 60253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 60263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 60273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 60283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 60293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 60303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_libs= 60313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for deplib in $new_libs; do 60323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $deplib in 60333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -L*) 60343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $tmp_libs " in 60353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $deplib "*) ;; 60363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) tmp_libs="$tmp_libs $deplib" ;; 60373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 60383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 60393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) tmp_libs="$tmp_libs $deplib" ;; 60403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 60413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 60423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval $var=\"$tmp_libs\" 60433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done # for var 60443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 60453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Last step: remove runtime libs from dependency_libs 60463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # (they stay in deplibs) 60473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_libs= 60483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for i in $dependency_libs ; do 60493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $predeps $postdeps $compiler_lib_search_path " in 60503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $i "*) 60513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev i="" 60523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 60533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 60543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$i" ; then 60553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_libs="$tmp_libs $i" 60563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 60573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 60583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dependency_libs=$tmp_libs 60593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done # for pass 60603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode" = prog; then 60613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlfiles="$newdlfiles" 60623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 60633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$linkmode" = prog || test "$linkmode" = lib; then 60643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlprefiles="$newdlprefiles" 60653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 60663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 60673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $linkmode in 60683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev oldlib) 60693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 60703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`-dlopen' is ignored for archives" 60713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 60723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 60733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $deplibs" in 60743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *\ -l* | *\ -L*) 60753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`-l' and \`-L' are ignored for archives" ;; 60763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 60773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 60783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$rpath" && \ 60793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`-rpath' is ignored for archives" 60803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 60813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$xrpath" && \ 60823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`-R' is ignored for archives" 60833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 60843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$vinfo" && \ 60853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`-version-info/-version-number' is ignored for archives" 60863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 60873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$release" && \ 60883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`-release' is ignored for archives" 60893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 60903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$export_symbols$export_symbols_regex" && \ 60913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`-export-symbols' is ignored for archives" 60923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 60933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Now set the variables for building old libraries. 60943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev build_libtool_libs=no 60953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev oldlibs="$output" 60963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev objs="$objs$old_deplibs" 60973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 60983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 60993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lib) 61003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Make sure we only generate libraries of the form `libNAME.la'. 61013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $outputname in 61023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lib*) 61033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname 'lib' '.la' "$outputname" 61043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev name=$func_stripname_result 61053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval shared_ext=\"$shrext_cmds\" 61063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval libname=\"$libname_spec\" 61073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 61083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 61093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$module" = no && \ 61103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_help "libtool library \`$output' must begin with \`lib'" 61113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 61123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$need_lib_prefix" != no; then 61133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Add the "lib" prefix for modules if required 61143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname '' '.la' "$outputname" 61153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev name=$func_stripname_result 61163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval shared_ext=\"$shrext_cmds\" 61173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval libname=\"$libname_spec\" 61183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 61193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname '' '.la' "$outputname" 61203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libname=$func_stripname_result 61213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 61223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 61233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 61243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 61253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$objs"; then 61263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$deplibs_check_method" != pass_all; then 61273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 61283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 61293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO 61303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 61313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** objects $objs is not portable!" 61323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libobjs="$libobjs $objs" 61333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 61343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 61353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 61363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$dlself" != no && \ 61373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`-dlopen self' is ignored for libtool libraries" 61383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 61393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev set dummy $rpath 61403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 61413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$#" -gt 1 && \ 61423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "ignoring multiple \`-rpath's for a libtool library" 61433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 61443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev install_libdir="$1" 61453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 61463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev oldlibs= 61473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$rpath"; then 61483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_libtool_libs" = yes; then 61493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Building a libtool convenience library. 61503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Some compilers have problems with a `.al' extension so 61513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # convenience libraries should have the same extension an 61523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # archive normally would. 61533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev oldlibs="$output_objdir/$libname.$libext $oldlibs" 61543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev build_libtool_libs=convenience 61553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev build_old_libs=yes 61563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 61573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 61583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$vinfo" && \ 61593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 61603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 61613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$release" && \ 61623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`-release' is ignored for convenience libraries" 61633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 61643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 61653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Parse the version information argument. 61663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev save_ifs="$IFS"; IFS=':' 61673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev set dummy $vinfo 0 0 0 61683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 61693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS="$save_ifs" 61703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 61713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$7" && \ 61723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_help "too many parameters to \`-version-info'" 61733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 61743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # convert absolute version numbers to libtool ages 61753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # this retains compatibility with .la files and attempts 61763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # to make the code below a bit more comprehensible 61773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 61783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $vinfo_number in 61793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev yes) 61803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev number_major="$1" 61813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev number_minor="$2" 61823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev number_revision="$3" 61833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # 61843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # There are really only two kinds -- those that 61853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # use the current revision as the major version 61863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # and those that subtract age and use age as 61873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # a minor version. But, then there is irix 61883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # which has an extra 1 added just for fun 61893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # 61903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $version_type in 61913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev darwin|linux|osf|windows|none) 61923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_arith $number_major + $number_minor 61933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev current=$func_arith_result 61943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev age="$number_minor" 61953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev revision="$number_revision" 61963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 61973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev freebsd-aout|freebsd-elf|sunos) 61983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev current="$number_major" 61993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev revision="$number_minor" 62003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev age="0" 62013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 62023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev irix|nonstopux) 62033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_arith $number_major + $number_minor 62043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev current=$func_arith_result 62053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev age="$number_minor" 62063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev revision="$number_minor" 62073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_irix_increment=no 62083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 62093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 62103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 62113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev no) 62123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev current="$1" 62133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev revision="$2" 62143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev age="$3" 62153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 62163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 62173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 62183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Check that each of the things are valid numbers. 62193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $current in 62203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 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]) ;; 62213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 62223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_error "CURRENT \`$current' must be a nonnegative integer" 62233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "\`$vinfo' is not valid version information" 62243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 62253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 62263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 62273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $revision in 62283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 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]) ;; 62293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 62303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_error "REVISION \`$revision' must be a nonnegative integer" 62313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "\`$vinfo' is not valid version information" 62323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 62333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 62343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 62353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $age in 62363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 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]) ;; 62373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 62383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_error "AGE \`$age' must be a nonnegative integer" 62393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "\`$vinfo' is not valid version information" 62403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 62413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 62423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 62433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$age" -gt "$current"; then 62443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_error "AGE \`$age' is greater than the current interface number \`$current'" 62453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "\`$vinfo' is not valid version information" 62463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 62473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 62483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Calculate the version variables. 62493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev major= 62503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev versuffix= 62513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev verstring= 62523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $version_type in 62533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev none) ;; 62543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 62553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev darwin) 62563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Like Linux, but with the current version available in 62573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # verstring for coding it into the library header 62583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_arith $current - $age 62593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev major=.$func_arith_result 62603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev versuffix="$major.$age.$revision" 62613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Darwin ld doesn't like 0 for these options... 62623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_arith $current + 1 62633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev minor_current=$func_arith_result 62643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 62653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 62663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 62673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 62683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev freebsd-aout) 62693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev major=".$current" 62703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev versuffix=".$current.$revision"; 62713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 62723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 62733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev freebsd-elf) 62743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev major=".$current" 62753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev versuffix=".$current" 62763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 62773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 62783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev irix | nonstopux) 62793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$lt_irix_increment" = "Xno"; then 62803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_arith $current - $age 62813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 62823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_arith $current - $age + 1 62833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 62843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev major=$func_arith_result 62853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 62863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $version_type in 62873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev nonstopux) verstring_prefix=nonstopux ;; 62883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) verstring_prefix=sgi ;; 62893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 62903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev verstring="$verstring_prefix$major.$revision" 62913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 62923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Add in all the interfaces that we are compatible with. 62933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev loop=$revision 62943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev while test "$loop" -ne 0; do 62953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_arith $revision - $loop 62963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev iface=$func_arith_result 62973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_arith $loop - 1 62983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev loop=$func_arith_result 62993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev verstring="$verstring_prefix$major.$iface:$verstring" 63003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 63013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 63023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Before this point, $major must not contain `.'. 63033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev major=.$major 63043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev versuffix="$major.$revision" 63053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 63063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 63073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev linux) 63083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_arith $current - $age 63093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev major=.$func_arith_result 63103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev versuffix="$major.$age.$revision" 63113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 63123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 63133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev osf) 63143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_arith $current - $age 63153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev major=.$func_arith_result 63163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev versuffix=".$current.$age.$revision" 63173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev verstring="$current.$age.$revision" 63183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 63193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Add in all the interfaces that we are compatible with. 63203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev loop=$age 63213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev while test "$loop" -ne 0; do 63223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_arith $current - $loop 63233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev iface=$func_arith_result 63243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_arith $loop - 1 63253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev loop=$func_arith_result 63263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev verstring="$verstring:${iface}.0" 63273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 63283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 63293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Make executables depend on our current version. 63303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev verstring="$verstring:${current}.0" 63313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 63323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 63333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev qnx) 63343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev major=".$current" 63353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev versuffix=".$current" 63363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 63373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 63383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sunos) 63393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev major=".$current" 63403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev versuffix=".$current.$revision" 63413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 63423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 63433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev windows) 63443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Use '-' rather than '.', since we only want one 63453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # extension on DOS 8.3 filesystems. 63463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_arith $current - $age 63473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev major=$func_arith_result 63483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev versuffix="-$major" 63493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 63503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 63513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 63523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_configuration "unknown library version type \`$version_type'" 63533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 63543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 63553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 63563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Clear the version info if we defaulted, and they specified a release. 63573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$vinfo" && test -n "$release"; then 63583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev major= 63593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $version_type in 63603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev darwin) 63613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # we can't check for "0.0" in archive_cmds due to quoting 63623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # problems, so we reset it completely 63633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev verstring= 63643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 63653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 63663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev verstring="0.0" 63673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 63683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 63693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$need_version" = no; then 63703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev versuffix= 63713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 63723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev versuffix=".0.0" 63733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 63743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 63753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 63763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Remove version info from name if versioning should be avoided 63773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$avoid_version" = yes && test "$need_version" = no; then 63783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev major= 63793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev versuffix= 63803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev verstring="" 63813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 63823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 63833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Check to see if the archive will have undefined symbols. 63843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$allow_undefined" = yes; then 63853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$allow_undefined_flag" = unsupported; then 63863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "undefined symbols not allowed in $host shared libraries" 63873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev build_libtool_libs=no 63883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev build_old_libs=yes 63893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 63903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 63913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Don't allow undefined symbols. 63923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev allow_undefined_flag="$no_undefined_flag" 63933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 63943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 63953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 63963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 63973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_generate_dlsyms "$libname" "$libname" "yes" 63983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libobjs="$libobjs $symfileobj" 63993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "X$libobjs" = "X " && libobjs= 64003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 64013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$mode" != relink; then 64023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Remove our outputs, but don't remove object files since they 64033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # may have been created when compiling PIC objects. 64043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev removelist= 64053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tempremovelist=`$ECHO "$output_objdir/*"` 64063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for p in $tempremovelist; do 64073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $p in 64083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.$objext | *.gcno) 64093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 64103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 64113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$precious_files_regex" != "X"; then 64123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 64133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev then 64143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 64153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 64163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 64173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev removelist="$removelist $p" 64183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 64193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) ;; 64203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 64213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 64223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$removelist" && \ 64233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval "${RM}r \$removelist" 64243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 64253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 64263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Now set the variables for building old libraries. 64273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 64283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev oldlibs="$oldlibs $output_objdir/$libname.$libext" 64293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 64303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Transform .lo files to .o files. 64313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` 64323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 64333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 64343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Eliminate all temporary directories. 64353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev #for path in $notinst_path; do 64363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` 64373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` 64383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` 64393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev #done 64403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 64413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$xrpath"; then 64423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # If the user specified any rpath flags, then add them. 64433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev temp_xrpath= 64443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for libdir in $xrpath; do 64453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev temp_xrpath="$temp_xrpath -R$libdir" 64463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$finalize_rpath " in 64473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $libdir "*) ;; 64483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) finalize_rpath="$finalize_rpath $libdir" ;; 64493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 64503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 64513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 64523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dependency_libs="$temp_xrpath $dependency_libs" 64533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 64543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 64553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 64563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Make sure dlfiles contains only unique files that won't be dlpreopened 64573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev old_dlfiles="$dlfiles" 64583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlfiles= 64593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for lib in $old_dlfiles; do 64603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $dlprefiles $dlfiles " in 64613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $lib "*) ;; 64623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) dlfiles="$dlfiles $lib" ;; 64633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 64643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 64653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 64663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Make sure dlprefiles contains only unique files 64673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev old_dlprefiles="$dlprefiles" 64683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlprefiles= 64693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for lib in $old_dlprefiles; do 64703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$dlprefiles " in 64713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $lib "*) ;; 64723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) dlprefiles="$dlprefiles $lib" ;; 64733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 64743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 64753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 64763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_libtool_libs" = yes; then 64773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$rpath"; then 64783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 64793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) 64803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # these systems don't actually have a c library (as such)! 64813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 64823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-rhapsody* | *-*-darwin1.[012]) 64833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Rhapsody C library is in the System framework 64843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$deplibs System.ltframework" 64853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 64863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-netbsd*) 64873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Don't link with libc until the a.out ld.so is fixed. 64883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 64893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 64903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Do not include libc due to us having libc/libc_r. 64913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 64923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-sco3.2v5* | *-*-sco5v6*) 64933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Causes problems with __ctype 64943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 64953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 64963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Compiler inserts libc in the correct place for threads to work 64973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 64983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 64993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Add libc to deplibs on all other systems if necessary. 65003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_libtool_need_lc" = "yes"; then 65013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$deplibs -lc" 65023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 65033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 65043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 65053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 65063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 65073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Transform deplibs into only deplibs that can be linked in shared. 65083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev name_save=$name 65093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libname_save=$libname 65103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev release_save=$release 65113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev versuffix_save=$versuffix 65123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev major_save=$major 65133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # I'm not sure if I'm treating the release correctly. I think 65143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # release should show up in the -l (ie -lgmp5) so we don't want to 65153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # add it in twice. Is that correct? 65163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev release="" 65173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev versuffix="" 65183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev major="" 65193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdeplibs= 65203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev droppeddeps=no 65213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $deplibs_check_method in 65223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev pass_all) 65233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Don't check for shared/static. Everything works. 65243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # This might be a little naive. We might want to check 65253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # whether the library exists or not. But this is on 65263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # osf3 & osf4 and I'm not really sure... Just 65273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # implementing what was already the behavior. 65283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdeplibs=$deplibs 65293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 65303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test_compile) 65313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # This code stresses the "libraries are programs" paradigm to its 65323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # limits. Maybe even breaks it. We compile a program, linking it 65333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # against the deplibs as a proxy for the library. Then we can check 65343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # whether they linked in statically or dynamically with ldd. 65353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || $RM conftest.c 65363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat > conftest.c <<EOF 65373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev int main() { return 0; } 65383aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF 65393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || $RM conftest 65403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 65413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ldd_output=`ldd conftest` 65423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for i in $deplibs; do 65433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $i in 65443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -l*) 65453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname -l '' "$i" 65463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev name=$func_stripname_result 65473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 65483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $predeps $postdeps " in 65493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $i "*) 65503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdeplibs="$newdeplibs $i" 65513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev i="" 65523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 65533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 65543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 65553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$i" ; then 65563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libname=`eval "\\$ECHO \"$libname_spec\""` 65573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 65583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev set dummy $deplib_matches; shift 65593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplib_match=$1 65603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 65613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdeplibs="$newdeplibs $i" 65623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 65633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev droppeddeps=yes 65643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO 65653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** Warning: dynamic linker does not accept needed library $i." 65663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** I have the capability to make that library automatically link in when" 65673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** you link to this library. But I can only do this if you have a" 65683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** shared version of the library, which I believe you do not have" 65693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** because a test_compile did reveal that the linker did not use it for" 65703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** its dynamic dependency list that programs get resolved with at runtime." 65713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 65723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 65733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 65743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 65753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdeplibs="$newdeplibs $i" 65763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 65773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 65783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 65793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 65803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Error occurred in the first compile. Let's try to salvage 65813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # the situation: Compile a separate program for each library. 65823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for i in $deplibs; do 65833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $i in 65843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -l*) 65853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname -l '' "$i" 65863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev name=$func_stripname_result 65873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || $RM conftest 65883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 65893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ldd_output=`ldd conftest` 65903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 65913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $predeps $postdeps " in 65923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $i "*) 65933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdeplibs="$newdeplibs $i" 65943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev i="" 65953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 65963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 65973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 65983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$i" ; then 65993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libname=`eval "\\$ECHO \"$libname_spec\""` 66003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 66013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev set dummy $deplib_matches; shift 66023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplib_match=$1 66033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 66043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdeplibs="$newdeplibs $i" 66053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 66063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev droppeddeps=yes 66073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO 66083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** Warning: dynamic linker does not accept needed library $i." 66093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** I have the capability to make that library automatically link in when" 66103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** you link to this library. But I can only do this if you have a" 66113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** shared version of the library, which you do not appear to have" 66123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** because a test_compile did reveal that the linker did not use this one" 66133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime." 66143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 66153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 66163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 66173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev droppeddeps=yes 66183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO 66193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 66203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** make it link in! You will probably need to install it or some" 66213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** library that it depends on before this library will be fully" 66223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** functional. Installing it before continuing would be even better." 66233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 66243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 66253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 66263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdeplibs="$newdeplibs $i" 66273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 66283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 66293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 66303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 66313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 66323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev file_magic*) 66333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev set dummy $deplibs_check_method; shift 66343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 66353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for a_deplib in $deplibs; do 66363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $a_deplib in 66373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -l*) 66383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname -l '' "$a_deplib" 66393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev name=$func_stripname_result 66403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 66413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $predeps $postdeps " in 66423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $a_deplib "*) 66433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdeplibs="$newdeplibs $a_deplib" 66443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev a_deplib="" 66453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 66463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 66473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 66483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$a_deplib" ; then 66493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libname=`eval "\\$ECHO \"$libname_spec\""` 66503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 66513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 66523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for potent_lib in $potential_libs; do 66533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Follow soft links. 66543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if ls -lLd "$potent_lib" 2>/dev/null | 66553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $GREP " -> " >/dev/null; then 66563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 66573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 66583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The statement above tries to avoid entering an 66593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # endless loop below, in case of cyclic links. 66603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # We might still enter an endless loop, since a link 66613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # loop can be closed while we follow links, 66623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # but so what? 66633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev potlib="$potent_lib" 66643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev while test -h "$potlib" 2>/dev/null; do 66653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 66663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $potliblink in 66673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 66683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; 66693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 66703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 66713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 66723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $SED -e 10q | 66733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $EGREP "$file_magic_regex" > /dev/null; then 66743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdeplibs="$newdeplibs $a_deplib" 66753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev a_deplib="" 66763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev break 2 66773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 66783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 66793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 66803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 66813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$a_deplib" ; then 66823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev droppeddeps=yes 66833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO 66843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 66853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** I have the capability to make that library automatically link in when" 66863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** you link to this library. But I can only do this if you have a" 66873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** shared version of the library, which you do not appear to have" 66883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** because I did check the linker path looking for a file starting" 66893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$potlib" ; then 66903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 66913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 66923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** with $libname and none of the candidates passed a file format test" 66933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** using a file magic. Last file checked: $potlib" 66943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 66953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 66963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 66973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 66983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Add a -L argument. 66993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdeplibs="$newdeplibs $a_deplib" 67003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 67013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 67023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done # Gone through all deplibs. 67033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 67043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev match_pattern*) 67053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev set dummy $deplibs_check_method; shift 67063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 67073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for a_deplib in $deplibs; do 67083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $a_deplib in 67093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -l*) 67103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname -l '' "$a_deplib" 67113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev name=$func_stripname_result 67123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 67133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $predeps $postdeps " in 67143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $a_deplib "*) 67153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdeplibs="$newdeplibs $a_deplib" 67163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev a_deplib="" 67173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 67183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 67193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 67203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$a_deplib" ; then 67213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libname=`eval "\\$ECHO \"$libname_spec\""` 67223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 67233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 67243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for potent_lib in $potential_libs; do 67253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev potlib="$potent_lib" # see symlink-check above in file_magic test 67263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ 67273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $EGREP "$match_pattern_regex" > /dev/null; then 67283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdeplibs="$newdeplibs $a_deplib" 67293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev a_deplib="" 67303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev break 2 67313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 67323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 67333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 67343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 67353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$a_deplib" ; then 67363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev droppeddeps=yes 67373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO 67383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 67393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** I have the capability to make that library automatically link in when" 67403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** you link to this library. But I can only do this if you have a" 67413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** shared version of the library, which you do not appear to have" 67423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** because I did check the linker path looking for a file starting" 67433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$potlib" ; then 67443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 67453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 67463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** with $libname and none of the candidates passed a file format test" 67473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** using a regex pattern. Last file checked: $potlib" 67483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 67493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 67503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 67513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 67523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Add a -L argument. 67533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdeplibs="$newdeplibs $a_deplib" 67543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 67553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 67563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done # Gone through all deplibs. 67573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 67583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev none | unknown | *) 67593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdeplibs="" 67603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ 67613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` 67623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 67633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for i in $predeps $postdeps ; do 67643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # can't use Xsed below, because $i might contain '/' 67653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` 67663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 67673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 67683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | 67693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $GREP . >/dev/null; then 67703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO 67713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$deplibs_check_method" = "Xnone"; then 67723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** Warning: inter-library dependencies are not supported in this platform." 67733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 67743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** Warning: inter-library dependencies are not known to be supported." 67753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 67763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** All declared inter-library dependencies are being dropped." 67773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev droppeddeps=yes 67783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 67793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 67803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 67813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev versuffix=$versuffix_save 67823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev major=$major_save 67833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev release=$release_save 67843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libname=$libname_save 67853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev name=$name_save 67863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 67873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 67883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-rhapsody* | *-*-darwin1.[012]) 67893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # On Rhapsody replace the C library with the System framework 67903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 67913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 67923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 67933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 67943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$droppeddeps" = yes; then 67953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$module" = yes; then 67963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO 67973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** Warning: libtool could not satisfy all declared inter-library" 67983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 67993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** a static module, that should work as long as the dlopening" 68003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** application is linked with the -dlopen flag." 68013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$global_symbol_pipe"; then 68023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO 68033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** However, this would only work if libtool was able to extract symbol" 68043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" 68053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** not find such a program. So, this module is probably useless." 68063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." 68073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 68083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_old_libs" = no; then 68093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev oldlibs="$output_objdir/$libname.$libext" 68103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev build_libtool_libs=module 68113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev build_old_libs=yes 68123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 68133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev build_libtool_libs=no 68143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 68153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 68163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** The inter-library dependencies that have been dropped here will be" 68173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** automatically added whenever a program is linked with this library" 68183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** or is declared to -dlopen it." 68193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 68203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$allow_undefined" = no; then 68213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO 68223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** Since this library must not contain undefined symbols," 68233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** because either the platform does not support them or" 68243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** it was explicitly requested with -no-undefined," 68253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "*** libtool will only create a static version of it." 68263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_old_libs" = no; then 68273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev oldlibs="$output_objdir/$libname.$libext" 68283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev build_libtool_libs=module 68293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev build_old_libs=yes 68303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 68313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev build_libtool_libs=no 68323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 68333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 68343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 68353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 68363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Done checking deplibs! 68373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs=$newdeplibs 68383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 68393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Time to change all our "foo.ltframework" stuff back to "-framework foo" 68403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 68413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-darwin*) 68423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 68433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 68443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 68453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 68463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 68473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 68483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # move library search paths that coincide with paths to not yet 68493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # installed libraries to the beginning of the library search list 68503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev new_libs= 68513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for path in $notinst_path; do 68523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $new_libs " in 68533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" -L$path/$objdir "*) ;; 68543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 68553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $deplibs " in 68563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" -L$path/$objdir "*) 68573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev new_libs="$new_libs -L$path/$objdir" ;; 68583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 68593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 68603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 68613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 68623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for deplib in $deplibs; do 68633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $deplib in 68643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -L*) 68653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $new_libs " in 68663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $deplib "*) ;; 68673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) new_libs="$new_libs $deplib" ;; 68683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 68693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 68703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) new_libs="$new_libs $deplib" ;; 68713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 68723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 68733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$new_libs" 68743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 68753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # All the library-specific variables (install_libdir is set above). 68763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev library_names= 68773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev old_library= 68783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlname= 68793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 68803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Test again, we may have decided not to build it any more 68813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_libtool_libs" = yes; then 68823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$hardcode_into_libs" = yes; then 68833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Hardcode the library paths 68843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev hardcode_libdirs= 68853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dep_rpath= 68863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rpath="$finalize_rpath" 68873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$mode" != relink && rpath="$compile_rpath$rpath" 68883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for libdir in $rpath; do 68893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$hardcode_libdir_flag_spec"; then 68903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$hardcode_libdir_separator"; then 68913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$hardcode_libdirs"; then 68923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev hardcode_libdirs="$libdir" 68933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 68943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Just accumulate the unique libdirs. 68953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 68963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 68973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 68983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 68993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 69003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 69013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 69023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 69033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 69043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval flag=\"$hardcode_libdir_flag_spec\" 69053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dep_rpath="$dep_rpath $flag" 69063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 69073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test -n "$runpath_var"; then 69083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$perm_rpath " in 69093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $libdir "*) ;; 69103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) perm_rpath="$perm_rpath $libdir" ;; 69113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 69123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 69133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 69143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Substitute the hardcoded libdirs into the rpath. 69153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$hardcode_libdir_separator" && 69163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$hardcode_libdirs"; then 69173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libdir="$hardcode_libdirs" 69183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$hardcode_libdir_flag_spec_ld"; then 69193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" 69203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 69213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval dep_rpath=\"$hardcode_libdir_flag_spec\" 69223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 69233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 69243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$runpath_var" && test -n "$perm_rpath"; then 69253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # We should set the runpath_var. 69263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rpath= 69273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for dir in $perm_rpath; do 69283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rpath="$rpath$dir:" 69293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 69303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 69313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 69323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 69333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 69343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 69353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shlibpath="$finalize_shlibpath" 69363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 69373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$shlibpath"; then 69383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 69393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 69403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 69413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Get the real and link names of the library. 69423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval shared_ext=\"$shrext_cmds\" 69433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval library_names=\"$library_names_spec\" 69443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev set dummy $library_names 69453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 69463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev realname="$1" 69473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 69483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 69493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$soname_spec"; then 69503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval soname=\"$soname_spec\" 69513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 69523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev soname="$realname" 69533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 69543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$dlname"; then 69553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlname=$soname 69563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 69573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 69583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lib="$output_objdir/$realname" 69593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev linknames= 69603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for link 69613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 69623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev linknames="$linknames $link" 69633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 69643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 69653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Use standard objects if they are pic 69663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 69673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "X$libobjs" = "X " && libobjs= 69683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 69693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev delfiles= 69703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$export_symbols" && test -n "$include_expsyms"; then 69713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 69723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev export_symbols="$output_objdir/$libname.uexp" 69733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev delfiles="$delfiles $export_symbols" 69743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 69753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 69763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev orig_export_symbols= 69773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host_os in 69783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cygwin* | mingw* | cegcc*) 69793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 69803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # exporting using user supplied symfile 69813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 69823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # and it's NOT already a .def file. Must figure out 69833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # which of the given symbols are data symbols and tag 69843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # them as such. So, trigger use of export_symbols_cmds. 69853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # export_symbols gets reassigned inside the "prepare 69863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # the list of exported symbols" if statement, so the 69873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # include_expsyms logic still works. 69883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev orig_export_symbols="$export_symbols" 69893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev export_symbols= 69903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev always_export_symbols=yes 69913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 69923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 69933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 69943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 69953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 69963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Prepare the list of exported symbols 69973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$export_symbols"; then 69983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 69993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_verbose "generating symbol list for \`$libname.la'" 70003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev export_symbols="$output_objdir/$libname.exp" 70013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || $RM $export_symbols 70023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cmds=$export_symbols_cmds 70033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev save_ifs="$IFS"; IFS='~' 70043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for cmd in $cmds; do 70053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS="$save_ifs" 70063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval cmd=\"$cmd\" 70073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_len " $cmd" 70083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev len=$func_len_result 70093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 70103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval "$cmd" 'exit $?' 70113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev skipped_export=false 70123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 70133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The command line is too long to execute in one step. 70143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_verbose "using reloadable object file for export list..." 70153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev skipped_export=: 70163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Break out early, otherwise skipped_export may be 70173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # set to false by a later but shorter cmd. 70183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev break 70193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 70203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 70213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS="$save_ifs" 70223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 70233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 70243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 70253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 70263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 70273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 70283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 70293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$export_symbols" && test -n "$include_expsyms"; then 70303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_export_symbols="$export_symbols" 70313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 70323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' 70333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 70343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 70353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 70363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The given exports_symbols file has to be filtered, so filter it. 70373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 70383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # FIXME: $output_objdir/$libname.filter potentially contains lots of 70393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # 's' commands which not all seds can handle. GNU sed should be fine 70403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # though. Also, the filter scales superlinearly with the number of 70413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # global variables. join(1) would be nice here, but unfortunately 70423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # isn't a blessed tool. 70433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 70443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 70453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev export_symbols=$output_objdir/$libname.def 70463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 70473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 70483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 70493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_deplibs= 70503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for test_deplib in $deplibs; do 70513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $convenience " in 70523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $test_deplib "*) ;; 70533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 70543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_deplibs="$tmp_deplibs $test_deplib" 70553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 70563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 70573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 70583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev deplibs="$tmp_deplibs" 70593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 70603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$convenience"; then 70613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$whole_archive_flag_spec" && 70623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$compiler_needs_object" = yes && 70633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -z "$libobjs"; then 70643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # extract the archives, so we have objects to list. 70653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # TODO: could optimize this to just extract one archive. 70663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev whole_archive_flag_spec= 70673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 70683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$whole_archive_flag_spec"; then 70693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev save_libobjs=$libobjs 70703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 70713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "X$libobjs" = "X " && libobjs= 70723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 70733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev gentop="$output_objdir/${outputname}x" 70743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev generated="$generated $gentop" 70753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 70763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_extract_archives $gentop $convenience 70773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libobjs="$libobjs $func_extract_archives_result" 70783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "X$libobjs" = "X " && libobjs= 70793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 70803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 70813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 70823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 70833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval flag=\"$thread_safe_flag_spec\" 70843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev linker_flags="$linker_flags $flag" 70853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 70863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 70873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Make a backup of the uninstalled library when relinking 70883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$mode" = relink; then 70893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 70903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 70913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 70923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Do each of the archive commands. 70933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$module" = yes && test -n "$module_cmds" ; then 70943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 70953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval test_cmds=\"$module_expsym_cmds\" 70963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cmds=$module_expsym_cmds 70973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 70983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval test_cmds=\"$module_cmds\" 70993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cmds=$module_cmds 71003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 71013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 71023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 71033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval test_cmds=\"$archive_expsym_cmds\" 71043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cmds=$archive_expsym_cmds 71053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 71063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval test_cmds=\"$archive_cmds\" 71073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cmds=$archive_cmds 71083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 71093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 71103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 71113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$skipped_export" != "X:" && 71123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_len " $test_cmds" && 71133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev len=$func_len_result && 71143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 71153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev : 71163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 71173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The command line is too long to link in one step, link piecewise 71183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # or, if using GNU ld and skipped_export is not :, use a linker 71193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # script. 71203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 71213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Save the value of $output and $libobjs because we want to 71223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # use them later. If we have whole_archive_flag_spec, we 71233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # want to use save_libobjs as it was before 71243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # whole_archive_flag_spec was expanded, because we can't 71253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # assume the linker understands whole_archive_flag_spec. 71263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # This may have to be revisited, in case too many 71273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # convenience libraries get linked in and end up exceeding 71283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # the spec. 71293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 71303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev save_libobjs=$libobjs 71313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 71323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev save_output=$output 71333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev output_la=`$ECHO "X$output" | $Xsed -e "$basename"` 71343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 71353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Clear the reloadable object creation command queue and 71363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # initialize k to one. 71373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test_cmds= 71383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev concat_cmds= 71393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev objlist= 71403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev last_robj= 71413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev k=1 71423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 71433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 71443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev output=${output_objdir}/${output_la}.lnkscript 71453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_verbose "creating GNU ld script: $output" 71463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO 'INPUT (' > $output 71473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for obj in $save_libobjs 71483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 71493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "$obj" >> $output 71503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 71513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO ')' >> $output 71523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev delfiles="$delfiles $output" 71533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 71543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev output=${output_objdir}/${output_la}.lnk 71553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_verbose "creating linker input file list: $output" 71563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev : > $output 71573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev set x $save_libobjs 71583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 71593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev firstobj= 71603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$compiler_needs_object" = yes; then 71613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev firstobj="$1 " 71623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 71633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 71643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for obj 71653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 71663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "$obj" >> $output 71673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 71683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev delfiles="$delfiles $output" 71693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev output=$firstobj\"$file_list_spec$output\" 71703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 71713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$save_libobjs"; then 71723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_verbose "creating reloadable object files..." 71733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev output=$output_objdir/$output_la-${k}.$objext 71743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval test_cmds=\"$reload_cmds\" 71753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_len " $test_cmds" 71763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev len0=$func_len_result 71773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev len=$len0 71783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 71793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Loop over the list of objects to be linked. 71803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for obj in $save_libobjs 71813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 71823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_len " $obj" 71833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_arith $len + $func_len_result 71843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev len=$func_arith_result 71853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$objlist" = X || 71863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$len" -lt "$max_cmd_len"; then 71873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append objlist " $obj" 71883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 71893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The command $test_cmds is almost too long, add a 71903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # command to the queue. 71913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$k" -eq 1 ; then 71923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The first file doesn't have a previous command to add. 71933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval concat_cmds=\"$reload_cmds $objlist $last_robj\" 71943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 71953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # All subsequent reloadable object files will link in 71963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # the last one created. 71973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" 71983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 71993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev last_robj=$output_objdir/$output_la-${k}.$objext 72003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_arith $k + 1 72013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev k=$func_arith_result 72023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev output=$output_objdir/$output_la-${k}.$objext 72033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev objlist=$obj 72043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_len " $last_robj" 72053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_arith $len0 + $func_len_result 72063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev len=$func_arith_result 72073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 72083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 72093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Handle the remaining objects by creating one last 72103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # reloadable object file. All subsequent reloadable object 72113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # files will link in the last one created. 72123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 72133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" 72143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$last_robj"; then 72153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 72163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 72173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev delfiles="$delfiles $output" 72183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 72193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 72203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev output= 72213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 72223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 72233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if ${skipped_export-false}; then 72243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_verbose "generating symbol list for \`$libname.la'" 72253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev export_symbols="$output_objdir/$libname.exp" 72263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || $RM $export_symbols 72273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libobjs=$output 72283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Append the command to create the export file. 72293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 72303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 72313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$last_robj"; then 72323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 72333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 72343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 72353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 72363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$save_libobjs" && 72373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_verbose "creating a temporary reloadable object file: $output" 72383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 72393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Loop through the commands generated above and execute them. 72403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev save_ifs="$IFS"; IFS='~' 72413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for cmd in $concat_cmds; do 72423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS="$save_ifs" 72433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_silent || { 72443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_expand "$cmd" 72453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "func_echo $func_quote_for_expand_result" 72463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 72473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || eval "$cmd" || { 72483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_exit=$? 72493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 72503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Restore the uninstalled library and exit 72513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$mode" = relink; then 72523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ( cd "$output_objdir" && \ 72533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $RM "${realname}T" && \ 72543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $MV "${realname}U" "$realname" ) 72553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 72563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 72573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $lt_exit 72583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 72593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 72603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS="$save_ifs" 72613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 72623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$export_symbols_regex" && ${skipped_export-false}; then 72633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 72643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 72653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 72663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 72673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 72683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if ${skipped_export-false}; then 72693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$export_symbols" && test -n "$include_expsyms"; then 72703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmp_export_symbols="$export_symbols" 72713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 72723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' 72733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 72743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 72753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$orig_export_symbols"; then 72763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The given exports_symbols file has to be filtered, so filter it. 72773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 72783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # FIXME: $output_objdir/$libname.filter potentially contains lots of 72793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # 's' commands which not all seds can handle. GNU sed should be fine 72803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # though. Also, the filter scales superlinearly with the number of 72813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # global variables. join(1) would be nice here, but unfortunately 72823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # isn't a blessed tool. 72833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 72843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 72853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev export_symbols=$output_objdir/$libname.def 72863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 72873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 72883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 72893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 72903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libobjs=$output 72913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Restore the value of output. 72923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev output=$save_output 72933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 72943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 72953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 72963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "X$libobjs" = "X " && libobjs= 72973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 72983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Expand the library linking commands again to reset the 72993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # value of $libobjs for piecewise linking. 73003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 73013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Do each of the archive commands. 73023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$module" = yes && test -n "$module_cmds" ; then 73033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 73043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cmds=$module_expsym_cmds 73053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 73063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cmds=$module_cmds 73073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 73083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 73093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 73103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cmds=$archive_expsym_cmds 73113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 73123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cmds=$archive_cmds 73133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 73143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 73153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 73163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 73173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$delfiles"; then 73183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Append the command to remove temporary files to $cmds. 73193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval cmds=\"\$cmds~\$RM $delfiles\" 73203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 73213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 73223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Add any objects from preloaded convenience libraries 73233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$dlprefiles"; then 73243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev gentop="$output_objdir/${outputname}x" 73253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev generated="$generated $gentop" 73263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 73273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_extract_archives $gentop $dlprefiles 73283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libobjs="$libobjs $func_extract_archives_result" 73293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "X$libobjs" = "X " && libobjs= 73303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 73313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 73323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev save_ifs="$IFS"; IFS='~' 73333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for cmd in $cmds; do 73343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS="$save_ifs" 73353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval cmd=\"$cmd\" 73363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_silent || { 73373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_expand "$cmd" 73383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval "func_echo $func_quote_for_expand_result" 73393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 73403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || eval "$cmd" || { 73413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev lt_exit=$? 73423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 73433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Restore the uninstalled library and exit 73443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$mode" = relink; then 73453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ( cd "$output_objdir" && \ 73463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $RM "${realname}T" && \ 73473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $MV "${realname}U" "$realname" ) 73483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 73493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 73503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $lt_exit 73513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 73523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 73533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS="$save_ifs" 73543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 73553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Restore the uninstalled library and exit 73563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$mode" = relink; then 73573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 73583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 73593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$convenience"; then 73603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$whole_archive_flag_spec"; then 73613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval '${RM}r "$gentop"' 73623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 73633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 73643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 73653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $EXIT_SUCCESS 73663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 73673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 73683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Create links to the real library. 73693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for linkname in $linknames; do 73703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$realname" != "$linkname"; then 73713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 73723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 73733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 73743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 73753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # If -module or -export-dynamic was specified, set the dlname. 73763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$module" = yes || test "$export_dynamic" = yes; then 73773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # On all known operating systems, these are identical. 73783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlname="$soname" 73793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 73803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 73813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 73823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 73833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev obj) 73843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 73853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`-dlopen' is ignored for objects" 73863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 73873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 73883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $deplibs" in 73893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *\ -l* | *\ -L*) 73903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`-l' and \`-L' are ignored for objects" ;; 73913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 73923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 73933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$rpath" && \ 73943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`-rpath' is ignored for objects" 73953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 73963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$xrpath" && \ 73973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`-R' is ignored for objects" 73983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 73993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$vinfo" && \ 74003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`-version-info' is ignored for objects" 74013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 74023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$release" && \ 74033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`-release' is ignored for objects" 74043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 74053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $output in 74063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.lo) 74073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$objs$old_deplibs" && \ 74083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "cannot build library object \`$output' from non-libtool objects" 74093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 74103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libobj=$output 74113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_lo2o "$libobj" 74123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev obj=$func_lo2o_result 74133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 74143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 74153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libobj= 74163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev obj="$output" 74173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 74183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 74193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 74203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Delete the old objects. 74213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || $RM $obj $libobj 74223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 74233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Objects from convenience libraries. This assumes 74243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # single-version convenience libraries. Whenever we create 74253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # different ones for PIC/non-PIC, this we'll have to duplicate 74263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # the extraction. 74273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev reload_conv_objs= 74283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev gentop= 74293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # reload_cmds runs $LD directly, so let us get rid of 74303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # -Wl from whole_archive_flag_spec and hope we can get by with 74313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # turning comma into space.. 74323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev wl= 74333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 74343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$convenience"; then 74353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$whole_archive_flag_spec"; then 74363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 74373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` 74383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 74393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev gentop="$output_objdir/${obj}x" 74403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev generated="$generated $gentop" 74413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 74423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_extract_archives $gentop $convenience 74433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev reload_conv_objs="$reload_objs $func_extract_archives_result" 74443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 74453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 74463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 74473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Create the old-style object. 74483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 74493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 74503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev output="$obj" 74513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_execute_cmds "$reload_cmds" 'exit $?' 74523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 74533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Exit if we aren't doing a library object file. 74543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$libobj"; then 74553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$gentop"; then 74563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval '${RM}r "$gentop"' 74573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 74583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 74593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $EXIT_SUCCESS 74603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 74613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 74623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_libtool_libs" != yes; then 74633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$gentop"; then 74643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval '${RM}r "$gentop"' 74653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 74663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 74673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Create an invalid libtool object if no PIC, so that we don't 74683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # accidentally link it into a program. 74693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # $show "echo timestamp > $libobj" 74703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 74713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $EXIT_SUCCESS 74723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 74733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 74743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$pic_flag" || test "$pic_mode" != default; then 74753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Only do commands if we really have different PIC objects. 74763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev reload_objs="$libobjs $reload_conv_objs" 74773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev output="$libobj" 74783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_execute_cmds "$reload_cmds" 'exit $?' 74793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 74803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 74813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$gentop"; then 74823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval '${RM}r "$gentop"' 74833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 74843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 74853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $EXIT_SUCCESS 74863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 74873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 74883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev prog) 74893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 74903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *cygwin*) func_stripname '' '.exe' "$output" 74913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev output=$func_stripname_result.exe;; 74923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 74933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$vinfo" && \ 74943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`-version-info' is ignored for programs" 74953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 74963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$release" && \ 74973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`-release' is ignored for programs" 74983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 74993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$preload" = yes \ 75003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev && test "$dlopen_support" = unknown \ 75013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev && test "$dlopen_self" = unknown \ 75023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev && test "$dlopen_self_static" = unknown && \ 75033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 75043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 75053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 75063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-rhapsody* | *-*-darwin1.[012]) 75073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # On Rhapsody replace the C library is the System framework 75083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 75093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 75103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 75113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 75123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 75133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 75143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-darwin*) 75153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Don't allow lazy linking, it breaks C++ global constructors 75163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # But is supposedly fixed on 10.4 or later (yay!). 75173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$tagname" = CXX ; then 75183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 75193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 10.[0123]) 75203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_command="$compile_command ${wl}-bind_at_load" 75213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_command="$finalize_command ${wl}-bind_at_load" 75223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 75233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 75243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 75253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Time to change all our "foo.ltframework" stuff back to "-framework foo" 75263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 75273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 75283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 75293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 75303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 75313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 75323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # move library search paths that coincide with paths to not yet 75333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # installed libraries to the beginning of the library search list 75343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev new_libs= 75353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for path in $notinst_path; do 75363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $new_libs " in 75373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" -L$path/$objdir "*) ;; 75383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 75393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $compile_deplibs " in 75403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" -L$path/$objdir "*) 75413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev new_libs="$new_libs -L$path/$objdir" ;; 75423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 75433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 75443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 75453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 75463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for deplib in $compile_deplibs; do 75473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $deplib in 75483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -L*) 75493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $new_libs " in 75503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $deplib "*) ;; 75513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) new_libs="$new_libs $deplib" ;; 75523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 75533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 75543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) new_libs="$new_libs $deplib" ;; 75553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 75563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 75573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_deplibs="$new_libs" 75583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 75593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 75603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_command="$compile_command $compile_deplibs" 75613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_command="$finalize_command $finalize_deplibs" 75623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 75633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$rpath$xrpath"; then 75643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # If the user specified any rpath flags, then add them. 75653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for libdir in $rpath $xrpath; do 75663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # This is the magic to use -rpath. 75673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$finalize_rpath " in 75683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $libdir "*) ;; 75693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) finalize_rpath="$finalize_rpath $libdir" ;; 75703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 75713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 75723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 75733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 75743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Now hardcode the library paths 75753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rpath= 75763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev hardcode_libdirs= 75773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for libdir in $compile_rpath $finalize_rpath; do 75783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$hardcode_libdir_flag_spec"; then 75793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$hardcode_libdir_separator"; then 75803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$hardcode_libdirs"; then 75813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev hardcode_libdirs="$libdir" 75823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 75833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Just accumulate the unique libdirs. 75843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 75853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 75863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 75873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 75883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 75893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 75903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 75913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 75923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 75933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval flag=\"$hardcode_libdir_flag_spec\" 75943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rpath="$rpath $flag" 75953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 75963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test -n "$runpath_var"; then 75973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$perm_rpath " in 75983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $libdir "*) ;; 75993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) perm_rpath="$perm_rpath $libdir" ;; 76003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 76013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 76023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 76033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 76043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 76053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case :$dllsearchpath: in 76063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *":$libdir:"*) ;; 76073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ::) dllsearchpath=$libdir;; 76083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) dllsearchpath="$dllsearchpath:$libdir";; 76093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 76103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case :$dllsearchpath: in 76113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *":$testbindir:"*) ;; 76123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ::) dllsearchpath=$testbindir;; 76133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) dllsearchpath="$dllsearchpath:$testbindir";; 76143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 76153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 76163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 76173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 76183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Substitute the hardcoded libdirs into the rpath. 76193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$hardcode_libdir_separator" && 76203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$hardcode_libdirs"; then 76213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libdir="$hardcode_libdirs" 76223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval rpath=\" $hardcode_libdir_flag_spec\" 76233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 76243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_rpath="$rpath" 76253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 76263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rpath= 76273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev hardcode_libdirs= 76283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for libdir in $finalize_rpath; do 76293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$hardcode_libdir_flag_spec"; then 76303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$hardcode_libdir_separator"; then 76313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$hardcode_libdirs"; then 76323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev hardcode_libdirs="$libdir" 76333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 76343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Just accumulate the unique libdirs. 76353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 76363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 76373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 76383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 76393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 76403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 76413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 76423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 76433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 76443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval flag=\"$hardcode_libdir_flag_spec\" 76453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rpath="$rpath $flag" 76463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 76473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test -n "$runpath_var"; then 76483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$finalize_perm_rpath " in 76493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $libdir "*) ;; 76503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; 76513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 76523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 76533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 76543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Substitute the hardcoded libdirs into the rpath. 76553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$hardcode_libdir_separator" && 76563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$hardcode_libdirs"; then 76573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libdir="$hardcode_libdirs" 76583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval rpath=\" $hardcode_libdir_flag_spec\" 76593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 76603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_rpath="$rpath" 76613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 76623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$libobjs" && test "$build_old_libs" = yes; then 76633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Transform all the library objects into standard objects. 76643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 76653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 76663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 76673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 76683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 76693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 76703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # template prelinking step 76713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$prelink_cmds"; then 76723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_execute_cmds "$prelink_cmds" 'exit $?' 76733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 76743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 76753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev wrappers_required=yes 76763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 76773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *cygwin* | *mingw* ) 76783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_libtool_libs" != yes; then 76793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev wrappers_required=no 76803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 76813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 76823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *cegcc) 76833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Disable wrappers for cegcc, we are cross compiling anyway. 76843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev wrappers_required=no 76853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 76863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 76873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 76883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev wrappers_required=no 76893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 76903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 76913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 76923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$wrappers_required" = no; then 76933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Replace the output file specification. 76943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` 76953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev link_command="$compile_command$compile_rpath" 76963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 76973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # We have no uninstalled library dependencies, so finalize right now. 76983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit_status=0 76993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval "$link_command" 'exit_status=$?' 77003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 77013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Delete the generated files. 77023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -f "$output_objdir/${outputname}S.${objext}"; then 77033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 77043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 77053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 77063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $exit_status 77073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 77083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 77093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$compile_shlibpath$finalize_shlibpath"; then 77103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 77113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 77123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$finalize_shlibpath"; then 77133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 77143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 77153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 77163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_var= 77173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_var= 77183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$runpath_var"; then 77193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$perm_rpath"; then 77203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # We should set the runpath_var. 77213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rpath= 77223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for dir in $perm_rpath; do 77233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rpath="$rpath$dir:" 77243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 77253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 77263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 77273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$finalize_perm_rpath"; then 77283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # We should set the runpath_var. 77293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rpath= 77303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for dir in $finalize_perm_rpath; do 77313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rpath="$rpath$dir:" 77323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 77333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 77343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 77353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 77363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 77373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$no_install" = yes; then 77383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # We don't need to create a wrapper script. 77393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev link_command="$compile_var$compile_command$compile_rpath" 77403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Replace the output file specification. 77413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` 77423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Delete the old output file. 77433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || $RM $output 77443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Link the executable and exit 77453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval "$link_command" 'exit $?' 77463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $EXIT_SUCCESS 77473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 77483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 77493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$hardcode_action" = relink; then 77503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Fast installation is not supported 77513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev link_command="$compile_var$compile_command$compile_rpath" 77523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink_command="$finalize_var$finalize_command$finalize_rpath" 77533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 77543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "this platform does not like uninstalled shared libraries" 77553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_warning "\`$output' will be relinked during installation" 77563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 77573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$fast_install" != no; then 77583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev link_command="$finalize_var$compile_command$finalize_rpath" 77593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$fast_install" = yes; then 77603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` 77613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 77623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # fast_install is set to needless 77633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink_command= 77643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 77653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 77663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev link_command="$compile_var$compile_command$compile_rpath" 77673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink_command="$finalize_var$finalize_command$finalize_rpath" 77683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 77693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 77703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 77713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Replace the output file specification. 77723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 77733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 77743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Delete the old output files. 77753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 77763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 77773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval "$link_command" 'exit $?' 77783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 77793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Now create the wrapper script. 77803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_verbose "creating $output" 77813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 77823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Quote the relink command for shipping. 77833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$relink_command"; then 77843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Preserve any variables that may affect compiler behavior 77853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for var in $variables_saved_for_relink; do 77863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if eval test -z \"\${$var+set}\"; then 77873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 77883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif eval var_value=\$$var; test -z "$var_value"; then 77893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink_command="$var=; export $var; $relink_command" 77903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 77913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_eval "$var_value" 77923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 77933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 77943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 77953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink_command="(cd `pwd`; $relink_command)" 77963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` 77973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 77983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 77993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Quote $ECHO for shipping. 78003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then 78013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $progpath in 78023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; 78033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; 78043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 78053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` 78063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 78073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` 78083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 78093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 78103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Only actually do things if not in dry run mode. 78113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || { 78123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # win32 will think the script is a binary if it has 78133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # a .exe suffix, so we strip it off here. 78143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $output in 78153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.exe) func_stripname '' '.exe' "$output" 78163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev output=$func_stripname_result ;; 78173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 78183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # test for cygwin because mv fails w/o .exe extensions 78193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 78203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *cygwin*) 78213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exeext=.exe 78223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname '' '.exe' "$outputname" 78233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev outputname=$func_stripname_result ;; 78243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) exeext= ;; 78253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 78263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host in 78273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *cygwin* | *mingw* ) 78283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_dirname_and_basename "$output" "" "." 78293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev output_name=$func_basename_result 78303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev output_path=$func_dirname_result 78313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cwrappersource="$output_path/$objdir/lt-$output_name.c" 78323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cwrapper="$output_path/$output_name.exe" 78333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $RM $cwrappersource $cwrapper 78343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 78353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 78363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_emit_cwrapperexe_src > $cwrappersource 78373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 78383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The wrapper executable is built using the $host compiler, 78393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # because it contains $host paths and files. If cross- 78403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # compiling, it, like the target executable, must be 78413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # executed on the $host or under an emulation environment. 78423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || { 78433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 78443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $STRIP $cwrapper 78453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 78463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 78473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Now, create the wrapper script for func_source use: 78483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_ltwrapper_scriptname $cwrapper 78493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $RM $func_ltwrapper_scriptname_result 78503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 78513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || { 78523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # note: this script will not be executed, so do not chmod. 78533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "x$build" = "x$host" ; then 78543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 78553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 78563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_emit_wrapper no > $func_ltwrapper_scriptname_result 78573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 78583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 78593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 78603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ) 78613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $RM $output 78623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 78633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 78643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_emit_wrapper no > $output 78653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev chmod +x $output 78663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 78673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 78683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 78693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $EXIT_SUCCESS 78703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 78713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 78723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 78733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # See if we need to build an old-fashioned archive. 78743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for oldlib in $oldlibs; do 78753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 78763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_libtool_libs" = convenience; then 78773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev oldobjs="$libobjs_save $symfileobj" 78783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev addlibs="$convenience" 78793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev build_libtool_libs=no 78803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 78813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$build_libtool_libs" = module; then 78823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev oldobjs="$libobjs_save" 78833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev build_libtool_libs=no 78843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 78853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev oldobjs="$old_deplibs $non_pic_objects" 78863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$preload" = yes && test -f "$symfileobj"; then 78873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev oldobjs="$oldobjs $symfileobj" 78883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 78893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 78903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev addlibs="$old_convenience" 78913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 78923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 78933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$addlibs"; then 78943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev gentop="$output_objdir/${outputname}x" 78953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev generated="$generated $gentop" 78963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 78973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_extract_archives $gentop $addlibs 78983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev oldobjs="$oldobjs $func_extract_archives_result" 78993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 79003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 79013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Do each command in the archive commands. 79023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 79033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cmds=$old_archive_from_new_cmds 79043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 79053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 79063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Add any objects from preloaded convenience libraries 79073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$dlprefiles"; then 79083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev gentop="$output_objdir/${outputname}x" 79093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev generated="$generated $gentop" 79103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 79113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_extract_archives $gentop $dlprefiles 79123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev oldobjs="$oldobjs $func_extract_archives_result" 79133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 79143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 79153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # POSIX demands no paths to be encoded in archives. We have 79163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # to avoid creating archives with duplicate basenames if we 79173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # might have to extract them afterwards, e.g., when creating a 79183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # static archive out of a convenience library, or when linking 79193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # the entirety of a libtool archive into another (currently 79203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # not supported by libtool). 79213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (for obj in $oldobjs 79223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 79233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_basename "$obj" 79243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "$func_basename_result" 79253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done | sort | sort -uc >/dev/null 2>&1); then 79263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev : 79273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 79283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO "copying selected object files to avoid basename conflicts..." 79293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev gentop="$output_objdir/${outputname}x" 79303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev generated="$generated $gentop" 79313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_mkdir_p "$gentop" 79323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev save_oldobjs=$oldobjs 79333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev oldobjs= 79343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev counter=1 79353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for obj in $save_oldobjs 79363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 79373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_basename "$obj" 79383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev objbase="$func_basename_result" 79393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $oldobjs " in 79403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev " ") oldobjs=$obj ;; 79413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *[\ /]"$objbase "*) 79423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev while :; do 79433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Make sure we don't pick an alternate name that also 79443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # overlaps. 79453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newobj=lt$counter-$objbase 79463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_arith $counter + 1 79473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev counter=$func_arith_result 79483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $oldobjs " in 79493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *[\ /]"$newobj "*) ;; 79503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) if test ! -f "$gentop/$newobj"; then break; fi ;; 79513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 79523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 79533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 79543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev oldobjs="$oldobjs $gentop/$newobj" 79553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 79563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) oldobjs="$oldobjs $obj" ;; 79573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 79583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 79593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 79603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval cmds=\"$old_archive_cmds\" 79613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 79623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_len " $cmds" 79633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev len=$func_len_result 79643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 79653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cmds=$old_archive_cmds 79663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 79673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # the command line is too long to link in one step, link in parts 79683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_verbose "using piecewise archive linking..." 79693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev save_RANLIB=$RANLIB 79703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev RANLIB=: 79713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev objlist= 79723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev concat_cmds= 79733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev save_oldobjs=$oldobjs 79743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev oldobjs= 79753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Is there a better way of finding the last object in the list? 79763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for obj in $save_oldobjs 79773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 79783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev last_oldobj=$obj 79793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 79803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval test_cmds=\"$old_archive_cmds\" 79813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_len " $test_cmds" 79823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev len0=$func_len_result 79833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev len=$len0 79843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for obj in $save_oldobjs 79853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 79863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_len " $obj" 79873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_arith $len + $func_len_result 79883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev len=$func_arith_result 79893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_append objlist " $obj" 79903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$len" -lt "$max_cmd_len"; then 79913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev : 79923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 79933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # the above command should be used before it gets too long 79943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev oldobjs=$objlist 79953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$obj" = "$last_oldobj" ; then 79963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev RANLIB=$save_RANLIB 79973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 79983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 79993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 80003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev objlist= 80013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev len=$len0 80023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 80033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 80043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev RANLIB=$save_RANLIB 80053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev oldobjs=$objlist 80063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$oldobjs" = "X" ; then 80073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval cmds=\"\$concat_cmds\" 80083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 80093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 80103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 80113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 80123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 80133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_execute_cmds "$cmds" 'exit $?' 80143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 80153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 80163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$generated" && \ 80173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval "${RM}r$generated" 80183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 80193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Now create the libtool archive. 80203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $output in 80213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.la) 80223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev old_library= 80233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$build_old_libs" = yes && old_library="$libname.$libext" 80243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_verbose "creating $output" 80253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 80263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Preserve any variables that may affect compiler behavior 80273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for var in $variables_saved_for_relink; do 80283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if eval test -z \"\${$var+set}\"; then 80293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 80303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif eval var_value=\$$var; test -z "$var_value"; then 80313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink_command="$var=; export $var; $relink_command" 80323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 80333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_quote_for_eval "$var_value" 80343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 80353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 80363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 80373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Quote the link command for shipping. 80383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 80393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` 80403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$hardcode_automatic" = yes ; then 80413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink_command= 80423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 80433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 80443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Only create the output if not a dry run. 80453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_dry_run || { 80463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for installed in no yes; do 80473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$installed" = yes; then 80483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$install_libdir"; then 80493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev break 80503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 80513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev output="$output_objdir/$outputname"i 80523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Replace all uninstalled libtool libraries with the installed ones 80533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdependency_libs= 80543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for deplib in $dependency_libs; do 80553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $deplib in 80563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.la) 80573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_basename "$deplib" 80583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev name="$func_basename_result" 80593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 80603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -z "$libdir" && \ 80613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "\`$deplib' is not a valid libtool archive" 80623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdependency_libs="$newdependency_libs $libdir/$name" 80633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 80643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) newdependency_libs="$newdependency_libs $deplib" ;; 80653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 80663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 80673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dependency_libs="$newdependency_libs" 80683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdlfiles= 80693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 80703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for lib in $dlfiles; do 80713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $lib in 80723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.la) 80733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_basename "$lib" 80743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev name="$func_basename_result" 80753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 80763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -z "$libdir" && \ 80773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "\`$lib' is not a valid libtool archive" 80783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdlfiles="$newdlfiles $libdir/$name" 80793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 80803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) newdlfiles="$newdlfiles $lib" ;; 80813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 80823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 80833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlfiles="$newdlfiles" 80843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdlprefiles= 80853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for lib in $dlprefiles; do 80863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $lib in 80873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.la) 80883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Only pass preopened files to the pseudo-archive (for 80893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # eventual linking with the app. that links it) if we 80903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # didn't already link the preopened objects directly into 80913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # the library: 80923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_basename "$lib" 80933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev name="$func_basename_result" 80943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 80953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -z "$libdir" && \ 80963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_error "\`$lib' is not a valid libtool archive" 80973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdlprefiles="$newdlprefiles $libdir/$name" 80983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 80993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 81003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 81013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlprefiles="$newdlprefiles" 81023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 81033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdlfiles= 81043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for lib in $dlfiles; do 81053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $lib in 81063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 81073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) abs=`pwd`"/$lib" ;; 81083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 81093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdlfiles="$newdlfiles $abs" 81103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 81113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlfiles="$newdlfiles" 81123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdlprefiles= 81133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for lib in $dlprefiles; do 81143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $lib in 81153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 81163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) abs=`pwd`"/$lib" ;; 81173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 81183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev newdlprefiles="$newdlprefiles $abs" 81193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 81203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dlprefiles="$newdlprefiles" 81213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 81223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $RM $output 81233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # place dlname in correct position for cygwin 81243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tdlname=$dlname 81253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $host,$output,$installed,$module,$dlname in 81263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; 81273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 81283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO > $output "\ 81293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# $outputname - a libtool library file 81303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 81313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 81323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Please DO NOT delete this file! 81333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# It is necessary for linking the library. 81343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 81353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# The name that we can dlopen(3). 81363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevdlname='$tdlname' 81373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 81383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Names of this library. 81393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevlibrary_names='$library_names' 81403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 81413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# The name of the static archive. 81423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevold_library='$old_library' 81433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 81443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Linker flags that can not go in dependency_libs. 81453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevinherited_linker_flags='$new_inherited_linker_flags' 81463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 81473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Libraries that this one depends upon. 81483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevdependency_libs='$dependency_libs' 81493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 81503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Names of additional weak libraries provided by this library 81513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevweak_library_names='$weak_libs' 81523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 81533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Version information for $libname. 81543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevcurrent=$current 81553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevage=$age 81563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevrevision=$revision 81573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 81583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Is this an already installed library? 81593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevinstalled=$installed 81603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 81613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Should we warn about portability when linking against -modules? 81623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevshouldnotlink=$module 81633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 81643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Files to dlopen/dlpreopen 81653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevdlopen='$dlfiles' 81663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevdlpreopen='$dlprefiles' 81673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 81683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Directory that this library needs to be installed in: 81693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevlibdir='$install_libdir'" 81703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$installed" = no && test "$need_relink" = yes; then 81713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $ECHO >> $output "\ 81723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevrelink_command=\"$relink_command\"" 81733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 81743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 81753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 81763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 81773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Do a symbolic link so that the libtool archive can be found in 81783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # LD_LIBRARY_PATH before the program is installed. 81793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 81803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 81813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 81823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $EXIT_SUCCESS 81833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 81843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 81853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ test "$mode" = link || test "$mode" = relink; } && 81863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_mode_link ${1+"$@"} 81873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 81883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 81893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# func_mode_uninstall arg... 81903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunc_mode_uninstall () 81913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 81923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $opt_debug 81933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev RM="$nonopt" 81943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev files= 81953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rmforce= 81963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit_status=0 81973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 81983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # This variable tells wrapper scripts just to set variables rather 81993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # than running their programs. 82003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libtool_install_magic="$magic" 82013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 82023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for arg 82033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 82043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $arg in 82053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -f) RM="$RM $arg"; rmforce=yes ;; 82063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -*) RM="$RM $arg" ;; 82073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) files="$files $arg" ;; 82083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 82093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 82103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 82113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -z "$RM" && \ 82123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_help "you must specify an RM program" 82133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 82143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rmdirs= 82153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 82163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev origobjdir="$objdir" 82173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for file in $files; do 82183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_dirname "$file" "" "." 82193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dir="$func_dirname_result" 82203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$dir" = X.; then 82213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev objdir="$origobjdir" 82223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 82233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev objdir="$dir/$origobjdir" 82243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 82253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_basename "$file" 82263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev name="$func_basename_result" 82273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$mode" = uninstall && objdir="$dir" 82283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 82293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Remember objdir for removal later, being careful to avoid duplicates 82303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$mode" = clean; then 82313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $rmdirs " in 82323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $objdir "*) ;; 82333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) rmdirs="$rmdirs $objdir" ;; 82343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 82353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 82363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 82373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Don't error if the file doesn't exist and rm -f was used. 82383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if { test -L "$file"; } >/dev/null 2>&1 || 82393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { test -h "$file"; } >/dev/null 2>&1 || 82403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -f "$file"; then 82413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev : 82423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test -d "$file"; then 82433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit_status=1 82443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 82453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev elif test "$rmforce" = yes; then 82463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 82473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 82483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 82493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rmfiles="$file" 82503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 82513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $name in 82523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.la) 82533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Possibly a libtool archive, so verify it. 82543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if func_lalib_p "$file"; then 82553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_source $dir/$name 82563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 82573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Delete the libtool libraries and symlinks. 82583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for n in $library_names; do 82593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rmfiles="$rmfiles $objdir/$n" 82603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 82613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" 82623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 82633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$mode" in 82643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev clean) 82653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case " $library_names " in 82663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # " " in the beginning catches empty $dlname 82673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *" $dlname "*) ;; 82683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) rmfiles="$rmfiles $objdir/$dlname" ;; 82693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 82703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" 82713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 82723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev uninstall) 82733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$library_names"; then 82743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Do each command in the postuninstall commands. 82753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 82763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 82773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 82783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$old_library"; then 82793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Do each command in the old_postuninstall commands. 82803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 82813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 82823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # FIXME: should reinstall the best remaining shared library. 82833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 82843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 82853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 82863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 82873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 82883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.lo) 82893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Possibly a libtool object, so verify it. 82903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if func_lalib_p "$file"; then 82913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 82923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Read the .lo file 82933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_source $dir/$name 82943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 82953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Add PIC object to the list of files to remove. 82963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$pic_object" && 82973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$pic_object" != none; then 82983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rmfiles="$rmfiles $dir/$pic_object" 82993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 83003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 83013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Add non-PIC object to the list of files to remove. 83023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -n "$non_pic_object" && 83033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "$non_pic_object" != none; then 83043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rmfiles="$rmfiles $dir/$non_pic_object" 83053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 83063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 83073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 83083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 83093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 83103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$mode" = clean ; then 83113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev noexename=$name 83123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $file in 83133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *.exe) 83143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname '' '.exe' "$file" 83153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev file=$func_stripname_result 83163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_stripname '' '.exe' "$name" 83173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev noexename=$func_stripname_result 83183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # $file with .exe has already been added to rmfiles, 83193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # add $file without .exe 83203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rmfiles="$rmfiles $file" 83213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 83223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 83233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Do a test to see if this is a libtool program. 83243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if func_ltwrapper_p "$file"; then 83253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if func_ltwrapper_executable_p "$file"; then 83263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_ltwrapper_scriptname "$file" 83273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink_command= 83283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_source $func_ltwrapper_scriptname_result 83293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rmfiles="$rmfiles $func_ltwrapper_scriptname_result" 83303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 83313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev relink_command= 83323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_source $dir/$noexename 83333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 83343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 83353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # note $name still contains .exe if it was in $file originally 83363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # as does the version of $file that was added into $rmfiles 83373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" 83383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$fast_install" = yes && test -n "$relink_command"; then 83393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rmfiles="$rmfiles $objdir/lt-$name" 83403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 83413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "X$noexename" != "X$name" ; then 83423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rmfiles="$rmfiles $objdir/lt-${noexename}.c" 83433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 83443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 83453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 83463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 83473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 83483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval "$RM $rmfiles" 'exit_status=1' 83493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 83503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev objdir="$origobjdir" 83513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 83523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Try to remove the ${objdir}s in the directories where we deleted files 83533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for dir in $rmdirs; do 83543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -d "$dir"; then 83553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_show_eval "rmdir $dir >/dev/null 2>&1" 83563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 83573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 83583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 83593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $exit_status 83603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 83613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 83623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ test "$mode" = uninstall || test "$mode" = clean; } && 83633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_mode_uninstall ${1+"$@"} 83643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 83653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtest -z "$mode" && { 83663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev help="$generic_help" 83673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_help "you must specify a MODE" 83683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 83693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 83703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtest -z "$exec_cmd" && \ 83713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev func_fatal_help "invalid operation mode \`$mode'" 83723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 83733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevif test -n "$exec_cmd"; then 83743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eval exec "$exec_cmd" 83753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $EXIT_FAILURE 83763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfi 83773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 83783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevexit $exit_status 83793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 83803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 83813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# The TAGs below are defined such that we never get into a situation 83823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# in which we disable both kinds of libraries. Given conflicting 83833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# choices, we go for a static library, that is the most portable, 83843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# since we can't tell whether shared libraries were disabled because 83853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# the user asked for that or because the platform doesn't support 83863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# them. This is particularly important on AIX, because we don't 83873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# support having both static and shared libraries enabled at the same 83883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# time on that platform, so we default to a shared-only configuration. 83893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# If a disable-shared tag is given, we'll fallback to a static-only 83903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# configuration. But we'll never go from static-only to shared-only. 83913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 83923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 83933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevbuild_libtool_libs=no 83943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevbuild_old_libs=yes 83953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# ### END LIBTOOL TAG CONFIG: disable-shared 83963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 83973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# ### BEGIN LIBTOOL TAG CONFIG: disable-static 83983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 83993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# ### END LIBTOOL TAG CONFIG: disable-static 84003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 84013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Local Variables: 84023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# mode:shell-script 84033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# sh-indentation:2 84043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# End: 84053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# vi:sw=2 84063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 8407