179d5fcd7Smrg#! /usr/bin/env sh 205cf1079Smrg## DO NOT EDIT - This file generated from ./build-aux/ltmain.in 379d5fcd7Smrg## by inline-source v2019-02-19.15 404007ebaSmrg 579d5fcd7Smrg# libtool (GNU libtool) 2.4.7 605cf1079Smrg# Provide generalized library-building support services. 704007ebaSmrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 804007ebaSmrg 979d5fcd7Smrg# Copyright (C) 1996-2019, 2021-2022 Free Software Foundation, Inc. 1004007ebaSmrg# This is free software; see the source for copying conditions. There is NO 1104007ebaSmrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 1204007ebaSmrg 1304007ebaSmrg# GNU Libtool is free software; you can redistribute it and/or modify 1404007ebaSmrg# it under the terms of the GNU General Public License as published by 1504007ebaSmrg# the Free Software Foundation; either version 2 of the License, or 1604007ebaSmrg# (at your option) any later version. 1704007ebaSmrg# 1804007ebaSmrg# As a special exception to the GNU General Public License, 1904007ebaSmrg# if you distribute this file as part of a program or library that 2004007ebaSmrg# is built using GNU Libtool, you may include this file under the 2104007ebaSmrg# same distribution terms that you use for the rest of that program. 2204007ebaSmrg# 2304007ebaSmrg# GNU Libtool is distributed in the hope that it will be useful, but 2404007ebaSmrg# WITHOUT ANY WARRANTY; without even the implied warranty of 2504007ebaSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 2604007ebaSmrg# General Public License for more details. 2704007ebaSmrg# 2804007ebaSmrg# You should have received a copy of the GNU General Public License 2905cf1079Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 3004007ebaSmrg 3104007ebaSmrg 3204007ebaSmrgPROGRAM=libtool 3304007ebaSmrgPACKAGE=libtool 3479d5fcd7SmrgVERSION=2.4.7 3579d5fcd7Smrgpackage_revision=2.4.7 3604007ebaSmrg 3705cf1079Smrg 3805cf1079Smrg## ------ ## 3905cf1079Smrg## Usage. ## 4005cf1079Smrg## ------ ## 4105cf1079Smrg 4205cf1079Smrg# Run './libtool --help' for help with using this script from the 4305cf1079Smrg# command line. 4405cf1079Smrg 4505cf1079Smrg 4605cf1079Smrg## ------------------------------- ## 4705cf1079Smrg## User overridable command paths. ## 4805cf1079Smrg## ------------------------------- ## 4905cf1079Smrg 5005cf1079Smrg# After configure completes, it has a better idea of some of the 5105cf1079Smrg# shell tools we need than the defaults used by the functions shared 5205cf1079Smrg# with bootstrap, so set those here where they can still be over- 5305cf1079Smrg# ridden by the user, but otherwise take precedence. 5405cf1079Smrg 5505cf1079Smrg: ${AUTOCONF="autoconf"} 5605cf1079Smrg: ${AUTOMAKE="automake"} 5705cf1079Smrg 5805cf1079Smrg 5905cf1079Smrg## -------------------------- ## 6005cf1079Smrg## Source external libraries. ## 6105cf1079Smrg## -------------------------- ## 6205cf1079Smrg 6305cf1079Smrg# Much of our low-level functionality needs to be sourced from external 6405cf1079Smrg# libraries, which are installed to $pkgauxdir. 6505cf1079Smrg 6605cf1079Smrg# Set a version string for this script. 6779d5fcd7Smrgscriptversion=2019-02-19.15; # UTC 6805cf1079Smrg 6905cf1079Smrg# General shell script boiler plate, and helper functions. 7005cf1079Smrg# Written by Gary V. Vaughan, 2004 7105cf1079Smrg 7279d5fcd7Smrg# This is free software. There is NO warranty; not even for 7379d5fcd7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 7479d5fcd7Smrg# 7579d5fcd7Smrg# Copyright (C) 2004-2019, 2021 Bootstrap Authors 7679d5fcd7Smrg# 7779d5fcd7Smrg# This file is dual licensed under the terms of the MIT license 7879d5fcd7Smrg# <https://opensource.org/license/MIT>, and GPL version 2 or later 7979d5fcd7Smrg# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of 8079d5fcd7Smrg# these licenses when using or redistributing this software or any of 8179d5fcd7Smrg# the files within it. See the URLs above, or the file `LICENSE` 8279d5fcd7Smrg# included in the Bootstrap distribution for the full license texts. 8305cf1079Smrg 8479d5fcd7Smrg# Please report bugs or propose patches to: 8579d5fcd7Smrg# <https://github.com/gnulib-modules/bootstrap/issues> 8605cf1079Smrg 8705cf1079Smrg 8805cf1079Smrg## ------ ## 8905cf1079Smrg## Usage. ## 9005cf1079Smrg## ------ ## 9105cf1079Smrg 9205cf1079Smrg# Evaluate this file near the top of your script to gain access to 9305cf1079Smrg# the functions and variables defined here: 9405cf1079Smrg# 9505cf1079Smrg# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh 9605cf1079Smrg# 9705cf1079Smrg# If you need to override any of the default environment variable 9805cf1079Smrg# settings, do that before evaluating this file. 9905cf1079Smrg 10005cf1079Smrg 10105cf1079Smrg## -------------------- ## 10205cf1079Smrg## Shell normalisation. ## 10305cf1079Smrg## -------------------- ## 10405cf1079Smrg 10505cf1079Smrg# Some shells need a little help to be as Bourne compatible as possible. 10605cf1079Smrg# Before doing anything else, make sure all that help has been provided! 10705cf1079Smrg 10805cf1079SmrgDUALCASE=1; export DUALCASE # for MKS sh 10905cf1079Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : 11004007ebaSmrg emulate sh 11104007ebaSmrg NULLCMD=: 11205cf1079Smrg # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which 11304007ebaSmrg # is contrary to our usage. Disable this feature. 11404007ebaSmrg alias -g '${1+"$@"}'='"$@"' 11504007ebaSmrg setopt NO_GLOB_SUBST 11604007ebaSmrgelse 11705cf1079Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac 11804007ebaSmrgfi 11904007ebaSmrg 12005cf1079Smrg# NLS nuisances: We save the old values in case they are required later. 12105cf1079Smrg_G_user_locale= 12205cf1079Smrg_G_safe_locale= 12305cf1079Smrgfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 12404007ebaSmrgdo 12505cf1079Smrg eval "if test set = \"\${$_G_var+set}\"; then 12605cf1079Smrg save_$_G_var=\$$_G_var 12705cf1079Smrg $_G_var=C 12805cf1079Smrg export $_G_var 12905cf1079Smrg _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" 13005cf1079Smrg _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" 13104007ebaSmrg fi" 13204007ebaSmrgdone 13379d5fcd7Smrg# These NLS vars are set unconditionally (bootstrap issue #24). Unset those 13479d5fcd7Smrg# in case the environment reset is needed later and the $save_* variant is not 13579d5fcd7Smrg# defined (see the code above). 13679d5fcd7SmrgLC_ALL=C 13779d5fcd7SmrgLANGUAGE=C 13879d5fcd7Smrgexport LANGUAGE LC_ALL 13904007ebaSmrg 14005cf1079Smrg# Make sure IFS has a sensible default 14105cf1079Smrgsp=' ' 14205cf1079Smrgnl=' 14305cf1079Smrg' 14405cf1079SmrgIFS="$sp $nl" 14505cf1079Smrg 14605cf1079Smrg# There are apparently some retarded systems that use ';' as a PATH separator! 14705cf1079Smrgif test "${PATH_SEPARATOR+set}" != set; then 14805cf1079Smrg PATH_SEPARATOR=: 14905cf1079Smrg (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { 15005cf1079Smrg (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || 15105cf1079Smrg PATH_SEPARATOR=';' 15205cf1079Smrg } 15305cf1079Smrgfi 15404007ebaSmrg 15504007ebaSmrg 15679d5fcd7Smrg# func_unset VAR 15779d5fcd7Smrg# -------------- 15879d5fcd7Smrg# Portably unset VAR. 15979d5fcd7Smrg# In some shells, an 'unset VAR' statement leaves a non-zero return 16079d5fcd7Smrg# status if VAR is already unset, which might be problematic if the 16179d5fcd7Smrg# statement is used at the end of a function (thus poisoning its return 16279d5fcd7Smrg# value) or when 'set -e' is active (causing even a spurious abort of 16379d5fcd7Smrg# the script in this case). 16479d5fcd7Smrgfunc_unset () 16579d5fcd7Smrg{ 16679d5fcd7Smrg { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; } 16779d5fcd7Smrg} 16879d5fcd7Smrg 16979d5fcd7Smrg 17079d5fcd7Smrg# Make sure CDPATH doesn't cause `cd` commands to output the target dir. 17179d5fcd7Smrgfunc_unset CDPATH 17279d5fcd7Smrg 17379d5fcd7Smrg# Make sure ${,E,F}GREP behave sanely. 17479d5fcd7Smrgfunc_unset GREP_OPTIONS 17579d5fcd7Smrg 17604007ebaSmrg 17705cf1079Smrg## ------------------------- ## 17805cf1079Smrg## Locate command utilities. ## 17905cf1079Smrg## ------------------------- ## 18005cf1079Smrg 18105cf1079Smrg 18205cf1079Smrg# func_executable_p FILE 18305cf1079Smrg# ---------------------- 18405cf1079Smrg# Check that FILE is an executable regular file. 18505cf1079Smrgfunc_executable_p () 18605cf1079Smrg{ 18705cf1079Smrg test -f "$1" && test -x "$1" 18805cf1079Smrg} 18905cf1079Smrg 19005cf1079Smrg 19105cf1079Smrg# func_path_progs PROGS_LIST CHECK_FUNC [PATH] 19205cf1079Smrg# -------------------------------------------- 19305cf1079Smrg# Search for either a program that responds to --version with output 19405cf1079Smrg# containing "GNU", or else returned by CHECK_FUNC otherwise, by 19505cf1079Smrg# trying all the directories in PATH with each of the elements of 19605cf1079Smrg# PROGS_LIST. 19705cf1079Smrg# 19805cf1079Smrg# CHECK_FUNC should accept the path to a candidate program, and 19905cf1079Smrg# set $func_check_prog_result if it truncates its output less than 20005cf1079Smrg# $_G_path_prog_max characters. 20105cf1079Smrgfunc_path_progs () 20205cf1079Smrg{ 20305cf1079Smrg _G_progs_list=$1 20405cf1079Smrg _G_check_func=$2 20505cf1079Smrg _G_PATH=${3-"$PATH"} 20605cf1079Smrg 20705cf1079Smrg _G_path_prog_max=0 20805cf1079Smrg _G_path_prog_found=false 20905cf1079Smrg _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} 21005cf1079Smrg for _G_dir in $_G_PATH; do 21105cf1079Smrg IFS=$_G_save_IFS 21205cf1079Smrg test -z "$_G_dir" && _G_dir=. 21305cf1079Smrg for _G_prog_name in $_G_progs_list; do 21405cf1079Smrg for _exeext in '' .EXE; do 21505cf1079Smrg _G_path_prog=$_G_dir/$_G_prog_name$_exeext 21605cf1079Smrg func_executable_p "$_G_path_prog" || continue 21705cf1079Smrg case `"$_G_path_prog" --version 2>&1` in 21805cf1079Smrg *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; 21905cf1079Smrg *) $_G_check_func $_G_path_prog 22005cf1079Smrg func_path_progs_result=$func_check_prog_result 22105cf1079Smrg ;; 22205cf1079Smrg esac 22305cf1079Smrg $_G_path_prog_found && break 3 22405cf1079Smrg done 22505cf1079Smrg done 22605cf1079Smrg done 22705cf1079Smrg IFS=$_G_save_IFS 22805cf1079Smrg test -z "$func_path_progs_result" && { 22905cf1079Smrg echo "no acceptable sed could be found in \$PATH" >&2 23005cf1079Smrg exit 1 23105cf1079Smrg } 23205cf1079Smrg} 23305cf1079Smrg 23405cf1079Smrg 23505cf1079Smrg# We want to be able to use the functions in this file before configure 23605cf1079Smrg# has figured out where the best binaries are kept, which means we have 23705cf1079Smrg# to search for them ourselves - except when the results are already set 23805cf1079Smrg# where we skip the searches. 23905cf1079Smrg 24005cf1079Smrg# Unless the user overrides by setting SED, search the path for either GNU 24105cf1079Smrg# sed, or the sed that truncates its output the least. 24205cf1079Smrgtest -z "$SED" && { 24305cf1079Smrg _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ 24405cf1079Smrg for _G_i in 1 2 3 4 5 6 7; do 24505cf1079Smrg _G_sed_script=$_G_sed_script$nl$_G_sed_script 24605cf1079Smrg done 24705cf1079Smrg echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed 24805cf1079Smrg _G_sed_script= 24905cf1079Smrg 25005cf1079Smrg func_check_prog_sed () 25105cf1079Smrg { 25205cf1079Smrg _G_path_prog=$1 25305cf1079Smrg 25405cf1079Smrg _G_count=0 25505cf1079Smrg printf 0123456789 >conftest.in 25605cf1079Smrg while : 25705cf1079Smrg do 25805cf1079Smrg cat conftest.in conftest.in >conftest.tmp 25905cf1079Smrg mv conftest.tmp conftest.in 26005cf1079Smrg cp conftest.in conftest.nl 26105cf1079Smrg echo '' >> conftest.nl 26205cf1079Smrg "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break 26305cf1079Smrg diff conftest.out conftest.nl >/dev/null 2>&1 || break 26405cf1079Smrg _G_count=`expr $_G_count + 1` 26505cf1079Smrg if test "$_G_count" -gt "$_G_path_prog_max"; then 26605cf1079Smrg # Best one so far, save it but keep looking for a better one 26705cf1079Smrg func_check_prog_result=$_G_path_prog 26805cf1079Smrg _G_path_prog_max=$_G_count 26905cf1079Smrg fi 27005cf1079Smrg # 10*(2^10) chars as input seems more than enough 27105cf1079Smrg test 10 -lt "$_G_count" && break 27205cf1079Smrg done 27305cf1079Smrg rm -f conftest.in conftest.tmp conftest.nl conftest.out 27405cf1079Smrg } 27505cf1079Smrg 27679d5fcd7Smrg func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin" 27705cf1079Smrg rm -f conftest.sed 27805cf1079Smrg SED=$func_path_progs_result 27905cf1079Smrg} 28005cf1079Smrg 28105cf1079Smrg 28205cf1079Smrg# Unless the user overrides by setting GREP, search the path for either GNU 28305cf1079Smrg# grep, or the grep that truncates its output the least. 28405cf1079Smrgtest -z "$GREP" && { 28505cf1079Smrg func_check_prog_grep () 28605cf1079Smrg { 28705cf1079Smrg _G_path_prog=$1 28805cf1079Smrg 28905cf1079Smrg _G_count=0 29005cf1079Smrg _G_path_prog_max=0 29105cf1079Smrg printf 0123456789 >conftest.in 29205cf1079Smrg while : 29305cf1079Smrg do 29405cf1079Smrg cat conftest.in conftest.in >conftest.tmp 29505cf1079Smrg mv conftest.tmp conftest.in 29605cf1079Smrg cp conftest.in conftest.nl 29705cf1079Smrg echo 'GREP' >> conftest.nl 29805cf1079Smrg "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break 29905cf1079Smrg diff conftest.out conftest.nl >/dev/null 2>&1 || break 30005cf1079Smrg _G_count=`expr $_G_count + 1` 30105cf1079Smrg if test "$_G_count" -gt "$_G_path_prog_max"; then 30205cf1079Smrg # Best one so far, save it but keep looking for a better one 30305cf1079Smrg func_check_prog_result=$_G_path_prog 30405cf1079Smrg _G_path_prog_max=$_G_count 30505cf1079Smrg fi 30605cf1079Smrg # 10*(2^10) chars as input seems more than enough 30705cf1079Smrg test 10 -lt "$_G_count" && break 30805cf1079Smrg done 30905cf1079Smrg rm -f conftest.in conftest.tmp conftest.nl conftest.out 31005cf1079Smrg } 31105cf1079Smrg 31279d5fcd7Smrg func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin" 31305cf1079Smrg GREP=$func_path_progs_result 31405cf1079Smrg} 31505cf1079Smrg 31605cf1079Smrg 31705cf1079Smrg## ------------------------------- ## 31805cf1079Smrg## User overridable command paths. ## 31905cf1079Smrg## ------------------------------- ## 32005cf1079Smrg 32105cf1079Smrg# All uppercase variable names are used for environment variables. These 32205cf1079Smrg# variables can be overridden by the user before calling a script that 32305cf1079Smrg# uses them if a suitable command of that name is not already available 32405cf1079Smrg# in the command search PATH. 32504007ebaSmrg 32604007ebaSmrg: ${CP="cp -f"} 32705cf1079Smrg: ${ECHO="printf %s\n"} 32805cf1079Smrg: ${EGREP="$GREP -E"} 32905cf1079Smrg: ${FGREP="$GREP -F"} 33005cf1079Smrg: ${LN_S="ln -s"} 33104007ebaSmrg: ${MAKE="make"} 33204007ebaSmrg: ${MKDIR="mkdir"} 33304007ebaSmrg: ${MV="mv -f"} 33404007ebaSmrg: ${RM="rm -f"} 33504007ebaSmrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 33604007ebaSmrg 33704007ebaSmrg 33805cf1079Smrg## -------------------- ## 33905cf1079Smrg## Useful sed snippets. ## 34005cf1079Smrg## -------------------- ## 34104007ebaSmrg 34205cf1079Smrgsed_dirname='s|/[^/]*$||' 34305cf1079Smrgsed_basename='s|^.*/||' 34404007ebaSmrg 34505cf1079Smrg# Sed substitution that helps us do robust quoting. It backslashifies 34605cf1079Smrg# metacharacters that are still active within double-quoted strings. 34705cf1079Smrgsed_quote_subst='s|\([`"$\\]\)|\\\1|g' 34804007ebaSmrg 34905cf1079Smrg# Same as above, but do not quote variable references. 35005cf1079Smrgsed_double_quote_subst='s/\(["`\\]\)/\\\1/g' 35104007ebaSmrg 35205cf1079Smrg# Sed substitution that turns a string into a regex matching for the 35305cf1079Smrg# string literally. 35405cf1079Smrgsed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' 35504007ebaSmrg 35605cf1079Smrg# Sed substitution that converts a w32 file name or path 35705cf1079Smrg# that contains forward slashes, into one that contains 35805cf1079Smrg# (escaped) backslashes. A very naive implementation. 35905cf1079Smrgsed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 36005cf1079Smrg 36105cf1079Smrg# Re-'\' parameter expansions in output of sed_double_quote_subst that 36205cf1079Smrg# were '\'-ed in input to the same. If an odd number of '\' preceded a 36305cf1079Smrg# '$' in input to sed_double_quote_subst, that '$' was protected from 36405cf1079Smrg# expansion. Since each input '\' is now two '\'s, look for any number 36505cf1079Smrg# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. 36605cf1079Smrg_G_bs='\\' 36705cf1079Smrg_G_bs2='\\\\' 36805cf1079Smrg_G_bs4='\\\\\\\\' 36905cf1079Smrg_G_dollar='\$' 37005cf1079Smrgsed_double_backslash="\ 37105cf1079Smrg s/$_G_bs4/&\\ 37205cf1079Smrg/g 37305cf1079Smrg s/^$_G_bs2$_G_dollar/$_G_bs&/ 37405cf1079Smrg s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g 37505cf1079Smrg s/\n//g" 37604007ebaSmrg 37779d5fcd7Smrg# require_check_ifs_backslash 37879d5fcd7Smrg# --------------------------- 37979d5fcd7Smrg# Check if we can use backslash as IFS='\' separator, and set 38079d5fcd7Smrg# $check_ifs_backshlash_broken to ':' or 'false'. 38179d5fcd7Smrgrequire_check_ifs_backslash=func_require_check_ifs_backslash 38279d5fcd7Smrgfunc_require_check_ifs_backslash () 38379d5fcd7Smrg{ 38479d5fcd7Smrg _G_save_IFS=$IFS 38579d5fcd7Smrg IFS='\' 38679d5fcd7Smrg _G_check_ifs_backshlash='a\\b' 38779d5fcd7Smrg for _G_i in $_G_check_ifs_backshlash 38879d5fcd7Smrg do 38979d5fcd7Smrg case $_G_i in 39079d5fcd7Smrg a) 39179d5fcd7Smrg check_ifs_backshlash_broken=false 39279d5fcd7Smrg ;; 39379d5fcd7Smrg '') 39479d5fcd7Smrg break 39579d5fcd7Smrg ;; 39679d5fcd7Smrg *) 39779d5fcd7Smrg check_ifs_backshlash_broken=: 39879d5fcd7Smrg break 39979d5fcd7Smrg ;; 40079d5fcd7Smrg esac 40179d5fcd7Smrg done 40279d5fcd7Smrg IFS=$_G_save_IFS 40379d5fcd7Smrg require_check_ifs_backslash=: 40479d5fcd7Smrg} 40579d5fcd7Smrg 40604007ebaSmrg 40705cf1079Smrg## ----------------- ## 40805cf1079Smrg## Global variables. ## 40905cf1079Smrg## ----------------- ## 41004007ebaSmrg 41105cf1079Smrg# Except for the global variables explicitly listed below, the following 41205cf1079Smrg# functions in the '^func_' namespace, and the '^require_' namespace 41305cf1079Smrg# variables initialised in the 'Resource management' section, sourcing 41405cf1079Smrg# this file will not pollute your global namespace with anything 41505cf1079Smrg# else. There's no portable way to scope variables in Bourne shell 41605cf1079Smrg# though, so actually running these functions will sometimes place 41705cf1079Smrg# results into a variable named after the function, and often use 41805cf1079Smrg# temporary variables in the '^_G_' namespace. If you are careful to 41905cf1079Smrg# avoid using those namespaces casually in your sourcing script, things 42005cf1079Smrg# should continue to work as you expect. And, of course, you can freely 42105cf1079Smrg# overwrite any of the functions or variables defined here before 42205cf1079Smrg# calling anything to customize them. 42304007ebaSmrg 42405cf1079SmrgEXIT_SUCCESS=0 42505cf1079SmrgEXIT_FAILURE=1 42605cf1079SmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 42705cf1079SmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 42804007ebaSmrg 42905cf1079Smrg# Allow overriding, eg assuming that you follow the convention of 43005cf1079Smrg# putting '$debug_cmd' at the start of all your functions, you can get 43105cf1079Smrg# bash to show function call trace with: 43205cf1079Smrg# 43305cf1079Smrg# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name 43405cf1079Smrgdebug_cmd=${debug_cmd-":"} 43505cf1079Smrgexit_cmd=: 43604007ebaSmrg 43705cf1079Smrg# By convention, finish your script with: 43805cf1079Smrg# 43905cf1079Smrg# exit $exit_status 44005cf1079Smrg# 44105cf1079Smrg# so that you can set exit_status to non-zero if you want to indicate 44205cf1079Smrg# something went wrong during execution without actually bailing out at 44305cf1079Smrg# the point of failure. 44405cf1079Smrgexit_status=$EXIT_SUCCESS 44504007ebaSmrg 44605cf1079Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 44705cf1079Smrg# is ksh but when the shell is invoked as "sh" and the current value of 44805cf1079Smrg# the _XPG environment variable is not equal to 1 (one), the special 44905cf1079Smrg# positional parameter $0, within a function call, is the name of the 45005cf1079Smrg# function. 45105cf1079Smrgprogpath=$0 45204007ebaSmrg 45305cf1079Smrg# The name of this program. 45405cf1079Smrgprogname=`$ECHO "$progpath" |$SED "$sed_basename"` 45504007ebaSmrg 45605cf1079Smrg# Make sure we have an absolute progpath for reexecution: 45704007ebaSmrgcase $progpath in 45804007ebaSmrg [\\/]*|[A-Za-z]:\\*) ;; 45904007ebaSmrg *[\\/]*) 46005cf1079Smrg progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` 46104007ebaSmrg progdir=`cd "$progdir" && pwd` 46205cf1079Smrg progpath=$progdir/$progname 46304007ebaSmrg ;; 46404007ebaSmrg *) 46505cf1079Smrg _G_IFS=$IFS 46604007ebaSmrg IFS=${PATH_SEPARATOR-:} 46704007ebaSmrg for progdir in $PATH; do 46805cf1079Smrg IFS=$_G_IFS 46904007ebaSmrg test -x "$progdir/$progname" && break 47004007ebaSmrg done 47105cf1079Smrg IFS=$_G_IFS 47204007ebaSmrg test -n "$progdir" || progdir=`pwd` 47305cf1079Smrg progpath=$progdir/$progname 47404007ebaSmrg ;; 47504007ebaSmrgesac 47604007ebaSmrg 47704007ebaSmrg 47805cf1079Smrg## ----------------- ## 47905cf1079Smrg## Standard options. ## 48005cf1079Smrg## ----------------- ## 48104007ebaSmrg 48205cf1079Smrg# The following options affect the operation of the functions defined 48305cf1079Smrg# below, and should be set appropriately depending on run-time para- 48405cf1079Smrg# meters passed on the command line. 48504007ebaSmrg 48604007ebaSmrgopt_dry_run=false 48704007ebaSmrgopt_quiet=false 48804007ebaSmrgopt_verbose=false 48904007ebaSmrg 49005cf1079Smrg# Categories 'all' and 'none' are always available. Append any others 49105cf1079Smrg# you will pass as the first argument to func_warning from your own 49205cf1079Smrg# code. 49305cf1079Smrgwarning_categories= 49404007ebaSmrg 49505cf1079Smrg# By default, display warnings according to 'opt_warning_types'. Set 49605cf1079Smrg# 'warning_func' to ':' to elide all warnings, or func_fatal_error to 49705cf1079Smrg# treat the next displayed warning as a fatal error. 49805cf1079Smrgwarning_func=func_warn_and_continue 49904007ebaSmrg 50005cf1079Smrg# Set to 'all' to display all warnings, 'none' to suppress all 50105cf1079Smrg# warnings, or a space delimited list of some subset of 50205cf1079Smrg# 'warning_categories' to display only the listed warnings. 50305cf1079Smrgopt_warning_types=all 50404007ebaSmrg 50504007ebaSmrg 50605cf1079Smrg## -------------------- ## 50705cf1079Smrg## Resource management. ## 50805cf1079Smrg## -------------------- ## 50904007ebaSmrg 51005cf1079Smrg# This section contains definitions for functions that each ensure a 51105cf1079Smrg# particular resource (a file, or a non-empty configuration variable for 51205cf1079Smrg# example) is available, and if appropriate to extract default values 51305cf1079Smrg# from pertinent package files. Call them using their associated 51405cf1079Smrg# 'require_*' variable to ensure that they are executed, at most, once. 51505cf1079Smrg# 51605cf1079Smrg# It's entirely deliberate that calling these functions can set 51705cf1079Smrg# variables that don't obey the namespace limitations obeyed by the rest 51805cf1079Smrg# of this file, in order that that they be as useful as possible to 51905cf1079Smrg# callers. 52004007ebaSmrg 52104007ebaSmrg 52205cf1079Smrg# require_term_colors 52305cf1079Smrg# ------------------- 52405cf1079Smrg# Allow display of bold text on terminals that support it. 52505cf1079Smrgrequire_term_colors=func_require_term_colors 52605cf1079Smrgfunc_require_term_colors () 52704007ebaSmrg{ 52805cf1079Smrg $debug_cmd 52905cf1079Smrg 53005cf1079Smrg test -t 1 && { 53105cf1079Smrg # COLORTERM and USE_ANSI_COLORS environment variables take 53205cf1079Smrg # precedence, because most terminfo databases neglect to describe 53305cf1079Smrg # whether color sequences are supported. 53405cf1079Smrg test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} 53505cf1079Smrg 53605cf1079Smrg if test 1 = "$USE_ANSI_COLORS"; then 53705cf1079Smrg # Standard ANSI escape sequences 53805cf1079Smrg tc_reset='[0m' 53905cf1079Smrg tc_bold='[1m'; tc_standout='[7m' 54005cf1079Smrg tc_red='[31m'; tc_green='[32m' 54105cf1079Smrg tc_blue='[34m'; tc_cyan='[36m' 54205cf1079Smrg else 54305cf1079Smrg # Otherwise trust the terminfo database after all. 54405cf1079Smrg test -n "`tput sgr0 2>/dev/null`" && { 54505cf1079Smrg tc_reset=`tput sgr0` 54605cf1079Smrg test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` 54705cf1079Smrg tc_standout=$tc_bold 54805cf1079Smrg test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` 54905cf1079Smrg test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` 55005cf1079Smrg test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` 55105cf1079Smrg test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` 55205cf1079Smrg test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` 55305cf1079Smrg } 55405cf1079Smrg fi 55505cf1079Smrg } 55604007ebaSmrg 55705cf1079Smrg require_term_colors=: 55804007ebaSmrg} 55904007ebaSmrg 56004007ebaSmrg 56105cf1079Smrg## ----------------- ## 56205cf1079Smrg## Function library. ## 56305cf1079Smrg## ----------------- ## 56405cf1079Smrg 56505cf1079Smrg# This section contains a variety of useful functions to call in your 56605cf1079Smrg# scripts. Take note of the portable wrappers for features provided by 56705cf1079Smrg# some modern shells, which will fall back to slower equivalents on 56805cf1079Smrg# less featureful shells. 56905cf1079Smrg 57005cf1079Smrg 57105cf1079Smrg# func_append VAR VALUE 57205cf1079Smrg# --------------------- 57305cf1079Smrg# Append VALUE onto the existing contents of VAR. 57405cf1079Smrg 57505cf1079Smrg # We should try to minimise forks, especially on Windows where they are 57605cf1079Smrg # unreasonably slow, so skip the feature probes when bash or zsh are 57705cf1079Smrg # being used: 57805cf1079Smrg if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then 57905cf1079Smrg : ${_G_HAVE_ARITH_OP="yes"} 58005cf1079Smrg : ${_G_HAVE_XSI_OPS="yes"} 58105cf1079Smrg # The += operator was introduced in bash 3.1 58205cf1079Smrg case $BASH_VERSION in 58305cf1079Smrg [12].* | 3.0 | 3.0*) ;; 58405cf1079Smrg *) 58505cf1079Smrg : ${_G_HAVE_PLUSEQ_OP="yes"} 58605cf1079Smrg ;; 58705cf1079Smrg esac 58805cf1079Smrg fi 58905cf1079Smrg 59005cf1079Smrg # _G_HAVE_PLUSEQ_OP 59105cf1079Smrg # Can be empty, in which case the shell is probed, "yes" if += is 59205cf1079Smrg # useable or anything else if it does not work. 59305cf1079Smrg test -z "$_G_HAVE_PLUSEQ_OP" \ 59405cf1079Smrg && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ 59505cf1079Smrg && _G_HAVE_PLUSEQ_OP=yes 59605cf1079Smrg 59705cf1079Smrgif test yes = "$_G_HAVE_PLUSEQ_OP" 59805cf1079Smrgthen 59905cf1079Smrg # This is an XSI compatible shell, allowing a faster implementation... 60005cf1079Smrg eval 'func_append () 60105cf1079Smrg { 60205cf1079Smrg $debug_cmd 60305cf1079Smrg 60405cf1079Smrg eval "$1+=\$2" 60505cf1079Smrg }' 60605cf1079Smrgelse 60705cf1079Smrg # ...otherwise fall back to using expr, which is often a shell builtin. 60805cf1079Smrg func_append () 60905cf1079Smrg { 61005cf1079Smrg $debug_cmd 61105cf1079Smrg 61205cf1079Smrg eval "$1=\$$1\$2" 61305cf1079Smrg } 61405cf1079Smrgfi 61505cf1079Smrg 61605cf1079Smrg 61705cf1079Smrg# func_append_quoted VAR VALUE 61805cf1079Smrg# ---------------------------- 61905cf1079Smrg# Quote VALUE and append to the end of shell variable VAR, separated 62005cf1079Smrg# by a space. 62105cf1079Smrgif test yes = "$_G_HAVE_PLUSEQ_OP"; then 62205cf1079Smrg eval 'func_append_quoted () 62305cf1079Smrg { 62405cf1079Smrg $debug_cmd 62505cf1079Smrg 62679d5fcd7Smrg func_quote_arg pretty "$2" 62779d5fcd7Smrg eval "$1+=\\ \$func_quote_arg_result" 62805cf1079Smrg }' 62905cf1079Smrgelse 63005cf1079Smrg func_append_quoted () 63105cf1079Smrg { 63205cf1079Smrg $debug_cmd 63305cf1079Smrg 63479d5fcd7Smrg func_quote_arg pretty "$2" 63579d5fcd7Smrg eval "$1=\$$1\\ \$func_quote_arg_result" 63605cf1079Smrg } 63705cf1079Smrgfi 63805cf1079Smrg 63905cf1079Smrg 64005cf1079Smrg# func_append_uniq VAR VALUE 64105cf1079Smrg# -------------------------- 64205cf1079Smrg# Append unique VALUE onto the existing contents of VAR, assuming 64305cf1079Smrg# entries are delimited by the first character of VALUE. For example: 64405cf1079Smrg# 64505cf1079Smrg# func_append_uniq options " --another-option option-argument" 64605cf1079Smrg# 64705cf1079Smrg# will only append to $options if " --another-option option-argument " 64805cf1079Smrg# is not already present somewhere in $options already (note spaces at 64905cf1079Smrg# each end implied by leading space in second argument). 65005cf1079Smrgfunc_append_uniq () 65105cf1079Smrg{ 65205cf1079Smrg $debug_cmd 65305cf1079Smrg 65405cf1079Smrg eval _G_current_value='`$ECHO $'$1'`' 65505cf1079Smrg _G_delim=`expr "$2" : '\(.\)'` 65605cf1079Smrg 65705cf1079Smrg case $_G_delim$_G_current_value$_G_delim in 65805cf1079Smrg *"$2$_G_delim"*) ;; 65905cf1079Smrg *) func_append "$@" ;; 66005cf1079Smrg esac 66105cf1079Smrg} 66205cf1079Smrg 66305cf1079Smrg 66405cf1079Smrg# func_arith TERM... 66505cf1079Smrg# ------------------ 66605cf1079Smrg# Set func_arith_result to the result of evaluating TERMs. 66705cf1079Smrg test -z "$_G_HAVE_ARITH_OP" \ 66805cf1079Smrg && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ 66905cf1079Smrg && _G_HAVE_ARITH_OP=yes 67005cf1079Smrg 67105cf1079Smrgif test yes = "$_G_HAVE_ARITH_OP"; then 67205cf1079Smrg eval 'func_arith () 67305cf1079Smrg { 67405cf1079Smrg $debug_cmd 67505cf1079Smrg 67605cf1079Smrg func_arith_result=$(( $* )) 67705cf1079Smrg }' 67805cf1079Smrgelse 67905cf1079Smrg func_arith () 68005cf1079Smrg { 68105cf1079Smrg $debug_cmd 68205cf1079Smrg 68305cf1079Smrg func_arith_result=`expr "$@"` 68405cf1079Smrg } 68505cf1079Smrgfi 68605cf1079Smrg 68705cf1079Smrg 68805cf1079Smrg# func_basename FILE 68905cf1079Smrg# ------------------ 69005cf1079Smrg# Set func_basename_result to FILE with everything up to and including 69105cf1079Smrg# the last / stripped. 69205cf1079Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 69305cf1079Smrg # If this shell supports suffix pattern removal, then use it to avoid 69405cf1079Smrg # forking. Hide the definitions single quotes in case the shell chokes 69505cf1079Smrg # on unsupported syntax... 69605cf1079Smrg _b='func_basename_result=${1##*/}' 69705cf1079Smrg _d='case $1 in 69805cf1079Smrg */*) func_dirname_result=${1%/*}$2 ;; 69905cf1079Smrg * ) func_dirname_result=$3 ;; 70005cf1079Smrg esac' 70105cf1079Smrg 70205cf1079Smrgelse 70305cf1079Smrg # ...otherwise fall back to using sed. 70405cf1079Smrg _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' 70505cf1079Smrg _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` 70605cf1079Smrg if test "X$func_dirname_result" = "X$1"; then 70705cf1079Smrg func_dirname_result=$3 70805cf1079Smrg else 70905cf1079Smrg func_append func_dirname_result "$2" 71005cf1079Smrg fi' 71105cf1079Smrgfi 71205cf1079Smrg 71305cf1079Smrgeval 'func_basename () 71405cf1079Smrg{ 71505cf1079Smrg $debug_cmd 71605cf1079Smrg 71705cf1079Smrg '"$_b"' 71805cf1079Smrg}' 71905cf1079Smrg 72005cf1079Smrg 72105cf1079Smrg# func_dirname FILE APPEND NONDIR_REPLACEMENT 72205cf1079Smrg# ------------------------------------------- 72305cf1079Smrg# Compute the dirname of FILE. If nonempty, add APPEND to the result, 72405cf1079Smrg# otherwise set result to NONDIR_REPLACEMENT. 72505cf1079Smrgeval 'func_dirname () 72605cf1079Smrg{ 72705cf1079Smrg $debug_cmd 72805cf1079Smrg 72905cf1079Smrg '"$_d"' 73005cf1079Smrg}' 73105cf1079Smrg 73205cf1079Smrg 73305cf1079Smrg# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT 73405cf1079Smrg# -------------------------------------------------------- 73505cf1079Smrg# Perform func_basename and func_dirname in a single function 73605cf1079Smrg# call: 73705cf1079Smrg# dirname: Compute the dirname of FILE. If nonempty, 73805cf1079Smrg# add APPEND to the result, otherwise set result 73905cf1079Smrg# to NONDIR_REPLACEMENT. 74005cf1079Smrg# value returned in "$func_dirname_result" 74105cf1079Smrg# basename: Compute filename of FILE. 74205cf1079Smrg# value retuned in "$func_basename_result" 74305cf1079Smrg# For efficiency, we do not delegate to the functions above but instead 74405cf1079Smrg# duplicate the functionality here. 74505cf1079Smrgeval 'func_dirname_and_basename () 74605cf1079Smrg{ 74705cf1079Smrg $debug_cmd 74805cf1079Smrg 74905cf1079Smrg '"$_b"' 75005cf1079Smrg '"$_d"' 75105cf1079Smrg}' 75205cf1079Smrg 75305cf1079Smrg 75405cf1079Smrg# func_echo ARG... 75505cf1079Smrg# ---------------- 75605cf1079Smrg# Echo program name prefixed message. 75705cf1079Smrgfunc_echo () 75805cf1079Smrg{ 75905cf1079Smrg $debug_cmd 76005cf1079Smrg 76105cf1079Smrg _G_message=$* 76205cf1079Smrg 76305cf1079Smrg func_echo_IFS=$IFS 76405cf1079Smrg IFS=$nl 76505cf1079Smrg for _G_line in $_G_message; do 76605cf1079Smrg IFS=$func_echo_IFS 76705cf1079Smrg $ECHO "$progname: $_G_line" 76805cf1079Smrg done 76905cf1079Smrg IFS=$func_echo_IFS 77005cf1079Smrg} 77105cf1079Smrg 77205cf1079Smrg 77305cf1079Smrg# func_echo_all ARG... 77405cf1079Smrg# -------------------- 77505cf1079Smrg# Invoke $ECHO with all args, space-separated. 77605cf1079Smrgfunc_echo_all () 77705cf1079Smrg{ 77805cf1079Smrg $ECHO "$*" 77905cf1079Smrg} 78005cf1079Smrg 78105cf1079Smrg 78205cf1079Smrg# func_echo_infix_1 INFIX ARG... 78305cf1079Smrg# ------------------------------ 78405cf1079Smrg# Echo program name, followed by INFIX on the first line, with any 78505cf1079Smrg# additional lines not showing INFIX. 78605cf1079Smrgfunc_echo_infix_1 () 78705cf1079Smrg{ 78805cf1079Smrg $debug_cmd 78905cf1079Smrg 79005cf1079Smrg $require_term_colors 79105cf1079Smrg 79205cf1079Smrg _G_infix=$1; shift 79305cf1079Smrg _G_indent=$_G_infix 79405cf1079Smrg _G_prefix="$progname: $_G_infix: " 79505cf1079Smrg _G_message=$* 79605cf1079Smrg 79705cf1079Smrg # Strip color escape sequences before counting printable length 79805cf1079Smrg for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" 79905cf1079Smrg do 80005cf1079Smrg test -n "$_G_tc" && { 80105cf1079Smrg _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` 80205cf1079Smrg _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` 80305cf1079Smrg } 80405cf1079Smrg done 80505cf1079Smrg _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes 80605cf1079Smrg 80705cf1079Smrg func_echo_infix_1_IFS=$IFS 80805cf1079Smrg IFS=$nl 80905cf1079Smrg for _G_line in $_G_message; do 81005cf1079Smrg IFS=$func_echo_infix_1_IFS 81105cf1079Smrg $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 81205cf1079Smrg _G_prefix=$_G_indent 81305cf1079Smrg done 81405cf1079Smrg IFS=$func_echo_infix_1_IFS 81505cf1079Smrg} 81605cf1079Smrg 81705cf1079Smrg 81805cf1079Smrg# func_error ARG... 81905cf1079Smrg# ----------------- 82005cf1079Smrg# Echo program name prefixed message to standard error. 82105cf1079Smrgfunc_error () 82205cf1079Smrg{ 82305cf1079Smrg $debug_cmd 82405cf1079Smrg 82505cf1079Smrg $require_term_colors 82605cf1079Smrg 82705cf1079Smrg func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 82805cf1079Smrg} 82905cf1079Smrg 83005cf1079Smrg 83105cf1079Smrg# func_fatal_error ARG... 83205cf1079Smrg# ----------------------- 83305cf1079Smrg# Echo program name prefixed message to standard error, and exit. 83405cf1079Smrgfunc_fatal_error () 83505cf1079Smrg{ 83605cf1079Smrg $debug_cmd 83705cf1079Smrg 83805cf1079Smrg func_error "$*" 83905cf1079Smrg exit $EXIT_FAILURE 84005cf1079Smrg} 84105cf1079Smrg 84205cf1079Smrg 84305cf1079Smrg# func_grep EXPRESSION FILENAME 84405cf1079Smrg# ----------------------------- 84504007ebaSmrg# Check whether EXPRESSION matches any line of FILENAME, without output. 84604007ebaSmrgfunc_grep () 84704007ebaSmrg{ 84805cf1079Smrg $debug_cmd 84905cf1079Smrg 85004007ebaSmrg $GREP "$1" "$2" >/dev/null 2>&1 85104007ebaSmrg} 85204007ebaSmrg 85304007ebaSmrg 85405cf1079Smrg# func_len STRING 85505cf1079Smrg# --------------- 85605cf1079Smrg# Set func_len_result to the length of STRING. STRING may not 85705cf1079Smrg# start with a hyphen. 85805cf1079Smrg test -z "$_G_HAVE_XSI_OPS" \ 85905cf1079Smrg && (eval 'x=a/b/c; 86005cf1079Smrg test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 86105cf1079Smrg && _G_HAVE_XSI_OPS=yes 86205cf1079Smrg 86305cf1079Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 86405cf1079Smrg eval 'func_len () 86505cf1079Smrg { 86605cf1079Smrg $debug_cmd 86705cf1079Smrg 86805cf1079Smrg func_len_result=${#1} 86905cf1079Smrg }' 87005cf1079Smrgelse 87105cf1079Smrg func_len () 87205cf1079Smrg { 87305cf1079Smrg $debug_cmd 87405cf1079Smrg 87505cf1079Smrg func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` 87605cf1079Smrg } 87705cf1079Smrgfi 87805cf1079Smrg 87905cf1079Smrg 88005cf1079Smrg# func_mkdir_p DIRECTORY-PATH 88105cf1079Smrg# --------------------------- 88204007ebaSmrg# Make sure the entire path to DIRECTORY-PATH is available. 88304007ebaSmrgfunc_mkdir_p () 88404007ebaSmrg{ 88505cf1079Smrg $debug_cmd 88605cf1079Smrg 88705cf1079Smrg _G_directory_path=$1 88805cf1079Smrg _G_dir_list= 88904007ebaSmrg 89005cf1079Smrg if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then 89104007ebaSmrg 89205cf1079Smrg # Protect directory names starting with '-' 89305cf1079Smrg case $_G_directory_path in 89405cf1079Smrg -*) _G_directory_path=./$_G_directory_path ;; 89504007ebaSmrg esac 89604007ebaSmrg 89704007ebaSmrg # While some portion of DIR does not yet exist... 89805cf1079Smrg while test ! -d "$_G_directory_path"; do 89904007ebaSmrg # ...make a list in topmost first order. Use a colon delimited 90004007ebaSmrg # list incase some portion of path contains whitespace. 90105cf1079Smrg _G_dir_list=$_G_directory_path:$_G_dir_list 90204007ebaSmrg 90304007ebaSmrg # If the last portion added has no slash in it, the list is done 90405cf1079Smrg case $_G_directory_path in */*) ;; *) break ;; esac 90504007ebaSmrg 90604007ebaSmrg # ...otherwise throw away the child directory and loop 90705cf1079Smrg _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` 90804007ebaSmrg done 90905cf1079Smrg _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` 91004007ebaSmrg 91105cf1079Smrg func_mkdir_p_IFS=$IFS; IFS=: 91205cf1079Smrg for _G_dir in $_G_dir_list; do 91305cf1079Smrg IFS=$func_mkdir_p_IFS 91405cf1079Smrg # mkdir can fail with a 'File exist' error if two processes 91504007ebaSmrg # try to create one of the directories concurrently. Don't 91604007ebaSmrg # stop in that case! 91705cf1079Smrg $MKDIR "$_G_dir" 2>/dev/null || : 91804007ebaSmrg done 91905cf1079Smrg IFS=$func_mkdir_p_IFS 92004007ebaSmrg 92104007ebaSmrg # Bail out if we (or some other process) failed to create a directory. 92205cf1079Smrg test -d "$_G_directory_path" || \ 92305cf1079Smrg func_fatal_error "Failed to create '$1'" 92404007ebaSmrg fi 92504007ebaSmrg} 92604007ebaSmrg 92704007ebaSmrg 92805cf1079Smrg# func_mktempdir [BASENAME] 92905cf1079Smrg# ------------------------- 93004007ebaSmrg# Make a temporary directory that won't clash with other running 93104007ebaSmrg# libtool processes, and avoids race conditions if possible. If 93205cf1079Smrg# given, BASENAME is the basename for that directory. 93304007ebaSmrgfunc_mktempdir () 93404007ebaSmrg{ 93505cf1079Smrg $debug_cmd 93604007ebaSmrg 93705cf1079Smrg _G_template=${TMPDIR-/tmp}/${1-$progname} 93805cf1079Smrg 93905cf1079Smrg if test : = "$opt_dry_run"; then 94004007ebaSmrg # Return a directory name, but don't create it in dry-run mode 94105cf1079Smrg _G_tmpdir=$_G_template-$$ 94204007ebaSmrg else 94304007ebaSmrg 94404007ebaSmrg # If mktemp works, use that first and foremost 94505cf1079Smrg _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` 94604007ebaSmrg 94705cf1079Smrg if test ! -d "$_G_tmpdir"; then 94804007ebaSmrg # Failing that, at least try and use $RANDOM to avoid a race 94905cf1079Smrg _G_tmpdir=$_G_template-${RANDOM-0}$$ 95004007ebaSmrg 95105cf1079Smrg func_mktempdir_umask=`umask` 95204007ebaSmrg umask 0077 95305cf1079Smrg $MKDIR "$_G_tmpdir" 95405cf1079Smrg umask $func_mktempdir_umask 95504007ebaSmrg fi 95604007ebaSmrg 95704007ebaSmrg # If we're not in dry-run mode, bomb out on failure 95805cf1079Smrg test -d "$_G_tmpdir" || \ 95905cf1079Smrg func_fatal_error "cannot create temporary directory '$_G_tmpdir'" 96004007ebaSmrg fi 96104007ebaSmrg 96205cf1079Smrg $ECHO "$_G_tmpdir" 96304007ebaSmrg} 96404007ebaSmrg 96504007ebaSmrg 96605cf1079Smrg# func_normal_abspath PATH 96705cf1079Smrg# ------------------------ 96805cf1079Smrg# Remove doubled-up and trailing slashes, "." path components, 96905cf1079Smrg# and cancel out any ".." path components in PATH after making 97005cf1079Smrg# it an absolute path. 97105cf1079Smrgfunc_normal_abspath () 97204007ebaSmrg{ 97305cf1079Smrg $debug_cmd 97404007ebaSmrg 97505cf1079Smrg # These SED scripts presuppose an absolute path with a trailing slash. 97605cf1079Smrg _G_pathcar='s|^/\([^/]*\).*$|\1|' 97705cf1079Smrg _G_pathcdr='s|^/[^/]*||' 97805cf1079Smrg _G_removedotparts=':dotsl 97905cf1079Smrg s|/\./|/|g 98005cf1079Smrg t dotsl 98105cf1079Smrg s|/\.$|/|' 98205cf1079Smrg _G_collapseslashes='s|/\{1,\}|/|g' 98305cf1079Smrg _G_finalslash='s|/*$|/|' 98405cf1079Smrg 98505cf1079Smrg # Start from root dir and reassemble the path. 98605cf1079Smrg func_normal_abspath_result= 98705cf1079Smrg func_normal_abspath_tpath=$1 98805cf1079Smrg func_normal_abspath_altnamespace= 98905cf1079Smrg case $func_normal_abspath_tpath in 99005cf1079Smrg "") 99105cf1079Smrg # Empty path, that just means $cwd. 99205cf1079Smrg func_stripname '' '/' "`pwd`" 99305cf1079Smrg func_normal_abspath_result=$func_stripname_result 99405cf1079Smrg return 99505cf1079Smrg ;; 99605cf1079Smrg # The next three entries are used to spot a run of precisely 99705cf1079Smrg # two leading slashes without using negated character classes; 99805cf1079Smrg # we take advantage of case's first-match behaviour. 99905cf1079Smrg ///*) 100005cf1079Smrg # Unusual form of absolute path, do nothing. 100105cf1079Smrg ;; 100205cf1079Smrg //*) 100305cf1079Smrg # Not necessarily an ordinary path; POSIX reserves leading '//' 100405cf1079Smrg # and for example Cygwin uses it to access remote file shares 100505cf1079Smrg # over CIFS/SMB, so we conserve a leading double slash if found. 100605cf1079Smrg func_normal_abspath_altnamespace=/ 100705cf1079Smrg ;; 100805cf1079Smrg /*) 100905cf1079Smrg # Absolute path, do nothing. 101004007ebaSmrg ;; 101104007ebaSmrg *) 101205cf1079Smrg # Relative path, prepend $cwd. 101305cf1079Smrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 101405cf1079Smrg ;; 101504007ebaSmrg esac 101605cf1079Smrg 101705cf1079Smrg # Cancel out all the simple stuff to save iterations. We also want 101805cf1079Smrg # the path to end with a slash for ease of parsing, so make sure 101905cf1079Smrg # there is one (and only one) here. 102005cf1079Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 102105cf1079Smrg -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` 102205cf1079Smrg while :; do 102305cf1079Smrg # Processed it all yet? 102405cf1079Smrg if test / = "$func_normal_abspath_tpath"; then 102505cf1079Smrg # If we ascended to the root using ".." the result may be empty now. 102605cf1079Smrg if test -z "$func_normal_abspath_result"; then 102705cf1079Smrg func_normal_abspath_result=/ 102805cf1079Smrg fi 102905cf1079Smrg break 103005cf1079Smrg fi 103105cf1079Smrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 103205cf1079Smrg -e "$_G_pathcar"` 103305cf1079Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 103405cf1079Smrg -e "$_G_pathcdr"` 103505cf1079Smrg # Figure out what to do with it 103605cf1079Smrg case $func_normal_abspath_tcomponent in 103705cf1079Smrg "") 103805cf1079Smrg # Trailing empty path component, ignore it. 103905cf1079Smrg ;; 104005cf1079Smrg ..) 104105cf1079Smrg # Parent dir; strip last assembled component from result. 104205cf1079Smrg func_dirname "$func_normal_abspath_result" 104305cf1079Smrg func_normal_abspath_result=$func_dirname_result 104405cf1079Smrg ;; 104505cf1079Smrg *) 104605cf1079Smrg # Actual path component, append it. 104705cf1079Smrg func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" 104805cf1079Smrg ;; 104905cf1079Smrg esac 105005cf1079Smrg done 105105cf1079Smrg # Restore leading double-slash if one was found on entry. 105205cf1079Smrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 105305cf1079Smrg} 105405cf1079Smrg 105505cf1079Smrg 105605cf1079Smrg# func_notquiet ARG... 105705cf1079Smrg# -------------------- 105805cf1079Smrg# Echo program name prefixed message only when not in quiet mode. 105905cf1079Smrgfunc_notquiet () 106005cf1079Smrg{ 106105cf1079Smrg $debug_cmd 106205cf1079Smrg 106305cf1079Smrg $opt_quiet || func_echo ${1+"$@"} 106405cf1079Smrg 106505cf1079Smrg # A bug in bash halts the script if the last line of a function 106605cf1079Smrg # fails when set -e is in force, so we need another command to 106705cf1079Smrg # work around that: 106805cf1079Smrg : 106905cf1079Smrg} 107005cf1079Smrg 107105cf1079Smrg 107205cf1079Smrg# func_relative_path SRCDIR DSTDIR 107305cf1079Smrg# -------------------------------- 107405cf1079Smrg# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. 107505cf1079Smrgfunc_relative_path () 107605cf1079Smrg{ 107705cf1079Smrg $debug_cmd 107805cf1079Smrg 107905cf1079Smrg func_relative_path_result= 108005cf1079Smrg func_normal_abspath "$1" 108105cf1079Smrg func_relative_path_tlibdir=$func_normal_abspath_result 108205cf1079Smrg func_normal_abspath "$2" 108305cf1079Smrg func_relative_path_tbindir=$func_normal_abspath_result 108405cf1079Smrg 108505cf1079Smrg # Ascend the tree starting from libdir 108605cf1079Smrg while :; do 108705cf1079Smrg # check if we have found a prefix of bindir 108805cf1079Smrg case $func_relative_path_tbindir in 108905cf1079Smrg $func_relative_path_tlibdir) 109005cf1079Smrg # found an exact match 109105cf1079Smrg func_relative_path_tcancelled= 109205cf1079Smrg break 109305cf1079Smrg ;; 109405cf1079Smrg $func_relative_path_tlibdir*) 109505cf1079Smrg # found a matching prefix 109605cf1079Smrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 109705cf1079Smrg func_relative_path_tcancelled=$func_stripname_result 109805cf1079Smrg if test -z "$func_relative_path_result"; then 109905cf1079Smrg func_relative_path_result=. 110005cf1079Smrg fi 110105cf1079Smrg break 110205cf1079Smrg ;; 110305cf1079Smrg *) 110405cf1079Smrg func_dirname $func_relative_path_tlibdir 110505cf1079Smrg func_relative_path_tlibdir=$func_dirname_result 110605cf1079Smrg if test -z "$func_relative_path_tlibdir"; then 110705cf1079Smrg # Have to descend all the way to the root! 110805cf1079Smrg func_relative_path_result=../$func_relative_path_result 110905cf1079Smrg func_relative_path_tcancelled=$func_relative_path_tbindir 111005cf1079Smrg break 111105cf1079Smrg fi 111205cf1079Smrg func_relative_path_result=../$func_relative_path_result 111305cf1079Smrg ;; 111405cf1079Smrg esac 111505cf1079Smrg done 111605cf1079Smrg 111705cf1079Smrg # Now calculate path; take care to avoid doubling-up slashes. 111805cf1079Smrg func_stripname '' '/' "$func_relative_path_result" 111905cf1079Smrg func_relative_path_result=$func_stripname_result 112005cf1079Smrg func_stripname '/' '/' "$func_relative_path_tcancelled" 112105cf1079Smrg if test -n "$func_stripname_result"; then 112205cf1079Smrg func_append func_relative_path_result "/$func_stripname_result" 112305cf1079Smrg fi 112405cf1079Smrg 112505cf1079Smrg # Normalisation. If bindir is libdir, return '.' else relative path. 112605cf1079Smrg if test -n "$func_relative_path_result"; then 112705cf1079Smrg func_stripname './' '' "$func_relative_path_result" 112805cf1079Smrg func_relative_path_result=$func_stripname_result 112905cf1079Smrg fi 113005cf1079Smrg 113105cf1079Smrg test -n "$func_relative_path_result" || func_relative_path_result=. 113205cf1079Smrg 113305cf1079Smrg : 113405cf1079Smrg} 113505cf1079Smrg 113605cf1079Smrg 113779d5fcd7Smrg# func_quote_portable EVAL ARG 113879d5fcd7Smrg# ---------------------------- 113979d5fcd7Smrg# Internal function to portably implement func_quote_arg. Note that we still 114079d5fcd7Smrg# keep attention to performance here so we as much as possible try to avoid 114179d5fcd7Smrg# calling sed binary (so far O(N) complexity as long as func_append is O(1)). 114279d5fcd7Smrgfunc_quote_portable () 114305cf1079Smrg{ 114405cf1079Smrg $debug_cmd 114505cf1079Smrg 114679d5fcd7Smrg $require_check_ifs_backslash 114779d5fcd7Smrg 114879d5fcd7Smrg func_quote_portable_result=$2 114979d5fcd7Smrg 115079d5fcd7Smrg # one-time-loop (easy break) 115179d5fcd7Smrg while true 115279d5fcd7Smrg do 115379d5fcd7Smrg if $1; then 115479d5fcd7Smrg func_quote_portable_result=`$ECHO "$2" | $SED \ 115579d5fcd7Smrg -e "$sed_double_quote_subst" -e "$sed_double_backslash"` 115679d5fcd7Smrg break 115705cf1079Smrg fi 115805cf1079Smrg 115979d5fcd7Smrg # Quote for eval. 116079d5fcd7Smrg case $func_quote_portable_result in 116179d5fcd7Smrg *[\\\`\"\$]*) 116279d5fcd7Smrg # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string 116379d5fcd7Smrg # contains the shell wildcard characters. 116479d5fcd7Smrg case $check_ifs_backshlash_broken$func_quote_portable_result in 116579d5fcd7Smrg :*|*[\[\*\?]*) 116679d5fcd7Smrg func_quote_portable_result=`$ECHO "$func_quote_portable_result" \ 116779d5fcd7Smrg | $SED "$sed_quote_subst"` 116879d5fcd7Smrg break 116979d5fcd7Smrg ;; 117079d5fcd7Smrg esac 117179d5fcd7Smrg 117279d5fcd7Smrg func_quote_portable_old_IFS=$IFS 117379d5fcd7Smrg for _G_char in '\' '`' '"' '$' 117479d5fcd7Smrg do 117579d5fcd7Smrg # STATE($1) PREV($2) SEPARATOR($3) 117679d5fcd7Smrg set start "" "" 117779d5fcd7Smrg func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy 117879d5fcd7Smrg IFS=$_G_char 117979d5fcd7Smrg for _G_part in $func_quote_portable_result 118079d5fcd7Smrg do 118179d5fcd7Smrg case $1 in 118279d5fcd7Smrg quote) 118379d5fcd7Smrg func_append func_quote_portable_result "$3$2" 118479d5fcd7Smrg set quote "$_G_part" "\\$_G_char" 118579d5fcd7Smrg ;; 118679d5fcd7Smrg start) 118779d5fcd7Smrg set first "" "" 118879d5fcd7Smrg func_quote_portable_result= 118979d5fcd7Smrg ;; 119079d5fcd7Smrg first) 119179d5fcd7Smrg set quote "$_G_part" "" 119279d5fcd7Smrg ;; 119379d5fcd7Smrg esac 119479d5fcd7Smrg done 119579d5fcd7Smrg done 119679d5fcd7Smrg IFS=$func_quote_portable_old_IFS 119705cf1079Smrg ;; 119879d5fcd7Smrg *) ;; 119905cf1079Smrg esac 120079d5fcd7Smrg break 120105cf1079Smrg done 120279d5fcd7Smrg 120379d5fcd7Smrg func_quote_portable_unquoted_result=$func_quote_portable_result 120479d5fcd7Smrg case $func_quote_portable_result in 120579d5fcd7Smrg # double-quote args containing shell metacharacters to delay 120679d5fcd7Smrg # word splitting, command substitution and variable expansion 120779d5fcd7Smrg # for a subsequent eval. 120879d5fcd7Smrg # many bourne shells cannot handle close brackets correctly 120979d5fcd7Smrg # in scan sets, so we specify it separately. 121079d5fcd7Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 121179d5fcd7Smrg func_quote_portable_result=\"$func_quote_portable_result\" 121279d5fcd7Smrg ;; 121379d5fcd7Smrg esac 121404007ebaSmrg} 121504007ebaSmrg 121604007ebaSmrg 121779d5fcd7Smrg# func_quotefast_eval ARG 121879d5fcd7Smrg# ----------------------- 121979d5fcd7Smrg# Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG', 122079d5fcd7Smrg# but optimized for speed. Result is stored in $func_quotefast_eval. 122179d5fcd7Smrgif test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then 122279d5fcd7Smrg printf -v _GL_test_printf_tilde %q '~' 122379d5fcd7Smrg if test '\~' = "$_GL_test_printf_tilde"; then 122479d5fcd7Smrg func_quotefast_eval () 122579d5fcd7Smrg { 122679d5fcd7Smrg printf -v func_quotefast_eval_result %q "$1" 122779d5fcd7Smrg } 122879d5fcd7Smrg else 122979d5fcd7Smrg # Broken older Bash implementations. Make those faster too if possible. 123079d5fcd7Smrg func_quotefast_eval () 123179d5fcd7Smrg { 123279d5fcd7Smrg case $1 in 123379d5fcd7Smrg '~'*) 123479d5fcd7Smrg func_quote_portable false "$1" 123579d5fcd7Smrg func_quotefast_eval_result=$func_quote_portable_result 123679d5fcd7Smrg ;; 123779d5fcd7Smrg *) 123879d5fcd7Smrg printf -v func_quotefast_eval_result %q "$1" 123979d5fcd7Smrg ;; 124079d5fcd7Smrg esac 124179d5fcd7Smrg } 124279d5fcd7Smrg fi 124379d5fcd7Smrgelse 124479d5fcd7Smrg func_quotefast_eval () 124579d5fcd7Smrg { 124679d5fcd7Smrg func_quote_portable false "$1" 124779d5fcd7Smrg func_quotefast_eval_result=$func_quote_portable_result 124879d5fcd7Smrg } 124979d5fcd7Smrgfi 125005cf1079Smrg 125179d5fcd7Smrg 125279d5fcd7Smrg# func_quote_arg MODEs ARG 125379d5fcd7Smrg# ------------------------ 125479d5fcd7Smrg# Quote one ARG to be evaled later. MODEs argument may contain zero or more 125579d5fcd7Smrg# specifiers listed below separated by ',' character. This function returns two 125679d5fcd7Smrg# values: 125779d5fcd7Smrg# i) func_quote_arg_result 125879d5fcd7Smrg# double-quoted (when needed), suitable for a subsequent eval 125979d5fcd7Smrg# ii) func_quote_arg_unquoted_result 126079d5fcd7Smrg# has all characters that are still active within double 126179d5fcd7Smrg# quotes backslashified. Available only if 'unquoted' is specified. 126279d5fcd7Smrg# 126379d5fcd7Smrg# Available modes: 126479d5fcd7Smrg# ---------------- 126579d5fcd7Smrg# 'eval' (default) 126679d5fcd7Smrg# - escape shell special characters 126779d5fcd7Smrg# 'expand' 126879d5fcd7Smrg# - the same as 'eval'; but do not quote variable references 126979d5fcd7Smrg# 'pretty' 127079d5fcd7Smrg# - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might 127179d5fcd7Smrg# be used later in func_quote to get output like: 'echo "a b"' instead 127279d5fcd7Smrg# of 'echo a\ b'. This is slower than default on some shells. 127379d5fcd7Smrg# 'unquoted' 127479d5fcd7Smrg# - produce also $func_quote_arg_unquoted_result which does not contain 127579d5fcd7Smrg# wrapping double-quotes. 127679d5fcd7Smrg# 127779d5fcd7Smrg# Examples for 'func_quote_arg pretty,unquoted string': 127879d5fcd7Smrg# 127979d5fcd7Smrg# string | *_result | *_unquoted_result 128079d5fcd7Smrg# ------------+-----------------------+------------------- 128179d5fcd7Smrg# " | \" | \" 128279d5fcd7Smrg# a b | "a b" | a b 128379d5fcd7Smrg# "a b" | "\"a b\"" | \"a b\" 128479d5fcd7Smrg# * | "*" | * 128579d5fcd7Smrg# z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\" 128679d5fcd7Smrg# 128779d5fcd7Smrg# Examples for 'func_quote_arg pretty,unquoted,expand string': 128879d5fcd7Smrg# 128979d5fcd7Smrg# string | *_result | *_unquoted_result 129079d5fcd7Smrg# --------------+---------------------+-------------------- 129179d5fcd7Smrg# z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\" 129279d5fcd7Smrgfunc_quote_arg () 129379d5fcd7Smrg{ 129479d5fcd7Smrg _G_quote_expand=false 129579d5fcd7Smrg case ,$1, in 129679d5fcd7Smrg *,expand,*) 129779d5fcd7Smrg _G_quote_expand=: 129879d5fcd7Smrg ;; 129904007ebaSmrg esac 130004007ebaSmrg 130179d5fcd7Smrg case ,$1, in 130279d5fcd7Smrg *,pretty,*|*,expand,*|*,unquoted,*) 130379d5fcd7Smrg func_quote_portable $_G_quote_expand "$2" 130479d5fcd7Smrg func_quote_arg_result=$func_quote_portable_result 130579d5fcd7Smrg func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result 130679d5fcd7Smrg ;; 130779d5fcd7Smrg *) 130879d5fcd7Smrg # Faster quote-for-eval for some shells. 130979d5fcd7Smrg func_quotefast_eval "$2" 131079d5fcd7Smrg func_quote_arg_result=$func_quotefast_eval_result 131104007ebaSmrg ;; 131204007ebaSmrg esac 131379d5fcd7Smrg} 131479d5fcd7Smrg 131504007ebaSmrg 131679d5fcd7Smrg# func_quote MODEs ARGs... 131779d5fcd7Smrg# ------------------------ 131879d5fcd7Smrg# Quote all ARGs to be evaled later and join them into single command. See 131979d5fcd7Smrg# func_quote_arg's description for more info. 132079d5fcd7Smrgfunc_quote () 132179d5fcd7Smrg{ 132279d5fcd7Smrg $debug_cmd 132379d5fcd7Smrg _G_func_quote_mode=$1 ; shift 132479d5fcd7Smrg func_quote_result= 132579d5fcd7Smrg while test 0 -lt $#; do 132679d5fcd7Smrg func_quote_arg "$_G_func_quote_mode" "$1" 132779d5fcd7Smrg if test -n "$func_quote_result"; then 132879d5fcd7Smrg func_append func_quote_result " $func_quote_arg_result" 132979d5fcd7Smrg else 133079d5fcd7Smrg func_append func_quote_result "$func_quote_arg_result" 133179d5fcd7Smrg fi 133279d5fcd7Smrg shift 133379d5fcd7Smrg done 133405cf1079Smrg} 133505cf1079Smrg 133605cf1079Smrg 133705cf1079Smrg# func_stripname PREFIX SUFFIX NAME 133805cf1079Smrg# --------------------------------- 133905cf1079Smrg# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. 134005cf1079Smrg# PREFIX and SUFFIX must not contain globbing or regex special 134105cf1079Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading 134205cf1079Smrg# dot (in which case that matches only a dot). 134305cf1079Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 134405cf1079Smrg eval 'func_stripname () 134505cf1079Smrg { 134605cf1079Smrg $debug_cmd 134705cf1079Smrg 134805cf1079Smrg # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are 134905cf1079Smrg # positional parameters, so assign one to ordinary variable first. 135005cf1079Smrg func_stripname_result=$3 135105cf1079Smrg func_stripname_result=${func_stripname_result#"$1"} 135205cf1079Smrg func_stripname_result=${func_stripname_result%"$2"} 135305cf1079Smrg }' 135405cf1079Smrgelse 135505cf1079Smrg func_stripname () 135605cf1079Smrg { 135705cf1079Smrg $debug_cmd 135805cf1079Smrg 135905cf1079Smrg case $2 in 136005cf1079Smrg .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; 136105cf1079Smrg *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; 136205cf1079Smrg esac 136305cf1079Smrg } 136405cf1079Smrgfi 136505cf1079Smrg 136605cf1079Smrg 136705cf1079Smrg# func_show_eval CMD [FAIL_EXP] 136805cf1079Smrg# ----------------------------- 136905cf1079Smrg# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 137005cf1079Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 137105cf1079Smrg# is given, then evaluate it. 137205cf1079Smrgfunc_show_eval () 137305cf1079Smrg{ 137405cf1079Smrg $debug_cmd 137505cf1079Smrg 137605cf1079Smrg _G_cmd=$1 137705cf1079Smrg _G_fail_exp=${2-':'} 137805cf1079Smrg 137979d5fcd7Smrg func_quote_arg pretty,expand "$_G_cmd" 138079d5fcd7Smrg eval "func_notquiet $func_quote_arg_result" 138105cf1079Smrg 138205cf1079Smrg $opt_dry_run || { 138305cf1079Smrg eval "$_G_cmd" 138405cf1079Smrg _G_status=$? 138505cf1079Smrg if test 0 -ne "$_G_status"; then 138605cf1079Smrg eval "(exit $_G_status); $_G_fail_exp" 138705cf1079Smrg fi 138805cf1079Smrg } 138905cf1079Smrg} 139005cf1079Smrg 139105cf1079Smrg 139205cf1079Smrg# func_show_eval_locale CMD [FAIL_EXP] 139305cf1079Smrg# ------------------------------------ 139405cf1079Smrg# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 139505cf1079Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 139605cf1079Smrg# is given, then evaluate it. Use the saved locale for evaluation. 139705cf1079Smrgfunc_show_eval_locale () 139805cf1079Smrg{ 139905cf1079Smrg $debug_cmd 140005cf1079Smrg 140105cf1079Smrg _G_cmd=$1 140205cf1079Smrg _G_fail_exp=${2-':'} 140305cf1079Smrg 140405cf1079Smrg $opt_quiet || { 140579d5fcd7Smrg func_quote_arg expand,pretty "$_G_cmd" 140679d5fcd7Smrg eval "func_echo $func_quote_arg_result" 140705cf1079Smrg } 140805cf1079Smrg 140905cf1079Smrg $opt_dry_run || { 141005cf1079Smrg eval "$_G_user_locale 141105cf1079Smrg $_G_cmd" 141205cf1079Smrg _G_status=$? 141305cf1079Smrg eval "$_G_safe_locale" 141405cf1079Smrg if test 0 -ne "$_G_status"; then 141505cf1079Smrg eval "(exit $_G_status); $_G_fail_exp" 141605cf1079Smrg fi 141705cf1079Smrg } 141805cf1079Smrg} 141905cf1079Smrg 142005cf1079Smrg 142105cf1079Smrg# func_tr_sh 142205cf1079Smrg# ---------- 142305cf1079Smrg# Turn $1 into a string suitable for a shell variable name. 142405cf1079Smrg# Result is stored in $func_tr_sh_result. All characters 142505cf1079Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 142605cf1079Smrg# if $1 begins with a digit, a '_' is prepended as well. 142705cf1079Smrgfunc_tr_sh () 142805cf1079Smrg{ 142905cf1079Smrg $debug_cmd 143005cf1079Smrg 143105cf1079Smrg case $1 in 143205cf1079Smrg [0-9]* | *[!a-zA-Z0-9_]*) 143305cf1079Smrg func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` 143405cf1079Smrg ;; 143505cf1079Smrg * ) 143605cf1079Smrg func_tr_sh_result=$1 143705cf1079Smrg ;; 143805cf1079Smrg esac 143905cf1079Smrg} 144005cf1079Smrg 144105cf1079Smrg 144205cf1079Smrg# func_verbose ARG... 144305cf1079Smrg# ------------------- 144405cf1079Smrg# Echo program name prefixed message in verbose mode only. 144505cf1079Smrgfunc_verbose () 144605cf1079Smrg{ 144705cf1079Smrg $debug_cmd 144805cf1079Smrg 144905cf1079Smrg $opt_verbose && func_echo "$*" 145005cf1079Smrg 145105cf1079Smrg : 145205cf1079Smrg} 145305cf1079Smrg 145405cf1079Smrg 145505cf1079Smrg# func_warn_and_continue ARG... 145605cf1079Smrg# ----------------------------- 145705cf1079Smrg# Echo program name prefixed warning message to standard error. 145805cf1079Smrgfunc_warn_and_continue () 145905cf1079Smrg{ 146005cf1079Smrg $debug_cmd 146105cf1079Smrg 146205cf1079Smrg $require_term_colors 146305cf1079Smrg 146405cf1079Smrg func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 146505cf1079Smrg} 146605cf1079Smrg 146705cf1079Smrg 146805cf1079Smrg# func_warning CATEGORY ARG... 146905cf1079Smrg# ---------------------------- 147005cf1079Smrg# Echo program name prefixed warning message to standard error. Warning 147105cf1079Smrg# messages can be filtered according to CATEGORY, where this function 147205cf1079Smrg# elides messages where CATEGORY is not listed in the global variable 147305cf1079Smrg# 'opt_warning_types'. 147405cf1079Smrgfunc_warning () 147505cf1079Smrg{ 147605cf1079Smrg $debug_cmd 147705cf1079Smrg 147805cf1079Smrg # CATEGORY must be in the warning_categories list! 147905cf1079Smrg case " $warning_categories " in 148005cf1079Smrg *" $1 "*) ;; 148105cf1079Smrg *) func_internal_error "invalid warning category '$1'" ;; 148205cf1079Smrg esac 148305cf1079Smrg 148405cf1079Smrg _G_category=$1 148505cf1079Smrg shift 148605cf1079Smrg 148705cf1079Smrg case " $opt_warning_types " in 148805cf1079Smrg *" $_G_category "*) $warning_func ${1+"$@"} ;; 148905cf1079Smrg esac 149005cf1079Smrg} 149105cf1079Smrg 149205cf1079Smrg 149305cf1079Smrg# func_sort_ver VER1 VER2 149405cf1079Smrg# ----------------------- 149505cf1079Smrg# 'sort -V' is not generally available. 149605cf1079Smrg# Note this deviates from the version comparison in automake 149705cf1079Smrg# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a 149805cf1079Smrg# but this should suffice as we won't be specifying old 149905cf1079Smrg# version formats or redundant trailing .0 in bootstrap.conf. 150005cf1079Smrg# If we did want full compatibility then we should probably 150105cf1079Smrg# use m4_version_compare from autoconf. 150205cf1079Smrgfunc_sort_ver () 150305cf1079Smrg{ 150405cf1079Smrg $debug_cmd 150505cf1079Smrg 150605cf1079Smrg printf '%s\n%s\n' "$1" "$2" \ 150705cf1079Smrg | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n 150805cf1079Smrg} 150905cf1079Smrg 151005cf1079Smrg# func_lt_ver PREV CURR 151105cf1079Smrg# --------------------- 151205cf1079Smrg# Return true if PREV and CURR are in the correct order according to 151305cf1079Smrg# func_sort_ver, otherwise false. Use it like this: 151405cf1079Smrg# 151505cf1079Smrg# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." 151605cf1079Smrgfunc_lt_ver () 151705cf1079Smrg{ 151805cf1079Smrg $debug_cmd 151905cf1079Smrg 152005cf1079Smrg test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` 152105cf1079Smrg} 152205cf1079Smrg 152305cf1079Smrg 152405cf1079Smrg# Local variables: 152505cf1079Smrg# mode: shell-script 152605cf1079Smrg# sh-indentation: 2 152705cf1079Smrg# eval: (add-hook 'before-save-hook 'time-stamp) 152805cf1079Smrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" 152905cf1079Smrg# time-stamp-time-zone: "UTC" 153005cf1079Smrg# End: 153105cf1079Smrg#! /bin/sh 153205cf1079Smrg 153305cf1079Smrg# A portable, pluggable option parser for Bourne shell. 153405cf1079Smrg# Written by Gary V. Vaughan, 2010 153505cf1079Smrg 153679d5fcd7Smrg# This is free software. There is NO warranty; not even for 153779d5fcd7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 153879d5fcd7Smrg# 153979d5fcd7Smrg# Copyright (C) 2010-2019, 2021 Bootstrap Authors 154079d5fcd7Smrg# 154179d5fcd7Smrg# This file is dual licensed under the terms of the MIT license 154279d5fcd7Smrg# <https://opensource.org/license/MIT>, and GPL version 2 or later 154379d5fcd7Smrg# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of 154479d5fcd7Smrg# these licenses when using or redistributing this software or any of 154579d5fcd7Smrg# the files within it. See the URLs above, or the file `LICENSE` 154679d5fcd7Smrg# included in the Bootstrap distribution for the full license texts. 154705cf1079Smrg 154879d5fcd7Smrg# Please report bugs or propose patches to: 154979d5fcd7Smrg# <https://github.com/gnulib-modules/bootstrap/issues> 155005cf1079Smrg 155179d5fcd7Smrg# Set a version string for this script. 155279d5fcd7Smrgscriptversion=2019-02-19.15; # UTC 155305cf1079Smrg 155405cf1079Smrg 155505cf1079Smrg## ------ ## 155605cf1079Smrg## Usage. ## 155705cf1079Smrg## ------ ## 155805cf1079Smrg 155905cf1079Smrg# This file is a library for parsing options in your shell scripts along 156005cf1079Smrg# with assorted other useful supporting features that you can make use 156105cf1079Smrg# of too. 156205cf1079Smrg# 156305cf1079Smrg# For the simplest scripts you might need only: 156405cf1079Smrg# 156505cf1079Smrg# #!/bin/sh 156605cf1079Smrg# . relative/path/to/funclib.sh 156705cf1079Smrg# . relative/path/to/options-parser 156805cf1079Smrg# scriptversion=1.0 156905cf1079Smrg# func_options ${1+"$@"} 157005cf1079Smrg# eval set dummy "$func_options_result"; shift 157105cf1079Smrg# ...rest of your script... 157205cf1079Smrg# 157305cf1079Smrg# In order for the '--version' option to work, you will need to have a 157405cf1079Smrg# suitably formatted comment like the one at the top of this file 157579d5fcd7Smrg# starting with '# Written by ' and ending with '# Copyright'. 157605cf1079Smrg# 157705cf1079Smrg# For '-h' and '--help' to work, you will also need a one line 157805cf1079Smrg# description of your script's purpose in a comment directly above the 157905cf1079Smrg# '# Written by ' line, like the one at the top of this file. 158005cf1079Smrg# 158105cf1079Smrg# The default options also support '--debug', which will turn on shell 158205cf1079Smrg# execution tracing (see the comment above debug_cmd below for another 158305cf1079Smrg# use), and '--verbose' and the func_verbose function to allow your script 158405cf1079Smrg# to display verbose messages only when your user has specified 158505cf1079Smrg# '--verbose'. 158605cf1079Smrg# 158779d5fcd7Smrg# After sourcing this file, you can plug in processing for additional 158805cf1079Smrg# options by amending the variables from the 'Configuration' section 158905cf1079Smrg# below, and following the instructions in the 'Option parsing' 159005cf1079Smrg# section further down. 159105cf1079Smrg 159205cf1079Smrg## -------------- ## 159305cf1079Smrg## Configuration. ## 159405cf1079Smrg## -------------- ## 159505cf1079Smrg 159605cf1079Smrg# You should override these variables in your script after sourcing this 159705cf1079Smrg# file so that they reflect the customisations you have added to the 159805cf1079Smrg# option parser. 159905cf1079Smrg 160005cf1079Smrg# The usage line for option parsing errors and the start of '-h' and 160105cf1079Smrg# '--help' output messages. You can embed shell variables for delayed 160205cf1079Smrg# expansion at the time the message is displayed, but you will need to 160305cf1079Smrg# quote other shell meta-characters carefully to prevent them being 160405cf1079Smrg# expanded when the contents are evaled. 160505cf1079Smrgusage='$progpath [OPTION]...' 160605cf1079Smrg 160705cf1079Smrg# Short help message in response to '-h' and '--help'. Add to this or 160805cf1079Smrg# override it after sourcing this library to reflect the full set of 160905cf1079Smrg# options your script accepts. 161005cf1079Smrgusage_message="\ 161105cf1079Smrg --debug enable verbose shell tracing 161205cf1079Smrg -W, --warnings=CATEGORY 161305cf1079Smrg report the warnings falling in CATEGORY [all] 161405cf1079Smrg -v, --verbose verbosely report processing 161505cf1079Smrg --version print version information and exit 161605cf1079Smrg -h, --help print short or long help message and exit 161705cf1079Smrg" 161805cf1079Smrg 161905cf1079Smrg# Additional text appended to 'usage_message' in response to '--help'. 162005cf1079Smrglong_help_message=" 162105cf1079SmrgWarning categories include: 162205cf1079Smrg 'all' show all warnings 162305cf1079Smrg 'none' turn off all the warnings 162405cf1079Smrg 'error' warnings are treated as fatal errors" 162505cf1079Smrg 162605cf1079Smrg# Help message printed before fatal option parsing errors. 162705cf1079Smrgfatal_help="Try '\$progname --help' for more information." 162805cf1079Smrg 162905cf1079Smrg 163005cf1079Smrg 163105cf1079Smrg## ------------------------- ## 163205cf1079Smrg## Hook function management. ## 163305cf1079Smrg## ------------------------- ## 163405cf1079Smrg 163505cf1079Smrg# This section contains functions for adding, removing, and running hooks 163679d5fcd7Smrg# in the main code. A hook is just a list of function names that can be 163779d5fcd7Smrg# run in order later on. 163805cf1079Smrg 163905cf1079Smrg# func_hookable FUNC_NAME 164005cf1079Smrg# ----------------------- 164105cf1079Smrg# Declare that FUNC_NAME will run hooks added with 164205cf1079Smrg# 'func_add_hook FUNC_NAME ...'. 164305cf1079Smrgfunc_hookable () 164405cf1079Smrg{ 164505cf1079Smrg $debug_cmd 164605cf1079Smrg 164705cf1079Smrg func_append hookable_fns " $1" 164805cf1079Smrg} 164905cf1079Smrg 165005cf1079Smrg 165105cf1079Smrg# func_add_hook FUNC_NAME HOOK_FUNC 165205cf1079Smrg# --------------------------------- 165305cf1079Smrg# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must 165405cf1079Smrg# first have been declared "hookable" by a call to 'func_hookable'. 165505cf1079Smrgfunc_add_hook () 165605cf1079Smrg{ 165705cf1079Smrg $debug_cmd 165805cf1079Smrg 165905cf1079Smrg case " $hookable_fns " in 166005cf1079Smrg *" $1 "*) ;; 166105cf1079Smrg *) func_fatal_error "'$1' does not accept hook functions." ;; 166205cf1079Smrg esac 166305cf1079Smrg 166405cf1079Smrg eval func_append ${1}_hooks '" $2"' 166505cf1079Smrg} 166605cf1079Smrg 166705cf1079Smrg 166805cf1079Smrg# func_remove_hook FUNC_NAME HOOK_FUNC 166905cf1079Smrg# ------------------------------------ 167079d5fcd7Smrg# Remove HOOK_FUNC from the list of hook functions to be called by 167179d5fcd7Smrg# FUNC_NAME. 167205cf1079Smrgfunc_remove_hook () 167305cf1079Smrg{ 167405cf1079Smrg $debug_cmd 167505cf1079Smrg 167605cf1079Smrg eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' 167705cf1079Smrg} 167805cf1079Smrg 167905cf1079Smrg 168079d5fcd7Smrg# func_propagate_result FUNC_NAME_A FUNC_NAME_B 168179d5fcd7Smrg# --------------------------------------------- 168279d5fcd7Smrg# If the *_result variable of FUNC_NAME_A _is set_, assign its value to 168379d5fcd7Smrg# *_result variable of FUNC_NAME_B. 168479d5fcd7Smrgfunc_propagate_result () 168579d5fcd7Smrg{ 168679d5fcd7Smrg $debug_cmd 168779d5fcd7Smrg 168879d5fcd7Smrg func_propagate_result_result=: 168979d5fcd7Smrg if eval "test \"\${${1}_result+set}\" = set" 169079d5fcd7Smrg then 169179d5fcd7Smrg eval "${2}_result=\$${1}_result" 169279d5fcd7Smrg else 169379d5fcd7Smrg func_propagate_result_result=false 169479d5fcd7Smrg fi 169579d5fcd7Smrg} 169679d5fcd7Smrg 169779d5fcd7Smrg 169805cf1079Smrg# func_run_hooks FUNC_NAME [ARG]... 169905cf1079Smrg# --------------------------------- 170005cf1079Smrg# Run all hook functions registered to FUNC_NAME. 170179d5fcd7Smrg# It's assumed that the list of hook functions contains nothing more 170205cf1079Smrg# than a whitespace-delimited list of legal shell function names, and 170305cf1079Smrg# no effort is wasted trying to catch shell meta-characters or preserve 170405cf1079Smrg# whitespace. 170505cf1079Smrgfunc_run_hooks () 170605cf1079Smrg{ 170705cf1079Smrg $debug_cmd 170805cf1079Smrg 170905cf1079Smrg case " $hookable_fns " in 171005cf1079Smrg *" $1 "*) ;; 171179d5fcd7Smrg *) func_fatal_error "'$1' does not support hook functions." ;; 171205cf1079Smrg esac 171305cf1079Smrg 171405cf1079Smrg eval _G_hook_fns=\$$1_hooks; shift 171505cf1079Smrg 171605cf1079Smrg for _G_hook in $_G_hook_fns; do 171779d5fcd7Smrg func_unset "${_G_hook}_result" 171879d5fcd7Smrg eval $_G_hook '${1+"$@"}' 171979d5fcd7Smrg func_propagate_result $_G_hook func_run_hooks 172079d5fcd7Smrg if $func_propagate_result_result; then 172179d5fcd7Smrg eval set dummy "$func_run_hooks_result"; shift 172205cf1079Smrg fi 172305cf1079Smrg done 172405cf1079Smrg} 172505cf1079Smrg 172605cf1079Smrg 172705cf1079Smrg 172805cf1079Smrg## --------------- ## 172905cf1079Smrg## Option parsing. ## 173005cf1079Smrg## --------------- ## 173105cf1079Smrg 173205cf1079Smrg# In order to add your own option parsing hooks, you must accept the 173379d5fcd7Smrg# full positional parameter list from your hook function. You may remove 173479d5fcd7Smrg# or edit any options that you action, and then pass back the remaining 173579d5fcd7Smrg# unprocessed options in '<hooked_function_name>_result', escaped 173679d5fcd7Smrg# suitably for 'eval'. 173779d5fcd7Smrg# 173879d5fcd7Smrg# The '<hooked_function_name>_result' variable is automatically unset 173979d5fcd7Smrg# before your hook gets called; for best performance, only set the 174079d5fcd7Smrg# *_result variable when necessary (i.e. don't call the 'func_quote' 174179d5fcd7Smrg# function unnecessarily because it can be an expensive operation on some 174279d5fcd7Smrg# machines). 174305cf1079Smrg# 174405cf1079Smrg# Like this: 174505cf1079Smrg# 174605cf1079Smrg# my_options_prep () 174705cf1079Smrg# { 174805cf1079Smrg# $debug_cmd 174905cf1079Smrg# 175005cf1079Smrg# # Extend the existing usage message. 175105cf1079Smrg# usage_message=$usage_message' 175205cf1079Smrg# -s, --silent don'\''t print informational messages 175305cf1079Smrg# ' 175479d5fcd7Smrg# # No change in '$@' (ignored completely by this hook). Leave 175579d5fcd7Smrg# # my_options_prep_result variable intact. 175605cf1079Smrg# } 175705cf1079Smrg# func_add_hook func_options_prep my_options_prep 175805cf1079Smrg# 175905cf1079Smrg# 176005cf1079Smrg# my_silent_option () 176105cf1079Smrg# { 176205cf1079Smrg# $debug_cmd 176305cf1079Smrg# 176405cf1079Smrg# args_changed=false 176505cf1079Smrg# 176679d5fcd7Smrg# # Note that, for efficiency, we parse as many options as we can 176705cf1079Smrg# # recognise in a loop before passing the remainder back to the 176805cf1079Smrg# # caller on the first unrecognised argument we encounter. 176905cf1079Smrg# while test $# -gt 0; do 177005cf1079Smrg# opt=$1; shift 177105cf1079Smrg# case $opt in 177205cf1079Smrg# --silent|-s) opt_silent=: 177305cf1079Smrg# args_changed=: 177405cf1079Smrg# ;; 177505cf1079Smrg# # Separate non-argument short options: 177605cf1079Smrg# -s*) func_split_short_opt "$_G_opt" 177705cf1079Smrg# set dummy "$func_split_short_opt_name" \ 177805cf1079Smrg# "-$func_split_short_opt_arg" ${1+"$@"} 177905cf1079Smrg# shift 178005cf1079Smrg# args_changed=: 178105cf1079Smrg# ;; 178205cf1079Smrg# *) # Make sure the first unrecognised option "$_G_opt" 178379d5fcd7Smrg# # is added back to "$@" in case we need it later, 178479d5fcd7Smrg# # if $args_changed was set to 'true'. 178505cf1079Smrg# set dummy "$_G_opt" ${1+"$@"}; shift; break ;; 178605cf1079Smrg# esac 178705cf1079Smrg# done 178805cf1079Smrg# 178979d5fcd7Smrg# # Only call 'func_quote' here if we processed at least one argument. 179005cf1079Smrg# if $args_changed; then 179179d5fcd7Smrg# func_quote eval ${1+"$@"} 179279d5fcd7Smrg# my_silent_option_result=$func_quote_result 179305cf1079Smrg# fi 179405cf1079Smrg# } 179505cf1079Smrg# func_add_hook func_parse_options my_silent_option 179605cf1079Smrg# 179705cf1079Smrg# 179805cf1079Smrg# my_option_validation () 179905cf1079Smrg# { 180005cf1079Smrg# $debug_cmd 180105cf1079Smrg# 180205cf1079Smrg# $opt_silent && $opt_verbose && func_fatal_help "\ 180305cf1079Smrg# '--silent' and '--verbose' options are mutually exclusive." 180405cf1079Smrg# } 180505cf1079Smrg# func_add_hook func_validate_options my_option_validation 180605cf1079Smrg# 180705cf1079Smrg# You'll also need to manually amend $usage_message to reflect the extra 180805cf1079Smrg# options you parse. It's preferable to append if you can, so that 180905cf1079Smrg# multiple option parsing hooks can be added safely. 181005cf1079Smrg 181105cf1079Smrg 181205cf1079Smrg# func_options_finish [ARG]... 181305cf1079Smrg# ---------------------------- 181405cf1079Smrg# Finishing the option parse loop (call 'func_options' hooks ATM). 181505cf1079Smrgfunc_options_finish () 181605cf1079Smrg{ 181705cf1079Smrg $debug_cmd 181805cf1079Smrg 181979d5fcd7Smrg func_run_hooks func_options ${1+"$@"} 182079d5fcd7Smrg func_propagate_result func_run_hooks func_options_finish 182104007ebaSmrg} 182204007ebaSmrg 182304007ebaSmrg 182405cf1079Smrg# func_options [ARG]... 182505cf1079Smrg# --------------------- 182605cf1079Smrg# All the functions called inside func_options are hookable. See the 182705cf1079Smrg# individual implementations for details. 182805cf1079Smrgfunc_hookable func_options 182905cf1079Smrgfunc_options () 183004007ebaSmrg{ 183105cf1079Smrg $debug_cmd 183204007ebaSmrg 183379d5fcd7Smrg _G_options_quoted=false 183404007ebaSmrg 183505cf1079Smrg for my_func in options_prep parse_options validate_options options_finish 183605cf1079Smrg do 183779d5fcd7Smrg func_unset func_${my_func}_result 183879d5fcd7Smrg func_unset func_run_hooks_result 183979d5fcd7Smrg eval func_$my_func '${1+"$@"}' 184079d5fcd7Smrg func_propagate_result func_$my_func func_options 184179d5fcd7Smrg if $func_propagate_result_result; then 184279d5fcd7Smrg eval set dummy "$func_options_result"; shift 184379d5fcd7Smrg _G_options_quoted=: 184404007ebaSmrg fi 184505cf1079Smrg done 184605cf1079Smrg 184779d5fcd7Smrg $_G_options_quoted || { 184879d5fcd7Smrg # As we (func_options) are top-level options-parser function and 184979d5fcd7Smrg # nobody quoted "$@" for us yet, we need to do it explicitly for 185079d5fcd7Smrg # caller. 185179d5fcd7Smrg func_quote eval ${1+"$@"} 185279d5fcd7Smrg func_options_result=$func_quote_result 185379d5fcd7Smrg } 185404007ebaSmrg} 185504007ebaSmrg 185604007ebaSmrg 185705cf1079Smrg# func_options_prep [ARG]... 185805cf1079Smrg# -------------------------- 185905cf1079Smrg# All initialisations required before starting the option parse loop. 186005cf1079Smrg# Note that when calling hook functions, we pass through the list of 186105cf1079Smrg# positional parameters. If a hook function modifies that list, and 186205cf1079Smrg# needs to propagate that back to rest of this script, then the complete 186379d5fcd7Smrg# modified list must be put in 'func_run_hooks_result' before returning. 186405cf1079Smrgfunc_hookable func_options_prep 186505cf1079Smrgfunc_options_prep () 186604007ebaSmrg{ 186705cf1079Smrg $debug_cmd 186804007ebaSmrg 186905cf1079Smrg # Option defaults: 187005cf1079Smrg opt_verbose=false 187105cf1079Smrg opt_warning_types= 187204007ebaSmrg 187379d5fcd7Smrg func_run_hooks func_options_prep ${1+"$@"} 187479d5fcd7Smrg func_propagate_result func_run_hooks func_options_prep 187504007ebaSmrg} 187604007ebaSmrg 187705cf1079Smrg 187805cf1079Smrg# func_parse_options [ARG]... 187905cf1079Smrg# --------------------------- 188005cf1079Smrg# The main option parsing loop. 188105cf1079Smrgfunc_hookable func_parse_options 188205cf1079Smrgfunc_parse_options () 188304007ebaSmrg{ 188405cf1079Smrg $debug_cmd 188505cf1079Smrg 188679d5fcd7Smrg _G_parse_options_requote=false 188705cf1079Smrg # this just eases exit handling 188805cf1079Smrg while test $# -gt 0; do 188905cf1079Smrg # Defer to hook functions for initial option parsing, so they 189005cf1079Smrg # get priority in the event of reusing an option name. 189179d5fcd7Smrg func_run_hooks func_parse_options ${1+"$@"} 189279d5fcd7Smrg func_propagate_result func_run_hooks func_parse_options 189379d5fcd7Smrg if $func_propagate_result_result; then 189479d5fcd7Smrg eval set dummy "$func_parse_options_result"; shift 189579d5fcd7Smrg # Even though we may have changed "$@", we passed the "$@" array 189679d5fcd7Smrg # down into the hook and it quoted it for us (because we are in 189779d5fcd7Smrg # this if-branch). No need to quote it again. 189879d5fcd7Smrg _G_parse_options_requote=false 189905cf1079Smrg fi 190005cf1079Smrg 190105cf1079Smrg # Break out of the loop if we already parsed every option. 190205cf1079Smrg test $# -gt 0 || break 190305cf1079Smrg 190479d5fcd7Smrg # We expect that one of the options parsed in this function matches 190579d5fcd7Smrg # and thus we remove _G_opt from "$@" and need to re-quote. 190605cf1079Smrg _G_match_parse_options=: 190705cf1079Smrg _G_opt=$1 190805cf1079Smrg shift 190905cf1079Smrg case $_G_opt in 191005cf1079Smrg --debug|-x) debug_cmd='set -x' 191179d5fcd7Smrg func_echo "enabling shell trace mode" >&2 191205cf1079Smrg $debug_cmd 191305cf1079Smrg ;; 191405cf1079Smrg 191505cf1079Smrg --no-warnings|--no-warning|--no-warn) 191605cf1079Smrg set dummy --warnings none ${1+"$@"} 191705cf1079Smrg shift 191805cf1079Smrg ;; 191905cf1079Smrg 192005cf1079Smrg --warnings|--warning|-W) 192105cf1079Smrg if test $# = 0 && func_missing_arg $_G_opt; then 192279d5fcd7Smrg _G_parse_options_requote=: 192305cf1079Smrg break 192405cf1079Smrg fi 192505cf1079Smrg case " $warning_categories $1" in 192605cf1079Smrg *" $1 "*) 192705cf1079Smrg # trailing space prevents matching last $1 above 192805cf1079Smrg func_append_uniq opt_warning_types " $1" 192905cf1079Smrg ;; 193005cf1079Smrg *all) 193105cf1079Smrg opt_warning_types=$warning_categories 193205cf1079Smrg ;; 193305cf1079Smrg *none) 193405cf1079Smrg opt_warning_types=none 193505cf1079Smrg warning_func=: 193605cf1079Smrg ;; 193705cf1079Smrg *error) 193805cf1079Smrg opt_warning_types=$warning_categories 193905cf1079Smrg warning_func=func_fatal_error 194005cf1079Smrg ;; 194105cf1079Smrg *) 194205cf1079Smrg func_fatal_error \ 194305cf1079Smrg "unsupported warning category: '$1'" 194405cf1079Smrg ;; 194505cf1079Smrg esac 194605cf1079Smrg shift 194705cf1079Smrg ;; 194805cf1079Smrg 194905cf1079Smrg --verbose|-v) opt_verbose=: ;; 195005cf1079Smrg --version) func_version ;; 195105cf1079Smrg -\?|-h) func_usage ;; 195205cf1079Smrg --help) func_help ;; 195305cf1079Smrg 195405cf1079Smrg # Separate optargs to long options (plugins may need this): 195505cf1079Smrg --*=*) func_split_equals "$_G_opt" 195605cf1079Smrg set dummy "$func_split_equals_lhs" \ 195705cf1079Smrg "$func_split_equals_rhs" ${1+"$@"} 195805cf1079Smrg shift 195905cf1079Smrg ;; 196005cf1079Smrg 196105cf1079Smrg # Separate optargs to short options: 196205cf1079Smrg -W*) 196305cf1079Smrg func_split_short_opt "$_G_opt" 196405cf1079Smrg set dummy "$func_split_short_opt_name" \ 196505cf1079Smrg "$func_split_short_opt_arg" ${1+"$@"} 196605cf1079Smrg shift 196705cf1079Smrg ;; 196805cf1079Smrg 196905cf1079Smrg # Separate non-argument short options: 197005cf1079Smrg -\?*|-h*|-v*|-x*) 197105cf1079Smrg func_split_short_opt "$_G_opt" 197205cf1079Smrg set dummy "$func_split_short_opt_name" \ 197305cf1079Smrg "-$func_split_short_opt_arg" ${1+"$@"} 197405cf1079Smrg shift 197505cf1079Smrg ;; 197605cf1079Smrg 197779d5fcd7Smrg --) _G_parse_options_requote=: ; break ;; 197805cf1079Smrg -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; 197905cf1079Smrg *) set dummy "$_G_opt" ${1+"$@"}; shift 198005cf1079Smrg _G_match_parse_options=false 198105cf1079Smrg break 198205cf1079Smrg ;; 198305cf1079Smrg esac 198405cf1079Smrg 198579d5fcd7Smrg if $_G_match_parse_options; then 198679d5fcd7Smrg _G_parse_options_requote=: 198779d5fcd7Smrg fi 198805cf1079Smrg done 198905cf1079Smrg 199079d5fcd7Smrg if $_G_parse_options_requote; then 199105cf1079Smrg # save modified positional parameters for caller 199279d5fcd7Smrg func_quote eval ${1+"$@"} 199379d5fcd7Smrg func_parse_options_result=$func_quote_result 199405cf1079Smrg fi 199504007ebaSmrg} 199604007ebaSmrg 199704007ebaSmrg 199805cf1079Smrg# func_validate_options [ARG]... 199905cf1079Smrg# ------------------------------ 200005cf1079Smrg# Perform any sanity checks on option settings and/or unconsumed 200105cf1079Smrg# arguments. 200205cf1079Smrgfunc_hookable func_validate_options 200305cf1079Smrgfunc_validate_options () 200404007ebaSmrg{ 200505cf1079Smrg $debug_cmd 200604007ebaSmrg 200705cf1079Smrg # Display all warnings if -W was not given. 200805cf1079Smrg test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" 200905cf1079Smrg 201079d5fcd7Smrg func_run_hooks func_validate_options ${1+"$@"} 201179d5fcd7Smrg func_propagate_result func_run_hooks func_validate_options 201205cf1079Smrg 201305cf1079Smrg # Bail if the options were screwed! 201405cf1079Smrg $exit_cmd $EXIT_FAILURE 201504007ebaSmrg} 201604007ebaSmrg 201705cf1079Smrg 201805cf1079Smrg 201905cf1079Smrg## ----------------- ## 202005cf1079Smrg## Helper functions. ## 202105cf1079Smrg## ----------------- ## 202205cf1079Smrg 202305cf1079Smrg# This section contains the helper functions used by the rest of the 202405cf1079Smrg# hookable option parser framework in ascii-betical order. 202505cf1079Smrg 202605cf1079Smrg 202705cf1079Smrg# func_fatal_help ARG... 202805cf1079Smrg# ---------------------- 202905cf1079Smrg# Echo program name prefixed message to standard error, followed by 203005cf1079Smrg# a help hint, and exit. 203105cf1079Smrgfunc_fatal_help () 203204007ebaSmrg{ 203305cf1079Smrg $debug_cmd 203404007ebaSmrg 203505cf1079Smrg eval \$ECHO \""Usage: $usage"\" 203605cf1079Smrg eval \$ECHO \""$fatal_help"\" 203705cf1079Smrg func_error ${1+"$@"} 203805cf1079Smrg exit $EXIT_FAILURE 203904007ebaSmrg} 204004007ebaSmrg 204105cf1079Smrg 204205cf1079Smrg# func_help 204305cf1079Smrg# --------- 204405cf1079Smrg# Echo long help message to standard output and exit. 204504007ebaSmrgfunc_help () 204604007ebaSmrg{ 204705cf1079Smrg $debug_cmd 204805cf1079Smrg 204905cf1079Smrg func_usage_message 205005cf1079Smrg $ECHO "$long_help_message" 205105cf1079Smrg exit 0 205204007ebaSmrg} 205304007ebaSmrg 205405cf1079Smrg 205505cf1079Smrg# func_missing_arg ARGNAME 205605cf1079Smrg# ------------------------ 205704007ebaSmrg# Echo program name prefixed message to standard error and set global 205804007ebaSmrg# exit_cmd. 205904007ebaSmrgfunc_missing_arg () 206004007ebaSmrg{ 206105cf1079Smrg $debug_cmd 206204007ebaSmrg 206305cf1079Smrg func_error "Missing argument for '$1'." 206404007ebaSmrg exit_cmd=exit 206504007ebaSmrg} 206604007ebaSmrg 206704007ebaSmrg 206805cf1079Smrg# func_split_equals STRING 206905cf1079Smrg# ------------------------ 207079d5fcd7Smrg# Set func_split_equals_lhs and func_split_equals_rhs shell variables 207179d5fcd7Smrg# after splitting STRING at the '=' sign. 207205cf1079Smrgtest -z "$_G_HAVE_XSI_OPS" \ 207305cf1079Smrg && (eval 'x=a/b/c; 207405cf1079Smrg test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 207505cf1079Smrg && _G_HAVE_XSI_OPS=yes 207605cf1079Smrg 207705cf1079Smrgif test yes = "$_G_HAVE_XSI_OPS" 207805cf1079Smrgthen 207905cf1079Smrg # This is an XSI compatible shell, allowing a faster implementation... 208005cf1079Smrg eval 'func_split_equals () 208105cf1079Smrg { 208205cf1079Smrg $debug_cmd 208305cf1079Smrg 208405cf1079Smrg func_split_equals_lhs=${1%%=*} 208505cf1079Smrg func_split_equals_rhs=${1#*=} 208679d5fcd7Smrg if test "x$func_split_equals_lhs" = "x$1"; then 208779d5fcd7Smrg func_split_equals_rhs= 208879d5fcd7Smrg fi 208905cf1079Smrg }' 209005cf1079Smrgelse 209105cf1079Smrg # ...otherwise fall back to using expr, which is often a shell builtin. 209205cf1079Smrg func_split_equals () 209305cf1079Smrg { 209405cf1079Smrg $debug_cmd 209505cf1079Smrg 209605cf1079Smrg func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` 209705cf1079Smrg func_split_equals_rhs= 209879d5fcd7Smrg test "x$func_split_equals_lhs=" = "x$1" \ 209905cf1079Smrg || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` 210005cf1079Smrg } 210105cf1079Smrgfi #func_split_equals 210205cf1079Smrg 210305cf1079Smrg 210405cf1079Smrg# func_split_short_opt SHORTOPT 210505cf1079Smrg# ----------------------------- 210604007ebaSmrg# Set func_split_short_opt_name and func_split_short_opt_arg shell 210704007ebaSmrg# variables after splitting SHORTOPT after the 2nd character. 210805cf1079Smrgif test yes = "$_G_HAVE_XSI_OPS" 210905cf1079Smrgthen 211005cf1079Smrg # This is an XSI compatible shell, allowing a faster implementation... 211105cf1079Smrg eval 'func_split_short_opt () 211205cf1079Smrg { 211305cf1079Smrg $debug_cmd 211405cf1079Smrg 211505cf1079Smrg func_split_short_opt_arg=${1#??} 211605cf1079Smrg func_split_short_opt_name=${1%"$func_split_short_opt_arg"} 211705cf1079Smrg }' 211805cf1079Smrgelse 211905cf1079Smrg # ...otherwise fall back to using expr, which is often a shell builtin. 212005cf1079Smrg func_split_short_opt () 212105cf1079Smrg { 212205cf1079Smrg $debug_cmd 212305cf1079Smrg 212479d5fcd7Smrg func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'` 212505cf1079Smrg func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` 212605cf1079Smrg } 212705cf1079Smrgfi #func_split_short_opt 212805cf1079Smrg 212905cf1079Smrg 213005cf1079Smrg# func_usage 213105cf1079Smrg# ---------- 213205cf1079Smrg# Echo short help message to standard output and exit. 213305cf1079Smrgfunc_usage () 213404007ebaSmrg{ 213505cf1079Smrg $debug_cmd 213604007ebaSmrg 213705cf1079Smrg func_usage_message 213805cf1079Smrg $ECHO "Run '$progname --help |${PAGER-more}' for full usage" 213905cf1079Smrg exit 0 214005cf1079Smrg} 214104007ebaSmrg 214204007ebaSmrg 214305cf1079Smrg# func_usage_message 214405cf1079Smrg# ------------------ 214505cf1079Smrg# Echo short help message to standard output. 214605cf1079Smrgfunc_usage_message () 214704007ebaSmrg{ 214805cf1079Smrg $debug_cmd 214904007ebaSmrg 215005cf1079Smrg eval \$ECHO \""Usage: $usage"\" 215105cf1079Smrg echo 215205cf1079Smrg $SED -n 's|^# || 215305cf1079Smrg /^Written by/{ 215405cf1079Smrg x;p;x 215505cf1079Smrg } 215605cf1079Smrg h 215705cf1079Smrg /^Written by/q' < "$progpath" 215805cf1079Smrg echo 215905cf1079Smrg eval \$ECHO \""$usage_message"\" 216005cf1079Smrg} 216104007ebaSmrg 216204007ebaSmrg 216305cf1079Smrg# func_version 216405cf1079Smrg# ------------ 216505cf1079Smrg# Echo version message to standard output and exit. 216679d5fcd7Smrg# The version message is extracted from the calling file's header 216779d5fcd7Smrg# comments, with leading '# ' stripped: 216879d5fcd7Smrg# 1. First display the progname and version 216979d5fcd7Smrg# 2. Followed by the header comment line matching /^# Written by / 217079d5fcd7Smrg# 3. Then a blank line followed by the first following line matching 217179d5fcd7Smrg# /^# Copyright / 217279d5fcd7Smrg# 4. Immediately followed by any lines between the previous matches, 217379d5fcd7Smrg# except lines preceding the intervening completely blank line. 217479d5fcd7Smrg# For example, see the header comments of this file. 217505cf1079Smrgfunc_version () 217605cf1079Smrg{ 217705cf1079Smrg $debug_cmd 217804007ebaSmrg 217905cf1079Smrg printf '%s\n' "$progname $scriptversion" 218005cf1079Smrg $SED -n ' 218179d5fcd7Smrg /^# Written by /!b 218279d5fcd7Smrg s|^# ||; p; n 218379d5fcd7Smrg 218479d5fcd7Smrg :fwd2blnk 218579d5fcd7Smrg /./ { 218679d5fcd7Smrg n 218779d5fcd7Smrg b fwd2blnk 218805cf1079Smrg } 218979d5fcd7Smrg p; n 219079d5fcd7Smrg 219179d5fcd7Smrg :holdwrnt 219279d5fcd7Smrg s|^# || 219379d5fcd7Smrg s|^# *$|| 219479d5fcd7Smrg /^Copyright /!{ 219579d5fcd7Smrg /./H 219679d5fcd7Smrg n 219779d5fcd7Smrg b holdwrnt 219805cf1079Smrg } 219979d5fcd7Smrg 220079d5fcd7Smrg s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| 220179d5fcd7Smrg G 220279d5fcd7Smrg s|\(\n\)\n*|\1|g 220379d5fcd7Smrg p; q' < "$progpath" 220404007ebaSmrg 220505cf1079Smrg exit $? 220605cf1079Smrg} 220704007ebaSmrg 220804007ebaSmrg 220905cf1079Smrg# Local variables: 221005cf1079Smrg# mode: shell-script 221105cf1079Smrg# sh-indentation: 2 221205cf1079Smrg# eval: (add-hook 'before-save-hook 'time-stamp) 221379d5fcd7Smrg# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC" 221405cf1079Smrg# time-stamp-time-zone: "UTC" 221505cf1079Smrg# End: 221604007ebaSmrg 221705cf1079Smrg# Set a version string. 221879d5fcd7Smrgscriptversion='(GNU libtool) 2.4.7' 221904007ebaSmrg 222004007ebaSmrg 222105cf1079Smrg# func_echo ARG... 222205cf1079Smrg# ---------------- 222305cf1079Smrg# Libtool also displays the current mode in messages, so override 222405cf1079Smrg# funclib.sh func_echo with this custom definition. 222505cf1079Smrgfunc_echo () 222604007ebaSmrg{ 222705cf1079Smrg $debug_cmd 222804007ebaSmrg 222905cf1079Smrg _G_message=$* 223005cf1079Smrg 223105cf1079Smrg func_echo_IFS=$IFS 223205cf1079Smrg IFS=$nl 223305cf1079Smrg for _G_line in $_G_message; do 223405cf1079Smrg IFS=$func_echo_IFS 223505cf1079Smrg $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" 223605cf1079Smrg done 223705cf1079Smrg IFS=$func_echo_IFS 223805cf1079Smrg} 223904007ebaSmrg 224004007ebaSmrg 224105cf1079Smrg# func_warning ARG... 224205cf1079Smrg# ------------------- 224305cf1079Smrg# Libtool warnings are not categorized, so override funclib.sh 224405cf1079Smrg# func_warning with this simpler definition. 224505cf1079Smrgfunc_warning () 224604007ebaSmrg{ 224705cf1079Smrg $debug_cmd 224804007ebaSmrg 224905cf1079Smrg $warning_func ${1+"$@"} 225005cf1079Smrg} 225104007ebaSmrg 225204007ebaSmrg 225305cf1079Smrg## ---------------- ## 225405cf1079Smrg## Options parsing. ## 225505cf1079Smrg## ---------------- ## 225605cf1079Smrg 225705cf1079Smrg# Hook in the functions to make sure our own options are parsed during 225805cf1079Smrg# the option parsing loop. 225905cf1079Smrg 226005cf1079Smrgusage='$progpath [OPTION]... [MODE-ARG]...' 226105cf1079Smrg 226205cf1079Smrg# Short help message in response to '-h'. 226305cf1079Smrgusage_message="Options: 226405cf1079Smrg --config show all configuration variables 226505cf1079Smrg --debug enable verbose shell tracing 226605cf1079Smrg -n, --dry-run display commands without modifying any files 226705cf1079Smrg --features display basic configuration information and exit 226805cf1079Smrg --mode=MODE use operation mode MODE 226905cf1079Smrg --no-warnings equivalent to '-Wnone' 227005cf1079Smrg --preserve-dup-deps don't remove duplicate dependency libraries 227105cf1079Smrg --quiet, --silent don't print informational messages 227205cf1079Smrg --tag=TAG use configuration variables from tag TAG 227305cf1079Smrg -v, --verbose print more informational messages than default 227405cf1079Smrg --version print version information 227505cf1079Smrg -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] 227605cf1079Smrg -h, --help, --help-all print short, long, or detailed help message 227705cf1079Smrg" 227804007ebaSmrg 227905cf1079Smrg# Additional text appended to 'usage_message' in response to '--help'. 228005cf1079Smrgfunc_help () 228104007ebaSmrg{ 228205cf1079Smrg $debug_cmd 228305cf1079Smrg 228405cf1079Smrg func_usage_message 228505cf1079Smrg $ECHO "$long_help_message 228605cf1079Smrg 228705cf1079SmrgMODE must be one of the following: 228805cf1079Smrg 228905cf1079Smrg clean remove files from the build directory 229005cf1079Smrg compile compile a source file into a libtool object 229105cf1079Smrg execute automatically set library path, then run a program 229205cf1079Smrg finish complete the installation of libtool libraries 229305cf1079Smrg install install libraries or executables 229405cf1079Smrg link create a library or an executable 229505cf1079Smrg uninstall remove libraries from an installed directory 229605cf1079Smrg 229705cf1079SmrgMODE-ARGS vary depending on the MODE. When passed as first option, 229805cf1079Smrg'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. 229905cf1079SmrgTry '$progname --help --mode=MODE' for a more detailed description of MODE. 230005cf1079Smrg 230105cf1079SmrgWhen reporting a bug, please describe a test case to reproduce it and 230205cf1079Smrginclude the following information: 230305cf1079Smrg 230405cf1079Smrg host-triplet: $host 230505cf1079Smrg shell: $SHELL 230605cf1079Smrg compiler: $LTCC 230705cf1079Smrg compiler flags: $LTCFLAGS 230805cf1079Smrg linker: $LD (gnu? $with_gnu_ld) 230979d5fcd7Smrg version: $progname (GNU libtool) 2.4.7 231005cf1079Smrg automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` 231105cf1079Smrg autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` 231205cf1079Smrg 231305cf1079SmrgReport bugs to <bug-libtool@gnu.org>. 231479d5fcd7SmrgGNU libtool home page: <http://www.gnu.org/software/libtool/>. 231505cf1079SmrgGeneral help using GNU software: <http://www.gnu.org/gethelp/>." 231605cf1079Smrg exit 0 231705cf1079Smrg} 231804007ebaSmrg 231904007ebaSmrg 232005cf1079Smrg# func_lo2o OBJECT-NAME 232105cf1079Smrg# --------------------- 232205cf1079Smrg# Transform OBJECT-NAME from a '.lo' suffix to the platform specific 232305cf1079Smrg# object suffix. 232405cf1079Smrg 232505cf1079Smrglo2o=s/\\.lo\$/.$objext/ 232605cf1079Smrgo2lo=s/\\.$objext\$/.lo/ 232705cf1079Smrg 232805cf1079Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 232905cf1079Smrg eval 'func_lo2o () 233005cf1079Smrg { 233105cf1079Smrg case $1 in 233205cf1079Smrg *.lo) func_lo2o_result=${1%.lo}.$objext ;; 233305cf1079Smrg * ) func_lo2o_result=$1 ;; 233405cf1079Smrg esac 233505cf1079Smrg }' 233605cf1079Smrg 233705cf1079Smrg # func_xform LIBOBJ-OR-SOURCE 233805cf1079Smrg # --------------------------- 233905cf1079Smrg # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) 234005cf1079Smrg # suffix to a '.lo' libtool-object suffix. 234105cf1079Smrg eval 'func_xform () 234205cf1079Smrg { 234305cf1079Smrg func_xform_result=${1%.*}.lo 234405cf1079Smrg }' 234505cf1079Smrgelse 234605cf1079Smrg # ...otherwise fall back to using sed. 234705cf1079Smrg func_lo2o () 234805cf1079Smrg { 234905cf1079Smrg func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` 235005cf1079Smrg } 235105cf1079Smrg 235205cf1079Smrg func_xform () 235305cf1079Smrg { 235405cf1079Smrg func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` 235505cf1079Smrg } 235605cf1079Smrgfi 235704007ebaSmrg 235804007ebaSmrg 235905cf1079Smrg# func_fatal_configuration ARG... 236005cf1079Smrg# ------------------------------- 236104007ebaSmrg# Echo program name prefixed message to standard error, followed by 236204007ebaSmrg# a configuration failure hint, and exit. 236304007ebaSmrgfunc_fatal_configuration () 236404007ebaSmrg{ 236579d5fcd7Smrg func_fatal_error ${1+"$@"} \ 236605cf1079Smrg "See the $PACKAGE documentation for more information." \ 236705cf1079Smrg "Fatal configuration error." 236804007ebaSmrg} 236904007ebaSmrg 237004007ebaSmrg 237104007ebaSmrg# func_config 237205cf1079Smrg# ----------- 237304007ebaSmrg# Display the configuration for all the tags in this script. 237404007ebaSmrgfunc_config () 237504007ebaSmrg{ 237604007ebaSmrg re_begincf='^# ### BEGIN LIBTOOL' 237704007ebaSmrg re_endcf='^# ### END LIBTOOL' 237804007ebaSmrg 237904007ebaSmrg # Default configuration. 238004007ebaSmrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 238104007ebaSmrg 238204007ebaSmrg # Now print the configurations for the tags. 238304007ebaSmrg for tagname in $taglist; do 238404007ebaSmrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 238504007ebaSmrg done 238604007ebaSmrg 238704007ebaSmrg exit $? 238804007ebaSmrg} 238904007ebaSmrg 239005cf1079Smrg 239104007ebaSmrg# func_features 239205cf1079Smrg# ------------- 239304007ebaSmrg# Display the features supported by this script. 239404007ebaSmrgfunc_features () 239504007ebaSmrg{ 239604007ebaSmrg echo "host: $host" 239705cf1079Smrg if test yes = "$build_libtool_libs"; then 239804007ebaSmrg echo "enable shared libraries" 239904007ebaSmrg else 240004007ebaSmrg echo "disable shared libraries" 240104007ebaSmrg fi 240205cf1079Smrg if test yes = "$build_old_libs"; then 240304007ebaSmrg echo "enable static libraries" 240404007ebaSmrg else 240504007ebaSmrg echo "disable static libraries" 240604007ebaSmrg fi 240704007ebaSmrg 240804007ebaSmrg exit $? 240904007ebaSmrg} 241004007ebaSmrg 241105cf1079Smrg 241205cf1079Smrg# func_enable_tag TAGNAME 241305cf1079Smrg# ----------------------- 241404007ebaSmrg# Verify that TAGNAME is valid, and either flag an error and exit, or 241504007ebaSmrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 241604007ebaSmrg# variable here. 241704007ebaSmrgfunc_enable_tag () 241804007ebaSmrg{ 241905cf1079Smrg # Global variable: 242005cf1079Smrg tagname=$1 242104007ebaSmrg 242205cf1079Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 242305cf1079Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 242405cf1079Smrg sed_extractcf=/$re_begincf/,/$re_endcf/p 242504007ebaSmrg 242605cf1079Smrg # Validate tagname. 242705cf1079Smrg case $tagname in 242805cf1079Smrg *[!-_A-Za-z0-9,/]*) 242905cf1079Smrg func_fatal_error "invalid tag name: $tagname" 243005cf1079Smrg ;; 243105cf1079Smrg esac 243204007ebaSmrg 243305cf1079Smrg # Don't test for the "default" C tag, as we know it's 243405cf1079Smrg # there but not specially marked. 243505cf1079Smrg case $tagname in 243605cf1079Smrg CC) ;; 243704007ebaSmrg *) 243805cf1079Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 243905cf1079Smrg taglist="$taglist $tagname" 244005cf1079Smrg 244105cf1079Smrg # Evaluate the configuration. Be careful to quote the path 244205cf1079Smrg # and the sed script, to avoid splitting on whitespace, but 244305cf1079Smrg # also don't use non-portable quotes within backquotes within 244405cf1079Smrg # quotes we have to do it in 2 steps: 244505cf1079Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 244605cf1079Smrg eval "$extractedcf" 244705cf1079Smrg else 244805cf1079Smrg func_error "ignoring unknown tag $tagname" 244905cf1079Smrg fi 245005cf1079Smrg ;; 245105cf1079Smrg esac 245204007ebaSmrg} 245304007ebaSmrg 245405cf1079Smrg 245504007ebaSmrg# func_check_version_match 245605cf1079Smrg# ------------------------ 245704007ebaSmrg# Ensure that we are using m4 macros, and libtool script from the same 245804007ebaSmrg# release of libtool. 245904007ebaSmrgfunc_check_version_match () 246004007ebaSmrg{ 246105cf1079Smrg if test "$package_revision" != "$macro_revision"; then 246205cf1079Smrg if test "$VERSION" != "$macro_version"; then 246305cf1079Smrg if test -z "$macro_version"; then 246405cf1079Smrg cat >&2 <<_LT_EOF 246504007ebaSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 246604007ebaSmrg$progname: definition of this LT_INIT comes from an older release. 246704007ebaSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 246804007ebaSmrg$progname: and run autoconf again. 246904007ebaSmrg_LT_EOF 247005cf1079Smrg else 247105cf1079Smrg cat >&2 <<_LT_EOF 247204007ebaSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 247304007ebaSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 247404007ebaSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 247504007ebaSmrg$progname: and run autoconf again. 247604007ebaSmrg_LT_EOF 247705cf1079Smrg fi 247805cf1079Smrg else 247905cf1079Smrg cat >&2 <<_LT_EOF 248004007ebaSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 248104007ebaSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 248204007ebaSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 248304007ebaSmrg$progname: of $PACKAGE $VERSION and run autoconf again. 248404007ebaSmrg_LT_EOF 248505cf1079Smrg fi 248604007ebaSmrg 248705cf1079Smrg exit $EXIT_MISMATCH 248805cf1079Smrg fi 248904007ebaSmrg} 249004007ebaSmrg 249104007ebaSmrg 249205cf1079Smrg# libtool_options_prep [ARG]... 249305cf1079Smrg# ----------------------------- 249405cf1079Smrg# Preparation for options parsed by libtool. 249505cf1079Smrglibtool_options_prep () 249605cf1079Smrg{ 249705cf1079Smrg $debug_mode 249804007ebaSmrg 249905cf1079Smrg # Option defaults: 250005cf1079Smrg opt_config=false 250105cf1079Smrg opt_dlopen= 250205cf1079Smrg opt_dry_run=false 250305cf1079Smrg opt_help=false 250405cf1079Smrg opt_mode= 250505cf1079Smrg opt_preserve_dup_deps=false 250605cf1079Smrg opt_quiet=false 250704007ebaSmrg 250805cf1079Smrg nonopt= 250905cf1079Smrg preserve_args= 251004007ebaSmrg 251105cf1079Smrg _G_rc_lt_options_prep=: 251204007ebaSmrg 251305cf1079Smrg # Shorthand for --mode=foo, only valid as the first argument 251405cf1079Smrg case $1 in 251505cf1079Smrg clean|clea|cle|cl) 251605cf1079Smrg shift; set dummy --mode clean ${1+"$@"}; shift 251705cf1079Smrg ;; 251805cf1079Smrg compile|compil|compi|comp|com|co|c) 251905cf1079Smrg shift; set dummy --mode compile ${1+"$@"}; shift 252005cf1079Smrg ;; 252105cf1079Smrg execute|execut|execu|exec|exe|ex|e) 252205cf1079Smrg shift; set dummy --mode execute ${1+"$@"}; shift 252305cf1079Smrg ;; 252405cf1079Smrg finish|finis|fini|fin|fi|f) 252505cf1079Smrg shift; set dummy --mode finish ${1+"$@"}; shift 252605cf1079Smrg ;; 252705cf1079Smrg install|instal|insta|inst|ins|in|i) 252805cf1079Smrg shift; set dummy --mode install ${1+"$@"}; shift 252905cf1079Smrg ;; 253005cf1079Smrg link|lin|li|l) 253105cf1079Smrg shift; set dummy --mode link ${1+"$@"}; shift 253205cf1079Smrg ;; 253305cf1079Smrg uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 253405cf1079Smrg shift; set dummy --mode uninstall ${1+"$@"}; shift 253505cf1079Smrg ;; 253605cf1079Smrg *) 253705cf1079Smrg _G_rc_lt_options_prep=false 253805cf1079Smrg ;; 253904007ebaSmrg esac 254004007ebaSmrg 254105cf1079Smrg if $_G_rc_lt_options_prep; then 254205cf1079Smrg # Pass back the list of options. 254379d5fcd7Smrg func_quote eval ${1+"$@"} 254479d5fcd7Smrg libtool_options_prep_result=$func_quote_result 254505cf1079Smrg fi 254605cf1079Smrg} 254705cf1079Smrgfunc_add_hook func_options_prep libtool_options_prep 254804007ebaSmrg 254904007ebaSmrg 255005cf1079Smrg# libtool_parse_options [ARG]... 255105cf1079Smrg# --------------------------------- 255205cf1079Smrg# Provide handling for libtool specific options. 255305cf1079Smrglibtool_parse_options () 255405cf1079Smrg{ 255505cf1079Smrg $debug_cmd 255604007ebaSmrg 255705cf1079Smrg _G_rc_lt_parse_options=false 255804007ebaSmrg 255905cf1079Smrg # Perform our own loop to consume as many options as possible in 256005cf1079Smrg # each iteration. 256105cf1079Smrg while test $# -gt 0; do 256205cf1079Smrg _G_match_lt_parse_options=: 256305cf1079Smrg _G_opt=$1 256405cf1079Smrg shift 256505cf1079Smrg case $_G_opt in 256605cf1079Smrg --dry-run|--dryrun|-n) 256705cf1079Smrg opt_dry_run=: 256805cf1079Smrg ;; 256905cf1079Smrg 257005cf1079Smrg --config) func_config ;; 257105cf1079Smrg 257205cf1079Smrg --dlopen|-dlopen) 257305cf1079Smrg opt_dlopen="${opt_dlopen+$opt_dlopen 257405cf1079Smrg}$1" 257505cf1079Smrg shift 257605cf1079Smrg ;; 257705cf1079Smrg 257805cf1079Smrg --preserve-dup-deps) 257905cf1079Smrg opt_preserve_dup_deps=: ;; 258005cf1079Smrg 258105cf1079Smrg --features) func_features ;; 258205cf1079Smrg 258305cf1079Smrg --finish) set dummy --mode finish ${1+"$@"}; shift ;; 258405cf1079Smrg 258505cf1079Smrg --help) opt_help=: ;; 258605cf1079Smrg 258705cf1079Smrg --help-all) opt_help=': help-all' ;; 258805cf1079Smrg 258905cf1079Smrg --mode) test $# = 0 && func_missing_arg $_G_opt && break 259005cf1079Smrg opt_mode=$1 259105cf1079Smrg case $1 in 259205cf1079Smrg # Valid mode arguments: 259305cf1079Smrg clean|compile|execute|finish|install|link|relink|uninstall) ;; 259405cf1079Smrg 259505cf1079Smrg # Catch anything else as an error 259605cf1079Smrg *) func_error "invalid argument for $_G_opt" 259705cf1079Smrg exit_cmd=exit 259805cf1079Smrg break 259905cf1079Smrg ;; 260005cf1079Smrg esac 260105cf1079Smrg shift 260205cf1079Smrg ;; 260305cf1079Smrg 260405cf1079Smrg --no-silent|--no-quiet) 260505cf1079Smrg opt_quiet=false 260605cf1079Smrg func_append preserve_args " $_G_opt" 260705cf1079Smrg ;; 260805cf1079Smrg 260905cf1079Smrg --no-warnings|--no-warning|--no-warn) 261005cf1079Smrg opt_warning=false 261105cf1079Smrg func_append preserve_args " $_G_opt" 261205cf1079Smrg ;; 261305cf1079Smrg 261405cf1079Smrg --no-verbose) 261505cf1079Smrg opt_verbose=false 261605cf1079Smrg func_append preserve_args " $_G_opt" 261705cf1079Smrg ;; 261805cf1079Smrg 261905cf1079Smrg --silent|--quiet) 262005cf1079Smrg opt_quiet=: 262105cf1079Smrg opt_verbose=false 262205cf1079Smrg func_append preserve_args " $_G_opt" 262305cf1079Smrg ;; 262405cf1079Smrg 262505cf1079Smrg --tag) test $# = 0 && func_missing_arg $_G_opt && break 262605cf1079Smrg opt_tag=$1 262705cf1079Smrg func_append preserve_args " $_G_opt $1" 262805cf1079Smrg func_enable_tag "$1" 262905cf1079Smrg shift 263005cf1079Smrg ;; 263105cf1079Smrg 263205cf1079Smrg --verbose|-v) opt_quiet=false 263305cf1079Smrg opt_verbose=: 263405cf1079Smrg func_append preserve_args " $_G_opt" 263505cf1079Smrg ;; 263605cf1079Smrg 263705cf1079Smrg # An option not handled by this hook function: 263805cf1079Smrg *) set dummy "$_G_opt" ${1+"$@"} ; shift 263905cf1079Smrg _G_match_lt_parse_options=false 264005cf1079Smrg break 264105cf1079Smrg ;; 264205cf1079Smrg esac 264305cf1079Smrg $_G_match_lt_parse_options && _G_rc_lt_parse_options=: 264405cf1079Smrg done 264505cf1079Smrg 264605cf1079Smrg if $_G_rc_lt_parse_options; then 264705cf1079Smrg # save modified positional parameters for caller 264879d5fcd7Smrg func_quote eval ${1+"$@"} 264979d5fcd7Smrg libtool_parse_options_result=$func_quote_result 265004007ebaSmrg fi 265105cf1079Smrg} 265205cf1079Smrgfunc_add_hook func_parse_options libtool_parse_options 265305cf1079Smrg 265404007ebaSmrg 265505cf1079Smrg 265605cf1079Smrg# libtool_validate_options [ARG]... 265705cf1079Smrg# --------------------------------- 265805cf1079Smrg# Perform any sanity checks on option settings and/or unconsumed 265905cf1079Smrg# arguments. 266005cf1079Smrglibtool_validate_options () 266105cf1079Smrg{ 266205cf1079Smrg # save first non-option argument 266305cf1079Smrg if test 0 -lt $#; then 266405cf1079Smrg nonopt=$1 266505cf1079Smrg shift 266604007ebaSmrg fi 266704007ebaSmrg 266805cf1079Smrg # preserve --debug 266905cf1079Smrg test : = "$debug_cmd" || func_append preserve_args " --debug" 267005cf1079Smrg 267105cf1079Smrg case $host in 267205cf1079Smrg # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 267305cf1079Smrg # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 267405cf1079Smrg *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) 267505cf1079Smrg # don't eliminate duplications in $postdeps and $predeps 267605cf1079Smrg opt_duplicate_compiler_generated_deps=: 267705cf1079Smrg ;; 267805cf1079Smrg *) 267905cf1079Smrg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 268005cf1079Smrg ;; 268105cf1079Smrg esac 268204007ebaSmrg 268305cf1079Smrg $opt_help || { 268405cf1079Smrg # Sanity checks first: 268505cf1079Smrg func_check_version_match 268604007ebaSmrg 268705cf1079Smrg test yes != "$build_libtool_libs" \ 268805cf1079Smrg && test yes != "$build_old_libs" \ 268905cf1079Smrg && func_fatal_configuration "not configured to build any kind of library" 269005cf1079Smrg 269105cf1079Smrg # Darwin sucks 269205cf1079Smrg eval std_shrext=\"$shrext_cmds\" 269305cf1079Smrg 269405cf1079Smrg # Only execute mode is allowed to have -dlopen flags. 269505cf1079Smrg if test -n "$opt_dlopen" && test execute != "$opt_mode"; then 269605cf1079Smrg func_error "unrecognized option '-dlopen'" 269705cf1079Smrg $ECHO "$help" 1>&2 269805cf1079Smrg exit $EXIT_FAILURE 269905cf1079Smrg fi 270005cf1079Smrg 270105cf1079Smrg # Change the help message to a mode-specific one. 270205cf1079Smrg generic_help=$help 270305cf1079Smrg help="Try '$progname --help --mode=$opt_mode' for more information." 270405cf1079Smrg } 270505cf1079Smrg 270605cf1079Smrg # Pass back the unparsed argument list 270779d5fcd7Smrg func_quote eval ${1+"$@"} 270879d5fcd7Smrg libtool_validate_options_result=$func_quote_result 270904007ebaSmrg} 271005cf1079Smrgfunc_add_hook func_validate_options libtool_validate_options 271104007ebaSmrg 271204007ebaSmrg 271305cf1079Smrg# Process options as early as possible so that --help and --version 271405cf1079Smrg# can return quickly. 271505cf1079Smrgfunc_options ${1+"$@"} 271605cf1079Smrgeval set dummy "$func_options_result"; shift 271705cf1079Smrg 271804007ebaSmrg 271904007ebaSmrg 272004007ebaSmrg## ----------- ## 272104007ebaSmrg## Main. ## 272204007ebaSmrg## ----------- ## 272304007ebaSmrg 272405cf1079Smrgmagic='%%%MAGIC variable%%%' 272505cf1079Smrgmagic_exe='%%%MAGIC EXE variable%%%' 272605cf1079Smrg 272705cf1079Smrg# Global variables. 272805cf1079Smrgextracted_archives= 272905cf1079Smrgextracted_serial=0 273005cf1079Smrg 273105cf1079Smrg# If this variable is set in any of the actions, the command in it 273205cf1079Smrg# will be execed at the end. This prevents here-documents from being 273305cf1079Smrg# left over by shells. 273405cf1079Smrgexec_cmd= 273505cf1079Smrg 273605cf1079Smrg 273705cf1079Smrg# A function that is used when there is no print builtin or printf. 273805cf1079Smrgfunc_fallback_echo () 273905cf1079Smrg{ 274005cf1079Smrg eval 'cat <<_LTECHO_EOF 274105cf1079Smrg$1 274205cf1079Smrg_LTECHO_EOF' 274305cf1079Smrg} 274405cf1079Smrg 274505cf1079Smrg# func_generated_by_libtool 274605cf1079Smrg# True iff stdin has been generated by Libtool. This function is only 274705cf1079Smrg# a basic sanity check; it will hardly flush out determined imposters. 274805cf1079Smrgfunc_generated_by_libtool_p () 274905cf1079Smrg{ 275005cf1079Smrg $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 275105cf1079Smrg} 275205cf1079Smrg 275304007ebaSmrg# func_lalib_p file 275405cf1079Smrg# True iff FILE is a libtool '.la' library or '.lo' object file. 275504007ebaSmrg# This function is only a basic sanity check; it will hardly flush out 275604007ebaSmrg# determined imposters. 275704007ebaSmrgfunc_lalib_p () 275804007ebaSmrg{ 275904007ebaSmrg test -f "$1" && 276005cf1079Smrg $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p 276104007ebaSmrg} 276204007ebaSmrg 276304007ebaSmrg# func_lalib_unsafe_p file 276405cf1079Smrg# True iff FILE is a libtool '.la' library or '.lo' object file. 276504007ebaSmrg# This function implements the same check as func_lalib_p without 276604007ebaSmrg# resorting to external programs. To this end, it redirects stdin and 276704007ebaSmrg# closes it afterwards, without saving the original file descriptor. 276804007ebaSmrg# As a safety measure, use it only where a negative result would be 276905cf1079Smrg# fatal anyway. Works if 'file' does not exist. 277004007ebaSmrgfunc_lalib_unsafe_p () 277104007ebaSmrg{ 277204007ebaSmrg lalib_p=no 277304007ebaSmrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 277404007ebaSmrg for lalib_p_l in 1 2 3 4 277504007ebaSmrg do 277604007ebaSmrg read lalib_p_line 277705cf1079Smrg case $lalib_p_line in 277804007ebaSmrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 277904007ebaSmrg esac 278004007ebaSmrg done 278104007ebaSmrg exec 0<&5 5<&- 278204007ebaSmrg fi 278305cf1079Smrg test yes = "$lalib_p" 278404007ebaSmrg} 278504007ebaSmrg 278604007ebaSmrg# func_ltwrapper_script_p file 278704007ebaSmrg# True iff FILE is a libtool wrapper script 278804007ebaSmrg# This function is only a basic sanity check; it will hardly flush out 278904007ebaSmrg# determined imposters. 279004007ebaSmrgfunc_ltwrapper_script_p () 279104007ebaSmrg{ 279205cf1079Smrg test -f "$1" && 279305cf1079Smrg $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p 279404007ebaSmrg} 279504007ebaSmrg 279604007ebaSmrg# func_ltwrapper_executable_p file 279704007ebaSmrg# True iff FILE is a libtool wrapper executable 279804007ebaSmrg# This function is only a basic sanity check; it will hardly flush out 279904007ebaSmrg# determined imposters. 280004007ebaSmrgfunc_ltwrapper_executable_p () 280104007ebaSmrg{ 280204007ebaSmrg func_ltwrapper_exec_suffix= 280304007ebaSmrg case $1 in 280404007ebaSmrg *.exe) ;; 280504007ebaSmrg *) func_ltwrapper_exec_suffix=.exe ;; 280604007ebaSmrg esac 280704007ebaSmrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 280804007ebaSmrg} 280904007ebaSmrg 281004007ebaSmrg# func_ltwrapper_scriptname file 281104007ebaSmrg# Assumes file is an ltwrapper_executable 281204007ebaSmrg# uses $file to determine the appropriate filename for a 281304007ebaSmrg# temporary ltwrapper_script. 281404007ebaSmrgfunc_ltwrapper_scriptname () 281504007ebaSmrg{ 281604007ebaSmrg func_dirname_and_basename "$1" "" "." 281704007ebaSmrg func_stripname '' '.exe' "$func_basename_result" 281805cf1079Smrg func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper 281904007ebaSmrg} 282004007ebaSmrg 282104007ebaSmrg# func_ltwrapper_p file 282204007ebaSmrg# True iff FILE is a libtool wrapper script or wrapper executable 282304007ebaSmrg# This function is only a basic sanity check; it will hardly flush out 282404007ebaSmrg# determined imposters. 282504007ebaSmrgfunc_ltwrapper_p () 282604007ebaSmrg{ 282704007ebaSmrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 282804007ebaSmrg} 282904007ebaSmrg 283004007ebaSmrg 283104007ebaSmrg# func_execute_cmds commands fail_cmd 283204007ebaSmrg# Execute tilde-delimited COMMANDS. 283304007ebaSmrg# If FAIL_CMD is given, eval that upon failure. 283404007ebaSmrg# FAIL_CMD may read-access the current command in variable CMD! 283504007ebaSmrgfunc_execute_cmds () 283604007ebaSmrg{ 283705cf1079Smrg $debug_cmd 283805cf1079Smrg 283904007ebaSmrg save_ifs=$IFS; IFS='~' 284004007ebaSmrg for cmd in $1; do 284105cf1079Smrg IFS=$sp$nl 284204007ebaSmrg eval cmd=\"$cmd\" 284305cf1079Smrg IFS=$save_ifs 284404007ebaSmrg func_show_eval "$cmd" "${2-:}" 284504007ebaSmrg done 284604007ebaSmrg IFS=$save_ifs 284704007ebaSmrg} 284804007ebaSmrg 284904007ebaSmrg 285004007ebaSmrg# func_source file 285104007ebaSmrg# Source FILE, adding directory component if necessary. 285204007ebaSmrg# Note that it is not necessary on cygwin/mingw to append a dot to 285304007ebaSmrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 285404007ebaSmrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 285505cf1079Smrg# 'FILE.' does not work on cygwin managed mounts. 285604007ebaSmrgfunc_source () 285704007ebaSmrg{ 285805cf1079Smrg $debug_cmd 285905cf1079Smrg 286004007ebaSmrg case $1 in 286104007ebaSmrg */* | *\\*) . "$1" ;; 286204007ebaSmrg *) . "./$1" ;; 286304007ebaSmrg esac 286404007ebaSmrg} 286504007ebaSmrg 286604007ebaSmrg 286704007ebaSmrg# func_resolve_sysroot PATH 286804007ebaSmrg# Replace a leading = in PATH with a sysroot. Store the result into 286904007ebaSmrg# func_resolve_sysroot_result 287004007ebaSmrgfunc_resolve_sysroot () 287104007ebaSmrg{ 287204007ebaSmrg func_resolve_sysroot_result=$1 287304007ebaSmrg case $func_resolve_sysroot_result in 287404007ebaSmrg =*) 287504007ebaSmrg func_stripname '=' '' "$func_resolve_sysroot_result" 287604007ebaSmrg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 287704007ebaSmrg ;; 287804007ebaSmrg esac 287904007ebaSmrg} 288004007ebaSmrg 288104007ebaSmrg# func_replace_sysroot PATH 288204007ebaSmrg# If PATH begins with the sysroot, replace it with = and 288304007ebaSmrg# store the result into func_replace_sysroot_result. 288404007ebaSmrgfunc_replace_sysroot () 288504007ebaSmrg{ 288605cf1079Smrg case $lt_sysroot:$1 in 288704007ebaSmrg ?*:"$lt_sysroot"*) 288804007ebaSmrg func_stripname "$lt_sysroot" '' "$1" 288905cf1079Smrg func_replace_sysroot_result='='$func_stripname_result 289004007ebaSmrg ;; 289104007ebaSmrg *) 289204007ebaSmrg # Including no sysroot. 289304007ebaSmrg func_replace_sysroot_result=$1 289404007ebaSmrg ;; 289504007ebaSmrg esac 289604007ebaSmrg} 289704007ebaSmrg 289804007ebaSmrg# func_infer_tag arg 289904007ebaSmrg# Infer tagged configuration to use if any are available and 290004007ebaSmrg# if one wasn't chosen via the "--tag" command line option. 290104007ebaSmrg# Only attempt this if the compiler in the base compile 290204007ebaSmrg# command doesn't match the default compiler. 290304007ebaSmrg# arg is usually of the form 'gcc ...' 290404007ebaSmrgfunc_infer_tag () 290504007ebaSmrg{ 290605cf1079Smrg $debug_cmd 290705cf1079Smrg 290804007ebaSmrg if test -n "$available_tags" && test -z "$tagname"; then 290904007ebaSmrg CC_quoted= 291004007ebaSmrg for arg in $CC; do 291104007ebaSmrg func_append_quoted CC_quoted "$arg" 291204007ebaSmrg done 291304007ebaSmrg CC_expanded=`func_echo_all $CC` 291404007ebaSmrg CC_quoted_expanded=`func_echo_all $CC_quoted` 291504007ebaSmrg case $@ in 291604007ebaSmrg # Blanks in the command may have been stripped by the calling shell, 291704007ebaSmrg # but not from the CC environment variable when configure was run. 291804007ebaSmrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 291904007ebaSmrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 292004007ebaSmrg # Blanks at the start of $base_compile will cause this to fail 292104007ebaSmrg # if we don't check for them as well. 292204007ebaSmrg *) 292304007ebaSmrg for z in $available_tags; do 292404007ebaSmrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 292504007ebaSmrg # Evaluate the configuration. 292605cf1079Smrg eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 292704007ebaSmrg CC_quoted= 292804007ebaSmrg for arg in $CC; do 292904007ebaSmrg # Double-quote args containing other shell metacharacters. 293004007ebaSmrg func_append_quoted CC_quoted "$arg" 293104007ebaSmrg done 293204007ebaSmrg CC_expanded=`func_echo_all $CC` 293304007ebaSmrg CC_quoted_expanded=`func_echo_all $CC_quoted` 293404007ebaSmrg case "$@ " in 293504007ebaSmrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 293604007ebaSmrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 293704007ebaSmrg # The compiler in the base compile command matches 293804007ebaSmrg # the one in the tagged configuration. 293904007ebaSmrg # Assume this is the tagged configuration we want. 294004007ebaSmrg tagname=$z 294104007ebaSmrg break 294204007ebaSmrg ;; 294304007ebaSmrg esac 294404007ebaSmrg fi 294504007ebaSmrg done 294604007ebaSmrg # If $tagname still isn't set, then no tagged configuration 294704007ebaSmrg # was found and let the user know that the "--tag" command 294804007ebaSmrg # line option must be used. 294904007ebaSmrg if test -z "$tagname"; then 295004007ebaSmrg func_echo "unable to infer tagged configuration" 295105cf1079Smrg func_fatal_error "specify a tag with '--tag'" 295204007ebaSmrg# else 295304007ebaSmrg# func_verbose "using $tagname tagged configuration" 295404007ebaSmrg fi 295504007ebaSmrg ;; 295604007ebaSmrg esac 295704007ebaSmrg fi 295804007ebaSmrg} 295904007ebaSmrg 296004007ebaSmrg 296104007ebaSmrg 296204007ebaSmrg# func_write_libtool_object output_name pic_name nonpic_name 296304007ebaSmrg# Create a libtool object file (analogous to a ".la" file), 296404007ebaSmrg# but don't create it if we're doing a dry run. 296504007ebaSmrgfunc_write_libtool_object () 296604007ebaSmrg{ 296705cf1079Smrg write_libobj=$1 296805cf1079Smrg if test yes = "$build_libtool_libs"; then 296905cf1079Smrg write_lobj=\'$2\' 297004007ebaSmrg else 297104007ebaSmrg write_lobj=none 297204007ebaSmrg fi 297304007ebaSmrg 297405cf1079Smrg if test yes = "$build_old_libs"; then 297505cf1079Smrg write_oldobj=\'$3\' 297604007ebaSmrg else 297704007ebaSmrg write_oldobj=none 297804007ebaSmrg fi 297904007ebaSmrg 298004007ebaSmrg $opt_dry_run || { 298104007ebaSmrg cat >${write_libobj}T <<EOF 298204007ebaSmrg# $write_libobj - a libtool object file 298305cf1079Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 298404007ebaSmrg# 298504007ebaSmrg# Please DO NOT delete this file! 298604007ebaSmrg# It is necessary for linking the library. 298704007ebaSmrg 298804007ebaSmrg# Name of the PIC object. 298904007ebaSmrgpic_object=$write_lobj 299004007ebaSmrg 299104007ebaSmrg# Name of the non-PIC object 299204007ebaSmrgnon_pic_object=$write_oldobj 299304007ebaSmrg 299404007ebaSmrgEOF 299505cf1079Smrg $MV "${write_libobj}T" "$write_libobj" 299604007ebaSmrg } 299704007ebaSmrg} 299804007ebaSmrg 299904007ebaSmrg 300004007ebaSmrg################################################## 300104007ebaSmrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 300204007ebaSmrg################################################## 300304007ebaSmrg 300404007ebaSmrg# func_convert_core_file_wine_to_w32 ARG 300504007ebaSmrg# Helper function used by file name conversion functions when $build is *nix, 300604007ebaSmrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a 300704007ebaSmrg# correctly configured wine environment available, with the winepath program 300804007ebaSmrg# in $build's $PATH. 300904007ebaSmrg# 301004007ebaSmrg# ARG is the $build file name to be converted to w32 format. 301104007ebaSmrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will 301204007ebaSmrg# be empty on error (or when ARG is empty) 301304007ebaSmrgfunc_convert_core_file_wine_to_w32 () 301404007ebaSmrg{ 301505cf1079Smrg $debug_cmd 301605cf1079Smrg 301705cf1079Smrg func_convert_core_file_wine_to_w32_result=$1 301804007ebaSmrg if test -n "$1"; then 301904007ebaSmrg # Unfortunately, winepath does not exit with a non-zero error code, so we 302004007ebaSmrg # are forced to check the contents of stdout. On the other hand, if the 302104007ebaSmrg # command is not found, the shell will set an exit code of 127 and print 302204007ebaSmrg # *an error message* to stdout. So we must check for both error code of 302304007ebaSmrg # zero AND non-empty stdout, which explains the odd construction: 302404007ebaSmrg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 302505cf1079Smrg if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then 302604007ebaSmrg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 302705cf1079Smrg $SED -e "$sed_naive_backslashify"` 302804007ebaSmrg else 302904007ebaSmrg func_convert_core_file_wine_to_w32_result= 303004007ebaSmrg fi 303104007ebaSmrg fi 303204007ebaSmrg} 303304007ebaSmrg# end: func_convert_core_file_wine_to_w32 303404007ebaSmrg 303504007ebaSmrg 303604007ebaSmrg# func_convert_core_path_wine_to_w32 ARG 303704007ebaSmrg# Helper function used by path conversion functions when $build is *nix, and 303804007ebaSmrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 303904007ebaSmrg# configured wine environment available, with the winepath program in $build's 304004007ebaSmrg# $PATH. Assumes ARG has no leading or trailing path separator characters. 304104007ebaSmrg# 304204007ebaSmrg# ARG is path to be converted from $build format to win32. 304304007ebaSmrg# Result is available in $func_convert_core_path_wine_to_w32_result. 304404007ebaSmrg# Unconvertible file (directory) names in ARG are skipped; if no directory names 304504007ebaSmrg# are convertible, then the result may be empty. 304604007ebaSmrgfunc_convert_core_path_wine_to_w32 () 304704007ebaSmrg{ 304805cf1079Smrg $debug_cmd 304905cf1079Smrg 305004007ebaSmrg # unfortunately, winepath doesn't convert paths, only file names 305105cf1079Smrg func_convert_core_path_wine_to_w32_result= 305204007ebaSmrg if test -n "$1"; then 305304007ebaSmrg oldIFS=$IFS 305404007ebaSmrg IFS=: 305504007ebaSmrg for func_convert_core_path_wine_to_w32_f in $1; do 305604007ebaSmrg IFS=$oldIFS 305704007ebaSmrg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 305805cf1079Smrg if test -n "$func_convert_core_file_wine_to_w32_result"; then 305904007ebaSmrg if test -z "$func_convert_core_path_wine_to_w32_result"; then 306005cf1079Smrg func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result 306104007ebaSmrg else 306204007ebaSmrg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 306304007ebaSmrg fi 306404007ebaSmrg fi 306504007ebaSmrg done 306604007ebaSmrg IFS=$oldIFS 306704007ebaSmrg fi 306804007ebaSmrg} 306904007ebaSmrg# end: func_convert_core_path_wine_to_w32 307004007ebaSmrg 307104007ebaSmrg 307204007ebaSmrg# func_cygpath ARGS... 307304007ebaSmrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 307404007ebaSmrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 307504007ebaSmrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 307604007ebaSmrg# (2), returns the Cygwin file name or path in func_cygpath_result (input 307704007ebaSmrg# file name or path is assumed to be in w32 format, as previously converted 307804007ebaSmrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name 307904007ebaSmrg# or path in func_cygpath_result (input file name or path is assumed to be in 308004007ebaSmrg# Cygwin format). Returns an empty string on error. 308104007ebaSmrg# 308204007ebaSmrg# ARGS are passed to cygpath, with the last one being the file name or path to 308304007ebaSmrg# be converted. 308404007ebaSmrg# 308504007ebaSmrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 308604007ebaSmrg# environment variable; do not put it in $PATH. 308704007ebaSmrgfunc_cygpath () 308804007ebaSmrg{ 308905cf1079Smrg $debug_cmd 309005cf1079Smrg 309104007ebaSmrg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 309204007ebaSmrg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 309304007ebaSmrg if test "$?" -ne 0; then 309404007ebaSmrg # on failure, ensure result is empty 309504007ebaSmrg func_cygpath_result= 309604007ebaSmrg fi 309704007ebaSmrg else 309804007ebaSmrg func_cygpath_result= 309905cf1079Smrg func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" 310004007ebaSmrg fi 310104007ebaSmrg} 310204007ebaSmrg#end: func_cygpath 310304007ebaSmrg 310404007ebaSmrg 310504007ebaSmrg# func_convert_core_msys_to_w32 ARG 310604007ebaSmrg# Convert file name or path ARG from MSYS format to w32 format. Return 310704007ebaSmrg# result in func_convert_core_msys_to_w32_result. 310804007ebaSmrgfunc_convert_core_msys_to_w32 () 310904007ebaSmrg{ 311005cf1079Smrg $debug_cmd 311105cf1079Smrg 311204007ebaSmrg # awkward: cmd appends spaces to result 311304007ebaSmrg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 311405cf1079Smrg $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` 311504007ebaSmrg} 311604007ebaSmrg#end: func_convert_core_msys_to_w32 311704007ebaSmrg 311804007ebaSmrg 311904007ebaSmrg# func_convert_file_check ARG1 ARG2 312004007ebaSmrg# Verify that ARG1 (a file name in $build format) was converted to $host 312104007ebaSmrg# format in ARG2. Otherwise, emit an error message, but continue (resetting 312204007ebaSmrg# func_to_host_file_result to ARG1). 312304007ebaSmrgfunc_convert_file_check () 312404007ebaSmrg{ 312505cf1079Smrg $debug_cmd 312605cf1079Smrg 312705cf1079Smrg if test -z "$2" && test -n "$1"; then 312804007ebaSmrg func_error "Could not determine host file name corresponding to" 312905cf1079Smrg func_error " '$1'" 313004007ebaSmrg func_error "Continuing, but uninstalled executables may not work." 313104007ebaSmrg # Fallback: 313205cf1079Smrg func_to_host_file_result=$1 313304007ebaSmrg fi 313404007ebaSmrg} 313504007ebaSmrg# end func_convert_file_check 313604007ebaSmrg 313704007ebaSmrg 313804007ebaSmrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 313904007ebaSmrg# Verify that FROM_PATH (a path in $build format) was converted to $host 314004007ebaSmrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 314104007ebaSmrg# func_to_host_file_result to a simplistic fallback value (see below). 314204007ebaSmrgfunc_convert_path_check () 314304007ebaSmrg{ 314405cf1079Smrg $debug_cmd 314505cf1079Smrg 314604007ebaSmrg if test -z "$4" && test -n "$3"; then 314704007ebaSmrg func_error "Could not determine the host path corresponding to" 314805cf1079Smrg func_error " '$3'" 314904007ebaSmrg func_error "Continuing, but uninstalled executables may not work." 315004007ebaSmrg # Fallback. This is a deliberately simplistic "conversion" and 315104007ebaSmrg # should not be "improved". See libtool.info. 315204007ebaSmrg if test "x$1" != "x$2"; then 315304007ebaSmrg lt_replace_pathsep_chars="s|$1|$2|g" 315404007ebaSmrg func_to_host_path_result=`echo "$3" | 315504007ebaSmrg $SED -e "$lt_replace_pathsep_chars"` 315604007ebaSmrg else 315705cf1079Smrg func_to_host_path_result=$3 315804007ebaSmrg fi 315904007ebaSmrg fi 316004007ebaSmrg} 316104007ebaSmrg# end func_convert_path_check 316204007ebaSmrg 316304007ebaSmrg 316404007ebaSmrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 316504007ebaSmrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 316604007ebaSmrg# and appending REPL if ORIG matches BACKPAT. 316704007ebaSmrgfunc_convert_path_front_back_pathsep () 316804007ebaSmrg{ 316905cf1079Smrg $debug_cmd 317005cf1079Smrg 317104007ebaSmrg case $4 in 317205cf1079Smrg $1 ) func_to_host_path_result=$3$func_to_host_path_result 317304007ebaSmrg ;; 317404007ebaSmrg esac 317504007ebaSmrg case $4 in 317604007ebaSmrg $2 ) func_append func_to_host_path_result "$3" 317704007ebaSmrg ;; 317804007ebaSmrg esac 317904007ebaSmrg} 318004007ebaSmrg# end func_convert_path_front_back_pathsep 318104007ebaSmrg 318204007ebaSmrg 318304007ebaSmrg################################################## 318404007ebaSmrg# $build to $host FILE NAME CONVERSION FUNCTIONS # 318504007ebaSmrg################################################## 318605cf1079Smrg# invoked via '$to_host_file_cmd ARG' 318704007ebaSmrg# 318804007ebaSmrg# In each case, ARG is the path to be converted from $build to $host format. 318904007ebaSmrg# Result will be available in $func_to_host_file_result. 319004007ebaSmrg 319104007ebaSmrg 319204007ebaSmrg# func_to_host_file ARG 319304007ebaSmrg# Converts the file name ARG from $build format to $host format. Return result 319404007ebaSmrg# in func_to_host_file_result. 319504007ebaSmrgfunc_to_host_file () 319604007ebaSmrg{ 319705cf1079Smrg $debug_cmd 319805cf1079Smrg 319904007ebaSmrg $to_host_file_cmd "$1" 320004007ebaSmrg} 320104007ebaSmrg# end func_to_host_file 320204007ebaSmrg 320304007ebaSmrg 320404007ebaSmrg# func_to_tool_file ARG LAZY 320504007ebaSmrg# converts the file name ARG from $build format to toolchain format. Return 320604007ebaSmrg# result in func_to_tool_file_result. If the conversion in use is listed 320704007ebaSmrg# in (the comma separated) LAZY, no conversion takes place. 320804007ebaSmrgfunc_to_tool_file () 320904007ebaSmrg{ 321005cf1079Smrg $debug_cmd 321105cf1079Smrg 321204007ebaSmrg case ,$2, in 321304007ebaSmrg *,"$to_tool_file_cmd",*) 321404007ebaSmrg func_to_tool_file_result=$1 321504007ebaSmrg ;; 321604007ebaSmrg *) 321704007ebaSmrg $to_tool_file_cmd "$1" 321804007ebaSmrg func_to_tool_file_result=$func_to_host_file_result 321904007ebaSmrg ;; 322004007ebaSmrg esac 322104007ebaSmrg} 322204007ebaSmrg# end func_to_tool_file 322304007ebaSmrg 322404007ebaSmrg 322504007ebaSmrg# func_convert_file_noop ARG 322604007ebaSmrg# Copy ARG to func_to_host_file_result. 322704007ebaSmrgfunc_convert_file_noop () 322804007ebaSmrg{ 322905cf1079Smrg func_to_host_file_result=$1 323004007ebaSmrg} 323104007ebaSmrg# end func_convert_file_noop 323204007ebaSmrg 323304007ebaSmrg 323404007ebaSmrg# func_convert_file_msys_to_w32 ARG 323504007ebaSmrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 323604007ebaSmrg# conversion to w32 is not available inside the cwrapper. Returns result in 323704007ebaSmrg# func_to_host_file_result. 323804007ebaSmrgfunc_convert_file_msys_to_w32 () 323904007ebaSmrg{ 324005cf1079Smrg $debug_cmd 324105cf1079Smrg 324205cf1079Smrg func_to_host_file_result=$1 324304007ebaSmrg if test -n "$1"; then 324404007ebaSmrg func_convert_core_msys_to_w32 "$1" 324505cf1079Smrg func_to_host_file_result=$func_convert_core_msys_to_w32_result 324604007ebaSmrg fi 324704007ebaSmrg func_convert_file_check "$1" "$func_to_host_file_result" 324804007ebaSmrg} 324904007ebaSmrg# end func_convert_file_msys_to_w32 325004007ebaSmrg 325104007ebaSmrg 325204007ebaSmrg# func_convert_file_cygwin_to_w32 ARG 325304007ebaSmrg# Convert file name ARG from Cygwin to w32 format. Returns result in 325404007ebaSmrg# func_to_host_file_result. 325504007ebaSmrgfunc_convert_file_cygwin_to_w32 () 325604007ebaSmrg{ 325705cf1079Smrg $debug_cmd 325805cf1079Smrg 325905cf1079Smrg func_to_host_file_result=$1 326004007ebaSmrg if test -n "$1"; then 326104007ebaSmrg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 326204007ebaSmrg # LT_CYGPATH in this case. 326304007ebaSmrg func_to_host_file_result=`cygpath -m "$1"` 326404007ebaSmrg fi 326504007ebaSmrg func_convert_file_check "$1" "$func_to_host_file_result" 326604007ebaSmrg} 326704007ebaSmrg# end func_convert_file_cygwin_to_w32 326804007ebaSmrg 326904007ebaSmrg 327004007ebaSmrg# func_convert_file_nix_to_w32 ARG 327104007ebaSmrg# Convert file name ARG from *nix to w32 format. Requires a wine environment 327204007ebaSmrg# and a working winepath. Returns result in func_to_host_file_result. 327304007ebaSmrgfunc_convert_file_nix_to_w32 () 327404007ebaSmrg{ 327505cf1079Smrg $debug_cmd 327605cf1079Smrg 327705cf1079Smrg func_to_host_file_result=$1 327804007ebaSmrg if test -n "$1"; then 327904007ebaSmrg func_convert_core_file_wine_to_w32 "$1" 328005cf1079Smrg func_to_host_file_result=$func_convert_core_file_wine_to_w32_result 328104007ebaSmrg fi 328204007ebaSmrg func_convert_file_check "$1" "$func_to_host_file_result" 328304007ebaSmrg} 328404007ebaSmrg# end func_convert_file_nix_to_w32 328504007ebaSmrg 328604007ebaSmrg 328704007ebaSmrg# func_convert_file_msys_to_cygwin ARG 328804007ebaSmrg# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 328904007ebaSmrg# Returns result in func_to_host_file_result. 329004007ebaSmrgfunc_convert_file_msys_to_cygwin () 329104007ebaSmrg{ 329205cf1079Smrg $debug_cmd 329305cf1079Smrg 329405cf1079Smrg func_to_host_file_result=$1 329504007ebaSmrg if test -n "$1"; then 329604007ebaSmrg func_convert_core_msys_to_w32 "$1" 329704007ebaSmrg func_cygpath -u "$func_convert_core_msys_to_w32_result" 329805cf1079Smrg func_to_host_file_result=$func_cygpath_result 329904007ebaSmrg fi 330004007ebaSmrg func_convert_file_check "$1" "$func_to_host_file_result" 330104007ebaSmrg} 330204007ebaSmrg# end func_convert_file_msys_to_cygwin 330304007ebaSmrg 330404007ebaSmrg 330504007ebaSmrg# func_convert_file_nix_to_cygwin ARG 330604007ebaSmrg# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 330704007ebaSmrg# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 330804007ebaSmrg# in func_to_host_file_result. 330904007ebaSmrgfunc_convert_file_nix_to_cygwin () 331004007ebaSmrg{ 331105cf1079Smrg $debug_cmd 331205cf1079Smrg 331305cf1079Smrg func_to_host_file_result=$1 331404007ebaSmrg if test -n "$1"; then 331504007ebaSmrg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 331604007ebaSmrg func_convert_core_file_wine_to_w32 "$1" 331704007ebaSmrg func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 331805cf1079Smrg func_to_host_file_result=$func_cygpath_result 331904007ebaSmrg fi 332004007ebaSmrg func_convert_file_check "$1" "$func_to_host_file_result" 332104007ebaSmrg} 332204007ebaSmrg# end func_convert_file_nix_to_cygwin 332304007ebaSmrg 332404007ebaSmrg 332504007ebaSmrg############################################# 332604007ebaSmrg# $build to $host PATH CONVERSION FUNCTIONS # 332704007ebaSmrg############################################# 332805cf1079Smrg# invoked via '$to_host_path_cmd ARG' 332904007ebaSmrg# 333004007ebaSmrg# In each case, ARG is the path to be converted from $build to $host format. 333104007ebaSmrg# The result will be available in $func_to_host_path_result. 333204007ebaSmrg# 333304007ebaSmrg# Path separators are also converted from $build format to $host format. If 333404007ebaSmrg# ARG begins or ends with a path separator character, it is preserved (but 333504007ebaSmrg# converted to $host format) on output. 333604007ebaSmrg# 333704007ebaSmrg# All path conversion functions are named using the following convention: 333804007ebaSmrg# file name conversion function : func_convert_file_X_to_Y () 333904007ebaSmrg# path conversion function : func_convert_path_X_to_Y () 334004007ebaSmrg# where, for any given $build/$host combination the 'X_to_Y' value is the 334104007ebaSmrg# same. If conversion functions are added for new $build/$host combinations, 334204007ebaSmrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd 334304007ebaSmrg# will break. 334404007ebaSmrg 334504007ebaSmrg 334604007ebaSmrg# func_init_to_host_path_cmd 334704007ebaSmrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the 334804007ebaSmrg# appropriate value, based on the value of $to_host_file_cmd. 334904007ebaSmrgto_host_path_cmd= 335004007ebaSmrgfunc_init_to_host_path_cmd () 335104007ebaSmrg{ 335205cf1079Smrg $debug_cmd 335305cf1079Smrg 335404007ebaSmrg if test -z "$to_host_path_cmd"; then 335504007ebaSmrg func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 335605cf1079Smrg to_host_path_cmd=func_convert_path_$func_stripname_result 335704007ebaSmrg fi 335804007ebaSmrg} 335904007ebaSmrg 336004007ebaSmrg 336104007ebaSmrg# func_to_host_path ARG 336204007ebaSmrg# Converts the path ARG from $build format to $host format. Return result 336304007ebaSmrg# in func_to_host_path_result. 336404007ebaSmrgfunc_to_host_path () 336504007ebaSmrg{ 336605cf1079Smrg $debug_cmd 336705cf1079Smrg 336804007ebaSmrg func_init_to_host_path_cmd 336904007ebaSmrg $to_host_path_cmd "$1" 337004007ebaSmrg} 337104007ebaSmrg# end func_to_host_path 337204007ebaSmrg 337304007ebaSmrg 337404007ebaSmrg# func_convert_path_noop ARG 337504007ebaSmrg# Copy ARG to func_to_host_path_result. 337604007ebaSmrgfunc_convert_path_noop () 337704007ebaSmrg{ 337805cf1079Smrg func_to_host_path_result=$1 337904007ebaSmrg} 338004007ebaSmrg# end func_convert_path_noop 338104007ebaSmrg 338204007ebaSmrg 338304007ebaSmrg# func_convert_path_msys_to_w32 ARG 338404007ebaSmrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 338504007ebaSmrg# conversion to w32 is not available inside the cwrapper. Returns result in 338604007ebaSmrg# func_to_host_path_result. 338704007ebaSmrgfunc_convert_path_msys_to_w32 () 338804007ebaSmrg{ 338905cf1079Smrg $debug_cmd 339005cf1079Smrg 339105cf1079Smrg func_to_host_path_result=$1 339204007ebaSmrg if test -n "$1"; then 339304007ebaSmrg # Remove leading and trailing path separator characters from ARG. MSYS 339404007ebaSmrg # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 339504007ebaSmrg # and winepath ignores them completely. 339604007ebaSmrg func_stripname : : "$1" 339704007ebaSmrg func_to_host_path_tmp1=$func_stripname_result 339804007ebaSmrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 339905cf1079Smrg func_to_host_path_result=$func_convert_core_msys_to_w32_result 340004007ebaSmrg func_convert_path_check : ";" \ 340104007ebaSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 340204007ebaSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 340304007ebaSmrg fi 340404007ebaSmrg} 340504007ebaSmrg# end func_convert_path_msys_to_w32 340604007ebaSmrg 340704007ebaSmrg 340804007ebaSmrg# func_convert_path_cygwin_to_w32 ARG 340904007ebaSmrg# Convert path ARG from Cygwin to w32 format. Returns result in 341004007ebaSmrg# func_to_host_file_result. 341104007ebaSmrgfunc_convert_path_cygwin_to_w32 () 341204007ebaSmrg{ 341305cf1079Smrg $debug_cmd 341405cf1079Smrg 341505cf1079Smrg func_to_host_path_result=$1 341604007ebaSmrg if test -n "$1"; then 341704007ebaSmrg # See func_convert_path_msys_to_w32: 341804007ebaSmrg func_stripname : : "$1" 341904007ebaSmrg func_to_host_path_tmp1=$func_stripname_result 342004007ebaSmrg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 342104007ebaSmrg func_convert_path_check : ";" \ 342204007ebaSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 342304007ebaSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 342404007ebaSmrg fi 342504007ebaSmrg} 342604007ebaSmrg# end func_convert_path_cygwin_to_w32 342704007ebaSmrg 342804007ebaSmrg 342904007ebaSmrg# func_convert_path_nix_to_w32 ARG 343004007ebaSmrg# Convert path ARG from *nix to w32 format. Requires a wine environment and 343104007ebaSmrg# a working winepath. Returns result in func_to_host_file_result. 343204007ebaSmrgfunc_convert_path_nix_to_w32 () 343304007ebaSmrg{ 343405cf1079Smrg $debug_cmd 343505cf1079Smrg 343605cf1079Smrg func_to_host_path_result=$1 343704007ebaSmrg if test -n "$1"; then 343804007ebaSmrg # See func_convert_path_msys_to_w32: 343904007ebaSmrg func_stripname : : "$1" 344004007ebaSmrg func_to_host_path_tmp1=$func_stripname_result 344104007ebaSmrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 344205cf1079Smrg func_to_host_path_result=$func_convert_core_path_wine_to_w32_result 344304007ebaSmrg func_convert_path_check : ";" \ 344404007ebaSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 344504007ebaSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 344604007ebaSmrg fi 344704007ebaSmrg} 344804007ebaSmrg# end func_convert_path_nix_to_w32 344904007ebaSmrg 345004007ebaSmrg 345104007ebaSmrg# func_convert_path_msys_to_cygwin ARG 345204007ebaSmrg# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 345304007ebaSmrg# Returns result in func_to_host_file_result. 345404007ebaSmrgfunc_convert_path_msys_to_cygwin () 345504007ebaSmrg{ 345605cf1079Smrg $debug_cmd 345705cf1079Smrg 345805cf1079Smrg func_to_host_path_result=$1 345904007ebaSmrg if test -n "$1"; then 346004007ebaSmrg # See func_convert_path_msys_to_w32: 346104007ebaSmrg func_stripname : : "$1" 346204007ebaSmrg func_to_host_path_tmp1=$func_stripname_result 346304007ebaSmrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 346404007ebaSmrg func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 346505cf1079Smrg func_to_host_path_result=$func_cygpath_result 346604007ebaSmrg func_convert_path_check : : \ 346704007ebaSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 346804007ebaSmrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 346904007ebaSmrg fi 347004007ebaSmrg} 347104007ebaSmrg# end func_convert_path_msys_to_cygwin 347204007ebaSmrg 347304007ebaSmrg 347404007ebaSmrg# func_convert_path_nix_to_cygwin ARG 347504007ebaSmrg# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 347604007ebaSmrg# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 347704007ebaSmrg# func_to_host_file_result. 347804007ebaSmrgfunc_convert_path_nix_to_cygwin () 347904007ebaSmrg{ 348005cf1079Smrg $debug_cmd 348105cf1079Smrg 348205cf1079Smrg func_to_host_path_result=$1 348304007ebaSmrg if test -n "$1"; then 348404007ebaSmrg # Remove leading and trailing path separator characters from 348504007ebaSmrg # ARG. msys behavior is inconsistent here, cygpath turns them 348604007ebaSmrg # into '.;' and ';.', and winepath ignores them completely. 348704007ebaSmrg func_stripname : : "$1" 348804007ebaSmrg func_to_host_path_tmp1=$func_stripname_result 348904007ebaSmrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 349004007ebaSmrg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 349105cf1079Smrg func_to_host_path_result=$func_cygpath_result 349204007ebaSmrg func_convert_path_check : : \ 349304007ebaSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 349404007ebaSmrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 349504007ebaSmrg fi 349604007ebaSmrg} 349704007ebaSmrg# end func_convert_path_nix_to_cygwin 349804007ebaSmrg 349904007ebaSmrg 350005cf1079Smrg# func_dll_def_p FILE 350105cf1079Smrg# True iff FILE is a Windows DLL '.def' file. 350205cf1079Smrg# Keep in sync with _LT_DLL_DEF_P in libtool.m4 350305cf1079Smrgfunc_dll_def_p () 350405cf1079Smrg{ 350505cf1079Smrg $debug_cmd 350605cf1079Smrg 350705cf1079Smrg func_dll_def_p_tmp=`$SED -n \ 350805cf1079Smrg -e 's/^[ ]*//' \ 350905cf1079Smrg -e '/^\(;.*\)*$/d' \ 351005cf1079Smrg -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ 351105cf1079Smrg -e q \ 351205cf1079Smrg "$1"` 351305cf1079Smrg test DEF = "$func_dll_def_p_tmp" 351405cf1079Smrg} 351505cf1079Smrg 351605cf1079Smrg 351704007ebaSmrg# func_mode_compile arg... 351804007ebaSmrgfunc_mode_compile () 351904007ebaSmrg{ 352005cf1079Smrg $debug_cmd 352105cf1079Smrg 352204007ebaSmrg # Get the compilation command and the source file. 352304007ebaSmrg base_compile= 352405cf1079Smrg srcfile=$nonopt # always keep a non-empty value in "srcfile" 352504007ebaSmrg suppress_opt=yes 352604007ebaSmrg suppress_output= 352704007ebaSmrg arg_mode=normal 352804007ebaSmrg libobj= 352904007ebaSmrg later= 353004007ebaSmrg pie_flag= 353104007ebaSmrg 353204007ebaSmrg for arg 353304007ebaSmrg do 353404007ebaSmrg case $arg_mode in 353504007ebaSmrg arg ) 353604007ebaSmrg # do not "continue". Instead, add this to base_compile 353705cf1079Smrg lastarg=$arg 353804007ebaSmrg arg_mode=normal 353904007ebaSmrg ;; 354004007ebaSmrg 354104007ebaSmrg target ) 354205cf1079Smrg libobj=$arg 354304007ebaSmrg arg_mode=normal 354404007ebaSmrg continue 354504007ebaSmrg ;; 354604007ebaSmrg 354704007ebaSmrg normal ) 354804007ebaSmrg # Accept any command-line options. 354904007ebaSmrg case $arg in 355004007ebaSmrg -o) 355104007ebaSmrg test -n "$libobj" && \ 355205cf1079Smrg func_fatal_error "you cannot specify '-o' more than once" 355304007ebaSmrg arg_mode=target 355404007ebaSmrg continue 355504007ebaSmrg ;; 355604007ebaSmrg 355704007ebaSmrg -pie | -fpie | -fPIE) 355804007ebaSmrg func_append pie_flag " $arg" 355904007ebaSmrg continue 356004007ebaSmrg ;; 356104007ebaSmrg 356204007ebaSmrg -shared | -static | -prefer-pic | -prefer-non-pic) 356304007ebaSmrg func_append later " $arg" 356404007ebaSmrg continue 356504007ebaSmrg ;; 356604007ebaSmrg 356704007ebaSmrg -no-suppress) 356804007ebaSmrg suppress_opt=no 356904007ebaSmrg continue 357004007ebaSmrg ;; 357104007ebaSmrg 357204007ebaSmrg -Xcompiler) 357304007ebaSmrg arg_mode=arg # the next one goes into the "base_compile" arg list 357404007ebaSmrg continue # The current "srcfile" will either be retained or 357504007ebaSmrg ;; # replaced later. I would guess that would be a bug. 357604007ebaSmrg 357704007ebaSmrg -Wc,*) 357804007ebaSmrg func_stripname '-Wc,' '' "$arg" 357904007ebaSmrg args=$func_stripname_result 358004007ebaSmrg lastarg= 358105cf1079Smrg save_ifs=$IFS; IFS=, 358204007ebaSmrg for arg in $args; do 358305cf1079Smrg IFS=$save_ifs 358404007ebaSmrg func_append_quoted lastarg "$arg" 358504007ebaSmrg done 358605cf1079Smrg IFS=$save_ifs 358704007ebaSmrg func_stripname ' ' '' "$lastarg" 358804007ebaSmrg lastarg=$func_stripname_result 358904007ebaSmrg 359004007ebaSmrg # Add the arguments to base_compile. 359104007ebaSmrg func_append base_compile " $lastarg" 359204007ebaSmrg continue 359304007ebaSmrg ;; 359404007ebaSmrg 359504007ebaSmrg *) 359604007ebaSmrg # Accept the current argument as the source file. 359704007ebaSmrg # The previous "srcfile" becomes the current argument. 359804007ebaSmrg # 359905cf1079Smrg lastarg=$srcfile 360005cf1079Smrg srcfile=$arg 360104007ebaSmrg ;; 360204007ebaSmrg esac # case $arg 360304007ebaSmrg ;; 360404007ebaSmrg esac # case $arg_mode 360504007ebaSmrg 360604007ebaSmrg # Aesthetically quote the previous argument. 360704007ebaSmrg func_append_quoted base_compile "$lastarg" 360804007ebaSmrg done # for arg 360904007ebaSmrg 361004007ebaSmrg case $arg_mode in 361104007ebaSmrg arg) 361204007ebaSmrg func_fatal_error "you must specify an argument for -Xcompile" 361304007ebaSmrg ;; 361404007ebaSmrg target) 361505cf1079Smrg func_fatal_error "you must specify a target with '-o'" 361604007ebaSmrg ;; 361704007ebaSmrg *) 361804007ebaSmrg # Get the name of the library object. 361904007ebaSmrg test -z "$libobj" && { 362004007ebaSmrg func_basename "$srcfile" 362105cf1079Smrg libobj=$func_basename_result 362204007ebaSmrg } 362304007ebaSmrg ;; 362404007ebaSmrg esac 362504007ebaSmrg 362604007ebaSmrg # Recognize several different file suffixes. 362704007ebaSmrg # If the user specifies -o file.o, it is replaced with file.lo 362804007ebaSmrg case $libobj in 362904007ebaSmrg *.[cCFSifmso] | \ 363004007ebaSmrg *.ada | *.adb | *.ads | *.asm | \ 363104007ebaSmrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 363204007ebaSmrg *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 363304007ebaSmrg func_xform "$libobj" 363404007ebaSmrg libobj=$func_xform_result 363504007ebaSmrg ;; 363604007ebaSmrg esac 363704007ebaSmrg 363804007ebaSmrg case $libobj in 363904007ebaSmrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 364004007ebaSmrg *) 364105cf1079Smrg func_fatal_error "cannot determine name of library object from '$libobj'" 364204007ebaSmrg ;; 364304007ebaSmrg esac 364404007ebaSmrg 364504007ebaSmrg func_infer_tag $base_compile 364604007ebaSmrg 364704007ebaSmrg for arg in $later; do 364804007ebaSmrg case $arg in 364904007ebaSmrg -shared) 365005cf1079Smrg test yes = "$build_libtool_libs" \ 365105cf1079Smrg || func_fatal_configuration "cannot build a shared library" 365204007ebaSmrg build_old_libs=no 365304007ebaSmrg continue 365404007ebaSmrg ;; 365504007ebaSmrg 365604007ebaSmrg -static) 365704007ebaSmrg build_libtool_libs=no 365804007ebaSmrg build_old_libs=yes 365904007ebaSmrg continue 366004007ebaSmrg ;; 366104007ebaSmrg 366204007ebaSmrg -prefer-pic) 366304007ebaSmrg pic_mode=yes 366404007ebaSmrg continue 366504007ebaSmrg ;; 366604007ebaSmrg 366704007ebaSmrg -prefer-non-pic) 366804007ebaSmrg pic_mode=no 366904007ebaSmrg continue 367004007ebaSmrg ;; 367104007ebaSmrg esac 367204007ebaSmrg done 367304007ebaSmrg 367479d5fcd7Smrg func_quote_arg pretty "$libobj" 367579d5fcd7Smrg test "X$libobj" != "X$func_quote_arg_result" \ 367604007ebaSmrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 367705cf1079Smrg && func_warning "libobj name '$libobj' may not contain shell special characters." 367804007ebaSmrg func_dirname_and_basename "$obj" "/" "" 367905cf1079Smrg objname=$func_basename_result 368005cf1079Smrg xdir=$func_dirname_result 368105cf1079Smrg lobj=$xdir$objdir/$objname 368204007ebaSmrg 368304007ebaSmrg test -z "$base_compile" && \ 368404007ebaSmrg func_fatal_help "you must specify a compilation command" 368504007ebaSmrg 368604007ebaSmrg # Delete any leftover library objects. 368705cf1079Smrg if test yes = "$build_old_libs"; then 368804007ebaSmrg removelist="$obj $lobj $libobj ${libobj}T" 368904007ebaSmrg else 369004007ebaSmrg removelist="$lobj $libobj ${libobj}T" 369104007ebaSmrg fi 369204007ebaSmrg 369304007ebaSmrg # On Cygwin there's no "real" PIC flag so we must build both object types 369404007ebaSmrg case $host_os in 369504007ebaSmrg cygwin* | mingw* | pw32* | os2* | cegcc*) 369604007ebaSmrg pic_mode=default 369704007ebaSmrg ;; 369804007ebaSmrg esac 369905cf1079Smrg if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then 370004007ebaSmrg # non-PIC code in shared libraries is not supported 370104007ebaSmrg pic_mode=default 370204007ebaSmrg fi 370304007ebaSmrg 370404007ebaSmrg # Calculate the filename of the output object if compiler does 370504007ebaSmrg # not support -o with -c 370605cf1079Smrg if test no = "$compiler_c_o"; then 370705cf1079Smrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext 370805cf1079Smrg lockfile=$output_obj.lock 370904007ebaSmrg else 371004007ebaSmrg output_obj= 371104007ebaSmrg need_locks=no 371204007ebaSmrg lockfile= 371304007ebaSmrg fi 371404007ebaSmrg 371504007ebaSmrg # Lock this critical section if it is needed 371604007ebaSmrg # We use this script file to make the link, it avoids creating a new file 371705cf1079Smrg if test yes = "$need_locks"; then 371804007ebaSmrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 371904007ebaSmrg func_echo "Waiting for $lockfile to be removed" 372004007ebaSmrg sleep 2 372104007ebaSmrg done 372205cf1079Smrg elif test warn = "$need_locks"; then 372304007ebaSmrg if test -f "$lockfile"; then 372404007ebaSmrg $ECHO "\ 372504007ebaSmrg*** ERROR, $lockfile exists and contains: 372604007ebaSmrg`cat $lockfile 2>/dev/null` 372704007ebaSmrg 372804007ebaSmrgThis indicates that another process is trying to use the same 372904007ebaSmrgtemporary object file, and libtool could not work around it because 373005cf1079Smrgyour compiler does not support '-c' and '-o' together. If you 373104007ebaSmrgrepeat this compilation, it may succeed, by chance, but you had better 373204007ebaSmrgavoid parallel builds (make -j) in this platform, or get a better 373304007ebaSmrgcompiler." 373404007ebaSmrg 373504007ebaSmrg $opt_dry_run || $RM $removelist 373604007ebaSmrg exit $EXIT_FAILURE 373704007ebaSmrg fi 373804007ebaSmrg func_append removelist " $output_obj" 373904007ebaSmrg $ECHO "$srcfile" > "$lockfile" 374004007ebaSmrg fi 374104007ebaSmrg 374204007ebaSmrg $opt_dry_run || $RM $removelist 374304007ebaSmrg func_append removelist " $lockfile" 374404007ebaSmrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 374504007ebaSmrg 374604007ebaSmrg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 374704007ebaSmrg srcfile=$func_to_tool_file_result 374879d5fcd7Smrg func_quote_arg pretty "$srcfile" 374979d5fcd7Smrg qsrcfile=$func_quote_arg_result 375004007ebaSmrg 375104007ebaSmrg # Only build a PIC object if we are building libtool libraries. 375205cf1079Smrg if test yes = "$build_libtool_libs"; then 375304007ebaSmrg # Without this assignment, base_compile gets emptied. 375404007ebaSmrg fbsd_hideous_sh_bug=$base_compile 375504007ebaSmrg 375605cf1079Smrg if test no != "$pic_mode"; then 375704007ebaSmrg command="$base_compile $qsrcfile $pic_flag" 375804007ebaSmrg else 375904007ebaSmrg # Don't build PIC code 376004007ebaSmrg command="$base_compile $qsrcfile" 376104007ebaSmrg fi 376204007ebaSmrg 376304007ebaSmrg func_mkdir_p "$xdir$objdir" 376404007ebaSmrg 376504007ebaSmrg if test -z "$output_obj"; then 376604007ebaSmrg # Place PIC objects in $objdir 376704007ebaSmrg func_append command " -o $lobj" 376804007ebaSmrg fi 376904007ebaSmrg 377004007ebaSmrg func_show_eval_locale "$command" \ 377104007ebaSmrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 377204007ebaSmrg 377305cf1079Smrg if test warn = "$need_locks" && 377404007ebaSmrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 377504007ebaSmrg $ECHO "\ 377604007ebaSmrg*** ERROR, $lockfile contains: 377704007ebaSmrg`cat $lockfile 2>/dev/null` 377804007ebaSmrg 377904007ebaSmrgbut it should contain: 378004007ebaSmrg$srcfile 378104007ebaSmrg 378204007ebaSmrgThis indicates that another process is trying to use the same 378304007ebaSmrgtemporary object file, and libtool could not work around it because 378405cf1079Smrgyour compiler does not support '-c' and '-o' together. If you 378504007ebaSmrgrepeat this compilation, it may succeed, by chance, but you had better 378604007ebaSmrgavoid parallel builds (make -j) in this platform, or get a better 378704007ebaSmrgcompiler." 378804007ebaSmrg 378904007ebaSmrg $opt_dry_run || $RM $removelist 379004007ebaSmrg exit $EXIT_FAILURE 379104007ebaSmrg fi 379204007ebaSmrg 379304007ebaSmrg # Just move the object if needed, then go on to compile the next one 379404007ebaSmrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 379504007ebaSmrg func_show_eval '$MV "$output_obj" "$lobj"' \ 379604007ebaSmrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 379704007ebaSmrg fi 379804007ebaSmrg 379904007ebaSmrg # Allow error messages only from the first compilation. 380005cf1079Smrg if test yes = "$suppress_opt"; then 380104007ebaSmrg suppress_output=' >/dev/null 2>&1' 380204007ebaSmrg fi 380304007ebaSmrg fi 380404007ebaSmrg 380504007ebaSmrg # Only build a position-dependent object if we build old libraries. 380605cf1079Smrg if test yes = "$build_old_libs"; then 380705cf1079Smrg if test yes != "$pic_mode"; then 380804007ebaSmrg # Don't build PIC code 380904007ebaSmrg command="$base_compile $qsrcfile$pie_flag" 381004007ebaSmrg else 381104007ebaSmrg command="$base_compile $qsrcfile $pic_flag" 381204007ebaSmrg fi 381305cf1079Smrg if test yes = "$compiler_c_o"; then 381404007ebaSmrg func_append command " -o $obj" 381504007ebaSmrg fi 381604007ebaSmrg 381704007ebaSmrg # Suppress compiler output if we already did a PIC compilation. 381804007ebaSmrg func_append command "$suppress_output" 381904007ebaSmrg func_show_eval_locale "$command" \ 382004007ebaSmrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 382104007ebaSmrg 382205cf1079Smrg if test warn = "$need_locks" && 382304007ebaSmrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 382404007ebaSmrg $ECHO "\ 382504007ebaSmrg*** ERROR, $lockfile contains: 382604007ebaSmrg`cat $lockfile 2>/dev/null` 382704007ebaSmrg 382804007ebaSmrgbut it should contain: 382904007ebaSmrg$srcfile 383004007ebaSmrg 383104007ebaSmrgThis indicates that another process is trying to use the same 383204007ebaSmrgtemporary object file, and libtool could not work around it because 383305cf1079Smrgyour compiler does not support '-c' and '-o' together. If you 383404007ebaSmrgrepeat this compilation, it may succeed, by chance, but you had better 383504007ebaSmrgavoid parallel builds (make -j) in this platform, or get a better 383604007ebaSmrgcompiler." 383704007ebaSmrg 383804007ebaSmrg $opt_dry_run || $RM $removelist 383904007ebaSmrg exit $EXIT_FAILURE 384004007ebaSmrg fi 384104007ebaSmrg 384204007ebaSmrg # Just move the object if needed 384304007ebaSmrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 384404007ebaSmrg func_show_eval '$MV "$output_obj" "$obj"' \ 384504007ebaSmrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 384604007ebaSmrg fi 384704007ebaSmrg fi 384804007ebaSmrg 384904007ebaSmrg $opt_dry_run || { 385004007ebaSmrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 385104007ebaSmrg 385204007ebaSmrg # Unlock the critical section if it was locked 385305cf1079Smrg if test no != "$need_locks"; then 385404007ebaSmrg removelist=$lockfile 385504007ebaSmrg $RM "$lockfile" 385604007ebaSmrg fi 385704007ebaSmrg } 385804007ebaSmrg 385904007ebaSmrg exit $EXIT_SUCCESS 386004007ebaSmrg} 386104007ebaSmrg 386204007ebaSmrg$opt_help || { 386305cf1079Smrg test compile = "$opt_mode" && func_mode_compile ${1+"$@"} 386404007ebaSmrg} 386504007ebaSmrg 386604007ebaSmrgfunc_mode_help () 386704007ebaSmrg{ 386804007ebaSmrg # We need to display help for each of the modes. 386904007ebaSmrg case $opt_mode in 387004007ebaSmrg "") 387104007ebaSmrg # Generic help is extracted from the usage comments 387204007ebaSmrg # at the start of this file. 387304007ebaSmrg func_help 387404007ebaSmrg ;; 387504007ebaSmrg 387604007ebaSmrg clean) 387704007ebaSmrg $ECHO \ 387804007ebaSmrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 387904007ebaSmrg 388004007ebaSmrgRemove files from the build directory. 388104007ebaSmrg 388204007ebaSmrgRM is the name of the program to use to delete files associated with each FILE 388305cf1079Smrg(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 388404007ebaSmrgto RM. 388504007ebaSmrg 388604007ebaSmrgIf FILE is a libtool library, object or program, all the files associated 388704007ebaSmrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 388804007ebaSmrg ;; 388904007ebaSmrg 389004007ebaSmrg compile) 389104007ebaSmrg $ECHO \ 389204007ebaSmrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 389304007ebaSmrg 389404007ebaSmrgCompile a source file into a libtool library object. 389504007ebaSmrg 389604007ebaSmrgThis mode accepts the following additional options: 389704007ebaSmrg 389804007ebaSmrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 389904007ebaSmrg -no-suppress do not suppress compiler output for multiple passes 390004007ebaSmrg -prefer-pic try to build PIC objects only 390104007ebaSmrg -prefer-non-pic try to build non-PIC objects only 390205cf1079Smrg -shared do not build a '.o' file suitable for static linking 390305cf1079Smrg -static only build a '.o' file suitable for static linking 390479d5fcd7Smrg -Wc,FLAG 390579d5fcd7Smrg -Xcompiler FLAG pass FLAG directly to the compiler 390604007ebaSmrg 390705cf1079SmrgCOMPILE-COMMAND is a command to be used in creating a 'standard' object file 390804007ebaSmrgfrom the given SOURCEFILE. 390904007ebaSmrg 391004007ebaSmrgThe output file name is determined by removing the directory component from 391105cf1079SmrgSOURCEFILE, then substituting the C source code suffix '.c' with the 391205cf1079Smrglibrary object suffix, '.lo'." 391304007ebaSmrg ;; 391404007ebaSmrg 391504007ebaSmrg execute) 391604007ebaSmrg $ECHO \ 391704007ebaSmrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 391804007ebaSmrg 391904007ebaSmrgAutomatically set library path, then run a program. 392004007ebaSmrg 392104007ebaSmrgThis mode accepts the following additional options: 392204007ebaSmrg 392304007ebaSmrg -dlopen FILE add the directory containing FILE to the library path 392404007ebaSmrg 392505cf1079SmrgThis mode sets the library path environment variable according to '-dlopen' 392604007ebaSmrgflags. 392704007ebaSmrg 392804007ebaSmrgIf any of the ARGS are libtool executable wrappers, then they are translated 392904007ebaSmrginto their corresponding uninstalled binary, and any of their required library 393004007ebaSmrgdirectories are added to the library path. 393104007ebaSmrg 393204007ebaSmrgThen, COMMAND is executed, with ARGS as arguments." 393304007ebaSmrg ;; 393404007ebaSmrg 393504007ebaSmrg finish) 393604007ebaSmrg $ECHO \ 393704007ebaSmrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 393804007ebaSmrg 393904007ebaSmrgComplete the installation of libtool libraries. 394004007ebaSmrg 394104007ebaSmrgEach LIBDIR is a directory that contains libtool libraries. 394204007ebaSmrg 394304007ebaSmrgThe commands that this mode executes may require superuser privileges. Use 394405cf1079Smrgthe '--dry-run' option if you just want to see what would be executed." 394504007ebaSmrg ;; 394604007ebaSmrg 394704007ebaSmrg install) 394804007ebaSmrg $ECHO \ 394904007ebaSmrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 395004007ebaSmrg 395104007ebaSmrgInstall executables or libraries. 395204007ebaSmrg 395304007ebaSmrgINSTALL-COMMAND is the installation command. The first component should be 395405cf1079Smrgeither the 'install' or 'cp' program. 395504007ebaSmrg 395604007ebaSmrgThe following components of INSTALL-COMMAND are treated specially: 395704007ebaSmrg 395804007ebaSmrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 395904007ebaSmrg 396004007ebaSmrgThe rest of the components are interpreted as arguments to that command (only 396104007ebaSmrgBSD-compatible install options are recognized)." 396204007ebaSmrg ;; 396304007ebaSmrg 396404007ebaSmrg link) 396504007ebaSmrg $ECHO \ 396604007ebaSmrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 396704007ebaSmrg 396804007ebaSmrgLink object files or libraries together to form another library, or to 396904007ebaSmrgcreate an executable program. 397004007ebaSmrg 397104007ebaSmrgLINK-COMMAND is a command using the C compiler that you would use to create 397204007ebaSmrga program from several object files. 397304007ebaSmrg 397404007ebaSmrgThe following components of LINK-COMMAND are treated specially: 397504007ebaSmrg 397604007ebaSmrg -all-static do not do any dynamic linking at all 397704007ebaSmrg -avoid-version do not add a version suffix if possible 397804007ebaSmrg -bindir BINDIR specify path to binaries directory (for systems where 397904007ebaSmrg libraries must be found in the PATH setting at runtime) 398005cf1079Smrg -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime 398104007ebaSmrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 398204007ebaSmrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 398304007ebaSmrg -export-symbols SYMFILE 398404007ebaSmrg try to export only the symbols listed in SYMFILE 398504007ebaSmrg -export-symbols-regex REGEX 398604007ebaSmrg try to export only the symbols matching REGEX 398704007ebaSmrg -LLIBDIR search LIBDIR for required installed libraries 398804007ebaSmrg -lNAME OUTPUT-FILE requires the installed library libNAME 398904007ebaSmrg -module build a library that can dlopened 399004007ebaSmrg -no-fast-install disable the fast-install mode 399104007ebaSmrg -no-install link a not-installable executable 399204007ebaSmrg -no-undefined declare that a library does not refer to external symbols 399304007ebaSmrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 399405cf1079Smrg -objectlist FILE use a list of object files found in FILE to specify objects 399505cf1079Smrg -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) 399604007ebaSmrg -precious-files-regex REGEX 399704007ebaSmrg don't remove output files matching REGEX 399804007ebaSmrg -release RELEASE specify package release information 399904007ebaSmrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 400004007ebaSmrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 400104007ebaSmrg -shared only do dynamic linking of libtool libraries 400204007ebaSmrg -shrext SUFFIX override the standard shared library file extension 400304007ebaSmrg -static do not do any dynamic linking of uninstalled libtool libraries 400404007ebaSmrg -static-libtool-libs 400504007ebaSmrg do not do any dynamic linking of libtool libraries 400604007ebaSmrg -version-info CURRENT[:REVISION[:AGE]] 400704007ebaSmrg specify library version info [each variable defaults to 0] 400804007ebaSmrg -weak LIBNAME declare that the target provides the LIBNAME interface 400904007ebaSmrg -Wc,FLAG 401004007ebaSmrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 401179d5fcd7Smrg -Wa,FLAG 401279d5fcd7Smrg -Xassembler FLAG pass linker-specific FLAG directly to the assembler 401304007ebaSmrg -Wl,FLAG 401404007ebaSmrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 401504007ebaSmrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 401604007ebaSmrg 401705cf1079SmrgAll other options (arguments beginning with '-') are ignored. 401804007ebaSmrg 401905cf1079SmrgEvery other argument is treated as a filename. Files ending in '.la' are 402004007ebaSmrgtreated as uninstalled libtool libraries, other files are standard or library 402104007ebaSmrgobject files. 402204007ebaSmrg 402305cf1079SmrgIf the OUTPUT-FILE ends in '.la', then a libtool library is created, 402405cf1079Smrgonly library objects ('.lo' files) may be specified, and '-rpath' is 402504007ebaSmrgrequired, except when creating a convenience library. 402604007ebaSmrg 402705cf1079SmrgIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created 402805cf1079Smrgusing 'ar' and 'ranlib', or on Windows using 'lib'. 402904007ebaSmrg 403005cf1079SmrgIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file 403104007ebaSmrgis created, otherwise an executable program is created." 403204007ebaSmrg ;; 403304007ebaSmrg 403404007ebaSmrg uninstall) 403504007ebaSmrg $ECHO \ 403604007ebaSmrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 403704007ebaSmrg 403804007ebaSmrgRemove libraries from an installation directory. 403904007ebaSmrg 404004007ebaSmrgRM is the name of the program to use to delete files associated with each FILE 404105cf1079Smrg(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 404204007ebaSmrgto RM. 404304007ebaSmrg 404404007ebaSmrgIf FILE is a libtool library, all the files associated with it are deleted. 404504007ebaSmrgOtherwise, only FILE itself is deleted using RM." 404604007ebaSmrg ;; 404704007ebaSmrg 404804007ebaSmrg *) 404905cf1079Smrg func_fatal_help "invalid operation mode '$opt_mode'" 405004007ebaSmrg ;; 405104007ebaSmrg esac 405204007ebaSmrg 405304007ebaSmrg echo 405405cf1079Smrg $ECHO "Try '$progname --help' for more information about other modes." 405504007ebaSmrg} 405604007ebaSmrg 405704007ebaSmrg# Now that we've collected a possible --mode arg, show help if necessary 405804007ebaSmrgif $opt_help; then 405905cf1079Smrg if test : = "$opt_help"; then 406004007ebaSmrg func_mode_help 406104007ebaSmrg else 406204007ebaSmrg { 406304007ebaSmrg func_help noexit 406404007ebaSmrg for opt_mode in compile link execute install finish uninstall clean; do 406504007ebaSmrg func_mode_help 406604007ebaSmrg done 406705cf1079Smrg } | $SED -n '1p; 2,$s/^Usage:/ or: /p' 406804007ebaSmrg { 406904007ebaSmrg func_help noexit 407004007ebaSmrg for opt_mode in compile link execute install finish uninstall clean; do 407104007ebaSmrg echo 407204007ebaSmrg func_mode_help 407304007ebaSmrg done 407404007ebaSmrg } | 407505cf1079Smrg $SED '1d 407604007ebaSmrg /^When reporting/,/^Report/{ 407704007ebaSmrg H 407804007ebaSmrg d 407904007ebaSmrg } 408004007ebaSmrg $x 408104007ebaSmrg /information about other modes/d 408204007ebaSmrg /more detailed .*MODE/d 408304007ebaSmrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 408404007ebaSmrg fi 408504007ebaSmrg exit $? 408604007ebaSmrgfi 408704007ebaSmrg 408804007ebaSmrg 408904007ebaSmrg# func_mode_execute arg... 409004007ebaSmrgfunc_mode_execute () 409104007ebaSmrg{ 409205cf1079Smrg $debug_cmd 409305cf1079Smrg 409404007ebaSmrg # The first argument is the command name. 409505cf1079Smrg cmd=$nonopt 409604007ebaSmrg test -z "$cmd" && \ 409704007ebaSmrg func_fatal_help "you must specify a COMMAND" 409804007ebaSmrg 409904007ebaSmrg # Handle -dlopen flags immediately. 410004007ebaSmrg for file in $opt_dlopen; do 410104007ebaSmrg test -f "$file" \ 410205cf1079Smrg || func_fatal_help "'$file' is not a file" 410304007ebaSmrg 410404007ebaSmrg dir= 410504007ebaSmrg case $file in 410604007ebaSmrg *.la) 410704007ebaSmrg func_resolve_sysroot "$file" 410804007ebaSmrg file=$func_resolve_sysroot_result 410904007ebaSmrg 411004007ebaSmrg # Check to see that this really is a libtool archive. 411104007ebaSmrg func_lalib_unsafe_p "$file" \ 411205cf1079Smrg || func_fatal_help "'$lib' is not a valid libtool archive" 411304007ebaSmrg 411404007ebaSmrg # Read the libtool library. 411504007ebaSmrg dlname= 411604007ebaSmrg library_names= 411704007ebaSmrg func_source "$file" 411804007ebaSmrg 411904007ebaSmrg # Skip this library if it cannot be dlopened. 412004007ebaSmrg if test -z "$dlname"; then 412104007ebaSmrg # Warn if it was a shared library. 412204007ebaSmrg test -n "$library_names" && \ 412305cf1079Smrg func_warning "'$file' was not linked with '-export-dynamic'" 412404007ebaSmrg continue 412504007ebaSmrg fi 412604007ebaSmrg 412704007ebaSmrg func_dirname "$file" "" "." 412805cf1079Smrg dir=$func_dirname_result 412904007ebaSmrg 413004007ebaSmrg if test -f "$dir/$objdir/$dlname"; then 413104007ebaSmrg func_append dir "/$objdir" 413204007ebaSmrg else 413304007ebaSmrg if test ! -f "$dir/$dlname"; then 413405cf1079Smrg func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" 413504007ebaSmrg fi 413604007ebaSmrg fi 413704007ebaSmrg ;; 413804007ebaSmrg 413904007ebaSmrg *.lo) 414004007ebaSmrg # Just add the directory containing the .lo file. 414104007ebaSmrg func_dirname "$file" "" "." 414205cf1079Smrg dir=$func_dirname_result 414304007ebaSmrg ;; 414404007ebaSmrg 414504007ebaSmrg *) 414605cf1079Smrg func_warning "'-dlopen' is ignored for non-libtool libraries and objects" 414704007ebaSmrg continue 414804007ebaSmrg ;; 414904007ebaSmrg esac 415004007ebaSmrg 415104007ebaSmrg # Get the absolute pathname. 415204007ebaSmrg absdir=`cd "$dir" && pwd` 415305cf1079Smrg test -n "$absdir" && dir=$absdir 415404007ebaSmrg 415504007ebaSmrg # Now add the directory to shlibpath_var. 415604007ebaSmrg if eval "test -z \"\$$shlibpath_var\""; then 415704007ebaSmrg eval "$shlibpath_var=\"\$dir\"" 415804007ebaSmrg else 415904007ebaSmrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 416004007ebaSmrg fi 416104007ebaSmrg done 416204007ebaSmrg 416304007ebaSmrg # This variable tells wrapper scripts just to set shlibpath_var 416404007ebaSmrg # rather than running their programs. 416505cf1079Smrg libtool_execute_magic=$magic 416604007ebaSmrg 416704007ebaSmrg # Check if any of the arguments is a wrapper script. 416804007ebaSmrg args= 416904007ebaSmrg for file 417004007ebaSmrg do 417104007ebaSmrg case $file in 417204007ebaSmrg -* | *.la | *.lo ) ;; 417304007ebaSmrg *) 417404007ebaSmrg # Do a test to see if this is really a libtool program. 417504007ebaSmrg if func_ltwrapper_script_p "$file"; then 417604007ebaSmrg func_source "$file" 417704007ebaSmrg # Transform arg to wrapped name. 417805cf1079Smrg file=$progdir/$program 417904007ebaSmrg elif func_ltwrapper_executable_p "$file"; then 418004007ebaSmrg func_ltwrapper_scriptname "$file" 418104007ebaSmrg func_source "$func_ltwrapper_scriptname_result" 418204007ebaSmrg # Transform arg to wrapped name. 418305cf1079Smrg file=$progdir/$program 418404007ebaSmrg fi 418504007ebaSmrg ;; 418604007ebaSmrg esac 418704007ebaSmrg # Quote arguments (to preserve shell metacharacters). 418804007ebaSmrg func_append_quoted args "$file" 418904007ebaSmrg done 419004007ebaSmrg 419105cf1079Smrg if $opt_dry_run; then 419205cf1079Smrg # Display what would be done. 419305cf1079Smrg if test -n "$shlibpath_var"; then 419405cf1079Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 419505cf1079Smrg echo "export $shlibpath_var" 419605cf1079Smrg fi 419705cf1079Smrg $ECHO "$cmd$args" 419805cf1079Smrg exit $EXIT_SUCCESS 419905cf1079Smrg else 420004007ebaSmrg if test -n "$shlibpath_var"; then 420104007ebaSmrg # Export the shlibpath_var. 420204007ebaSmrg eval "export $shlibpath_var" 420304007ebaSmrg fi 420404007ebaSmrg 420504007ebaSmrg # Restore saved environment variables 420604007ebaSmrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 420704007ebaSmrg do 420804007ebaSmrg eval "if test \"\${save_$lt_var+set}\" = set; then 420904007ebaSmrg $lt_var=\$save_$lt_var; export $lt_var 421004007ebaSmrg else 421104007ebaSmrg $lt_unset $lt_var 421204007ebaSmrg fi" 421304007ebaSmrg done 421404007ebaSmrg 421504007ebaSmrg # Now prepare to actually exec the command. 421605cf1079Smrg exec_cmd=\$cmd$args 421704007ebaSmrg fi 421804007ebaSmrg} 421904007ebaSmrg 422005cf1079Smrgtest execute = "$opt_mode" && func_mode_execute ${1+"$@"} 422104007ebaSmrg 422204007ebaSmrg 422304007ebaSmrg# func_mode_finish arg... 422404007ebaSmrgfunc_mode_finish () 422504007ebaSmrg{ 422605cf1079Smrg $debug_cmd 422705cf1079Smrg 422804007ebaSmrg libs= 422904007ebaSmrg libdirs= 423004007ebaSmrg admincmds= 423104007ebaSmrg 423204007ebaSmrg for opt in "$nonopt" ${1+"$@"} 423304007ebaSmrg do 423404007ebaSmrg if test -d "$opt"; then 423504007ebaSmrg func_append libdirs " $opt" 423604007ebaSmrg 423704007ebaSmrg elif test -f "$opt"; then 423804007ebaSmrg if func_lalib_unsafe_p "$opt"; then 423904007ebaSmrg func_append libs " $opt" 424004007ebaSmrg else 424105cf1079Smrg func_warning "'$opt' is not a valid libtool archive" 424204007ebaSmrg fi 424304007ebaSmrg 424404007ebaSmrg else 424505cf1079Smrg func_fatal_error "invalid argument '$opt'" 424604007ebaSmrg fi 424704007ebaSmrg done 424804007ebaSmrg 424904007ebaSmrg if test -n "$libs"; then 425004007ebaSmrg if test -n "$lt_sysroot"; then 425104007ebaSmrg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 425204007ebaSmrg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 425304007ebaSmrg else 425404007ebaSmrg sysroot_cmd= 425504007ebaSmrg fi 425604007ebaSmrg 425704007ebaSmrg # Remove sysroot references 425804007ebaSmrg if $opt_dry_run; then 425904007ebaSmrg for lib in $libs; do 426005cf1079Smrg echo "removing references to $lt_sysroot and '=' prefixes from $lib" 426104007ebaSmrg done 426204007ebaSmrg else 426304007ebaSmrg tmpdir=`func_mktempdir` 426404007ebaSmrg for lib in $libs; do 426505cf1079Smrg $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 426604007ebaSmrg > $tmpdir/tmp-la 426704007ebaSmrg mv -f $tmpdir/tmp-la $lib 426804007ebaSmrg done 426904007ebaSmrg ${RM}r "$tmpdir" 427004007ebaSmrg fi 427104007ebaSmrg fi 427204007ebaSmrg 427304007ebaSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 427404007ebaSmrg for libdir in $libdirs; do 427504007ebaSmrg if test -n "$finish_cmds"; then 427604007ebaSmrg # Do each command in the finish commands. 427704007ebaSmrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 427804007ebaSmrg'"$cmd"'"' 427904007ebaSmrg fi 428004007ebaSmrg if test -n "$finish_eval"; then 428104007ebaSmrg # Do the single finish_eval. 428204007ebaSmrg eval cmds=\"$finish_eval\" 428304007ebaSmrg $opt_dry_run || eval "$cmds" || func_append admincmds " 428404007ebaSmrg $cmds" 428504007ebaSmrg fi 428604007ebaSmrg done 428704007ebaSmrg fi 428804007ebaSmrg 428904007ebaSmrg # Exit here if they wanted silent mode. 429005cf1079Smrg $opt_quiet && exit $EXIT_SUCCESS 429104007ebaSmrg 429204007ebaSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 429304007ebaSmrg echo "----------------------------------------------------------------------" 429404007ebaSmrg echo "Libraries have been installed in:" 429504007ebaSmrg for libdir in $libdirs; do 429604007ebaSmrg $ECHO " $libdir" 429704007ebaSmrg done 429804007ebaSmrg echo 429904007ebaSmrg echo "If you ever happen to want to link against installed libraries" 430004007ebaSmrg echo "in a given directory, LIBDIR, you must either use libtool, and" 430105cf1079Smrg echo "specify the full pathname of the library, or use the '-LLIBDIR'" 430204007ebaSmrg echo "flag during linking and do at least one of the following:" 430304007ebaSmrg if test -n "$shlibpath_var"; then 430405cf1079Smrg echo " - add LIBDIR to the '$shlibpath_var' environment variable" 430504007ebaSmrg echo " during execution" 430604007ebaSmrg fi 430704007ebaSmrg if test -n "$runpath_var"; then 430805cf1079Smrg echo " - add LIBDIR to the '$runpath_var' environment variable" 430904007ebaSmrg echo " during linking" 431004007ebaSmrg fi 431104007ebaSmrg if test -n "$hardcode_libdir_flag_spec"; then 431204007ebaSmrg libdir=LIBDIR 431304007ebaSmrg eval flag=\"$hardcode_libdir_flag_spec\" 431404007ebaSmrg 431505cf1079Smrg $ECHO " - use the '$flag' linker flag" 431604007ebaSmrg fi 431704007ebaSmrg if test -n "$admincmds"; then 431804007ebaSmrg $ECHO " - have your system administrator run these commands:$admincmds" 431904007ebaSmrg fi 432004007ebaSmrg if test -f /etc/ld.so.conf; then 432105cf1079Smrg echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" 432204007ebaSmrg fi 432304007ebaSmrg echo 432404007ebaSmrg 432504007ebaSmrg echo "See any operating system documentation about shared libraries for" 432604007ebaSmrg case $host in 432704007ebaSmrg solaris2.[6789]|solaris2.1[0-9]) 432804007ebaSmrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 432904007ebaSmrg echo "pages." 433004007ebaSmrg ;; 433104007ebaSmrg *) 433204007ebaSmrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 433304007ebaSmrg ;; 433404007ebaSmrg esac 433504007ebaSmrg echo "----------------------------------------------------------------------" 433604007ebaSmrg fi 433704007ebaSmrg exit $EXIT_SUCCESS 433804007ebaSmrg} 433904007ebaSmrg 434005cf1079Smrgtest finish = "$opt_mode" && func_mode_finish ${1+"$@"} 434104007ebaSmrg 434204007ebaSmrg 434304007ebaSmrg# func_mode_install arg... 434404007ebaSmrgfunc_mode_install () 434504007ebaSmrg{ 434605cf1079Smrg $debug_cmd 434705cf1079Smrg 434804007ebaSmrg # There may be an optional sh(1) argument at the beginning of 434904007ebaSmrg # install_prog (especially on Windows NT). 435005cf1079Smrg if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || 435104007ebaSmrg # Allow the use of GNU shtool's install command. 435205cf1079Smrg case $nonopt in *shtool*) :;; *) false;; esac 435305cf1079Smrg then 435404007ebaSmrg # Aesthetically quote it. 435579d5fcd7Smrg func_quote_arg pretty "$nonopt" 435679d5fcd7Smrg install_prog="$func_quote_arg_result " 435704007ebaSmrg arg=$1 435804007ebaSmrg shift 435904007ebaSmrg else 436004007ebaSmrg install_prog= 436104007ebaSmrg arg=$nonopt 436204007ebaSmrg fi 436304007ebaSmrg 436404007ebaSmrg # The real first argument should be the name of the installation program. 436504007ebaSmrg # Aesthetically quote it. 436679d5fcd7Smrg func_quote_arg pretty "$arg" 436779d5fcd7Smrg func_append install_prog "$func_quote_arg_result" 436804007ebaSmrg install_shared_prog=$install_prog 436904007ebaSmrg case " $install_prog " in 437004007ebaSmrg *[\\\ /]cp\ *) install_cp=: ;; 437104007ebaSmrg *) install_cp=false ;; 437204007ebaSmrg esac 437304007ebaSmrg 437404007ebaSmrg # We need to accept at least all the BSD install flags. 437504007ebaSmrg dest= 437604007ebaSmrg files= 437704007ebaSmrg opts= 437804007ebaSmrg prev= 437904007ebaSmrg install_type= 438005cf1079Smrg isdir=false 438104007ebaSmrg stripme= 438204007ebaSmrg no_mode=: 438304007ebaSmrg for arg 438404007ebaSmrg do 438504007ebaSmrg arg2= 438604007ebaSmrg if test -n "$dest"; then 438704007ebaSmrg func_append files " $dest" 438804007ebaSmrg dest=$arg 438904007ebaSmrg continue 439004007ebaSmrg fi 439104007ebaSmrg 439204007ebaSmrg case $arg in 439305cf1079Smrg -d) isdir=: ;; 439404007ebaSmrg -f) 439504007ebaSmrg if $install_cp; then :; else 439604007ebaSmrg prev=$arg 439704007ebaSmrg fi 439804007ebaSmrg ;; 439904007ebaSmrg -g | -m | -o) 440004007ebaSmrg prev=$arg 440104007ebaSmrg ;; 440204007ebaSmrg -s) 440304007ebaSmrg stripme=" -s" 440404007ebaSmrg continue 440504007ebaSmrg ;; 440604007ebaSmrg -*) 440704007ebaSmrg ;; 440804007ebaSmrg *) 440904007ebaSmrg # If the previous option needed an argument, then skip it. 441004007ebaSmrg if test -n "$prev"; then 441105cf1079Smrg if test X-m = "X$prev" && test -n "$install_override_mode"; then 441204007ebaSmrg arg2=$install_override_mode 441304007ebaSmrg no_mode=false 441404007ebaSmrg fi 441504007ebaSmrg prev= 441604007ebaSmrg else 441704007ebaSmrg dest=$arg 441804007ebaSmrg continue 441904007ebaSmrg fi 442004007ebaSmrg ;; 442104007ebaSmrg esac 442204007ebaSmrg 442304007ebaSmrg # Aesthetically quote the argument. 442479d5fcd7Smrg func_quote_arg pretty "$arg" 442579d5fcd7Smrg func_append install_prog " $func_quote_arg_result" 442604007ebaSmrg if test -n "$arg2"; then 442779d5fcd7Smrg func_quote_arg pretty "$arg2" 442804007ebaSmrg fi 442979d5fcd7Smrg func_append install_shared_prog " $func_quote_arg_result" 443004007ebaSmrg done 443104007ebaSmrg 443204007ebaSmrg test -z "$install_prog" && \ 443304007ebaSmrg func_fatal_help "you must specify an install program" 443404007ebaSmrg 443504007ebaSmrg test -n "$prev" && \ 443605cf1079Smrg func_fatal_help "the '$prev' option requires an argument" 443704007ebaSmrg 443804007ebaSmrg if test -n "$install_override_mode" && $no_mode; then 443904007ebaSmrg if $install_cp; then :; else 444079d5fcd7Smrg func_quote_arg pretty "$install_override_mode" 444179d5fcd7Smrg func_append install_shared_prog " -m $func_quote_arg_result" 444204007ebaSmrg fi 444304007ebaSmrg fi 444404007ebaSmrg 444504007ebaSmrg if test -z "$files"; then 444604007ebaSmrg if test -z "$dest"; then 444704007ebaSmrg func_fatal_help "no file or destination specified" 444804007ebaSmrg else 444904007ebaSmrg func_fatal_help "you must specify a destination" 445004007ebaSmrg fi 445104007ebaSmrg fi 445204007ebaSmrg 445304007ebaSmrg # Strip any trailing slash from the destination. 445404007ebaSmrg func_stripname '' '/' "$dest" 445504007ebaSmrg dest=$func_stripname_result 445604007ebaSmrg 445704007ebaSmrg # Check to see that the destination is a directory. 445805cf1079Smrg test -d "$dest" && isdir=: 445905cf1079Smrg if $isdir; then 446005cf1079Smrg destdir=$dest 446104007ebaSmrg destname= 446204007ebaSmrg else 446304007ebaSmrg func_dirname_and_basename "$dest" "" "." 446405cf1079Smrg destdir=$func_dirname_result 446505cf1079Smrg destname=$func_basename_result 446604007ebaSmrg 446704007ebaSmrg # Not a directory, so check to see that there is only one file specified. 446804007ebaSmrg set dummy $files; shift 446904007ebaSmrg test "$#" -gt 1 && \ 447005cf1079Smrg func_fatal_help "'$dest' is not a directory" 447104007ebaSmrg fi 447204007ebaSmrg case $destdir in 447304007ebaSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 447404007ebaSmrg *) 447504007ebaSmrg for file in $files; do 447604007ebaSmrg case $file in 447704007ebaSmrg *.lo) ;; 447804007ebaSmrg *) 447905cf1079Smrg func_fatal_help "'$destdir' must be an absolute directory name" 448004007ebaSmrg ;; 448104007ebaSmrg esac 448204007ebaSmrg done 448304007ebaSmrg ;; 448404007ebaSmrg esac 448504007ebaSmrg 448604007ebaSmrg # This variable tells wrapper scripts just to set variables rather 448704007ebaSmrg # than running their programs. 448805cf1079Smrg libtool_install_magic=$magic 448904007ebaSmrg 449004007ebaSmrg staticlibs= 449104007ebaSmrg future_libdirs= 449204007ebaSmrg current_libdirs= 449304007ebaSmrg for file in $files; do 449404007ebaSmrg 449504007ebaSmrg # Do each installation. 449604007ebaSmrg case $file in 449704007ebaSmrg *.$libext) 449804007ebaSmrg # Do the static libraries later. 449904007ebaSmrg func_append staticlibs " $file" 450004007ebaSmrg ;; 450104007ebaSmrg 450204007ebaSmrg *.la) 450304007ebaSmrg func_resolve_sysroot "$file" 450404007ebaSmrg file=$func_resolve_sysroot_result 450504007ebaSmrg 450604007ebaSmrg # Check to see that this really is a libtool archive. 450704007ebaSmrg func_lalib_unsafe_p "$file" \ 450805cf1079Smrg || func_fatal_help "'$file' is not a valid libtool archive" 450904007ebaSmrg 451004007ebaSmrg library_names= 451104007ebaSmrg old_library= 451204007ebaSmrg relink_command= 451304007ebaSmrg func_source "$file" 451404007ebaSmrg 451504007ebaSmrg # Add the libdir to current_libdirs if it is the destination. 451604007ebaSmrg if test "X$destdir" = "X$libdir"; then 451704007ebaSmrg case "$current_libdirs " in 451804007ebaSmrg *" $libdir "*) ;; 451904007ebaSmrg *) func_append current_libdirs " $libdir" ;; 452004007ebaSmrg esac 452104007ebaSmrg else 452204007ebaSmrg # Note the libdir as a future libdir. 452304007ebaSmrg case "$future_libdirs " in 452404007ebaSmrg *" $libdir "*) ;; 452504007ebaSmrg *) func_append future_libdirs " $libdir" ;; 452604007ebaSmrg esac 452704007ebaSmrg fi 452804007ebaSmrg 452904007ebaSmrg func_dirname "$file" "/" "" 453005cf1079Smrg dir=$func_dirname_result 453104007ebaSmrg func_append dir "$objdir" 453204007ebaSmrg 453304007ebaSmrg if test -n "$relink_command"; then 453404007ebaSmrg # Determine the prefix the user has applied to our future dir. 453504007ebaSmrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 453604007ebaSmrg 453704007ebaSmrg # Don't allow the user to place us outside of our expected 453804007ebaSmrg # location b/c this prevents finding dependent libraries that 453904007ebaSmrg # are installed to the same prefix. 454004007ebaSmrg # At present, this check doesn't affect windows .dll's that 454104007ebaSmrg # are installed into $libdir/../bin (currently, that works fine) 454204007ebaSmrg # but it's something to keep an eye on. 454304007ebaSmrg test "$inst_prefix_dir" = "$destdir" && \ 454405cf1079Smrg func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" 454504007ebaSmrg 454604007ebaSmrg if test -n "$inst_prefix_dir"; then 454704007ebaSmrg # Stick the inst_prefix_dir data into the link command. 454804007ebaSmrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 454904007ebaSmrg else 455004007ebaSmrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 455104007ebaSmrg fi 455204007ebaSmrg 455305cf1079Smrg func_warning "relinking '$file'" 455404007ebaSmrg func_show_eval "$relink_command" \ 455505cf1079Smrg 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' 455604007ebaSmrg fi 455704007ebaSmrg 455804007ebaSmrg # See the names of the shared library. 455904007ebaSmrg set dummy $library_names; shift 456004007ebaSmrg if test -n "$1"; then 456105cf1079Smrg realname=$1 456204007ebaSmrg shift 456304007ebaSmrg 456405cf1079Smrg srcname=$realname 456505cf1079Smrg test -n "$relink_command" && srcname=${realname}T 456604007ebaSmrg 456704007ebaSmrg # Install the shared library and build the symlinks. 456804007ebaSmrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 456904007ebaSmrg 'exit $?' 457005cf1079Smrg tstripme=$stripme 457104007ebaSmrg case $host_os in 457204007ebaSmrg cygwin* | mingw* | pw32* | cegcc*) 457304007ebaSmrg case $realname in 457404007ebaSmrg *.dll.a) 457505cf1079Smrg tstripme= 457605cf1079Smrg ;; 457705cf1079Smrg esac 457805cf1079Smrg ;; 457905cf1079Smrg os2*) 458005cf1079Smrg case $realname in 458105cf1079Smrg *_dll.a) 458205cf1079Smrg tstripme= 458304007ebaSmrg ;; 458404007ebaSmrg esac 458504007ebaSmrg ;; 458604007ebaSmrg esac 458704007ebaSmrg if test -n "$tstripme" && test -n "$striplib"; then 458804007ebaSmrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 458904007ebaSmrg fi 459004007ebaSmrg 459104007ebaSmrg if test "$#" -gt 0; then 459204007ebaSmrg # Delete the old symlinks, and create new ones. 459305cf1079Smrg # Try 'ln -sf' first, because the 'ln' binary might depend on 459404007ebaSmrg # the symlink we replace! Solaris /bin/ln does not understand -f, 459504007ebaSmrg # so we also need to try rm && ln -s. 459604007ebaSmrg for linkname 459704007ebaSmrg do 459804007ebaSmrg test "$linkname" != "$realname" \ 459904007ebaSmrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 460004007ebaSmrg done 460104007ebaSmrg fi 460204007ebaSmrg 460304007ebaSmrg # Do each command in the postinstall commands. 460405cf1079Smrg lib=$destdir/$realname 460504007ebaSmrg func_execute_cmds "$postinstall_cmds" 'exit $?' 460604007ebaSmrg fi 460704007ebaSmrg 460804007ebaSmrg # Install the pseudo-library for information purposes. 460904007ebaSmrg func_basename "$file" 461005cf1079Smrg name=$func_basename_result 461105cf1079Smrg instname=$dir/${name}i 461204007ebaSmrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 461304007ebaSmrg 461404007ebaSmrg # Maybe install the static library, too. 461504007ebaSmrg test -n "$old_library" && func_append staticlibs " $dir/$old_library" 461604007ebaSmrg ;; 461704007ebaSmrg 461804007ebaSmrg *.lo) 461904007ebaSmrg # Install (i.e. copy) a libtool object. 462004007ebaSmrg 462104007ebaSmrg # Figure out destination file name, if it wasn't already specified. 462204007ebaSmrg if test -n "$destname"; then 462305cf1079Smrg destfile=$destdir/$destname 462404007ebaSmrg else 462504007ebaSmrg func_basename "$file" 462605cf1079Smrg destfile=$func_basename_result 462705cf1079Smrg destfile=$destdir/$destfile 462804007ebaSmrg fi 462904007ebaSmrg 463004007ebaSmrg # Deduce the name of the destination old-style object file. 463104007ebaSmrg case $destfile in 463204007ebaSmrg *.lo) 463304007ebaSmrg func_lo2o "$destfile" 463404007ebaSmrg staticdest=$func_lo2o_result 463504007ebaSmrg ;; 463604007ebaSmrg *.$objext) 463705cf1079Smrg staticdest=$destfile 463804007ebaSmrg destfile= 463904007ebaSmrg ;; 464004007ebaSmrg *) 464105cf1079Smrg func_fatal_help "cannot copy a libtool object to '$destfile'" 464204007ebaSmrg ;; 464304007ebaSmrg esac 464404007ebaSmrg 464504007ebaSmrg # Install the libtool object if requested. 464604007ebaSmrg test -n "$destfile" && \ 464704007ebaSmrg func_show_eval "$install_prog $file $destfile" 'exit $?' 464804007ebaSmrg 464904007ebaSmrg # Install the old object if enabled. 465005cf1079Smrg if test yes = "$build_old_libs"; then 465104007ebaSmrg # Deduce the name of the old-style object file. 465204007ebaSmrg func_lo2o "$file" 465304007ebaSmrg staticobj=$func_lo2o_result 465404007ebaSmrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 465504007ebaSmrg fi 465604007ebaSmrg exit $EXIT_SUCCESS 465704007ebaSmrg ;; 465804007ebaSmrg 465904007ebaSmrg *) 466004007ebaSmrg # Figure out destination file name, if it wasn't already specified. 466104007ebaSmrg if test -n "$destname"; then 466205cf1079Smrg destfile=$destdir/$destname 466304007ebaSmrg else 466404007ebaSmrg func_basename "$file" 466505cf1079Smrg destfile=$func_basename_result 466605cf1079Smrg destfile=$destdir/$destfile 466704007ebaSmrg fi 466804007ebaSmrg 466904007ebaSmrg # If the file is missing, and there is a .exe on the end, strip it 467004007ebaSmrg # because it is most likely a libtool script we actually want to 467104007ebaSmrg # install 467205cf1079Smrg stripped_ext= 467304007ebaSmrg case $file in 467404007ebaSmrg *.exe) 467504007ebaSmrg if test ! -f "$file"; then 467604007ebaSmrg func_stripname '' '.exe' "$file" 467704007ebaSmrg file=$func_stripname_result 467805cf1079Smrg stripped_ext=.exe 467904007ebaSmrg fi 468004007ebaSmrg ;; 468104007ebaSmrg esac 468204007ebaSmrg 468304007ebaSmrg # Do a test to see if this is really a libtool program. 468404007ebaSmrg case $host in 468504007ebaSmrg *cygwin* | *mingw*) 468604007ebaSmrg if func_ltwrapper_executable_p "$file"; then 468704007ebaSmrg func_ltwrapper_scriptname "$file" 468804007ebaSmrg wrapper=$func_ltwrapper_scriptname_result 468904007ebaSmrg else 469004007ebaSmrg func_stripname '' '.exe' "$file" 469104007ebaSmrg wrapper=$func_stripname_result 469204007ebaSmrg fi 469304007ebaSmrg ;; 469404007ebaSmrg *) 469504007ebaSmrg wrapper=$file 469604007ebaSmrg ;; 469704007ebaSmrg esac 469804007ebaSmrg if func_ltwrapper_script_p "$wrapper"; then 469904007ebaSmrg notinst_deplibs= 470004007ebaSmrg relink_command= 470104007ebaSmrg 470204007ebaSmrg func_source "$wrapper" 470304007ebaSmrg 470404007ebaSmrg # Check the variables that should have been set. 470504007ebaSmrg test -z "$generated_by_libtool_version" && \ 470605cf1079Smrg func_fatal_error "invalid libtool wrapper script '$wrapper'" 470704007ebaSmrg 470805cf1079Smrg finalize=: 470904007ebaSmrg for lib in $notinst_deplibs; do 471004007ebaSmrg # Check to see that each library is installed. 471104007ebaSmrg libdir= 471204007ebaSmrg if test -f "$lib"; then 471304007ebaSmrg func_source "$lib" 471404007ebaSmrg fi 471505cf1079Smrg libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` 471604007ebaSmrg if test -n "$libdir" && test ! -f "$libfile"; then 471705cf1079Smrg func_warning "'$lib' has not been installed in '$libdir'" 471805cf1079Smrg finalize=false 471904007ebaSmrg fi 472004007ebaSmrg done 472104007ebaSmrg 472204007ebaSmrg relink_command= 472304007ebaSmrg func_source "$wrapper" 472404007ebaSmrg 472504007ebaSmrg outputname= 472605cf1079Smrg if test no = "$fast_install" && test -n "$relink_command"; then 472704007ebaSmrg $opt_dry_run || { 472805cf1079Smrg if $finalize; then 472904007ebaSmrg tmpdir=`func_mktempdir` 473004007ebaSmrg func_basename "$file$stripped_ext" 473105cf1079Smrg file=$func_basename_result 473205cf1079Smrg outputname=$tmpdir/$file 473304007ebaSmrg # Replace the output file specification. 473404007ebaSmrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 473504007ebaSmrg 473605cf1079Smrg $opt_quiet || { 473779d5fcd7Smrg func_quote_arg expand,pretty "$relink_command" 473879d5fcd7Smrg eval "func_echo $func_quote_arg_result" 473904007ebaSmrg } 474004007ebaSmrg if eval "$relink_command"; then : 474104007ebaSmrg else 474205cf1079Smrg func_error "error: relink '$file' with the above command before installing it" 474304007ebaSmrg $opt_dry_run || ${RM}r "$tmpdir" 474404007ebaSmrg continue 474504007ebaSmrg fi 474605cf1079Smrg file=$outputname 474704007ebaSmrg else 474805cf1079Smrg func_warning "cannot relink '$file'" 474904007ebaSmrg fi 475004007ebaSmrg } 475104007ebaSmrg else 475204007ebaSmrg # Install the binary that we compiled earlier. 475304007ebaSmrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 475404007ebaSmrg fi 475504007ebaSmrg fi 475604007ebaSmrg 475704007ebaSmrg # remove .exe since cygwin /usr/bin/install will append another 475804007ebaSmrg # one anyway 475904007ebaSmrg case $install_prog,$host in 476004007ebaSmrg */usr/bin/install*,*cygwin*) 476104007ebaSmrg case $file:$destfile in 476204007ebaSmrg *.exe:*.exe) 476304007ebaSmrg # this is ok 476404007ebaSmrg ;; 476504007ebaSmrg *.exe:*) 476604007ebaSmrg destfile=$destfile.exe 476704007ebaSmrg ;; 476804007ebaSmrg *:*.exe) 476904007ebaSmrg func_stripname '' '.exe' "$destfile" 477004007ebaSmrg destfile=$func_stripname_result 477104007ebaSmrg ;; 477204007ebaSmrg esac 477304007ebaSmrg ;; 477404007ebaSmrg esac 477504007ebaSmrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 477604007ebaSmrg $opt_dry_run || if test -n "$outputname"; then 477704007ebaSmrg ${RM}r "$tmpdir" 477804007ebaSmrg fi 477904007ebaSmrg ;; 478004007ebaSmrg esac 478104007ebaSmrg done 478204007ebaSmrg 478304007ebaSmrg for file in $staticlibs; do 478404007ebaSmrg func_basename "$file" 478505cf1079Smrg name=$func_basename_result 478604007ebaSmrg 478704007ebaSmrg # Set up the ranlib parameters. 478805cf1079Smrg oldlib=$destdir/$name 478904007ebaSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 479004007ebaSmrg tool_oldlib=$func_to_tool_file_result 479104007ebaSmrg 479204007ebaSmrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 479304007ebaSmrg 479404007ebaSmrg if test -n "$stripme" && test -n "$old_striplib"; then 479504007ebaSmrg func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 479604007ebaSmrg fi 479704007ebaSmrg 479804007ebaSmrg # Do each command in the postinstall commands. 479904007ebaSmrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 480004007ebaSmrg done 480104007ebaSmrg 480204007ebaSmrg test -n "$future_libdirs" && \ 480305cf1079Smrg func_warning "remember to run '$progname --finish$future_libdirs'" 480404007ebaSmrg 480504007ebaSmrg if test -n "$current_libdirs"; then 480604007ebaSmrg # Maybe just do a dry run. 480704007ebaSmrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 480805cf1079Smrg exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' 480904007ebaSmrg else 481004007ebaSmrg exit $EXIT_SUCCESS 481104007ebaSmrg fi 481204007ebaSmrg} 481304007ebaSmrg 481405cf1079Smrgtest install = "$opt_mode" && func_mode_install ${1+"$@"} 481504007ebaSmrg 481604007ebaSmrg 481704007ebaSmrg# func_generate_dlsyms outputname originator pic_p 481804007ebaSmrg# Extract symbols from dlprefiles and create ${outputname}S.o with 481904007ebaSmrg# a dlpreopen symbol table. 482004007ebaSmrgfunc_generate_dlsyms () 482104007ebaSmrg{ 482205cf1079Smrg $debug_cmd 482305cf1079Smrg 482405cf1079Smrg my_outputname=$1 482505cf1079Smrg my_originator=$2 482605cf1079Smrg my_pic_p=${3-false} 482705cf1079Smrg my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` 482804007ebaSmrg my_dlsyms= 482904007ebaSmrg 483005cf1079Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 483104007ebaSmrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 483205cf1079Smrg my_dlsyms=${my_outputname}S.c 483304007ebaSmrg else 483404007ebaSmrg func_error "not configured to extract global symbols from dlpreopened files" 483504007ebaSmrg fi 483604007ebaSmrg fi 483704007ebaSmrg 483804007ebaSmrg if test -n "$my_dlsyms"; then 483904007ebaSmrg case $my_dlsyms in 484004007ebaSmrg "") ;; 484104007ebaSmrg *.c) 484204007ebaSmrg # Discover the nlist of each of the dlfiles. 484305cf1079Smrg nlist=$output_objdir/$my_outputname.nm 484404007ebaSmrg 484504007ebaSmrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 484604007ebaSmrg 484704007ebaSmrg # Parse the name list into a source file. 484804007ebaSmrg func_verbose "creating $output_objdir/$my_dlsyms" 484904007ebaSmrg 485004007ebaSmrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 485105cf1079Smrg/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ 485205cf1079Smrg/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ 485304007ebaSmrg 485404007ebaSmrg#ifdef __cplusplus 485504007ebaSmrgextern \"C\" { 485604007ebaSmrg#endif 485704007ebaSmrg 485805cf1079Smrg#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 485904007ebaSmrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 486004007ebaSmrg#endif 486104007ebaSmrg 486204007ebaSmrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 486305cf1079Smrg#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE 486405cf1079Smrg/* DATA imports from DLLs on WIN32 can't be const, because runtime 486504007ebaSmrg relocations are performed -- see ld's documentation on pseudo-relocs. */ 486604007ebaSmrg# define LT_DLSYM_CONST 486705cf1079Smrg#elif defined __osf__ 486804007ebaSmrg/* This system does not cope well with relocations in const data. */ 486904007ebaSmrg# define LT_DLSYM_CONST 487004007ebaSmrg#else 487104007ebaSmrg# define LT_DLSYM_CONST const 487204007ebaSmrg#endif 487304007ebaSmrg 487405cf1079Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 487505cf1079Smrg 487604007ebaSmrg/* External symbol declarations for the compiler. */\ 487704007ebaSmrg" 487804007ebaSmrg 487905cf1079Smrg if test yes = "$dlself"; then 488005cf1079Smrg func_verbose "generating symbol list for '$output'" 488104007ebaSmrg 488204007ebaSmrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 488304007ebaSmrg 488404007ebaSmrg # Add our own program objects to the symbol list. 488504007ebaSmrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 488604007ebaSmrg for progfile in $progfiles; do 488704007ebaSmrg func_to_tool_file "$progfile" func_convert_file_msys_to_w32 488805cf1079Smrg func_verbose "extracting global C symbols from '$func_to_tool_file_result'" 488904007ebaSmrg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 489004007ebaSmrg done 489104007ebaSmrg 489204007ebaSmrg if test -n "$exclude_expsyms"; then 489304007ebaSmrg $opt_dry_run || { 489404007ebaSmrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 489504007ebaSmrg eval '$MV "$nlist"T "$nlist"' 489604007ebaSmrg } 489704007ebaSmrg fi 489804007ebaSmrg 489904007ebaSmrg if test -n "$export_symbols_regex"; then 490004007ebaSmrg $opt_dry_run || { 490104007ebaSmrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 490204007ebaSmrg eval '$MV "$nlist"T "$nlist"' 490304007ebaSmrg } 490404007ebaSmrg fi 490504007ebaSmrg 490604007ebaSmrg # Prepare the list of exported symbols 490704007ebaSmrg if test -z "$export_symbols"; then 490805cf1079Smrg export_symbols=$output_objdir/$outputname.exp 490904007ebaSmrg $opt_dry_run || { 491004007ebaSmrg $RM $export_symbols 491105cf1079Smrg eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 491204007ebaSmrg case $host in 491304007ebaSmrg *cygwin* | *mingw* | *cegcc* ) 491404007ebaSmrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 491504007ebaSmrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 491604007ebaSmrg ;; 491704007ebaSmrg esac 491804007ebaSmrg } 491904007ebaSmrg else 492004007ebaSmrg $opt_dry_run || { 492105cf1079Smrg eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 492204007ebaSmrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 492304007ebaSmrg eval '$MV "$nlist"T "$nlist"' 492404007ebaSmrg case $host in 492504007ebaSmrg *cygwin* | *mingw* | *cegcc* ) 492604007ebaSmrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 492704007ebaSmrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 492804007ebaSmrg ;; 492904007ebaSmrg esac 493004007ebaSmrg } 493104007ebaSmrg fi 493204007ebaSmrg fi 493304007ebaSmrg 493404007ebaSmrg for dlprefile in $dlprefiles; do 493505cf1079Smrg func_verbose "extracting global C symbols from '$dlprefile'" 493604007ebaSmrg func_basename "$dlprefile" 493705cf1079Smrg name=$func_basename_result 493804007ebaSmrg case $host in 493904007ebaSmrg *cygwin* | *mingw* | *cegcc* ) 494004007ebaSmrg # if an import library, we need to obtain dlname 494104007ebaSmrg if func_win32_import_lib_p "$dlprefile"; then 494204007ebaSmrg func_tr_sh "$dlprefile" 494304007ebaSmrg eval "curr_lafile=\$libfile_$func_tr_sh_result" 494405cf1079Smrg dlprefile_dlbasename= 494504007ebaSmrg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 494604007ebaSmrg # Use subshell, to avoid clobbering current variable values 494704007ebaSmrg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 494805cf1079Smrg if test -n "$dlprefile_dlname"; then 494904007ebaSmrg func_basename "$dlprefile_dlname" 495005cf1079Smrg dlprefile_dlbasename=$func_basename_result 495104007ebaSmrg else 495204007ebaSmrg # no lafile. user explicitly requested -dlpreopen <import library>. 495304007ebaSmrg $sharedlib_from_linklib_cmd "$dlprefile" 495404007ebaSmrg dlprefile_dlbasename=$sharedlib_from_linklib_result 495504007ebaSmrg fi 495604007ebaSmrg fi 495704007ebaSmrg $opt_dry_run || { 495805cf1079Smrg if test -n "$dlprefile_dlbasename"; then 495904007ebaSmrg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 496004007ebaSmrg else 496104007ebaSmrg func_warning "Could not compute DLL name from $name" 496204007ebaSmrg eval '$ECHO ": $name " >> "$nlist"' 496304007ebaSmrg fi 496404007ebaSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 496504007ebaSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 496604007ebaSmrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 496704007ebaSmrg } 496804007ebaSmrg else # not an import lib 496904007ebaSmrg $opt_dry_run || { 497004007ebaSmrg eval '$ECHO ": $name " >> "$nlist"' 497104007ebaSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 497204007ebaSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 497304007ebaSmrg } 497404007ebaSmrg fi 497504007ebaSmrg ;; 497604007ebaSmrg *) 497704007ebaSmrg $opt_dry_run || { 497804007ebaSmrg eval '$ECHO ": $name " >> "$nlist"' 497904007ebaSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 498004007ebaSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 498104007ebaSmrg } 498204007ebaSmrg ;; 498304007ebaSmrg esac 498404007ebaSmrg done 498504007ebaSmrg 498604007ebaSmrg $opt_dry_run || { 498704007ebaSmrg # Make sure we have at least an empty file. 498804007ebaSmrg test -f "$nlist" || : > "$nlist" 498904007ebaSmrg 499004007ebaSmrg if test -n "$exclude_expsyms"; then 499104007ebaSmrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 499204007ebaSmrg $MV "$nlist"T "$nlist" 499304007ebaSmrg fi 499404007ebaSmrg 499504007ebaSmrg # Try sorting and uniquifying the output. 499604007ebaSmrg if $GREP -v "^: " < "$nlist" | 499704007ebaSmrg if sort -k 3 </dev/null >/dev/null 2>&1; then 499804007ebaSmrg sort -k 3 499904007ebaSmrg else 500004007ebaSmrg sort +2 500104007ebaSmrg fi | 500204007ebaSmrg uniq > "$nlist"S; then 500304007ebaSmrg : 500404007ebaSmrg else 500504007ebaSmrg $GREP -v "^: " < "$nlist" > "$nlist"S 500604007ebaSmrg fi 500704007ebaSmrg 500804007ebaSmrg if test -f "$nlist"S; then 500904007ebaSmrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 501004007ebaSmrg else 501104007ebaSmrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 501204007ebaSmrg fi 501304007ebaSmrg 501405cf1079Smrg func_show_eval '$RM "${nlist}I"' 501505cf1079Smrg if test -n "$global_symbol_to_import"; then 501605cf1079Smrg eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' 501705cf1079Smrg fi 501805cf1079Smrg 501904007ebaSmrg echo >> "$output_objdir/$my_dlsyms" "\ 502004007ebaSmrg 502104007ebaSmrg/* The mapping between symbol names and symbols. */ 502204007ebaSmrgtypedef struct { 502304007ebaSmrg const char *name; 502404007ebaSmrg void *address; 502504007ebaSmrg} lt_dlsymlist; 502604007ebaSmrgextern LT_DLSYM_CONST lt_dlsymlist 502705cf1079Smrglt_${my_prefix}_LTX_preloaded_symbols[];\ 502805cf1079Smrg" 502905cf1079Smrg 503005cf1079Smrg if test -s "$nlist"I; then 503105cf1079Smrg echo >> "$output_objdir/$my_dlsyms" "\ 503205cf1079Smrgstatic void lt_syminit(void) 503305cf1079Smrg{ 503405cf1079Smrg LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; 503505cf1079Smrg for (; symbol->name; ++symbol) 503605cf1079Smrg {" 503705cf1079Smrg $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" 503805cf1079Smrg echo >> "$output_objdir/$my_dlsyms" "\ 503905cf1079Smrg } 504005cf1079Smrg}" 504105cf1079Smrg fi 504205cf1079Smrg echo >> "$output_objdir/$my_dlsyms" "\ 504304007ebaSmrgLT_DLSYM_CONST lt_dlsymlist 504404007ebaSmrglt_${my_prefix}_LTX_preloaded_symbols[] = 504505cf1079Smrg{ {\"$my_originator\", (void *) 0}," 504605cf1079Smrg 504705cf1079Smrg if test -s "$nlist"I; then 504805cf1079Smrg echo >> "$output_objdir/$my_dlsyms" "\ 504905cf1079Smrg {\"@INIT@\", (void *) <_syminit}," 505005cf1079Smrg fi 505104007ebaSmrg 505204007ebaSmrg case $need_lib_prefix in 505304007ebaSmrg no) 505404007ebaSmrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 505504007ebaSmrg ;; 505604007ebaSmrg *) 505704007ebaSmrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 505804007ebaSmrg ;; 505904007ebaSmrg esac 506004007ebaSmrg echo >> "$output_objdir/$my_dlsyms" "\ 506104007ebaSmrg {0, (void *) 0} 506204007ebaSmrg}; 506304007ebaSmrg 506404007ebaSmrg/* This works around a problem in FreeBSD linker */ 506504007ebaSmrg#ifdef FREEBSD_WORKAROUND 506604007ebaSmrgstatic const void *lt_preloaded_setup() { 506704007ebaSmrg return lt_${my_prefix}_LTX_preloaded_symbols; 506804007ebaSmrg} 506904007ebaSmrg#endif 507004007ebaSmrg 507104007ebaSmrg#ifdef __cplusplus 507204007ebaSmrg} 507304007ebaSmrg#endif\ 507404007ebaSmrg" 507504007ebaSmrg } # !$opt_dry_run 507604007ebaSmrg 507704007ebaSmrg pic_flag_for_symtable= 507804007ebaSmrg case "$compile_command " in 507904007ebaSmrg *" -static "*) ;; 508004007ebaSmrg *) 508104007ebaSmrg case $host in 508204007ebaSmrg # compiling the symbol table file with pic_flag works around 508304007ebaSmrg # a FreeBSD bug that causes programs to crash when -lm is 508404007ebaSmrg # linked before any other PIC object. But we must not use 508504007ebaSmrg # pic_flag when linking with -static. The problem exists in 508604007ebaSmrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 508704007ebaSmrg *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 508804007ebaSmrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 508904007ebaSmrg *-*-hpux*) 509004007ebaSmrg pic_flag_for_symtable=" $pic_flag" ;; 509104007ebaSmrg *) 509205cf1079Smrg $my_pic_p && pic_flag_for_symtable=" $pic_flag" 509304007ebaSmrg ;; 509404007ebaSmrg esac 509504007ebaSmrg ;; 509604007ebaSmrg esac 509704007ebaSmrg symtab_cflags= 509804007ebaSmrg for arg in $LTCFLAGS; do 509904007ebaSmrg case $arg in 510004007ebaSmrg -pie | -fpie | -fPIE) ;; 510104007ebaSmrg *) func_append symtab_cflags " $arg" ;; 510204007ebaSmrg esac 510304007ebaSmrg done 510404007ebaSmrg 510504007ebaSmrg # Now compile the dynamic symbol file. 510604007ebaSmrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 510704007ebaSmrg 510804007ebaSmrg # Clean up the generated files. 510905cf1079Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' 511004007ebaSmrg 511104007ebaSmrg # Transform the symbol file into the correct name. 511205cf1079Smrg symfileobj=$output_objdir/${my_outputname}S.$objext 511304007ebaSmrg case $host in 511404007ebaSmrg *cygwin* | *mingw* | *cegcc* ) 511504007ebaSmrg if test -f "$output_objdir/$my_outputname.def"; then 511604007ebaSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 511704007ebaSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 511804007ebaSmrg else 511904007ebaSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 512004007ebaSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 512104007ebaSmrg fi 512204007ebaSmrg ;; 512304007ebaSmrg *) 512404007ebaSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 512504007ebaSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 512604007ebaSmrg ;; 512704007ebaSmrg esac 512804007ebaSmrg ;; 512904007ebaSmrg *) 513005cf1079Smrg func_fatal_error "unknown suffix for '$my_dlsyms'" 513104007ebaSmrg ;; 513204007ebaSmrg esac 513304007ebaSmrg else 513404007ebaSmrg # We keep going just in case the user didn't refer to 513504007ebaSmrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 513604007ebaSmrg # really was required. 513704007ebaSmrg 513804007ebaSmrg # Nullify the symbol file. 513904007ebaSmrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 514004007ebaSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 514104007ebaSmrg fi 514204007ebaSmrg} 514304007ebaSmrg 514405cf1079Smrg# func_cygming_gnu_implib_p ARG 514505cf1079Smrg# This predicate returns with zero status (TRUE) if 514605cf1079Smrg# ARG is a GNU/binutils-style import library. Returns 514705cf1079Smrg# with nonzero status (FALSE) otherwise. 514805cf1079Smrgfunc_cygming_gnu_implib_p () 514905cf1079Smrg{ 515005cf1079Smrg $debug_cmd 515105cf1079Smrg 515205cf1079Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 515305cf1079Smrg func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` 515405cf1079Smrg test -n "$func_cygming_gnu_implib_tmp" 515505cf1079Smrg} 515605cf1079Smrg 515705cf1079Smrg# func_cygming_ms_implib_p ARG 515805cf1079Smrg# This predicate returns with zero status (TRUE) if 515905cf1079Smrg# ARG is an MS-style import library. Returns 516005cf1079Smrg# with nonzero status (FALSE) otherwise. 516105cf1079Smrgfunc_cygming_ms_implib_p () 516205cf1079Smrg{ 516305cf1079Smrg $debug_cmd 516405cf1079Smrg 516505cf1079Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 516605cf1079Smrg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 516705cf1079Smrg test -n "$func_cygming_ms_implib_tmp" 516805cf1079Smrg} 516905cf1079Smrg 517004007ebaSmrg# func_win32_libid arg 517104007ebaSmrg# return the library type of file 'arg' 517204007ebaSmrg# 517304007ebaSmrg# Need a lot of goo to handle *both* DLLs and import libs 517404007ebaSmrg# Has to be a shell function in order to 'eat' the argument 517504007ebaSmrg# that is supplied when $file_magic_command is called. 517604007ebaSmrg# Despite the name, also deal with 64 bit binaries. 517704007ebaSmrgfunc_win32_libid () 517804007ebaSmrg{ 517905cf1079Smrg $debug_cmd 518005cf1079Smrg 518105cf1079Smrg win32_libid_type=unknown 518204007ebaSmrg win32_fileres=`file -L $1 2>/dev/null` 518304007ebaSmrg case $win32_fileres in 518404007ebaSmrg *ar\ archive\ import\ library*) # definitely import 518504007ebaSmrg win32_libid_type="x86 archive import" 518604007ebaSmrg ;; 518704007ebaSmrg *ar\ archive*) # could be an import, or static 518804007ebaSmrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 518904007ebaSmrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 519004007ebaSmrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 519105cf1079Smrg case $nm_interface in 519205cf1079Smrg "MS dumpbin") 519305cf1079Smrg if func_cygming_ms_implib_p "$1" || 519405cf1079Smrg func_cygming_gnu_implib_p "$1" 519505cf1079Smrg then 519605cf1079Smrg win32_nmres=import 519705cf1079Smrg else 519805cf1079Smrg win32_nmres= 519905cf1079Smrg fi 520005cf1079Smrg ;; 520105cf1079Smrg *) 520205cf1079Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 520305cf1079Smrg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 520405cf1079Smrg $SED -n -e ' 520504007ebaSmrg 1,100{ 520604007ebaSmrg / I /{ 520705cf1079Smrg s|.*|import| 520804007ebaSmrg p 520904007ebaSmrg q 521004007ebaSmrg } 521104007ebaSmrg }'` 521205cf1079Smrg ;; 521305cf1079Smrg esac 521404007ebaSmrg case $win32_nmres in 521504007ebaSmrg import*) win32_libid_type="x86 archive import";; 521604007ebaSmrg *) win32_libid_type="x86 archive static";; 521704007ebaSmrg esac 521804007ebaSmrg fi 521904007ebaSmrg ;; 522004007ebaSmrg *DLL*) 522104007ebaSmrg win32_libid_type="x86 DLL" 522204007ebaSmrg ;; 522304007ebaSmrg *executable*) # but shell scripts are "executable" too... 522404007ebaSmrg case $win32_fileres in 522504007ebaSmrg *MS\ Windows\ PE\ Intel*) 522604007ebaSmrg win32_libid_type="x86 DLL" 522704007ebaSmrg ;; 522804007ebaSmrg esac 522904007ebaSmrg ;; 523004007ebaSmrg esac 523104007ebaSmrg $ECHO "$win32_libid_type" 523204007ebaSmrg} 523304007ebaSmrg 523404007ebaSmrg# func_cygming_dll_for_implib ARG 523504007ebaSmrg# 523604007ebaSmrg# Platform-specific function to extract the 523704007ebaSmrg# name of the DLL associated with the specified 523804007ebaSmrg# import library ARG. 523904007ebaSmrg# Invoked by eval'ing the libtool variable 524004007ebaSmrg# $sharedlib_from_linklib_cmd 524104007ebaSmrg# Result is available in the variable 524204007ebaSmrg# $sharedlib_from_linklib_result 524304007ebaSmrgfunc_cygming_dll_for_implib () 524404007ebaSmrg{ 524505cf1079Smrg $debug_cmd 524605cf1079Smrg 524704007ebaSmrg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 524804007ebaSmrg} 524904007ebaSmrg 525004007ebaSmrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 525104007ebaSmrg# 525204007ebaSmrg# The is the core of a fallback implementation of a 525304007ebaSmrg# platform-specific function to extract the name of the 525404007ebaSmrg# DLL associated with the specified import library LIBNAME. 525504007ebaSmrg# 525604007ebaSmrg# SECTION_NAME is either .idata$6 or .idata$7, depending 525704007ebaSmrg# on the platform and compiler that created the implib. 525804007ebaSmrg# 525904007ebaSmrg# Echos the name of the DLL associated with the 526004007ebaSmrg# specified import library. 526104007ebaSmrgfunc_cygming_dll_for_implib_fallback_core () 526204007ebaSmrg{ 526305cf1079Smrg $debug_cmd 526405cf1079Smrg 526504007ebaSmrg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 526604007ebaSmrg $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 526704007ebaSmrg $SED '/^Contents of section '"$match_literal"':/{ 526804007ebaSmrg # Place marker at beginning of archive member dllname section 526904007ebaSmrg s/.*/====MARK====/ 527004007ebaSmrg p 527104007ebaSmrg d 527204007ebaSmrg } 527304007ebaSmrg # These lines can sometimes be longer than 43 characters, but 527404007ebaSmrg # are always uninteresting 527504007ebaSmrg /:[ ]*file format pe[i]\{,1\}-/d 527604007ebaSmrg /^In archive [^:]*:/d 527704007ebaSmrg # Ensure marker is printed 527804007ebaSmrg /^====MARK====/p 527904007ebaSmrg # Remove all lines with less than 43 characters 528004007ebaSmrg /^.\{43\}/!d 528104007ebaSmrg # From remaining lines, remove first 43 characters 528204007ebaSmrg s/^.\{43\}//' | 528304007ebaSmrg $SED -n ' 528404007ebaSmrg # Join marker and all lines until next marker into a single line 528504007ebaSmrg /^====MARK====/ b para 528604007ebaSmrg H 528704007ebaSmrg $ b para 528804007ebaSmrg b 528904007ebaSmrg :para 529004007ebaSmrg x 529104007ebaSmrg s/\n//g 529204007ebaSmrg # Remove the marker 529304007ebaSmrg s/^====MARK====// 529404007ebaSmrg # Remove trailing dots and whitespace 529504007ebaSmrg s/[\. \t]*$// 529604007ebaSmrg # Print 529704007ebaSmrg /./p' | 529804007ebaSmrg # we now have a list, one entry per line, of the stringified 529904007ebaSmrg # contents of the appropriate section of all members of the 530005cf1079Smrg # archive that possess that section. Heuristic: eliminate 530105cf1079Smrg # all those that have a first or second character that is 530204007ebaSmrg # a '.' (that is, objdump's representation of an unprintable 530304007ebaSmrg # character.) This should work for all archives with less than 530404007ebaSmrg # 0x302f exports -- but will fail for DLLs whose name actually 530504007ebaSmrg # begins with a literal '.' or a single character followed by 530604007ebaSmrg # a '.'. 530704007ebaSmrg # 530804007ebaSmrg # Of those that remain, print the first one. 530904007ebaSmrg $SED -e '/^\./d;/^.\./d;q' 531004007ebaSmrg} 531104007ebaSmrg 531204007ebaSmrg# func_cygming_dll_for_implib_fallback ARG 531304007ebaSmrg# Platform-specific function to extract the 531404007ebaSmrg# name of the DLL associated with the specified 531504007ebaSmrg# import library ARG. 531604007ebaSmrg# 531704007ebaSmrg# This fallback implementation is for use when $DLLTOOL 531804007ebaSmrg# does not support the --identify-strict option. 531904007ebaSmrg# Invoked by eval'ing the libtool variable 532004007ebaSmrg# $sharedlib_from_linklib_cmd 532104007ebaSmrg# Result is available in the variable 532204007ebaSmrg# $sharedlib_from_linklib_result 532304007ebaSmrgfunc_cygming_dll_for_implib_fallback () 532404007ebaSmrg{ 532505cf1079Smrg $debug_cmd 532605cf1079Smrg 532705cf1079Smrg if func_cygming_gnu_implib_p "$1"; then 532804007ebaSmrg # binutils import library 532904007ebaSmrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 533005cf1079Smrg elif func_cygming_ms_implib_p "$1"; then 533104007ebaSmrg # ms-generated import library 533204007ebaSmrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 533304007ebaSmrg else 533404007ebaSmrg # unknown 533505cf1079Smrg sharedlib_from_linklib_result= 533604007ebaSmrg fi 533704007ebaSmrg} 533804007ebaSmrg 533904007ebaSmrg 534004007ebaSmrg# func_extract_an_archive dir oldlib 534104007ebaSmrgfunc_extract_an_archive () 534204007ebaSmrg{ 534305cf1079Smrg $debug_cmd 534405cf1079Smrg 534505cf1079Smrg f_ex_an_ar_dir=$1; shift 534605cf1079Smrg f_ex_an_ar_oldlib=$1 534705cf1079Smrg if test yes = "$lock_old_archive_extraction"; then 534804007ebaSmrg lockfile=$f_ex_an_ar_oldlib.lock 534904007ebaSmrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 535004007ebaSmrg func_echo "Waiting for $lockfile to be removed" 535104007ebaSmrg sleep 2 535204007ebaSmrg done 535304007ebaSmrg fi 535404007ebaSmrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 535504007ebaSmrg 'stat=$?; rm -f "$lockfile"; exit $stat' 535605cf1079Smrg if test yes = "$lock_old_archive_extraction"; then 535704007ebaSmrg $opt_dry_run || rm -f "$lockfile" 535804007ebaSmrg fi 535904007ebaSmrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 536004007ebaSmrg : 536104007ebaSmrg else 536204007ebaSmrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 536304007ebaSmrg fi 536404007ebaSmrg} 536504007ebaSmrg 536604007ebaSmrg 536704007ebaSmrg# func_extract_archives gentop oldlib ... 536804007ebaSmrgfunc_extract_archives () 536904007ebaSmrg{ 537005cf1079Smrg $debug_cmd 537105cf1079Smrg 537205cf1079Smrg my_gentop=$1; shift 537304007ebaSmrg my_oldlibs=${1+"$@"} 537405cf1079Smrg my_oldobjs= 537505cf1079Smrg my_xlib= 537605cf1079Smrg my_xabs= 537705cf1079Smrg my_xdir= 537804007ebaSmrg 537904007ebaSmrg for my_xlib in $my_oldlibs; do 538004007ebaSmrg # Extract the objects. 538104007ebaSmrg case $my_xlib in 538205cf1079Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; 538304007ebaSmrg *) my_xabs=`pwd`"/$my_xlib" ;; 538404007ebaSmrg esac 538504007ebaSmrg func_basename "$my_xlib" 538605cf1079Smrg my_xlib=$func_basename_result 538704007ebaSmrg my_xlib_u=$my_xlib 538804007ebaSmrg while :; do 538904007ebaSmrg case " $extracted_archives " in 539004007ebaSmrg *" $my_xlib_u "*) 539104007ebaSmrg func_arith $extracted_serial + 1 539204007ebaSmrg extracted_serial=$func_arith_result 539304007ebaSmrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 539404007ebaSmrg *) break ;; 539504007ebaSmrg esac 539604007ebaSmrg done 539704007ebaSmrg extracted_archives="$extracted_archives $my_xlib_u" 539805cf1079Smrg my_xdir=$my_gentop/$my_xlib_u 539904007ebaSmrg 540004007ebaSmrg func_mkdir_p "$my_xdir" 540104007ebaSmrg 540204007ebaSmrg case $host in 540304007ebaSmrg *-darwin*) 540404007ebaSmrg func_verbose "Extracting $my_xabs" 540504007ebaSmrg # Do not bother doing anything if just a dry run 540604007ebaSmrg $opt_dry_run || { 540704007ebaSmrg darwin_orig_dir=`pwd` 540804007ebaSmrg cd $my_xdir || exit $? 540904007ebaSmrg darwin_archive=$my_xabs 541004007ebaSmrg darwin_curdir=`pwd` 541105cf1079Smrg func_basename "$darwin_archive" 541205cf1079Smrg darwin_base_archive=$func_basename_result 541304007ebaSmrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 541404007ebaSmrg if test -n "$darwin_arches"; then 541504007ebaSmrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 541604007ebaSmrg darwin_arch= 541704007ebaSmrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 541805cf1079Smrg for darwin_arch in $darwin_arches; do 541905cf1079Smrg func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" 542005cf1079Smrg $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" 542105cf1079Smrg cd "unfat-$$/$darwin_base_archive-$darwin_arch" 542205cf1079Smrg func_extract_an_archive "`pwd`" "$darwin_base_archive" 542304007ebaSmrg cd "$darwin_curdir" 542405cf1079Smrg $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" 542504007ebaSmrg done # $darwin_arches 542604007ebaSmrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 542705cf1079Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` 542804007ebaSmrg darwin_file= 542904007ebaSmrg darwin_files= 543004007ebaSmrg for darwin_file in $darwin_filelist; do 543104007ebaSmrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 543204007ebaSmrg $LIPO -create -output "$darwin_file" $darwin_files 543304007ebaSmrg done # $darwin_filelist 543404007ebaSmrg $RM -rf unfat-$$ 543504007ebaSmrg cd "$darwin_orig_dir" 543604007ebaSmrg else 543704007ebaSmrg cd $darwin_orig_dir 543804007ebaSmrg func_extract_an_archive "$my_xdir" "$my_xabs" 543904007ebaSmrg fi # $darwin_arches 544004007ebaSmrg } # !$opt_dry_run 544104007ebaSmrg ;; 544204007ebaSmrg *) 544304007ebaSmrg func_extract_an_archive "$my_xdir" "$my_xabs" 544404007ebaSmrg ;; 544504007ebaSmrg esac 544604007ebaSmrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 544704007ebaSmrg done 544804007ebaSmrg 544905cf1079Smrg func_extract_archives_result=$my_oldobjs 545004007ebaSmrg} 545104007ebaSmrg 545204007ebaSmrg 545304007ebaSmrg# func_emit_wrapper [arg=no] 545404007ebaSmrg# 545504007ebaSmrg# Emit a libtool wrapper script on stdout. 545604007ebaSmrg# Don't directly open a file because we may want to 545704007ebaSmrg# incorporate the script contents within a cygwin/mingw 545804007ebaSmrg# wrapper executable. Must ONLY be called from within 545904007ebaSmrg# func_mode_link because it depends on a number of variables 546004007ebaSmrg# set therein. 546104007ebaSmrg# 546204007ebaSmrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 546304007ebaSmrg# variable will take. If 'yes', then the emitted script 546405cf1079Smrg# will assume that the directory where it is stored is 546504007ebaSmrg# the $objdir directory. This is a cygwin/mingw-specific 546604007ebaSmrg# behavior. 546704007ebaSmrgfunc_emit_wrapper () 546804007ebaSmrg{ 546904007ebaSmrg func_emit_wrapper_arg1=${1-no} 547004007ebaSmrg 547104007ebaSmrg $ECHO "\ 547204007ebaSmrg#! $SHELL 547304007ebaSmrg 547404007ebaSmrg# $output - temporary wrapper script for $objdir/$outputname 547505cf1079Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 547604007ebaSmrg# 547704007ebaSmrg# The $output program cannot be directly executed until all the libtool 547804007ebaSmrg# libraries that it depends on are installed. 547904007ebaSmrg# 548004007ebaSmrg# This wrapper script should never be moved out of the build directory. 548104007ebaSmrg# If it is, it will not operate correctly. 548204007ebaSmrg 548304007ebaSmrg# Sed substitution that helps us do robust quoting. It backslashifies 548404007ebaSmrg# metacharacters that are still active within double-quoted strings. 548504007ebaSmrgsed_quote_subst='$sed_quote_subst' 548604007ebaSmrg 548704007ebaSmrg# Be Bourne compatible 548804007ebaSmrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 548904007ebaSmrg emulate sh 549004007ebaSmrg NULLCMD=: 549104007ebaSmrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 549204007ebaSmrg # is contrary to our usage. Disable this feature. 549304007ebaSmrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 549404007ebaSmrg setopt NO_GLOB_SUBST 549504007ebaSmrgelse 549604007ebaSmrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 549704007ebaSmrgfi 549804007ebaSmrgBIN_SH=xpg4; export BIN_SH # for Tru64 549904007ebaSmrgDUALCASE=1; export DUALCASE # for MKS sh 550004007ebaSmrg 550104007ebaSmrg# The HP-UX ksh and POSIX shell print the target directory to stdout 550204007ebaSmrg# if CDPATH is set. 550304007ebaSmrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 550404007ebaSmrg 550504007ebaSmrgrelink_command=\"$relink_command\" 550604007ebaSmrg 550704007ebaSmrg# This environment variable determines our operation mode. 550804007ebaSmrgif test \"\$libtool_install_magic\" = \"$magic\"; then 550904007ebaSmrg # install mode needs the following variables: 551004007ebaSmrg generated_by_libtool_version='$macro_version' 551104007ebaSmrg notinst_deplibs='$notinst_deplibs' 551204007ebaSmrgelse 551304007ebaSmrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 551404007ebaSmrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 551504007ebaSmrg file=\"\$0\"" 551604007ebaSmrg 551779d5fcd7Smrg func_quote_arg pretty "$ECHO" 551879d5fcd7Smrg qECHO=$func_quote_arg_result 551904007ebaSmrg $ECHO "\ 552004007ebaSmrg 552104007ebaSmrg# A function that is used when there is no print builtin or printf. 552204007ebaSmrgfunc_fallback_echo () 552304007ebaSmrg{ 552404007ebaSmrg eval 'cat <<_LTECHO_EOF 552504007ebaSmrg\$1 552604007ebaSmrg_LTECHO_EOF' 552704007ebaSmrg} 552879d5fcd7Smrg ECHO=$qECHO 552904007ebaSmrg fi 553004007ebaSmrg 553104007ebaSmrg# Very basic option parsing. These options are (a) specific to 553204007ebaSmrg# the libtool wrapper, (b) are identical between the wrapper 553305cf1079Smrg# /script/ and the wrapper /executable/ that is used only on 553404007ebaSmrg# windows platforms, and (c) all begin with the string "--lt-" 553505cf1079Smrg# (application programs are unlikely to have options that match 553604007ebaSmrg# this pattern). 553704007ebaSmrg# 553804007ebaSmrg# There are only two supported options: --lt-debug and 553904007ebaSmrg# --lt-dump-script. There is, deliberately, no --lt-help. 554004007ebaSmrg# 554104007ebaSmrg# The first argument to this parsing function should be the 554204007ebaSmrg# script's $0 value, followed by "$@". 554304007ebaSmrglt_option_debug= 554404007ebaSmrgfunc_parse_lt_options () 554504007ebaSmrg{ 554604007ebaSmrg lt_script_arg0=\$0 554704007ebaSmrg shift 554804007ebaSmrg for lt_opt 554904007ebaSmrg do 555004007ebaSmrg case \"\$lt_opt\" in 555104007ebaSmrg --lt-debug) lt_option_debug=1 ;; 555204007ebaSmrg --lt-dump-script) 555304007ebaSmrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 555404007ebaSmrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 555504007ebaSmrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 555604007ebaSmrg cat \"\$lt_dump_D/\$lt_dump_F\" 555704007ebaSmrg exit 0 555804007ebaSmrg ;; 555904007ebaSmrg --lt-*) 556004007ebaSmrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 556104007ebaSmrg exit 1 556204007ebaSmrg ;; 556304007ebaSmrg esac 556404007ebaSmrg done 556504007ebaSmrg 556604007ebaSmrg # Print the debug banner immediately: 556704007ebaSmrg if test -n \"\$lt_option_debug\"; then 556805cf1079Smrg echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 556904007ebaSmrg fi 557004007ebaSmrg} 557104007ebaSmrg 557204007ebaSmrg# Used when --lt-debug. Prints its arguments to stdout 557304007ebaSmrg# (redirection is the responsibility of the caller) 557404007ebaSmrgfunc_lt_dump_args () 557504007ebaSmrg{ 557604007ebaSmrg lt_dump_args_N=1; 557704007ebaSmrg for lt_arg 557804007ebaSmrg do 557905cf1079Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" 558004007ebaSmrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 558104007ebaSmrg done 558204007ebaSmrg} 558304007ebaSmrg 558404007ebaSmrg# Core function for launching the target application 558504007ebaSmrgfunc_exec_program_core () 558604007ebaSmrg{ 558704007ebaSmrg" 558804007ebaSmrg case $host in 558904007ebaSmrg # Backslashes separate directories on plain windows 559004007ebaSmrg *-*-mingw | *-*-os2* | *-cegcc*) 559104007ebaSmrg $ECHO "\ 559204007ebaSmrg if test -n \"\$lt_option_debug\"; then 559305cf1079Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 559404007ebaSmrg func_lt_dump_args \${1+\"\$@\"} 1>&2 559504007ebaSmrg fi 559604007ebaSmrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 559704007ebaSmrg" 559804007ebaSmrg ;; 559904007ebaSmrg 560004007ebaSmrg *) 560104007ebaSmrg $ECHO "\ 560204007ebaSmrg if test -n \"\$lt_option_debug\"; then 560305cf1079Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 560404007ebaSmrg func_lt_dump_args \${1+\"\$@\"} 1>&2 560504007ebaSmrg fi 560604007ebaSmrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 560704007ebaSmrg" 560804007ebaSmrg ;; 560904007ebaSmrg esac 561004007ebaSmrg $ECHO "\ 561104007ebaSmrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 561204007ebaSmrg exit 1 561304007ebaSmrg} 561404007ebaSmrg 561504007ebaSmrg# A function to encapsulate launching the target application 561604007ebaSmrg# Strips options in the --lt-* namespace from \$@ and 561704007ebaSmrg# launches target application with the remaining arguments. 561804007ebaSmrgfunc_exec_program () 561904007ebaSmrg{ 562004007ebaSmrg case \" \$* \" in 562104007ebaSmrg *\\ --lt-*) 562204007ebaSmrg for lt_wr_arg 562304007ebaSmrg do 562404007ebaSmrg case \$lt_wr_arg in 562504007ebaSmrg --lt-*) ;; 562604007ebaSmrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 562704007ebaSmrg esac 562804007ebaSmrg shift 562904007ebaSmrg done ;; 563004007ebaSmrg esac 563104007ebaSmrg func_exec_program_core \${1+\"\$@\"} 563204007ebaSmrg} 563304007ebaSmrg 563404007ebaSmrg # Parse options 563504007ebaSmrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 563604007ebaSmrg 563704007ebaSmrg # Find the directory that this script lives in. 563804007ebaSmrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 563904007ebaSmrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 564004007ebaSmrg 564104007ebaSmrg # Follow symbolic links until we get to the real thisdir. 564204007ebaSmrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 564304007ebaSmrg while test -n \"\$file\"; do 564404007ebaSmrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 564504007ebaSmrg 564604007ebaSmrg # If there was a directory component, then change thisdir. 564704007ebaSmrg if test \"x\$destdir\" != \"x\$file\"; then 564804007ebaSmrg case \"\$destdir\" in 564904007ebaSmrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 565004007ebaSmrg *) thisdir=\"\$thisdir/\$destdir\" ;; 565104007ebaSmrg esac 565204007ebaSmrg fi 565304007ebaSmrg 565404007ebaSmrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 565504007ebaSmrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 565604007ebaSmrg done 565704007ebaSmrg 565804007ebaSmrg # Usually 'no', except on cygwin/mingw when embedded into 565904007ebaSmrg # the cwrapper. 566004007ebaSmrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 566104007ebaSmrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 566204007ebaSmrg # special case for '.' 566304007ebaSmrg if test \"\$thisdir\" = \".\"; then 566404007ebaSmrg thisdir=\`pwd\` 566504007ebaSmrg fi 566604007ebaSmrg # remove .libs from thisdir 566704007ebaSmrg case \"\$thisdir\" in 566804007ebaSmrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 566904007ebaSmrg $objdir ) thisdir=. ;; 567004007ebaSmrg esac 567104007ebaSmrg fi 567204007ebaSmrg 567304007ebaSmrg # Try to get the absolute directory name. 567404007ebaSmrg absdir=\`cd \"\$thisdir\" && pwd\` 567504007ebaSmrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 567604007ebaSmrg" 567704007ebaSmrg 567805cf1079Smrg if test yes = "$fast_install"; then 567904007ebaSmrg $ECHO "\ 568004007ebaSmrg program=lt-'$outputname'$exeext 568104007ebaSmrg progdir=\"\$thisdir/$objdir\" 568204007ebaSmrg 568304007ebaSmrg if test ! -f \"\$progdir/\$program\" || 568405cf1079Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ 568504007ebaSmrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 568604007ebaSmrg 568704007ebaSmrg file=\"\$\$-\$program\" 568804007ebaSmrg 568904007ebaSmrg if test ! -d \"\$progdir\"; then 569004007ebaSmrg $MKDIR \"\$progdir\" 569104007ebaSmrg else 569204007ebaSmrg $RM \"\$progdir/\$file\" 569304007ebaSmrg fi" 569404007ebaSmrg 569504007ebaSmrg $ECHO "\ 569604007ebaSmrg 569704007ebaSmrg # relink executable if necessary 569804007ebaSmrg if test -n \"\$relink_command\"; then 569904007ebaSmrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 570004007ebaSmrg else 570105cf1079Smrg \$ECHO \"\$relink_command_output\" >&2 570204007ebaSmrg $RM \"\$progdir/\$file\" 570304007ebaSmrg exit 1 570404007ebaSmrg fi 570504007ebaSmrg fi 570604007ebaSmrg 570704007ebaSmrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 570804007ebaSmrg { $RM \"\$progdir/\$program\"; 570904007ebaSmrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 571004007ebaSmrg $RM \"\$progdir/\$file\" 571104007ebaSmrg fi" 571204007ebaSmrg else 571304007ebaSmrg $ECHO "\ 571404007ebaSmrg program='$outputname' 571504007ebaSmrg progdir=\"\$thisdir/$objdir\" 571604007ebaSmrg" 571704007ebaSmrg fi 571804007ebaSmrg 571904007ebaSmrg $ECHO "\ 572004007ebaSmrg 572104007ebaSmrg if test -f \"\$progdir/\$program\"; then" 572204007ebaSmrg 572304007ebaSmrg # fixup the dll searchpath if we need to. 572404007ebaSmrg # 572504007ebaSmrg # Fix the DLL searchpath if we need to. Do this before prepending 572604007ebaSmrg # to shlibpath, because on Windows, both are PATH and uninstalled 572704007ebaSmrg # libraries must come first. 572804007ebaSmrg if test -n "$dllsearchpath"; then 572904007ebaSmrg $ECHO "\ 573004007ebaSmrg # Add the dll search path components to the executable PATH 573104007ebaSmrg PATH=$dllsearchpath:\$PATH 573204007ebaSmrg" 573304007ebaSmrg fi 573404007ebaSmrg 573504007ebaSmrg # Export our shlibpath_var if we have one. 573605cf1079Smrg if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 573704007ebaSmrg $ECHO "\ 573804007ebaSmrg # Add our own library path to $shlibpath_var 573904007ebaSmrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 574004007ebaSmrg 574104007ebaSmrg # Some systems cannot cope with colon-terminated $shlibpath_var 574204007ebaSmrg # The second colon is a workaround for a bug in BeOS R4 sed 574304007ebaSmrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 574404007ebaSmrg 574504007ebaSmrg export $shlibpath_var 574604007ebaSmrg" 574704007ebaSmrg fi 574804007ebaSmrg 574904007ebaSmrg $ECHO "\ 575004007ebaSmrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 575104007ebaSmrg # Run the actual program with our arguments. 575204007ebaSmrg func_exec_program \${1+\"\$@\"} 575304007ebaSmrg fi 575404007ebaSmrg else 575504007ebaSmrg # The program doesn't exist. 575605cf1079Smrg \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 575704007ebaSmrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 575804007ebaSmrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 575904007ebaSmrg exit 1 576004007ebaSmrg fi 576104007ebaSmrgfi\ 576204007ebaSmrg" 576304007ebaSmrg} 576404007ebaSmrg 576504007ebaSmrg 576604007ebaSmrg# func_emit_cwrapperexe_src 576704007ebaSmrg# emit the source code for a wrapper executable on stdout 576804007ebaSmrg# Must ONLY be called from within func_mode_link because 576904007ebaSmrg# it depends on a number of variable set therein. 577004007ebaSmrgfunc_emit_cwrapperexe_src () 577104007ebaSmrg{ 577204007ebaSmrg cat <<EOF 577304007ebaSmrg 577404007ebaSmrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 577505cf1079Smrg Generated by $PROGRAM (GNU $PACKAGE) $VERSION 577604007ebaSmrg 577704007ebaSmrg The $output program cannot be directly executed until all the libtool 577804007ebaSmrg libraries that it depends on are installed. 577904007ebaSmrg 578004007ebaSmrg This wrapper executable should never be moved out of the build directory. 578104007ebaSmrg If it is, it will not operate correctly. 578204007ebaSmrg*/ 578304007ebaSmrgEOF 578404007ebaSmrg cat <<"EOF" 578504007ebaSmrg#ifdef _MSC_VER 578604007ebaSmrg# define _CRT_SECURE_NO_DEPRECATE 1 578704007ebaSmrg#endif 578804007ebaSmrg#include <stdio.h> 578904007ebaSmrg#include <stdlib.h> 579004007ebaSmrg#ifdef _MSC_VER 579104007ebaSmrg# include <direct.h> 579204007ebaSmrg# include <process.h> 579304007ebaSmrg# include <io.h> 579404007ebaSmrg#else 579504007ebaSmrg# include <unistd.h> 579604007ebaSmrg# include <stdint.h> 579704007ebaSmrg# ifdef __CYGWIN__ 579804007ebaSmrg# include <io.h> 579904007ebaSmrg# endif 580004007ebaSmrg#endif 580104007ebaSmrg#include <malloc.h> 580204007ebaSmrg#include <stdarg.h> 580304007ebaSmrg#include <assert.h> 580404007ebaSmrg#include <string.h> 580504007ebaSmrg#include <ctype.h> 580604007ebaSmrg#include <errno.h> 580704007ebaSmrg#include <fcntl.h> 580804007ebaSmrg#include <sys/stat.h> 580904007ebaSmrg 581005cf1079Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 581105cf1079Smrg 581204007ebaSmrg/* declarations of non-ANSI functions */ 581305cf1079Smrg#if defined __MINGW32__ 581404007ebaSmrg# ifdef __STRICT_ANSI__ 581504007ebaSmrgint _putenv (const char *); 581604007ebaSmrg# endif 581705cf1079Smrg#elif defined __CYGWIN__ 581804007ebaSmrg# ifdef __STRICT_ANSI__ 581904007ebaSmrgchar *realpath (const char *, char *); 582004007ebaSmrgint putenv (char *); 582104007ebaSmrgint setenv (const char *, const char *, int); 582204007ebaSmrg# endif 582305cf1079Smrg/* #elif defined other_platform || defined ... */ 582404007ebaSmrg#endif 582504007ebaSmrg 582604007ebaSmrg/* portability defines, excluding path handling macros */ 582705cf1079Smrg#if defined _MSC_VER 582804007ebaSmrg# define setmode _setmode 582904007ebaSmrg# define stat _stat 583004007ebaSmrg# define chmod _chmod 583104007ebaSmrg# define getcwd _getcwd 583204007ebaSmrg# define putenv _putenv 583304007ebaSmrg# define S_IXUSR _S_IEXEC 583405cf1079Smrg#elif defined __MINGW32__ 583504007ebaSmrg# define setmode _setmode 583604007ebaSmrg# define stat _stat 583704007ebaSmrg# define chmod _chmod 583804007ebaSmrg# define getcwd _getcwd 583904007ebaSmrg# define putenv _putenv 584005cf1079Smrg#elif defined __CYGWIN__ 584104007ebaSmrg# define HAVE_SETENV 584204007ebaSmrg# define FOPEN_WB "wb" 584305cf1079Smrg/* #elif defined other platforms ... */ 584404007ebaSmrg#endif 584504007ebaSmrg 584605cf1079Smrg#if defined PATH_MAX 584704007ebaSmrg# define LT_PATHMAX PATH_MAX 584805cf1079Smrg#elif defined MAXPATHLEN 584904007ebaSmrg# define LT_PATHMAX MAXPATHLEN 585004007ebaSmrg#else 585104007ebaSmrg# define LT_PATHMAX 1024 585204007ebaSmrg#endif 585304007ebaSmrg 585404007ebaSmrg#ifndef S_IXOTH 585504007ebaSmrg# define S_IXOTH 0 585604007ebaSmrg#endif 585704007ebaSmrg#ifndef S_IXGRP 585804007ebaSmrg# define S_IXGRP 0 585904007ebaSmrg#endif 586004007ebaSmrg 586104007ebaSmrg/* path handling portability macros */ 586204007ebaSmrg#ifndef DIR_SEPARATOR 586304007ebaSmrg# define DIR_SEPARATOR '/' 586404007ebaSmrg# define PATH_SEPARATOR ':' 586504007ebaSmrg#endif 586604007ebaSmrg 586705cf1079Smrg#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ 586805cf1079Smrg defined __OS2__ 586904007ebaSmrg# define HAVE_DOS_BASED_FILE_SYSTEM 587004007ebaSmrg# define FOPEN_WB "wb" 587104007ebaSmrg# ifndef DIR_SEPARATOR_2 587204007ebaSmrg# define DIR_SEPARATOR_2 '\\' 587304007ebaSmrg# endif 587404007ebaSmrg# ifndef PATH_SEPARATOR_2 587504007ebaSmrg# define PATH_SEPARATOR_2 ';' 587604007ebaSmrg# endif 587704007ebaSmrg#endif 587804007ebaSmrg 587904007ebaSmrg#ifndef DIR_SEPARATOR_2 588004007ebaSmrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 588104007ebaSmrg#else /* DIR_SEPARATOR_2 */ 588204007ebaSmrg# define IS_DIR_SEPARATOR(ch) \ 588304007ebaSmrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 588404007ebaSmrg#endif /* DIR_SEPARATOR_2 */ 588504007ebaSmrg 588604007ebaSmrg#ifndef PATH_SEPARATOR_2 588704007ebaSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 588804007ebaSmrg#else /* PATH_SEPARATOR_2 */ 588904007ebaSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 589004007ebaSmrg#endif /* PATH_SEPARATOR_2 */ 589104007ebaSmrg 589204007ebaSmrg#ifndef FOPEN_WB 589304007ebaSmrg# define FOPEN_WB "w" 589404007ebaSmrg#endif 589504007ebaSmrg#ifndef _O_BINARY 589604007ebaSmrg# define _O_BINARY 0 589704007ebaSmrg#endif 589804007ebaSmrg 589904007ebaSmrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 590004007ebaSmrg#define XFREE(stale) do { \ 590105cf1079Smrg if (stale) { free (stale); stale = 0; } \ 590204007ebaSmrg} while (0) 590304007ebaSmrg 590405cf1079Smrg#if defined LT_DEBUGWRAPPER 590504007ebaSmrgstatic int lt_debug = 1; 590604007ebaSmrg#else 590704007ebaSmrgstatic int lt_debug = 0; 590804007ebaSmrg#endif 590904007ebaSmrg 591004007ebaSmrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 591104007ebaSmrg 591204007ebaSmrgvoid *xmalloc (size_t num); 591304007ebaSmrgchar *xstrdup (const char *string); 591404007ebaSmrgconst char *base_name (const char *name); 591504007ebaSmrgchar *find_executable (const char *wrapper); 591604007ebaSmrgchar *chase_symlinks (const char *pathspec); 591704007ebaSmrgint make_executable (const char *path); 591804007ebaSmrgint check_executable (const char *path); 591904007ebaSmrgchar *strendzap (char *str, const char *pat); 592004007ebaSmrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 592104007ebaSmrgvoid lt_fatal (const char *file, int line, const char *message, ...); 592204007ebaSmrgstatic const char *nonnull (const char *s); 592304007ebaSmrgstatic const char *nonempty (const char *s); 592404007ebaSmrgvoid lt_setenv (const char *name, const char *value); 592504007ebaSmrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 592604007ebaSmrgvoid lt_update_exe_path (const char *name, const char *value); 592704007ebaSmrgvoid lt_update_lib_path (const char *name, const char *value); 592804007ebaSmrgchar **prepare_spawn (char **argv); 592904007ebaSmrgvoid lt_dump_script (FILE *f); 593004007ebaSmrgEOF 593104007ebaSmrg 593204007ebaSmrg cat <<EOF 593305cf1079Smrg#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) 593405cf1079Smrg# define externally_visible volatile 593505cf1079Smrg#else 593605cf1079Smrg# define externally_visible __attribute__((externally_visible)) volatile 593705cf1079Smrg#endif 593805cf1079Smrgexternally_visible const char * MAGIC_EXE = "$magic_exe"; 593904007ebaSmrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 594004007ebaSmrgEOF 594104007ebaSmrg 594205cf1079Smrg if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 594304007ebaSmrg func_to_host_path "$temp_rpath" 594404007ebaSmrg cat <<EOF 594504007ebaSmrgconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 594604007ebaSmrgEOF 594704007ebaSmrg else 594804007ebaSmrg cat <<"EOF" 594904007ebaSmrgconst char * LIB_PATH_VALUE = ""; 595004007ebaSmrgEOF 595104007ebaSmrg fi 595204007ebaSmrg 595304007ebaSmrg if test -n "$dllsearchpath"; then 595404007ebaSmrg func_to_host_path "$dllsearchpath:" 595504007ebaSmrg cat <<EOF 595604007ebaSmrgconst char * EXE_PATH_VARNAME = "PATH"; 595704007ebaSmrgconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 595804007ebaSmrgEOF 595904007ebaSmrg else 596004007ebaSmrg cat <<"EOF" 596104007ebaSmrgconst char * EXE_PATH_VARNAME = ""; 596204007ebaSmrgconst char * EXE_PATH_VALUE = ""; 596304007ebaSmrgEOF 596404007ebaSmrg fi 596504007ebaSmrg 596605cf1079Smrg if test yes = "$fast_install"; then 596704007ebaSmrg cat <<EOF 596804007ebaSmrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 596904007ebaSmrgEOF 597004007ebaSmrg else 597104007ebaSmrg cat <<EOF 597204007ebaSmrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 597304007ebaSmrgEOF 597404007ebaSmrg fi 597504007ebaSmrg 597604007ebaSmrg 597704007ebaSmrg cat <<"EOF" 597804007ebaSmrg 597904007ebaSmrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 598004007ebaSmrg 598104007ebaSmrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 598204007ebaSmrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 598304007ebaSmrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 598404007ebaSmrg 598504007ebaSmrgint 598604007ebaSmrgmain (int argc, char *argv[]) 598704007ebaSmrg{ 598804007ebaSmrg char **newargz; 598904007ebaSmrg int newargc; 599004007ebaSmrg char *tmp_pathspec; 599104007ebaSmrg char *actual_cwrapper_path; 599204007ebaSmrg char *actual_cwrapper_name; 599304007ebaSmrg char *target_name; 599404007ebaSmrg char *lt_argv_zero; 599505cf1079Smrg int rval = 127; 599604007ebaSmrg 599704007ebaSmrg int i; 599804007ebaSmrg 599904007ebaSmrg program_name = (char *) xstrdup (base_name (argv[0])); 600005cf1079Smrg newargz = XMALLOC (char *, (size_t) argc + 1); 600104007ebaSmrg 600204007ebaSmrg /* very simple arg parsing; don't want to rely on getopt 600304007ebaSmrg * also, copy all non cwrapper options to newargz, except 600404007ebaSmrg * argz[0], which is handled differently 600504007ebaSmrg */ 600604007ebaSmrg newargc=0; 600704007ebaSmrg for (i = 1; i < argc; i++) 600804007ebaSmrg { 600905cf1079Smrg if (STREQ (argv[i], dumpscript_opt)) 601004007ebaSmrg { 601104007ebaSmrgEOF 601205cf1079Smrg case $host in 601304007ebaSmrg *mingw* | *cygwin* ) 601404007ebaSmrg # make stdout use "unix" line endings 601504007ebaSmrg echo " setmode(1,_O_BINARY);" 601604007ebaSmrg ;; 601704007ebaSmrg esac 601804007ebaSmrg 601904007ebaSmrg cat <<"EOF" 602004007ebaSmrg lt_dump_script (stdout); 602104007ebaSmrg return 0; 602204007ebaSmrg } 602305cf1079Smrg if (STREQ (argv[i], debug_opt)) 602404007ebaSmrg { 602504007ebaSmrg lt_debug = 1; 602604007ebaSmrg continue; 602704007ebaSmrg } 602805cf1079Smrg if (STREQ (argv[i], ltwrapper_option_prefix)) 602904007ebaSmrg { 603004007ebaSmrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 603104007ebaSmrg namespace, but it is not one of the ones we know about and 603204007ebaSmrg have already dealt with, above (inluding dump-script), then 603304007ebaSmrg report an error. Otherwise, targets might begin to believe 603404007ebaSmrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 603504007ebaSmrg namespace. The first time any user complains about this, we'll 603604007ebaSmrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 603704007ebaSmrg or a configure.ac-settable value. 603804007ebaSmrg */ 603904007ebaSmrg lt_fatal (__FILE__, __LINE__, 604004007ebaSmrg "unrecognized %s option: '%s'", 604104007ebaSmrg ltwrapper_option_prefix, argv[i]); 604204007ebaSmrg } 604304007ebaSmrg /* otherwise ... */ 604404007ebaSmrg newargz[++newargc] = xstrdup (argv[i]); 604504007ebaSmrg } 604604007ebaSmrg newargz[++newargc] = NULL; 604704007ebaSmrg 604804007ebaSmrgEOF 604904007ebaSmrg cat <<EOF 605004007ebaSmrg /* The GNU banner must be the first non-error debug message */ 605105cf1079Smrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); 605204007ebaSmrgEOF 605304007ebaSmrg cat <<"EOF" 605404007ebaSmrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 605504007ebaSmrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 605604007ebaSmrg 605704007ebaSmrg tmp_pathspec = find_executable (argv[0]); 605804007ebaSmrg if (tmp_pathspec == NULL) 605904007ebaSmrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 606004007ebaSmrg lt_debugprintf (__FILE__, __LINE__, 606104007ebaSmrg "(main) found exe (before symlink chase) at: %s\n", 606204007ebaSmrg tmp_pathspec); 606304007ebaSmrg 606404007ebaSmrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 606504007ebaSmrg lt_debugprintf (__FILE__, __LINE__, 606604007ebaSmrg "(main) found exe (after symlink chase) at: %s\n", 606704007ebaSmrg actual_cwrapper_path); 606804007ebaSmrg XFREE (tmp_pathspec); 606904007ebaSmrg 607004007ebaSmrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 607104007ebaSmrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 607204007ebaSmrg 607304007ebaSmrg /* wrapper name transforms */ 607404007ebaSmrg strendzap (actual_cwrapper_name, ".exe"); 607504007ebaSmrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 607604007ebaSmrg XFREE (actual_cwrapper_name); 607704007ebaSmrg actual_cwrapper_name = tmp_pathspec; 607804007ebaSmrg tmp_pathspec = 0; 607904007ebaSmrg 608004007ebaSmrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 608104007ebaSmrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 608204007ebaSmrg strendzap (target_name, ".exe"); 608304007ebaSmrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 608404007ebaSmrg XFREE (target_name); 608504007ebaSmrg target_name = tmp_pathspec; 608604007ebaSmrg tmp_pathspec = 0; 608704007ebaSmrg 608804007ebaSmrg lt_debugprintf (__FILE__, __LINE__, 608904007ebaSmrg "(main) libtool target name: %s\n", 609004007ebaSmrg target_name); 609104007ebaSmrgEOF 609204007ebaSmrg 609304007ebaSmrg cat <<EOF 609404007ebaSmrg newargz[0] = 609504007ebaSmrg XMALLOC (char, (strlen (actual_cwrapper_path) + 609604007ebaSmrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 609704007ebaSmrg strcpy (newargz[0], actual_cwrapper_path); 609804007ebaSmrg strcat (newargz[0], "$objdir"); 609904007ebaSmrg strcat (newargz[0], "/"); 610004007ebaSmrgEOF 610104007ebaSmrg 610204007ebaSmrg cat <<"EOF" 610304007ebaSmrg /* stop here, and copy so we don't have to do this twice */ 610404007ebaSmrg tmp_pathspec = xstrdup (newargz[0]); 610504007ebaSmrg 610604007ebaSmrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 610704007ebaSmrg strcat (newargz[0], actual_cwrapper_name); 610804007ebaSmrg 610904007ebaSmrg /* DO want the lt- prefix here if it exists, so use target_name */ 611004007ebaSmrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 611104007ebaSmrg XFREE (tmp_pathspec); 611204007ebaSmrg tmp_pathspec = NULL; 611304007ebaSmrgEOF 611404007ebaSmrg 611504007ebaSmrg case $host_os in 611604007ebaSmrg mingw*) 611704007ebaSmrg cat <<"EOF" 611804007ebaSmrg { 611904007ebaSmrg char* p; 612004007ebaSmrg while ((p = strchr (newargz[0], '\\')) != NULL) 612104007ebaSmrg { 612204007ebaSmrg *p = '/'; 612304007ebaSmrg } 612404007ebaSmrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 612504007ebaSmrg { 612604007ebaSmrg *p = '/'; 612704007ebaSmrg } 612804007ebaSmrg } 612904007ebaSmrgEOF 613004007ebaSmrg ;; 613104007ebaSmrg esac 613204007ebaSmrg 613304007ebaSmrg cat <<"EOF" 613404007ebaSmrg XFREE (target_name); 613504007ebaSmrg XFREE (actual_cwrapper_path); 613604007ebaSmrg XFREE (actual_cwrapper_name); 613704007ebaSmrg 613804007ebaSmrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 613904007ebaSmrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 614004007ebaSmrg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 614104007ebaSmrg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 614204007ebaSmrg because on Windows, both *_VARNAMEs are PATH but uninstalled 614304007ebaSmrg libraries must come first. */ 614404007ebaSmrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 614504007ebaSmrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 614604007ebaSmrg 614704007ebaSmrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 614804007ebaSmrg nonnull (lt_argv_zero)); 614904007ebaSmrg for (i = 0; i < newargc; i++) 615004007ebaSmrg { 615104007ebaSmrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 615204007ebaSmrg i, nonnull (newargz[i])); 615304007ebaSmrg } 615404007ebaSmrg 615504007ebaSmrgEOF 615604007ebaSmrg 615704007ebaSmrg case $host_os in 615804007ebaSmrg mingw*) 615904007ebaSmrg cat <<"EOF" 616004007ebaSmrg /* execv doesn't actually work on mingw as expected on unix */ 616104007ebaSmrg newargz = prepare_spawn (newargz); 616205cf1079Smrg rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 616304007ebaSmrg if (rval == -1) 616404007ebaSmrg { 616504007ebaSmrg /* failed to start process */ 616604007ebaSmrg lt_debugprintf (__FILE__, __LINE__, 616704007ebaSmrg "(main) failed to launch target \"%s\": %s\n", 616804007ebaSmrg lt_argv_zero, nonnull (strerror (errno))); 616904007ebaSmrg return 127; 617004007ebaSmrg } 617104007ebaSmrg return rval; 617204007ebaSmrgEOF 617304007ebaSmrg ;; 617404007ebaSmrg *) 617504007ebaSmrg cat <<"EOF" 617604007ebaSmrg execv (lt_argv_zero, newargz); 617704007ebaSmrg return rval; /* =127, but avoids unused variable warning */ 617804007ebaSmrgEOF 617904007ebaSmrg ;; 618004007ebaSmrg esac 618104007ebaSmrg 618204007ebaSmrg cat <<"EOF" 618304007ebaSmrg} 618404007ebaSmrg 618504007ebaSmrgvoid * 618604007ebaSmrgxmalloc (size_t num) 618704007ebaSmrg{ 618804007ebaSmrg void *p = (void *) malloc (num); 618904007ebaSmrg if (!p) 619004007ebaSmrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 619104007ebaSmrg 619204007ebaSmrg return p; 619304007ebaSmrg} 619404007ebaSmrg 619504007ebaSmrgchar * 619604007ebaSmrgxstrdup (const char *string) 619704007ebaSmrg{ 619804007ebaSmrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 619904007ebaSmrg string) : NULL; 620004007ebaSmrg} 620104007ebaSmrg 620204007ebaSmrgconst char * 620304007ebaSmrgbase_name (const char *name) 620404007ebaSmrg{ 620504007ebaSmrg const char *base; 620604007ebaSmrg 620705cf1079Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 620804007ebaSmrg /* Skip over the disk name in MSDOS pathnames. */ 620904007ebaSmrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 621004007ebaSmrg name += 2; 621104007ebaSmrg#endif 621204007ebaSmrg 621304007ebaSmrg for (base = name; *name; name++) 621404007ebaSmrg if (IS_DIR_SEPARATOR (*name)) 621504007ebaSmrg base = name + 1; 621604007ebaSmrg return base; 621704007ebaSmrg} 621804007ebaSmrg 621904007ebaSmrgint 622004007ebaSmrgcheck_executable (const char *path) 622104007ebaSmrg{ 622204007ebaSmrg struct stat st; 622304007ebaSmrg 622404007ebaSmrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 622504007ebaSmrg nonempty (path)); 622604007ebaSmrg if ((!path) || (!*path)) 622704007ebaSmrg return 0; 622804007ebaSmrg 622904007ebaSmrg if ((stat (path, &st) >= 0) 623004007ebaSmrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 623104007ebaSmrg return 1; 623204007ebaSmrg else 623304007ebaSmrg return 0; 623404007ebaSmrg} 623504007ebaSmrg 623604007ebaSmrgint 623704007ebaSmrgmake_executable (const char *path) 623804007ebaSmrg{ 623904007ebaSmrg int rval = 0; 624004007ebaSmrg struct stat st; 624104007ebaSmrg 624204007ebaSmrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 624304007ebaSmrg nonempty (path)); 624404007ebaSmrg if ((!path) || (!*path)) 624504007ebaSmrg return 0; 624604007ebaSmrg 624704007ebaSmrg if (stat (path, &st) >= 0) 624804007ebaSmrg { 624904007ebaSmrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 625004007ebaSmrg } 625104007ebaSmrg return rval; 625204007ebaSmrg} 625304007ebaSmrg 625404007ebaSmrg/* Searches for the full path of the wrapper. Returns 625504007ebaSmrg newly allocated full path name if found, NULL otherwise 625604007ebaSmrg Does not chase symlinks, even on platforms that support them. 625704007ebaSmrg*/ 625804007ebaSmrgchar * 625904007ebaSmrgfind_executable (const char *wrapper) 626004007ebaSmrg{ 626104007ebaSmrg int has_slash = 0; 626204007ebaSmrg const char *p; 626304007ebaSmrg const char *p_next; 626404007ebaSmrg /* static buffer for getcwd */ 626504007ebaSmrg char tmp[LT_PATHMAX + 1]; 626605cf1079Smrg size_t tmp_len; 626704007ebaSmrg char *concat_name; 626804007ebaSmrg 626904007ebaSmrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 627004007ebaSmrg nonempty (wrapper)); 627104007ebaSmrg 627204007ebaSmrg if ((wrapper == NULL) || (*wrapper == '\0')) 627304007ebaSmrg return NULL; 627404007ebaSmrg 627504007ebaSmrg /* Absolute path? */ 627605cf1079Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 627704007ebaSmrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 627804007ebaSmrg { 627904007ebaSmrg concat_name = xstrdup (wrapper); 628004007ebaSmrg if (check_executable (concat_name)) 628104007ebaSmrg return concat_name; 628204007ebaSmrg XFREE (concat_name); 628304007ebaSmrg } 628404007ebaSmrg else 628504007ebaSmrg { 628604007ebaSmrg#endif 628704007ebaSmrg if (IS_DIR_SEPARATOR (wrapper[0])) 628804007ebaSmrg { 628904007ebaSmrg concat_name = xstrdup (wrapper); 629004007ebaSmrg if (check_executable (concat_name)) 629104007ebaSmrg return concat_name; 629204007ebaSmrg XFREE (concat_name); 629304007ebaSmrg } 629405cf1079Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 629504007ebaSmrg } 629604007ebaSmrg#endif 629704007ebaSmrg 629804007ebaSmrg for (p = wrapper; *p; p++) 629904007ebaSmrg if (*p == '/') 630004007ebaSmrg { 630104007ebaSmrg has_slash = 1; 630204007ebaSmrg break; 630304007ebaSmrg } 630404007ebaSmrg if (!has_slash) 630504007ebaSmrg { 630604007ebaSmrg /* no slashes; search PATH */ 630704007ebaSmrg const char *path = getenv ("PATH"); 630804007ebaSmrg if (path != NULL) 630904007ebaSmrg { 631004007ebaSmrg for (p = path; *p; p = p_next) 631104007ebaSmrg { 631204007ebaSmrg const char *q; 631304007ebaSmrg size_t p_len; 631404007ebaSmrg for (q = p; *q; q++) 631504007ebaSmrg if (IS_PATH_SEPARATOR (*q)) 631604007ebaSmrg break; 631705cf1079Smrg p_len = (size_t) (q - p); 631804007ebaSmrg p_next = (*q == '\0' ? q : q + 1); 631904007ebaSmrg if (p_len == 0) 632004007ebaSmrg { 632104007ebaSmrg /* empty path: current directory */ 632204007ebaSmrg if (getcwd (tmp, LT_PATHMAX) == NULL) 632304007ebaSmrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 632404007ebaSmrg nonnull (strerror (errno))); 632504007ebaSmrg tmp_len = strlen (tmp); 632604007ebaSmrg concat_name = 632704007ebaSmrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 632804007ebaSmrg memcpy (concat_name, tmp, tmp_len); 632904007ebaSmrg concat_name[tmp_len] = '/'; 633004007ebaSmrg strcpy (concat_name + tmp_len + 1, wrapper); 633104007ebaSmrg } 633204007ebaSmrg else 633304007ebaSmrg { 633404007ebaSmrg concat_name = 633504007ebaSmrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 633604007ebaSmrg memcpy (concat_name, p, p_len); 633704007ebaSmrg concat_name[p_len] = '/'; 633804007ebaSmrg strcpy (concat_name + p_len + 1, wrapper); 633904007ebaSmrg } 634004007ebaSmrg if (check_executable (concat_name)) 634104007ebaSmrg return concat_name; 634204007ebaSmrg XFREE (concat_name); 634304007ebaSmrg } 634404007ebaSmrg } 634504007ebaSmrg /* not found in PATH; assume curdir */ 634604007ebaSmrg } 634704007ebaSmrg /* Relative path | not found in path: prepend cwd */ 634804007ebaSmrg if (getcwd (tmp, LT_PATHMAX) == NULL) 634904007ebaSmrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 635004007ebaSmrg nonnull (strerror (errno))); 635104007ebaSmrg tmp_len = strlen (tmp); 635204007ebaSmrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 635304007ebaSmrg memcpy (concat_name, tmp, tmp_len); 635404007ebaSmrg concat_name[tmp_len] = '/'; 635504007ebaSmrg strcpy (concat_name + tmp_len + 1, wrapper); 635604007ebaSmrg 635704007ebaSmrg if (check_executable (concat_name)) 635804007ebaSmrg return concat_name; 635904007ebaSmrg XFREE (concat_name); 636004007ebaSmrg return NULL; 636104007ebaSmrg} 636204007ebaSmrg 636304007ebaSmrgchar * 636404007ebaSmrgchase_symlinks (const char *pathspec) 636504007ebaSmrg{ 636604007ebaSmrg#ifndef S_ISLNK 636704007ebaSmrg return xstrdup (pathspec); 636804007ebaSmrg#else 636904007ebaSmrg char buf[LT_PATHMAX]; 637004007ebaSmrg struct stat s; 637104007ebaSmrg char *tmp_pathspec = xstrdup (pathspec); 637204007ebaSmrg char *p; 637304007ebaSmrg int has_symlinks = 0; 637404007ebaSmrg while (strlen (tmp_pathspec) && !has_symlinks) 637504007ebaSmrg { 637604007ebaSmrg lt_debugprintf (__FILE__, __LINE__, 637704007ebaSmrg "checking path component for symlinks: %s\n", 637804007ebaSmrg tmp_pathspec); 637904007ebaSmrg if (lstat (tmp_pathspec, &s) == 0) 638004007ebaSmrg { 638104007ebaSmrg if (S_ISLNK (s.st_mode) != 0) 638204007ebaSmrg { 638304007ebaSmrg has_symlinks = 1; 638404007ebaSmrg break; 638504007ebaSmrg } 638604007ebaSmrg 638704007ebaSmrg /* search backwards for last DIR_SEPARATOR */ 638804007ebaSmrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 638904007ebaSmrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 639004007ebaSmrg p--; 639104007ebaSmrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 639204007ebaSmrg { 639304007ebaSmrg /* no more DIR_SEPARATORS left */ 639404007ebaSmrg break; 639504007ebaSmrg } 639604007ebaSmrg *p = '\0'; 639704007ebaSmrg } 639804007ebaSmrg else 639904007ebaSmrg { 640004007ebaSmrg lt_fatal (__FILE__, __LINE__, 640104007ebaSmrg "error accessing file \"%s\": %s", 640204007ebaSmrg tmp_pathspec, nonnull (strerror (errno))); 640304007ebaSmrg } 640404007ebaSmrg } 640504007ebaSmrg XFREE (tmp_pathspec); 640604007ebaSmrg 640704007ebaSmrg if (!has_symlinks) 640804007ebaSmrg { 640904007ebaSmrg return xstrdup (pathspec); 641004007ebaSmrg } 641104007ebaSmrg 641204007ebaSmrg tmp_pathspec = realpath (pathspec, buf); 641304007ebaSmrg if (tmp_pathspec == 0) 641404007ebaSmrg { 641504007ebaSmrg lt_fatal (__FILE__, __LINE__, 641604007ebaSmrg "could not follow symlinks for %s", pathspec); 641704007ebaSmrg } 641804007ebaSmrg return xstrdup (tmp_pathspec); 641904007ebaSmrg#endif 642004007ebaSmrg} 642104007ebaSmrg 642204007ebaSmrgchar * 642304007ebaSmrgstrendzap (char *str, const char *pat) 642404007ebaSmrg{ 642504007ebaSmrg size_t len, patlen; 642604007ebaSmrg 642704007ebaSmrg assert (str != NULL); 642804007ebaSmrg assert (pat != NULL); 642904007ebaSmrg 643004007ebaSmrg len = strlen (str); 643104007ebaSmrg patlen = strlen (pat); 643204007ebaSmrg 643304007ebaSmrg if (patlen <= len) 643404007ebaSmrg { 643504007ebaSmrg str += len - patlen; 643605cf1079Smrg if (STREQ (str, pat)) 643704007ebaSmrg *str = '\0'; 643804007ebaSmrg } 643904007ebaSmrg return str; 644004007ebaSmrg} 644104007ebaSmrg 644204007ebaSmrgvoid 644304007ebaSmrglt_debugprintf (const char *file, int line, const char *fmt, ...) 644404007ebaSmrg{ 644504007ebaSmrg va_list args; 644604007ebaSmrg if (lt_debug) 644704007ebaSmrg { 644804007ebaSmrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 644904007ebaSmrg va_start (args, fmt); 645004007ebaSmrg (void) vfprintf (stderr, fmt, args); 645104007ebaSmrg va_end (args); 645204007ebaSmrg } 645304007ebaSmrg} 645404007ebaSmrg 645504007ebaSmrgstatic void 645604007ebaSmrglt_error_core (int exit_status, const char *file, 645704007ebaSmrg int line, const char *mode, 645804007ebaSmrg const char *message, va_list ap) 645904007ebaSmrg{ 646004007ebaSmrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 646104007ebaSmrg vfprintf (stderr, message, ap); 646204007ebaSmrg fprintf (stderr, ".\n"); 646304007ebaSmrg 646404007ebaSmrg if (exit_status >= 0) 646504007ebaSmrg exit (exit_status); 646604007ebaSmrg} 646704007ebaSmrg 646804007ebaSmrgvoid 646904007ebaSmrglt_fatal (const char *file, int line, const char *message, ...) 647004007ebaSmrg{ 647104007ebaSmrg va_list ap; 647204007ebaSmrg va_start (ap, message); 647304007ebaSmrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 647404007ebaSmrg va_end (ap); 647504007ebaSmrg} 647604007ebaSmrg 647704007ebaSmrgstatic const char * 647804007ebaSmrgnonnull (const char *s) 647904007ebaSmrg{ 648004007ebaSmrg return s ? s : "(null)"; 648104007ebaSmrg} 648204007ebaSmrg 648304007ebaSmrgstatic const char * 648404007ebaSmrgnonempty (const char *s) 648504007ebaSmrg{ 648604007ebaSmrg return (s && !*s) ? "(empty)" : nonnull (s); 648704007ebaSmrg} 648804007ebaSmrg 648904007ebaSmrgvoid 649004007ebaSmrglt_setenv (const char *name, const char *value) 649104007ebaSmrg{ 649204007ebaSmrg lt_debugprintf (__FILE__, __LINE__, 649304007ebaSmrg "(lt_setenv) setting '%s' to '%s'\n", 649404007ebaSmrg nonnull (name), nonnull (value)); 649504007ebaSmrg { 649604007ebaSmrg#ifdef HAVE_SETENV 649704007ebaSmrg /* always make a copy, for consistency with !HAVE_SETENV */ 649804007ebaSmrg char *str = xstrdup (value); 649904007ebaSmrg setenv (name, str, 1); 650004007ebaSmrg#else 650105cf1079Smrg size_t len = strlen (name) + 1 + strlen (value) + 1; 650204007ebaSmrg char *str = XMALLOC (char, len); 650304007ebaSmrg sprintf (str, "%s=%s", name, value); 650404007ebaSmrg if (putenv (str) != EXIT_SUCCESS) 650504007ebaSmrg { 650604007ebaSmrg XFREE (str); 650704007ebaSmrg } 650804007ebaSmrg#endif 650904007ebaSmrg } 651004007ebaSmrg} 651104007ebaSmrg 651204007ebaSmrgchar * 651304007ebaSmrglt_extend_str (const char *orig_value, const char *add, int to_end) 651404007ebaSmrg{ 651504007ebaSmrg char *new_value; 651604007ebaSmrg if (orig_value && *orig_value) 651704007ebaSmrg { 651805cf1079Smrg size_t orig_value_len = strlen (orig_value); 651905cf1079Smrg size_t add_len = strlen (add); 652004007ebaSmrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 652104007ebaSmrg if (to_end) 652204007ebaSmrg { 652304007ebaSmrg strcpy (new_value, orig_value); 652404007ebaSmrg strcpy (new_value + orig_value_len, add); 652504007ebaSmrg } 652604007ebaSmrg else 652704007ebaSmrg { 652804007ebaSmrg strcpy (new_value, add); 652904007ebaSmrg strcpy (new_value + add_len, orig_value); 653004007ebaSmrg } 653104007ebaSmrg } 653204007ebaSmrg else 653304007ebaSmrg { 653404007ebaSmrg new_value = xstrdup (add); 653504007ebaSmrg } 653604007ebaSmrg return new_value; 653704007ebaSmrg} 653804007ebaSmrg 653904007ebaSmrgvoid 654004007ebaSmrglt_update_exe_path (const char *name, const char *value) 654104007ebaSmrg{ 654204007ebaSmrg lt_debugprintf (__FILE__, __LINE__, 654304007ebaSmrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 654404007ebaSmrg nonnull (name), nonnull (value)); 654504007ebaSmrg 654604007ebaSmrg if (name && *name && value && *value) 654704007ebaSmrg { 654804007ebaSmrg char *new_value = lt_extend_str (getenv (name), value, 0); 654904007ebaSmrg /* some systems can't cope with a ':'-terminated path #' */ 655005cf1079Smrg size_t len = strlen (new_value); 655105cf1079Smrg while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 655204007ebaSmrg { 655305cf1079Smrg new_value[--len] = '\0'; 655404007ebaSmrg } 655504007ebaSmrg lt_setenv (name, new_value); 655604007ebaSmrg XFREE (new_value); 655704007ebaSmrg } 655804007ebaSmrg} 655904007ebaSmrg 656004007ebaSmrgvoid 656104007ebaSmrglt_update_lib_path (const char *name, const char *value) 656204007ebaSmrg{ 656304007ebaSmrg lt_debugprintf (__FILE__, __LINE__, 656404007ebaSmrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 656504007ebaSmrg nonnull (name), nonnull (value)); 656604007ebaSmrg 656704007ebaSmrg if (name && *name && value && *value) 656804007ebaSmrg { 656904007ebaSmrg char *new_value = lt_extend_str (getenv (name), value, 0); 657004007ebaSmrg lt_setenv (name, new_value); 657104007ebaSmrg XFREE (new_value); 657204007ebaSmrg } 657304007ebaSmrg} 657404007ebaSmrg 657504007ebaSmrgEOF 657604007ebaSmrg case $host_os in 657704007ebaSmrg mingw*) 657804007ebaSmrg cat <<"EOF" 657904007ebaSmrg 658004007ebaSmrg/* Prepares an argument vector before calling spawn(). 658104007ebaSmrg Note that spawn() does not by itself call the command interpreter 658204007ebaSmrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 658304007ebaSmrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 658404007ebaSmrg GetVersionEx(&v); 658504007ebaSmrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 658604007ebaSmrg }) ? "cmd.exe" : "command.com"). 658704007ebaSmrg Instead it simply concatenates the arguments, separated by ' ', and calls 658804007ebaSmrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 658904007ebaSmrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 659004007ebaSmrg special way: 659104007ebaSmrg - Space and tab are interpreted as delimiters. They are not treated as 659204007ebaSmrg delimiters if they are surrounded by double quotes: "...". 659304007ebaSmrg - Unescaped double quotes are removed from the input. Their only effect is 659404007ebaSmrg that within double quotes, space and tab are treated like normal 659504007ebaSmrg characters. 659604007ebaSmrg - Backslashes not followed by double quotes are not special. 659704007ebaSmrg - But 2*n+1 backslashes followed by a double quote become 659804007ebaSmrg n backslashes followed by a double quote (n >= 0): 659904007ebaSmrg \" -> " 660004007ebaSmrg \\\" -> \" 660104007ebaSmrg \\\\\" -> \\" 660204007ebaSmrg */ 660304007ebaSmrg#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" 660404007ebaSmrg#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" 660504007ebaSmrgchar ** 660604007ebaSmrgprepare_spawn (char **argv) 660704007ebaSmrg{ 660804007ebaSmrg size_t argc; 660904007ebaSmrg char **new_argv; 661004007ebaSmrg size_t i; 661104007ebaSmrg 661204007ebaSmrg /* Count number of arguments. */ 661304007ebaSmrg for (argc = 0; argv[argc] != NULL; argc++) 661404007ebaSmrg ; 661504007ebaSmrg 661604007ebaSmrg /* Allocate new argument vector. */ 661704007ebaSmrg new_argv = XMALLOC (char *, argc + 1); 661804007ebaSmrg 661904007ebaSmrg /* Put quoted arguments into the new argument vector. */ 662004007ebaSmrg for (i = 0; i < argc; i++) 662104007ebaSmrg { 662204007ebaSmrg const char *string = argv[i]; 662304007ebaSmrg 662404007ebaSmrg if (string[0] == '\0') 662504007ebaSmrg new_argv[i] = xstrdup ("\"\""); 662604007ebaSmrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 662704007ebaSmrg { 662804007ebaSmrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 662904007ebaSmrg size_t length; 663004007ebaSmrg unsigned int backslashes; 663104007ebaSmrg const char *s; 663204007ebaSmrg char *quoted_string; 663304007ebaSmrg char *p; 663404007ebaSmrg 663504007ebaSmrg length = 0; 663604007ebaSmrg backslashes = 0; 663704007ebaSmrg if (quote_around) 663804007ebaSmrg length++; 663904007ebaSmrg for (s = string; *s != '\0'; s++) 664004007ebaSmrg { 664104007ebaSmrg char c = *s; 664204007ebaSmrg if (c == '"') 664304007ebaSmrg length += backslashes + 1; 664404007ebaSmrg length++; 664504007ebaSmrg if (c == '\\') 664604007ebaSmrg backslashes++; 664704007ebaSmrg else 664804007ebaSmrg backslashes = 0; 664904007ebaSmrg } 665004007ebaSmrg if (quote_around) 665104007ebaSmrg length += backslashes + 1; 665204007ebaSmrg 665304007ebaSmrg quoted_string = XMALLOC (char, length + 1); 665404007ebaSmrg 665504007ebaSmrg p = quoted_string; 665604007ebaSmrg backslashes = 0; 665704007ebaSmrg if (quote_around) 665804007ebaSmrg *p++ = '"'; 665904007ebaSmrg for (s = string; *s != '\0'; s++) 666004007ebaSmrg { 666104007ebaSmrg char c = *s; 666204007ebaSmrg if (c == '"') 666304007ebaSmrg { 666404007ebaSmrg unsigned int j; 666504007ebaSmrg for (j = backslashes + 1; j > 0; j--) 666604007ebaSmrg *p++ = '\\'; 666704007ebaSmrg } 666804007ebaSmrg *p++ = c; 666904007ebaSmrg if (c == '\\') 667004007ebaSmrg backslashes++; 667104007ebaSmrg else 667204007ebaSmrg backslashes = 0; 667304007ebaSmrg } 667404007ebaSmrg if (quote_around) 667504007ebaSmrg { 667604007ebaSmrg unsigned int j; 667704007ebaSmrg for (j = backslashes; j > 0; j--) 667804007ebaSmrg *p++ = '\\'; 667904007ebaSmrg *p++ = '"'; 668004007ebaSmrg } 668104007ebaSmrg *p = '\0'; 668204007ebaSmrg 668304007ebaSmrg new_argv[i] = quoted_string; 668404007ebaSmrg } 668504007ebaSmrg else 668604007ebaSmrg new_argv[i] = (char *) string; 668704007ebaSmrg } 668804007ebaSmrg new_argv[argc] = NULL; 668904007ebaSmrg 669004007ebaSmrg return new_argv; 669104007ebaSmrg} 669204007ebaSmrgEOF 669304007ebaSmrg ;; 669404007ebaSmrg esac 669504007ebaSmrg 669604007ebaSmrg cat <<"EOF" 669704007ebaSmrgvoid lt_dump_script (FILE* f) 669804007ebaSmrg{ 669904007ebaSmrgEOF 670004007ebaSmrg func_emit_wrapper yes | 670104007ebaSmrg $SED -n -e ' 670204007ebaSmrgs/^\(.\{79\}\)\(..*\)/\1\ 670304007ebaSmrg\2/ 670404007ebaSmrgh 670504007ebaSmrgs/\([\\"]\)/\\\1/g 670604007ebaSmrgs/$/\\n/ 670704007ebaSmrgs/\([^\n]*\).*/ fputs ("\1", f);/p 670804007ebaSmrgg 670904007ebaSmrgD' 671004007ebaSmrg cat <<"EOF" 671104007ebaSmrg} 671204007ebaSmrgEOF 671304007ebaSmrg} 671404007ebaSmrg# end: func_emit_cwrapperexe_src 671504007ebaSmrg 671604007ebaSmrg# func_win32_import_lib_p ARG 671704007ebaSmrg# True if ARG is an import lib, as indicated by $file_magic_cmd 671804007ebaSmrgfunc_win32_import_lib_p () 671904007ebaSmrg{ 672005cf1079Smrg $debug_cmd 672105cf1079Smrg 672204007ebaSmrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 672304007ebaSmrg *import*) : ;; 672404007ebaSmrg *) false ;; 672504007ebaSmrg esac 672604007ebaSmrg} 672704007ebaSmrg 672805cf1079Smrg# func_suncc_cstd_abi 672905cf1079Smrg# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! 673005cf1079Smrg# Several compiler flags select an ABI that is incompatible with the 673105cf1079Smrg# Cstd library. Avoid specifying it if any are in CXXFLAGS. 673205cf1079Smrgfunc_suncc_cstd_abi () 673305cf1079Smrg{ 673405cf1079Smrg $debug_cmd 673505cf1079Smrg 673605cf1079Smrg case " $compile_command " in 673705cf1079Smrg *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) 673805cf1079Smrg suncc_use_cstd_abi=no 673905cf1079Smrg ;; 674005cf1079Smrg *) 674105cf1079Smrg suncc_use_cstd_abi=yes 674205cf1079Smrg ;; 674305cf1079Smrg esac 674405cf1079Smrg} 674505cf1079Smrg 674604007ebaSmrg# func_mode_link arg... 674704007ebaSmrgfunc_mode_link () 674804007ebaSmrg{ 674905cf1079Smrg $debug_cmd 675005cf1079Smrg 675104007ebaSmrg case $host in 675204007ebaSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 675304007ebaSmrg # It is impossible to link a dll without this setting, and 675404007ebaSmrg # we shouldn't force the makefile maintainer to figure out 675505cf1079Smrg # what system we are compiling for in order to pass an extra 675604007ebaSmrg # flag for every libtool invocation. 675704007ebaSmrg # allow_undefined=no 675804007ebaSmrg 675904007ebaSmrg # FIXME: Unfortunately, there are problems with the above when trying 676005cf1079Smrg # to make a dll that has undefined symbols, in which case not 676104007ebaSmrg # even a static library is built. For now, we need to specify 676204007ebaSmrg # -no-undefined on the libtool link line when we can be certain 676304007ebaSmrg # that all symbols are satisfied, otherwise we get a static library. 676404007ebaSmrg allow_undefined=yes 676504007ebaSmrg ;; 676604007ebaSmrg *) 676704007ebaSmrg allow_undefined=yes 676804007ebaSmrg ;; 676904007ebaSmrg esac 677004007ebaSmrg libtool_args=$nonopt 677104007ebaSmrg base_compile="$nonopt $@" 677204007ebaSmrg compile_command=$nonopt 677304007ebaSmrg finalize_command=$nonopt 677404007ebaSmrg 677504007ebaSmrg compile_rpath= 677604007ebaSmrg finalize_rpath= 677704007ebaSmrg compile_shlibpath= 677804007ebaSmrg finalize_shlibpath= 677904007ebaSmrg convenience= 678004007ebaSmrg old_convenience= 678104007ebaSmrg deplibs= 678204007ebaSmrg old_deplibs= 678304007ebaSmrg compiler_flags= 678404007ebaSmrg linker_flags= 678504007ebaSmrg dllsearchpath= 678604007ebaSmrg lib_search_path=`pwd` 678704007ebaSmrg inst_prefix_dir= 678804007ebaSmrg new_inherited_linker_flags= 678904007ebaSmrg 679004007ebaSmrg avoid_version=no 679104007ebaSmrg bindir= 679204007ebaSmrg dlfiles= 679304007ebaSmrg dlprefiles= 679404007ebaSmrg dlself=no 679504007ebaSmrg export_dynamic=no 679604007ebaSmrg export_symbols= 679704007ebaSmrg export_symbols_regex= 679804007ebaSmrg generated= 679904007ebaSmrg libobjs= 680004007ebaSmrg ltlibs= 680104007ebaSmrg module=no 680204007ebaSmrg no_install=no 680304007ebaSmrg objs= 680405cf1079Smrg os2dllname= 680504007ebaSmrg non_pic_objects= 680604007ebaSmrg precious_files_regex= 680704007ebaSmrg prefer_static_libs=no 680805cf1079Smrg preload=false 680904007ebaSmrg prev= 681004007ebaSmrg prevarg= 681104007ebaSmrg release= 681204007ebaSmrg rpath= 681304007ebaSmrg xrpath= 681404007ebaSmrg perm_rpath= 681504007ebaSmrg temp_rpath= 681604007ebaSmrg thread_safe=no 681704007ebaSmrg vinfo= 681804007ebaSmrg vinfo_number=no 681904007ebaSmrg weak_libs= 682005cf1079Smrg single_module=$wl-single_module 682104007ebaSmrg func_infer_tag $base_compile 682204007ebaSmrg 682304007ebaSmrg # We need to know -static, to get the right output filenames. 682404007ebaSmrg for arg 682504007ebaSmrg do 682604007ebaSmrg case $arg in 682704007ebaSmrg -shared) 682805cf1079Smrg test yes != "$build_libtool_libs" \ 682905cf1079Smrg && func_fatal_configuration "cannot build a shared library" 683004007ebaSmrg build_old_libs=no 683104007ebaSmrg break 683204007ebaSmrg ;; 683304007ebaSmrg -all-static | -static | -static-libtool-libs) 683404007ebaSmrg case $arg in 683504007ebaSmrg -all-static) 683605cf1079Smrg if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then 683704007ebaSmrg func_warning "complete static linking is impossible in this configuration" 683804007ebaSmrg fi 683904007ebaSmrg if test -n "$link_static_flag"; then 684004007ebaSmrg dlopen_self=$dlopen_self_static 684104007ebaSmrg fi 684204007ebaSmrg prefer_static_libs=yes 684304007ebaSmrg ;; 684404007ebaSmrg -static) 684504007ebaSmrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 684604007ebaSmrg dlopen_self=$dlopen_self_static 684704007ebaSmrg fi 684804007ebaSmrg prefer_static_libs=built 684904007ebaSmrg ;; 685004007ebaSmrg -static-libtool-libs) 685104007ebaSmrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 685204007ebaSmrg dlopen_self=$dlopen_self_static 685304007ebaSmrg fi 685404007ebaSmrg prefer_static_libs=yes 685504007ebaSmrg ;; 685604007ebaSmrg esac 685704007ebaSmrg build_libtool_libs=no 685804007ebaSmrg build_old_libs=yes 685904007ebaSmrg break 686004007ebaSmrg ;; 686104007ebaSmrg esac 686204007ebaSmrg done 686304007ebaSmrg 686404007ebaSmrg # See if our shared archives depend on static archives. 686504007ebaSmrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 686604007ebaSmrg 686704007ebaSmrg # Go through the arguments, transforming them on the way. 686804007ebaSmrg while test "$#" -gt 0; do 686905cf1079Smrg arg=$1 687004007ebaSmrg shift 687179d5fcd7Smrg func_quote_arg pretty,unquoted "$arg" 687279d5fcd7Smrg qarg=$func_quote_arg_unquoted_result 687379d5fcd7Smrg func_append libtool_args " $func_quote_arg_result" 687404007ebaSmrg 687504007ebaSmrg # If the previous option needs an argument, assign it. 687604007ebaSmrg if test -n "$prev"; then 687704007ebaSmrg case $prev in 687804007ebaSmrg output) 687904007ebaSmrg func_append compile_command " @OUTPUT@" 688004007ebaSmrg func_append finalize_command " @OUTPUT@" 688104007ebaSmrg ;; 688204007ebaSmrg esac 688304007ebaSmrg 688404007ebaSmrg case $prev in 688504007ebaSmrg bindir) 688605cf1079Smrg bindir=$arg 688704007ebaSmrg prev= 688804007ebaSmrg continue 688904007ebaSmrg ;; 689004007ebaSmrg dlfiles|dlprefiles) 689105cf1079Smrg $preload || { 689204007ebaSmrg # Add the symbol object into the linking commands. 689304007ebaSmrg func_append compile_command " @SYMFILE@" 689404007ebaSmrg func_append finalize_command " @SYMFILE@" 689505cf1079Smrg preload=: 689605cf1079Smrg } 689704007ebaSmrg case $arg in 689804007ebaSmrg *.la | *.lo) ;; # We handle these cases below. 689904007ebaSmrg force) 690005cf1079Smrg if test no = "$dlself"; then 690104007ebaSmrg dlself=needless 690204007ebaSmrg export_dynamic=yes 690304007ebaSmrg fi 690404007ebaSmrg prev= 690504007ebaSmrg continue 690604007ebaSmrg ;; 690704007ebaSmrg self) 690805cf1079Smrg if test dlprefiles = "$prev"; then 690904007ebaSmrg dlself=yes 691005cf1079Smrg elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then 691104007ebaSmrg dlself=yes 691204007ebaSmrg else 691304007ebaSmrg dlself=needless 691404007ebaSmrg export_dynamic=yes 691504007ebaSmrg fi 691604007ebaSmrg prev= 691704007ebaSmrg continue 691804007ebaSmrg ;; 691904007ebaSmrg *) 692005cf1079Smrg if test dlfiles = "$prev"; then 692104007ebaSmrg func_append dlfiles " $arg" 692204007ebaSmrg else 692304007ebaSmrg func_append dlprefiles " $arg" 692404007ebaSmrg fi 692504007ebaSmrg prev= 692604007ebaSmrg continue 692704007ebaSmrg ;; 692804007ebaSmrg esac 692904007ebaSmrg ;; 693004007ebaSmrg expsyms) 693105cf1079Smrg export_symbols=$arg 693204007ebaSmrg test -f "$arg" \ 693305cf1079Smrg || func_fatal_error "symbol file '$arg' does not exist" 693404007ebaSmrg prev= 693504007ebaSmrg continue 693604007ebaSmrg ;; 693704007ebaSmrg expsyms_regex) 693805cf1079Smrg export_symbols_regex=$arg 693904007ebaSmrg prev= 694004007ebaSmrg continue 694104007ebaSmrg ;; 694204007ebaSmrg framework) 694304007ebaSmrg case $host in 694404007ebaSmrg *-*-darwin*) 694504007ebaSmrg case "$deplibs " in 694604007ebaSmrg *" $qarg.ltframework "*) ;; 694704007ebaSmrg *) func_append deplibs " $qarg.ltframework" # this is fixed later 694804007ebaSmrg ;; 694904007ebaSmrg esac 695004007ebaSmrg ;; 695104007ebaSmrg esac 695204007ebaSmrg prev= 695304007ebaSmrg continue 695404007ebaSmrg ;; 695504007ebaSmrg inst_prefix) 695605cf1079Smrg inst_prefix_dir=$arg 695705cf1079Smrg prev= 695805cf1079Smrg continue 695905cf1079Smrg ;; 696005cf1079Smrg mllvm) 696105cf1079Smrg # Clang does not use LLVM to link, so we can simply discard any 696205cf1079Smrg # '-mllvm $arg' options when doing the link step. 696304007ebaSmrg prev= 696404007ebaSmrg continue 696504007ebaSmrg ;; 696604007ebaSmrg objectlist) 696704007ebaSmrg if test -f "$arg"; then 696804007ebaSmrg save_arg=$arg 696904007ebaSmrg moreargs= 697004007ebaSmrg for fil in `cat "$save_arg"` 697104007ebaSmrg do 697204007ebaSmrg# func_append moreargs " $fil" 697304007ebaSmrg arg=$fil 697404007ebaSmrg # A libtool-controlled object. 697504007ebaSmrg 697604007ebaSmrg # Check to see that this really is a libtool object. 697704007ebaSmrg if func_lalib_unsafe_p "$arg"; then 697804007ebaSmrg pic_object= 697904007ebaSmrg non_pic_object= 698004007ebaSmrg 698104007ebaSmrg # Read the .lo file 698204007ebaSmrg func_source "$arg" 698304007ebaSmrg 698404007ebaSmrg if test -z "$pic_object" || 698504007ebaSmrg test -z "$non_pic_object" || 698605cf1079Smrg test none = "$pic_object" && 698705cf1079Smrg test none = "$non_pic_object"; then 698805cf1079Smrg func_fatal_error "cannot find name of object for '$arg'" 698904007ebaSmrg fi 699004007ebaSmrg 699104007ebaSmrg # Extract subdirectory from the argument. 699204007ebaSmrg func_dirname "$arg" "/" "" 699305cf1079Smrg xdir=$func_dirname_result 699404007ebaSmrg 699505cf1079Smrg if test none != "$pic_object"; then 699604007ebaSmrg # Prepend the subdirectory the object is found in. 699705cf1079Smrg pic_object=$xdir$pic_object 699804007ebaSmrg 699905cf1079Smrg if test dlfiles = "$prev"; then 700005cf1079Smrg if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 700104007ebaSmrg func_append dlfiles " $pic_object" 700204007ebaSmrg prev= 700304007ebaSmrg continue 700404007ebaSmrg else 700504007ebaSmrg # If libtool objects are unsupported, then we need to preload. 700604007ebaSmrg prev=dlprefiles 700704007ebaSmrg fi 700804007ebaSmrg fi 700904007ebaSmrg 701004007ebaSmrg # CHECK ME: I think I busted this. -Ossama 701105cf1079Smrg if test dlprefiles = "$prev"; then 701204007ebaSmrg # Preload the old-style object. 701304007ebaSmrg func_append dlprefiles " $pic_object" 701404007ebaSmrg prev= 701504007ebaSmrg fi 701604007ebaSmrg 701704007ebaSmrg # A PIC object. 701804007ebaSmrg func_append libobjs " $pic_object" 701905cf1079Smrg arg=$pic_object 702004007ebaSmrg fi 702104007ebaSmrg 702204007ebaSmrg # Non-PIC object. 702305cf1079Smrg if test none != "$non_pic_object"; then 702404007ebaSmrg # Prepend the subdirectory the object is found in. 702505cf1079Smrg non_pic_object=$xdir$non_pic_object 702604007ebaSmrg 702704007ebaSmrg # A standard non-PIC object 702804007ebaSmrg func_append non_pic_objects " $non_pic_object" 702905cf1079Smrg if test -z "$pic_object" || test none = "$pic_object"; then 703005cf1079Smrg arg=$non_pic_object 703104007ebaSmrg fi 703204007ebaSmrg else 703304007ebaSmrg # If the PIC object exists, use it instead. 703404007ebaSmrg # $xdir was prepended to $pic_object above. 703505cf1079Smrg non_pic_object=$pic_object 703604007ebaSmrg func_append non_pic_objects " $non_pic_object" 703704007ebaSmrg fi 703804007ebaSmrg else 703904007ebaSmrg # Only an error if not doing a dry-run. 704004007ebaSmrg if $opt_dry_run; then 704104007ebaSmrg # Extract subdirectory from the argument. 704204007ebaSmrg func_dirname "$arg" "/" "" 704305cf1079Smrg xdir=$func_dirname_result 704404007ebaSmrg 704504007ebaSmrg func_lo2o "$arg" 704604007ebaSmrg pic_object=$xdir$objdir/$func_lo2o_result 704704007ebaSmrg non_pic_object=$xdir$func_lo2o_result 704804007ebaSmrg func_append libobjs " $pic_object" 704904007ebaSmrg func_append non_pic_objects " $non_pic_object" 705004007ebaSmrg else 705105cf1079Smrg func_fatal_error "'$arg' is not a valid libtool object" 705204007ebaSmrg fi 705304007ebaSmrg fi 705404007ebaSmrg done 705504007ebaSmrg else 705605cf1079Smrg func_fatal_error "link input file '$arg' does not exist" 705704007ebaSmrg fi 705804007ebaSmrg arg=$save_arg 705904007ebaSmrg prev= 706004007ebaSmrg continue 706104007ebaSmrg ;; 706205cf1079Smrg os2dllname) 706305cf1079Smrg os2dllname=$arg 706405cf1079Smrg prev= 706505cf1079Smrg continue 706605cf1079Smrg ;; 706704007ebaSmrg precious_regex) 706805cf1079Smrg precious_files_regex=$arg 706904007ebaSmrg prev= 707004007ebaSmrg continue 707104007ebaSmrg ;; 707204007ebaSmrg release) 707305cf1079Smrg release=-$arg 707404007ebaSmrg prev= 707504007ebaSmrg continue 707604007ebaSmrg ;; 707704007ebaSmrg rpath | xrpath) 707804007ebaSmrg # We need an absolute path. 707904007ebaSmrg case $arg in 708004007ebaSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 708104007ebaSmrg *) 708204007ebaSmrg func_fatal_error "only absolute run-paths are allowed" 708304007ebaSmrg ;; 708404007ebaSmrg esac 708505cf1079Smrg if test rpath = "$prev"; then 708604007ebaSmrg case "$rpath " in 708704007ebaSmrg *" $arg "*) ;; 708804007ebaSmrg *) func_append rpath " $arg" ;; 708904007ebaSmrg esac 709004007ebaSmrg else 709104007ebaSmrg case "$xrpath " in 709204007ebaSmrg *" $arg "*) ;; 709304007ebaSmrg *) func_append xrpath " $arg" ;; 709404007ebaSmrg esac 709504007ebaSmrg fi 709604007ebaSmrg prev= 709704007ebaSmrg continue 709804007ebaSmrg ;; 709904007ebaSmrg shrext) 710005cf1079Smrg shrext_cmds=$arg 710104007ebaSmrg prev= 710204007ebaSmrg continue 710304007ebaSmrg ;; 710404007ebaSmrg weak) 710504007ebaSmrg func_append weak_libs " $arg" 710604007ebaSmrg prev= 710704007ebaSmrg continue 710804007ebaSmrg ;; 710979d5fcd7Smrg xassembler) 711079d5fcd7Smrg func_append compiler_flags " -Xassembler $qarg" 711179d5fcd7Smrg prev= 711279d5fcd7Smrg func_append compile_command " -Xassembler $qarg" 711379d5fcd7Smrg func_append finalize_command " -Xassembler $qarg" 711479d5fcd7Smrg continue 711579d5fcd7Smrg ;; 711604007ebaSmrg xcclinker) 711704007ebaSmrg func_append linker_flags " $qarg" 711804007ebaSmrg func_append compiler_flags " $qarg" 711904007ebaSmrg prev= 712004007ebaSmrg func_append compile_command " $qarg" 712104007ebaSmrg func_append finalize_command " $qarg" 712204007ebaSmrg continue 712304007ebaSmrg ;; 712404007ebaSmrg xcompiler) 712504007ebaSmrg func_append compiler_flags " $qarg" 712604007ebaSmrg prev= 712704007ebaSmrg func_append compile_command " $qarg" 712804007ebaSmrg func_append finalize_command " $qarg" 712904007ebaSmrg continue 713004007ebaSmrg ;; 713104007ebaSmrg xlinker) 713204007ebaSmrg func_append linker_flags " $qarg" 713304007ebaSmrg func_append compiler_flags " $wl$qarg" 713404007ebaSmrg prev= 713504007ebaSmrg func_append compile_command " $wl$qarg" 713604007ebaSmrg func_append finalize_command " $wl$qarg" 713704007ebaSmrg continue 713804007ebaSmrg ;; 713904007ebaSmrg *) 714004007ebaSmrg eval "$prev=\"\$arg\"" 714104007ebaSmrg prev= 714204007ebaSmrg continue 714304007ebaSmrg ;; 714404007ebaSmrg esac 714504007ebaSmrg fi # test -n "$prev" 714604007ebaSmrg 714705cf1079Smrg prevarg=$arg 714804007ebaSmrg 714904007ebaSmrg case $arg in 715004007ebaSmrg -all-static) 715104007ebaSmrg if test -n "$link_static_flag"; then 715204007ebaSmrg # See comment for -static flag below, for more details. 715304007ebaSmrg func_append compile_command " $link_static_flag" 715404007ebaSmrg func_append finalize_command " $link_static_flag" 715504007ebaSmrg fi 715604007ebaSmrg continue 715704007ebaSmrg ;; 715804007ebaSmrg 715904007ebaSmrg -allow-undefined) 716004007ebaSmrg # FIXME: remove this flag sometime in the future. 716105cf1079Smrg func_fatal_error "'-allow-undefined' must not be used because it is the default" 716204007ebaSmrg ;; 716304007ebaSmrg 716404007ebaSmrg -avoid-version) 716504007ebaSmrg avoid_version=yes 716604007ebaSmrg continue 716704007ebaSmrg ;; 716804007ebaSmrg 716904007ebaSmrg -bindir) 717004007ebaSmrg prev=bindir 717104007ebaSmrg continue 717204007ebaSmrg ;; 717304007ebaSmrg 717404007ebaSmrg -dlopen) 717504007ebaSmrg prev=dlfiles 717604007ebaSmrg continue 717704007ebaSmrg ;; 717804007ebaSmrg 717904007ebaSmrg -dlpreopen) 718004007ebaSmrg prev=dlprefiles 718104007ebaSmrg continue 718204007ebaSmrg ;; 718304007ebaSmrg 718404007ebaSmrg -export-dynamic) 718504007ebaSmrg export_dynamic=yes 718604007ebaSmrg continue 718704007ebaSmrg ;; 718804007ebaSmrg 718904007ebaSmrg -export-symbols | -export-symbols-regex) 719004007ebaSmrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 719104007ebaSmrg func_fatal_error "more than one -exported-symbols argument is not allowed" 719204007ebaSmrg fi 719305cf1079Smrg if test X-export-symbols = "X$arg"; then 719404007ebaSmrg prev=expsyms 719504007ebaSmrg else 719604007ebaSmrg prev=expsyms_regex 719704007ebaSmrg fi 719804007ebaSmrg continue 719904007ebaSmrg ;; 720004007ebaSmrg 720104007ebaSmrg -framework) 720204007ebaSmrg prev=framework 720304007ebaSmrg continue 720404007ebaSmrg ;; 720504007ebaSmrg 720604007ebaSmrg -inst-prefix-dir) 720704007ebaSmrg prev=inst_prefix 720804007ebaSmrg continue 720904007ebaSmrg ;; 721004007ebaSmrg 721104007ebaSmrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 721204007ebaSmrg # so, if we see these flags be careful not to treat them like -L 721304007ebaSmrg -L[A-Z][A-Z]*:*) 721404007ebaSmrg case $with_gcc/$host in 721504007ebaSmrg no/*-*-irix* | /*-*-irix*) 721604007ebaSmrg func_append compile_command " $arg" 721704007ebaSmrg func_append finalize_command " $arg" 721804007ebaSmrg ;; 721904007ebaSmrg esac 722004007ebaSmrg continue 722104007ebaSmrg ;; 722204007ebaSmrg 722304007ebaSmrg -L*) 722404007ebaSmrg func_stripname "-L" '' "$arg" 722504007ebaSmrg if test -z "$func_stripname_result"; then 722604007ebaSmrg if test "$#" -gt 0; then 722705cf1079Smrg func_fatal_error "require no space between '-L' and '$1'" 722804007ebaSmrg else 722905cf1079Smrg func_fatal_error "need path for '-L' option" 723004007ebaSmrg fi 723104007ebaSmrg fi 723204007ebaSmrg func_resolve_sysroot "$func_stripname_result" 723304007ebaSmrg dir=$func_resolve_sysroot_result 723404007ebaSmrg # We need an absolute path. 723504007ebaSmrg case $dir in 723604007ebaSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 723704007ebaSmrg *) 723804007ebaSmrg absdir=`cd "$dir" && pwd` 723904007ebaSmrg test -z "$absdir" && \ 724005cf1079Smrg func_fatal_error "cannot determine absolute directory name of '$dir'" 724105cf1079Smrg dir=$absdir 724204007ebaSmrg ;; 724304007ebaSmrg esac 724404007ebaSmrg case "$deplibs " in 724504007ebaSmrg *" -L$dir "* | *" $arg "*) 724604007ebaSmrg # Will only happen for absolute or sysroot arguments 724704007ebaSmrg ;; 724804007ebaSmrg *) 724904007ebaSmrg # Preserve sysroot, but never include relative directories 725004007ebaSmrg case $dir in 725104007ebaSmrg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 725204007ebaSmrg *) func_append deplibs " -L$dir" ;; 725304007ebaSmrg esac 725404007ebaSmrg func_append lib_search_path " $dir" 725504007ebaSmrg ;; 725604007ebaSmrg esac 725704007ebaSmrg case $host in 725804007ebaSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 725904007ebaSmrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 726004007ebaSmrg case :$dllsearchpath: in 726104007ebaSmrg *":$dir:"*) ;; 726204007ebaSmrg ::) dllsearchpath=$dir;; 726304007ebaSmrg *) func_append dllsearchpath ":$dir";; 726404007ebaSmrg esac 726504007ebaSmrg case :$dllsearchpath: in 726604007ebaSmrg *":$testbindir:"*) ;; 726704007ebaSmrg ::) dllsearchpath=$testbindir;; 726804007ebaSmrg *) func_append dllsearchpath ":$testbindir";; 726904007ebaSmrg esac 727004007ebaSmrg ;; 727104007ebaSmrg esac 727204007ebaSmrg continue 727304007ebaSmrg ;; 727404007ebaSmrg 727504007ebaSmrg -l*) 727605cf1079Smrg if test X-lc = "X$arg" || test X-lm = "X$arg"; then 727704007ebaSmrg case $host in 727804007ebaSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 727904007ebaSmrg # These systems don't actually have a C or math library (as such) 728004007ebaSmrg continue 728104007ebaSmrg ;; 728204007ebaSmrg *-*-os2*) 728304007ebaSmrg # These systems don't actually have a C library (as such) 728405cf1079Smrg test X-lc = "X$arg" && continue 728504007ebaSmrg ;; 728679d5fcd7Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) 728704007ebaSmrg # Do not include libc due to us having libc/libc_r. 728805cf1079Smrg test X-lc = "X$arg" && continue 728904007ebaSmrg ;; 729004007ebaSmrg *-*-rhapsody* | *-*-darwin1.[012]) 729104007ebaSmrg # Rhapsody C and math libraries are in the System framework 729204007ebaSmrg func_append deplibs " System.ltframework" 729304007ebaSmrg continue 729404007ebaSmrg ;; 729504007ebaSmrg *-*-sco3.2v5* | *-*-sco5v6*) 729604007ebaSmrg # Causes problems with __ctype 729705cf1079Smrg test X-lc = "X$arg" && continue 729804007ebaSmrg ;; 729904007ebaSmrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 730004007ebaSmrg # Compiler inserts libc in the correct place for threads to work 730105cf1079Smrg test X-lc = "X$arg" && continue 730204007ebaSmrg ;; 730304007ebaSmrg esac 730405cf1079Smrg elif test X-lc_r = "X$arg"; then 730504007ebaSmrg case $host in 730679d5fcd7Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) 730704007ebaSmrg # Do not include libc_r directly, use -pthread flag. 730804007ebaSmrg continue 730904007ebaSmrg ;; 731004007ebaSmrg esac 731104007ebaSmrg fi 731204007ebaSmrg func_append deplibs " $arg" 731304007ebaSmrg continue 731404007ebaSmrg ;; 731504007ebaSmrg 731605cf1079Smrg -mllvm) 731705cf1079Smrg prev=mllvm 731805cf1079Smrg continue 731905cf1079Smrg ;; 732005cf1079Smrg 732104007ebaSmrg -module) 732204007ebaSmrg module=yes 732304007ebaSmrg continue 732404007ebaSmrg ;; 732504007ebaSmrg 732604007ebaSmrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 732704007ebaSmrg # classes, name mangling, and exception handling. 732804007ebaSmrg # Darwin uses the -arch flag to determine output architecture. 732904007ebaSmrg -model|-arch|-isysroot|--sysroot) 733004007ebaSmrg func_append compiler_flags " $arg" 733104007ebaSmrg func_append compile_command " $arg" 733204007ebaSmrg func_append finalize_command " $arg" 733304007ebaSmrg prev=xcompiler 733404007ebaSmrg continue 733504007ebaSmrg ;; 733679d5fcd7Smrg # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199. 733779d5fcd7Smrg -pthread) 733879d5fcd7Smrg case $host in 733979d5fcd7Smrg *solaris2*) ;; 734079d5fcd7Smrg *) 734179d5fcd7Smrg case "$new_inherited_linker_flags " in 734279d5fcd7Smrg *" $arg "*) ;; 734379d5fcd7Smrg * ) func_append new_inherited_linker_flags " $arg" ;; 734479d5fcd7Smrg esac 734579d5fcd7Smrg ;; 734679d5fcd7Smrg esac 734779d5fcd7Smrg continue 734879d5fcd7Smrg ;; 734979d5fcd7Smrg -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \ 735004007ebaSmrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 735104007ebaSmrg func_append compiler_flags " $arg" 735204007ebaSmrg func_append compile_command " $arg" 735304007ebaSmrg func_append finalize_command " $arg" 735404007ebaSmrg case "$new_inherited_linker_flags " in 735504007ebaSmrg *" $arg "*) ;; 735604007ebaSmrg * ) func_append new_inherited_linker_flags " $arg" ;; 735704007ebaSmrg esac 735804007ebaSmrg continue 735904007ebaSmrg ;; 736004007ebaSmrg 736104007ebaSmrg -multi_module) 736205cf1079Smrg single_module=$wl-multi_module 736304007ebaSmrg continue 736404007ebaSmrg ;; 736504007ebaSmrg 736604007ebaSmrg -no-fast-install) 736704007ebaSmrg fast_install=no 736804007ebaSmrg continue 736904007ebaSmrg ;; 737004007ebaSmrg 737104007ebaSmrg -no-install) 737204007ebaSmrg case $host in 737304007ebaSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 737404007ebaSmrg # The PATH hackery in wrapper scripts is required on Windows 737504007ebaSmrg # and Darwin in order for the loader to find any dlls it needs. 737605cf1079Smrg func_warning "'-no-install' is ignored for $host" 737705cf1079Smrg func_warning "assuming '-no-fast-install' instead" 737804007ebaSmrg fast_install=no 737904007ebaSmrg ;; 738004007ebaSmrg *) no_install=yes ;; 738104007ebaSmrg esac 738204007ebaSmrg continue 738304007ebaSmrg ;; 738404007ebaSmrg 738504007ebaSmrg -no-undefined) 738604007ebaSmrg allow_undefined=no 738704007ebaSmrg continue 738804007ebaSmrg ;; 738904007ebaSmrg 739004007ebaSmrg -objectlist) 739104007ebaSmrg prev=objectlist 739204007ebaSmrg continue 739304007ebaSmrg ;; 739404007ebaSmrg 739505cf1079Smrg -os2dllname) 739605cf1079Smrg prev=os2dllname 739705cf1079Smrg continue 739805cf1079Smrg ;; 739905cf1079Smrg 740004007ebaSmrg -o) prev=output ;; 740104007ebaSmrg 740204007ebaSmrg -precious-files-regex) 740304007ebaSmrg prev=precious_regex 740404007ebaSmrg continue 740504007ebaSmrg ;; 740604007ebaSmrg 740704007ebaSmrg -release) 740804007ebaSmrg prev=release 740904007ebaSmrg continue 741004007ebaSmrg ;; 741104007ebaSmrg 741204007ebaSmrg -rpath) 741304007ebaSmrg prev=rpath 741404007ebaSmrg continue 741504007ebaSmrg ;; 741604007ebaSmrg 741704007ebaSmrg -R) 741804007ebaSmrg prev=xrpath 741904007ebaSmrg continue 742004007ebaSmrg ;; 742104007ebaSmrg 742204007ebaSmrg -R*) 742304007ebaSmrg func_stripname '-R' '' "$arg" 742404007ebaSmrg dir=$func_stripname_result 742504007ebaSmrg # We need an absolute path. 742604007ebaSmrg case $dir in 742704007ebaSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 742804007ebaSmrg =*) 742904007ebaSmrg func_stripname '=' '' "$dir" 743004007ebaSmrg dir=$lt_sysroot$func_stripname_result 743104007ebaSmrg ;; 743204007ebaSmrg *) 743304007ebaSmrg func_fatal_error "only absolute run-paths are allowed" 743404007ebaSmrg ;; 743504007ebaSmrg esac 743604007ebaSmrg case "$xrpath " in 743704007ebaSmrg *" $dir "*) ;; 743804007ebaSmrg *) func_append xrpath " $dir" ;; 743904007ebaSmrg esac 744004007ebaSmrg continue 744104007ebaSmrg ;; 744204007ebaSmrg 744304007ebaSmrg -shared) 744404007ebaSmrg # The effects of -shared are defined in a previous loop. 744504007ebaSmrg continue 744604007ebaSmrg ;; 744704007ebaSmrg 744804007ebaSmrg -shrext) 744904007ebaSmrg prev=shrext 745004007ebaSmrg continue 745104007ebaSmrg ;; 745204007ebaSmrg 745304007ebaSmrg -static | -static-libtool-libs) 745404007ebaSmrg # The effects of -static are defined in a previous loop. 745504007ebaSmrg # We used to do the same as -all-static on platforms that 745604007ebaSmrg # didn't have a PIC flag, but the assumption that the effects 745704007ebaSmrg # would be equivalent was wrong. It would break on at least 745804007ebaSmrg # Digital Unix and AIX. 745904007ebaSmrg continue 746004007ebaSmrg ;; 746104007ebaSmrg 746204007ebaSmrg -thread-safe) 746304007ebaSmrg thread_safe=yes 746404007ebaSmrg continue 746504007ebaSmrg ;; 746604007ebaSmrg 746704007ebaSmrg -version-info) 746804007ebaSmrg prev=vinfo 746904007ebaSmrg continue 747004007ebaSmrg ;; 747104007ebaSmrg 747204007ebaSmrg -version-number) 747304007ebaSmrg prev=vinfo 747404007ebaSmrg vinfo_number=yes 747504007ebaSmrg continue 747604007ebaSmrg ;; 747704007ebaSmrg 747804007ebaSmrg -weak) 747904007ebaSmrg prev=weak 748004007ebaSmrg continue 748104007ebaSmrg ;; 748204007ebaSmrg 748304007ebaSmrg -Wc,*) 748404007ebaSmrg func_stripname '-Wc,' '' "$arg" 748504007ebaSmrg args=$func_stripname_result 748604007ebaSmrg arg= 748705cf1079Smrg save_ifs=$IFS; IFS=, 748804007ebaSmrg for flag in $args; do 748905cf1079Smrg IFS=$save_ifs 749079d5fcd7Smrg func_quote_arg pretty "$flag" 749179d5fcd7Smrg func_append arg " $func_quote_arg_result" 749279d5fcd7Smrg func_append compiler_flags " $func_quote_arg_result" 749304007ebaSmrg done 749405cf1079Smrg IFS=$save_ifs 749504007ebaSmrg func_stripname ' ' '' "$arg" 749604007ebaSmrg arg=$func_stripname_result 749704007ebaSmrg ;; 749804007ebaSmrg 749904007ebaSmrg -Wl,*) 750004007ebaSmrg func_stripname '-Wl,' '' "$arg" 750104007ebaSmrg args=$func_stripname_result 750204007ebaSmrg arg= 750305cf1079Smrg save_ifs=$IFS; IFS=, 750404007ebaSmrg for flag in $args; do 750505cf1079Smrg IFS=$save_ifs 750679d5fcd7Smrg func_quote_arg pretty "$flag" 750779d5fcd7Smrg func_append arg " $wl$func_quote_arg_result" 750879d5fcd7Smrg func_append compiler_flags " $wl$func_quote_arg_result" 750979d5fcd7Smrg func_append linker_flags " $func_quote_arg_result" 751004007ebaSmrg done 751105cf1079Smrg IFS=$save_ifs 751204007ebaSmrg func_stripname ' ' '' "$arg" 751304007ebaSmrg arg=$func_stripname_result 751404007ebaSmrg ;; 751504007ebaSmrg 751679d5fcd7Smrg -Xassembler) 751779d5fcd7Smrg prev=xassembler 751879d5fcd7Smrg continue 751979d5fcd7Smrg ;; 752079d5fcd7Smrg 752104007ebaSmrg -Xcompiler) 752204007ebaSmrg prev=xcompiler 752304007ebaSmrg continue 752404007ebaSmrg ;; 752504007ebaSmrg 752604007ebaSmrg -Xlinker) 752704007ebaSmrg prev=xlinker 752804007ebaSmrg continue 752904007ebaSmrg ;; 753004007ebaSmrg 753104007ebaSmrg -XCClinker) 753204007ebaSmrg prev=xcclinker 753304007ebaSmrg continue 753404007ebaSmrg ;; 753504007ebaSmrg 753604007ebaSmrg # -msg_* for osf cc 753704007ebaSmrg -msg_*) 753879d5fcd7Smrg func_quote_arg pretty "$arg" 753979d5fcd7Smrg arg=$func_quote_arg_result 754004007ebaSmrg ;; 754104007ebaSmrg 754204007ebaSmrg # Flags to be passed through unchanged, with rationale: 754304007ebaSmrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 754404007ebaSmrg # -r[0-9][0-9]* specify processor for the SGI compiler 754504007ebaSmrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 754604007ebaSmrg # +DA*, +DD* enable 64-bit mode for the HP compiler 754704007ebaSmrg # -q* compiler args for the IBM compiler 754804007ebaSmrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 754904007ebaSmrg # -F/path path to uninstalled frameworks, gcc on darwin 755004007ebaSmrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 755105cf1079Smrg # -fstack-protector* stack protector flags for GCC 755204007ebaSmrg # @file GCC response files 755304007ebaSmrg # -tp=* Portland pgcc target processor selection 755404007ebaSmrg # --sysroot=* for sysroot support 755505cf1079Smrg # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 755605cf1079Smrg # -specs=* GCC specs files 755705cf1079Smrg # -stdlib=* select c++ std lib with clang 755805cf1079Smrg # -fsanitize=* Clang/GCC memory and address sanitizer 755905cf1079Smrg # -fuse-ld=* Linker select flags for GCC 756079d5fcd7Smrg # -Wa,* Pass flags directly to the assembler 756104007ebaSmrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 756204007ebaSmrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 756305cf1079Smrg -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ 756479d5fcd7Smrg -specs=*|-fsanitize=*|-fuse-ld=*|-Wa,*) 756579d5fcd7Smrg func_quote_arg pretty "$arg" 756679d5fcd7Smrg arg=$func_quote_arg_result 756704007ebaSmrg func_append compile_command " $arg" 756804007ebaSmrg func_append finalize_command " $arg" 756904007ebaSmrg func_append compiler_flags " $arg" 757004007ebaSmrg continue 757104007ebaSmrg ;; 757204007ebaSmrg 757305cf1079Smrg -Z*) 757405cf1079Smrg if test os2 = "`expr $host : '.*\(os2\)'`"; then 757505cf1079Smrg # OS/2 uses -Zxxx to specify OS/2-specific options 757605cf1079Smrg compiler_flags="$compiler_flags $arg" 757705cf1079Smrg func_append compile_command " $arg" 757805cf1079Smrg func_append finalize_command " $arg" 757905cf1079Smrg case $arg in 758005cf1079Smrg -Zlinker | -Zstack) 758105cf1079Smrg prev=xcompiler 758205cf1079Smrg ;; 758305cf1079Smrg esac 758405cf1079Smrg continue 758505cf1079Smrg else 758605cf1079Smrg # Otherwise treat like 'Some other compiler flag' below 758779d5fcd7Smrg func_quote_arg pretty "$arg" 758879d5fcd7Smrg arg=$func_quote_arg_result 758905cf1079Smrg fi 759005cf1079Smrg ;; 759105cf1079Smrg 759204007ebaSmrg # Some other compiler flag. 759304007ebaSmrg -* | +*) 759479d5fcd7Smrg func_quote_arg pretty "$arg" 759579d5fcd7Smrg arg=$func_quote_arg_result 759604007ebaSmrg ;; 759704007ebaSmrg 759804007ebaSmrg *.$objext) 759904007ebaSmrg # A standard object. 760004007ebaSmrg func_append objs " $arg" 760104007ebaSmrg ;; 760204007ebaSmrg 760304007ebaSmrg *.lo) 760404007ebaSmrg # A libtool-controlled object. 760504007ebaSmrg 760604007ebaSmrg # Check to see that this really is a libtool object. 760704007ebaSmrg if func_lalib_unsafe_p "$arg"; then 760804007ebaSmrg pic_object= 760904007ebaSmrg non_pic_object= 761004007ebaSmrg 761104007ebaSmrg # Read the .lo file 761204007ebaSmrg func_source "$arg" 761304007ebaSmrg 761404007ebaSmrg if test -z "$pic_object" || 761504007ebaSmrg test -z "$non_pic_object" || 761605cf1079Smrg test none = "$pic_object" && 761705cf1079Smrg test none = "$non_pic_object"; then 761805cf1079Smrg func_fatal_error "cannot find name of object for '$arg'" 761904007ebaSmrg fi 762004007ebaSmrg 762104007ebaSmrg # Extract subdirectory from the argument. 762204007ebaSmrg func_dirname "$arg" "/" "" 762305cf1079Smrg xdir=$func_dirname_result 762404007ebaSmrg 762505cf1079Smrg test none = "$pic_object" || { 762604007ebaSmrg # Prepend the subdirectory the object is found in. 762705cf1079Smrg pic_object=$xdir$pic_object 762804007ebaSmrg 762905cf1079Smrg if test dlfiles = "$prev"; then 763005cf1079Smrg if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 763104007ebaSmrg func_append dlfiles " $pic_object" 763204007ebaSmrg prev= 763304007ebaSmrg continue 763404007ebaSmrg else 763504007ebaSmrg # If libtool objects are unsupported, then we need to preload. 763604007ebaSmrg prev=dlprefiles 763704007ebaSmrg fi 763804007ebaSmrg fi 763904007ebaSmrg 764004007ebaSmrg # CHECK ME: I think I busted this. -Ossama 764105cf1079Smrg if test dlprefiles = "$prev"; then 764204007ebaSmrg # Preload the old-style object. 764304007ebaSmrg func_append dlprefiles " $pic_object" 764404007ebaSmrg prev= 764504007ebaSmrg fi 764604007ebaSmrg 764704007ebaSmrg # A PIC object. 764804007ebaSmrg func_append libobjs " $pic_object" 764905cf1079Smrg arg=$pic_object 765005cf1079Smrg } 765104007ebaSmrg 765204007ebaSmrg # Non-PIC object. 765305cf1079Smrg if test none != "$non_pic_object"; then 765404007ebaSmrg # Prepend the subdirectory the object is found in. 765505cf1079Smrg non_pic_object=$xdir$non_pic_object 765604007ebaSmrg 765704007ebaSmrg # A standard non-PIC object 765804007ebaSmrg func_append non_pic_objects " $non_pic_object" 765905cf1079Smrg if test -z "$pic_object" || test none = "$pic_object"; then 766005cf1079Smrg arg=$non_pic_object 766104007ebaSmrg fi 766204007ebaSmrg else 766304007ebaSmrg # If the PIC object exists, use it instead. 766404007ebaSmrg # $xdir was prepended to $pic_object above. 766505cf1079Smrg non_pic_object=$pic_object 766604007ebaSmrg func_append non_pic_objects " $non_pic_object" 766704007ebaSmrg fi 766804007ebaSmrg else 766904007ebaSmrg # Only an error if not doing a dry-run. 767004007ebaSmrg if $opt_dry_run; then 767104007ebaSmrg # Extract subdirectory from the argument. 767204007ebaSmrg func_dirname "$arg" "/" "" 767305cf1079Smrg xdir=$func_dirname_result 767404007ebaSmrg 767504007ebaSmrg func_lo2o "$arg" 767604007ebaSmrg pic_object=$xdir$objdir/$func_lo2o_result 767704007ebaSmrg non_pic_object=$xdir$func_lo2o_result 767804007ebaSmrg func_append libobjs " $pic_object" 767904007ebaSmrg func_append non_pic_objects " $non_pic_object" 768004007ebaSmrg else 768105cf1079Smrg func_fatal_error "'$arg' is not a valid libtool object" 768204007ebaSmrg fi 768304007ebaSmrg fi 768404007ebaSmrg ;; 768504007ebaSmrg 768604007ebaSmrg *.$libext) 768704007ebaSmrg # An archive. 768804007ebaSmrg func_append deplibs " $arg" 768904007ebaSmrg func_append old_deplibs " $arg" 769004007ebaSmrg continue 769104007ebaSmrg ;; 769204007ebaSmrg 769304007ebaSmrg *.la) 769404007ebaSmrg # A libtool-controlled library. 769504007ebaSmrg 769604007ebaSmrg func_resolve_sysroot "$arg" 769705cf1079Smrg if test dlfiles = "$prev"; then 769804007ebaSmrg # This library was specified with -dlopen. 769904007ebaSmrg func_append dlfiles " $func_resolve_sysroot_result" 770004007ebaSmrg prev= 770105cf1079Smrg elif test dlprefiles = "$prev"; then 770204007ebaSmrg # The library was specified with -dlpreopen. 770304007ebaSmrg func_append dlprefiles " $func_resolve_sysroot_result" 770404007ebaSmrg prev= 770504007ebaSmrg else 770604007ebaSmrg func_append deplibs " $func_resolve_sysroot_result" 770704007ebaSmrg fi 770804007ebaSmrg continue 770904007ebaSmrg ;; 771004007ebaSmrg 771104007ebaSmrg # Some other compiler argument. 771204007ebaSmrg *) 771304007ebaSmrg # Unknown arguments in both finalize_command and compile_command need 771404007ebaSmrg # to be aesthetically quoted because they are evaled later. 771579d5fcd7Smrg func_quote_arg pretty "$arg" 771679d5fcd7Smrg arg=$func_quote_arg_result 771704007ebaSmrg ;; 771804007ebaSmrg esac # arg 771904007ebaSmrg 772004007ebaSmrg # Now actually substitute the argument into the commands. 772104007ebaSmrg if test -n "$arg"; then 772204007ebaSmrg func_append compile_command " $arg" 772304007ebaSmrg func_append finalize_command " $arg" 772404007ebaSmrg fi 772504007ebaSmrg done # argument parsing loop 772604007ebaSmrg 772704007ebaSmrg test -n "$prev" && \ 772805cf1079Smrg func_fatal_help "the '$prevarg' option requires an argument" 772904007ebaSmrg 773005cf1079Smrg if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then 773104007ebaSmrg eval arg=\"$export_dynamic_flag_spec\" 773204007ebaSmrg func_append compile_command " $arg" 773304007ebaSmrg func_append finalize_command " $arg" 773404007ebaSmrg fi 773504007ebaSmrg 773604007ebaSmrg oldlibs= 773704007ebaSmrg # calculate the name of the file, without its directory 773804007ebaSmrg func_basename "$output" 773905cf1079Smrg outputname=$func_basename_result 774005cf1079Smrg libobjs_save=$libobjs 774104007ebaSmrg 774204007ebaSmrg if test -n "$shlibpath_var"; then 774304007ebaSmrg # get the directories listed in $shlibpath_var 774405cf1079Smrg eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` 774504007ebaSmrg else 774604007ebaSmrg shlib_search_path= 774704007ebaSmrg fi 774804007ebaSmrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 774904007ebaSmrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 775004007ebaSmrg 775105cf1079Smrg # Definition is injected by LT_CONFIG during libtool generation. 775205cf1079Smrg func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" 775305cf1079Smrg 775404007ebaSmrg func_dirname "$output" "/" "" 775505cf1079Smrg output_objdir=$func_dirname_result$objdir 775604007ebaSmrg func_to_tool_file "$output_objdir/" 775704007ebaSmrg tool_output_objdir=$func_to_tool_file_result 775804007ebaSmrg # Create the object directory. 775904007ebaSmrg func_mkdir_p "$output_objdir" 776004007ebaSmrg 776104007ebaSmrg # Determine the type of output 776204007ebaSmrg case $output in 776304007ebaSmrg "") 776404007ebaSmrg func_fatal_help "you must specify an output file" 776504007ebaSmrg ;; 776604007ebaSmrg *.$libext) linkmode=oldlib ;; 776704007ebaSmrg *.lo | *.$objext) linkmode=obj ;; 776804007ebaSmrg *.la) linkmode=lib ;; 776904007ebaSmrg *) linkmode=prog ;; # Anything else should be a program. 777004007ebaSmrg esac 777104007ebaSmrg 777204007ebaSmrg specialdeplibs= 777304007ebaSmrg 777404007ebaSmrg libs= 777504007ebaSmrg # Find all interdependent deplibs by searching for libraries 777604007ebaSmrg # that are linked more than once (e.g. -la -lb -la) 777704007ebaSmrg for deplib in $deplibs; do 777805cf1079Smrg if $opt_preserve_dup_deps; then 777904007ebaSmrg case "$libs " in 778004007ebaSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 778104007ebaSmrg esac 778204007ebaSmrg fi 778304007ebaSmrg func_append libs " $deplib" 778404007ebaSmrg done 778504007ebaSmrg 778605cf1079Smrg if test lib = "$linkmode"; then 778704007ebaSmrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 778804007ebaSmrg 778904007ebaSmrg # Compute libraries that are listed more than once in $predeps 779004007ebaSmrg # $postdeps and mark them as special (i.e., whose duplicates are 779104007ebaSmrg # not to be eliminated). 779204007ebaSmrg pre_post_deps= 779304007ebaSmrg if $opt_duplicate_compiler_generated_deps; then 779404007ebaSmrg for pre_post_dep in $predeps $postdeps; do 779504007ebaSmrg case "$pre_post_deps " in 779604007ebaSmrg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 779704007ebaSmrg esac 779804007ebaSmrg func_append pre_post_deps " $pre_post_dep" 779904007ebaSmrg done 780004007ebaSmrg fi 780104007ebaSmrg pre_post_deps= 780204007ebaSmrg fi 780304007ebaSmrg 780404007ebaSmrg deplibs= 780504007ebaSmrg newdependency_libs= 780604007ebaSmrg newlib_search_path= 780704007ebaSmrg need_relink=no # whether we're linking any uninstalled libtool libraries 780804007ebaSmrg notinst_deplibs= # not-installed libtool libraries 780904007ebaSmrg notinst_path= # paths that contain not-installed libtool libraries 781004007ebaSmrg 781104007ebaSmrg case $linkmode in 781204007ebaSmrg lib) 781304007ebaSmrg passes="conv dlpreopen link" 781404007ebaSmrg for file in $dlfiles $dlprefiles; do 781504007ebaSmrg case $file in 781604007ebaSmrg *.la) ;; 781704007ebaSmrg *) 781805cf1079Smrg func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" 781904007ebaSmrg ;; 782004007ebaSmrg esac 782104007ebaSmrg done 782204007ebaSmrg ;; 782304007ebaSmrg prog) 782404007ebaSmrg compile_deplibs= 782504007ebaSmrg finalize_deplibs= 782605cf1079Smrg alldeplibs=false 782704007ebaSmrg newdlfiles= 782804007ebaSmrg newdlprefiles= 782904007ebaSmrg passes="conv scan dlopen dlpreopen link" 783004007ebaSmrg ;; 783104007ebaSmrg *) passes="conv" 783204007ebaSmrg ;; 783304007ebaSmrg esac 783404007ebaSmrg 783504007ebaSmrg for pass in $passes; do 783604007ebaSmrg # The preopen pass in lib mode reverses $deplibs; put it back here 783704007ebaSmrg # so that -L comes before libs that need it for instance... 783805cf1079Smrg if test lib,link = "$linkmode,$pass"; then 783904007ebaSmrg ## FIXME: Find the place where the list is rebuilt in the wrong 784004007ebaSmrg ## order, and fix it there properly 784104007ebaSmrg tmp_deplibs= 784204007ebaSmrg for deplib in $deplibs; do 784304007ebaSmrg tmp_deplibs="$deplib $tmp_deplibs" 784404007ebaSmrg done 784505cf1079Smrg deplibs=$tmp_deplibs 784604007ebaSmrg fi 784704007ebaSmrg 784805cf1079Smrg if test lib,link = "$linkmode,$pass" || 784905cf1079Smrg test prog,scan = "$linkmode,$pass"; then 785005cf1079Smrg libs=$deplibs 785104007ebaSmrg deplibs= 785204007ebaSmrg fi 785305cf1079Smrg if test prog = "$linkmode"; then 785404007ebaSmrg case $pass in 785505cf1079Smrg dlopen) libs=$dlfiles ;; 785605cf1079Smrg dlpreopen) libs=$dlprefiles ;; 785779d5fcd7Smrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 785804007ebaSmrg esac 785904007ebaSmrg fi 786005cf1079Smrg if test lib,dlpreopen = "$linkmode,$pass"; then 786104007ebaSmrg # Collect and forward deplibs of preopened libtool libs 786204007ebaSmrg for lib in $dlprefiles; do 786304007ebaSmrg # Ignore non-libtool-libs 786404007ebaSmrg dependency_libs= 786504007ebaSmrg func_resolve_sysroot "$lib" 786604007ebaSmrg case $lib in 786704007ebaSmrg *.la) func_source "$func_resolve_sysroot_result" ;; 786804007ebaSmrg esac 786904007ebaSmrg 787004007ebaSmrg # Collect preopened libtool deplibs, except any this library 787104007ebaSmrg # has declared as weak libs 787204007ebaSmrg for deplib in $dependency_libs; do 787304007ebaSmrg func_basename "$deplib" 787404007ebaSmrg deplib_base=$func_basename_result 787504007ebaSmrg case " $weak_libs " in 787604007ebaSmrg *" $deplib_base "*) ;; 787704007ebaSmrg *) func_append deplibs " $deplib" ;; 787804007ebaSmrg esac 787904007ebaSmrg done 788004007ebaSmrg done 788105cf1079Smrg libs=$dlprefiles 788204007ebaSmrg fi 788305cf1079Smrg if test dlopen = "$pass"; then 788404007ebaSmrg # Collect dlpreopened libraries 788505cf1079Smrg save_deplibs=$deplibs 788604007ebaSmrg deplibs= 788704007ebaSmrg fi 788804007ebaSmrg 788904007ebaSmrg for deplib in $libs; do 789004007ebaSmrg lib= 789105cf1079Smrg found=false 789204007ebaSmrg case $deplib in 789304007ebaSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 789404007ebaSmrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 789505cf1079Smrg if test prog,link = "$linkmode,$pass"; then 789604007ebaSmrg compile_deplibs="$deplib $compile_deplibs" 789704007ebaSmrg finalize_deplibs="$deplib $finalize_deplibs" 789804007ebaSmrg else 789904007ebaSmrg func_append compiler_flags " $deplib" 790005cf1079Smrg if test lib = "$linkmode"; then 790104007ebaSmrg case "$new_inherited_linker_flags " in 790204007ebaSmrg *" $deplib "*) ;; 790304007ebaSmrg * ) func_append new_inherited_linker_flags " $deplib" ;; 790404007ebaSmrg esac 790504007ebaSmrg fi 790604007ebaSmrg fi 790704007ebaSmrg continue 790804007ebaSmrg ;; 790904007ebaSmrg -l*) 791005cf1079Smrg if test lib != "$linkmode" && test prog != "$linkmode"; then 791105cf1079Smrg func_warning "'-l' is ignored for archives/objects" 791204007ebaSmrg continue 791304007ebaSmrg fi 791404007ebaSmrg func_stripname '-l' '' "$deplib" 791504007ebaSmrg name=$func_stripname_result 791605cf1079Smrg if test lib = "$linkmode"; then 791704007ebaSmrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 791804007ebaSmrg else 791904007ebaSmrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 792004007ebaSmrg fi 792104007ebaSmrg for searchdir in $searchdirs; do 792204007ebaSmrg for search_ext in .la $std_shrext .so .a; do 792304007ebaSmrg # Search the libtool library 792405cf1079Smrg lib=$searchdir/lib$name$search_ext 792504007ebaSmrg if test -f "$lib"; then 792605cf1079Smrg if test .la = "$search_ext"; then 792705cf1079Smrg found=: 792804007ebaSmrg else 792905cf1079Smrg found=false 793004007ebaSmrg fi 793104007ebaSmrg break 2 793204007ebaSmrg fi 793304007ebaSmrg done 793404007ebaSmrg done 793505cf1079Smrg if $found; then 793605cf1079Smrg # deplib is a libtool library 793704007ebaSmrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 793804007ebaSmrg # We need to do some special things here, and not later. 793905cf1079Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 794004007ebaSmrg case " $predeps $postdeps " in 794104007ebaSmrg *" $deplib "*) 794204007ebaSmrg if func_lalib_p "$lib"; then 794304007ebaSmrg library_names= 794404007ebaSmrg old_library= 794504007ebaSmrg func_source "$lib" 794604007ebaSmrg for l in $old_library $library_names; do 794705cf1079Smrg ll=$l 794804007ebaSmrg done 794905cf1079Smrg if test "X$ll" = "X$old_library"; then # only static version available 795005cf1079Smrg found=false 795104007ebaSmrg func_dirname "$lib" "" "." 795205cf1079Smrg ladir=$func_dirname_result 795304007ebaSmrg lib=$ladir/$old_library 795405cf1079Smrg if test prog,link = "$linkmode,$pass"; then 795504007ebaSmrg compile_deplibs="$deplib $compile_deplibs" 795604007ebaSmrg finalize_deplibs="$deplib $finalize_deplibs" 795704007ebaSmrg else 795804007ebaSmrg deplibs="$deplib $deplibs" 795905cf1079Smrg test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 796004007ebaSmrg fi 796104007ebaSmrg continue 796204007ebaSmrg fi 796304007ebaSmrg fi 796404007ebaSmrg ;; 796504007ebaSmrg *) ;; 796604007ebaSmrg esac 796704007ebaSmrg fi 796805cf1079Smrg else 796905cf1079Smrg # deplib doesn't seem to be a libtool library 797005cf1079Smrg if test prog,link = "$linkmode,$pass"; then 797105cf1079Smrg compile_deplibs="$deplib $compile_deplibs" 797205cf1079Smrg finalize_deplibs="$deplib $finalize_deplibs" 797305cf1079Smrg else 797405cf1079Smrg deplibs="$deplib $deplibs" 797505cf1079Smrg test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 797605cf1079Smrg fi 797705cf1079Smrg continue 797804007ebaSmrg fi 797904007ebaSmrg ;; # -l 798004007ebaSmrg *.ltframework) 798105cf1079Smrg if test prog,link = "$linkmode,$pass"; then 798204007ebaSmrg compile_deplibs="$deplib $compile_deplibs" 798304007ebaSmrg finalize_deplibs="$deplib $finalize_deplibs" 798404007ebaSmrg else 798504007ebaSmrg deplibs="$deplib $deplibs" 798605cf1079Smrg if test lib = "$linkmode"; then 798704007ebaSmrg case "$new_inherited_linker_flags " in 798804007ebaSmrg *" $deplib "*) ;; 798904007ebaSmrg * ) func_append new_inherited_linker_flags " $deplib" ;; 799004007ebaSmrg esac 799104007ebaSmrg fi 799204007ebaSmrg fi 799304007ebaSmrg continue 799404007ebaSmrg ;; 799504007ebaSmrg -L*) 799604007ebaSmrg case $linkmode in 799704007ebaSmrg lib) 799804007ebaSmrg deplibs="$deplib $deplibs" 799905cf1079Smrg test conv = "$pass" && continue 800004007ebaSmrg newdependency_libs="$deplib $newdependency_libs" 800104007ebaSmrg func_stripname '-L' '' "$deplib" 800204007ebaSmrg func_resolve_sysroot "$func_stripname_result" 800304007ebaSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 800404007ebaSmrg ;; 800504007ebaSmrg prog) 800605cf1079Smrg if test conv = "$pass"; then 800704007ebaSmrg deplibs="$deplib $deplibs" 800804007ebaSmrg continue 800904007ebaSmrg fi 801005cf1079Smrg if test scan = "$pass"; then 801104007ebaSmrg deplibs="$deplib $deplibs" 801204007ebaSmrg else 801304007ebaSmrg compile_deplibs="$deplib $compile_deplibs" 801404007ebaSmrg finalize_deplibs="$deplib $finalize_deplibs" 801504007ebaSmrg fi 801604007ebaSmrg func_stripname '-L' '' "$deplib" 801704007ebaSmrg func_resolve_sysroot "$func_stripname_result" 801804007ebaSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 801904007ebaSmrg ;; 802004007ebaSmrg *) 802105cf1079Smrg func_warning "'-L' is ignored for archives/objects" 802204007ebaSmrg ;; 802304007ebaSmrg esac # linkmode 802404007ebaSmrg continue 802504007ebaSmrg ;; # -L 802604007ebaSmrg -R*) 802705cf1079Smrg if test link = "$pass"; then 802804007ebaSmrg func_stripname '-R' '' "$deplib" 802904007ebaSmrg func_resolve_sysroot "$func_stripname_result" 803004007ebaSmrg dir=$func_resolve_sysroot_result 803104007ebaSmrg # Make sure the xrpath contains only unique directories. 803204007ebaSmrg case "$xrpath " in 803304007ebaSmrg *" $dir "*) ;; 803404007ebaSmrg *) func_append xrpath " $dir" ;; 803504007ebaSmrg esac 803604007ebaSmrg fi 803704007ebaSmrg deplibs="$deplib $deplibs" 803804007ebaSmrg continue 803904007ebaSmrg ;; 804004007ebaSmrg *.la) 804104007ebaSmrg func_resolve_sysroot "$deplib" 804204007ebaSmrg lib=$func_resolve_sysroot_result 804304007ebaSmrg ;; 804404007ebaSmrg *.$libext) 804505cf1079Smrg if test conv = "$pass"; then 804604007ebaSmrg deplibs="$deplib $deplibs" 804704007ebaSmrg continue 804804007ebaSmrg fi 804904007ebaSmrg case $linkmode in 805004007ebaSmrg lib) 805104007ebaSmrg # Linking convenience modules into shared libraries is allowed, 805204007ebaSmrg # but linking other static libraries is non-portable. 805304007ebaSmrg case " $dlpreconveniencelibs " in 805404007ebaSmrg *" $deplib "*) ;; 805504007ebaSmrg *) 805605cf1079Smrg valid_a_lib=false 805704007ebaSmrg case $deplibs_check_method in 805804007ebaSmrg match_pattern*) 805904007ebaSmrg set dummy $deplibs_check_method; shift 806004007ebaSmrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 806104007ebaSmrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 806204007ebaSmrg | $EGREP "$match_pattern_regex" > /dev/null; then 806305cf1079Smrg valid_a_lib=: 806404007ebaSmrg fi 806504007ebaSmrg ;; 806604007ebaSmrg pass_all) 806705cf1079Smrg valid_a_lib=: 806804007ebaSmrg ;; 806904007ebaSmrg esac 807005cf1079Smrg if $valid_a_lib; then 807105cf1079Smrg echo 807205cf1079Smrg $ECHO "*** Warning: Linking the shared library $output against the" 807305cf1079Smrg $ECHO "*** static library $deplib is not portable!" 807405cf1079Smrg deplibs="$deplib $deplibs" 807505cf1079Smrg else 807604007ebaSmrg echo 807704007ebaSmrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 807804007ebaSmrg echo "*** I have the capability to make that library automatically link in when" 807904007ebaSmrg echo "*** you link to this library. But I can only do this if you have a" 808004007ebaSmrg echo "*** shared version of the library, which you do not appear to have" 808104007ebaSmrg echo "*** because the file extensions .$libext of this argument makes me believe" 808204007ebaSmrg echo "*** that it is just a static archive that I should not use here." 808304007ebaSmrg fi 808404007ebaSmrg ;; 808504007ebaSmrg esac 808604007ebaSmrg continue 808704007ebaSmrg ;; 808804007ebaSmrg prog) 808905cf1079Smrg if test link != "$pass"; then 809004007ebaSmrg deplibs="$deplib $deplibs" 809104007ebaSmrg else 809204007ebaSmrg compile_deplibs="$deplib $compile_deplibs" 809304007ebaSmrg finalize_deplibs="$deplib $finalize_deplibs" 809404007ebaSmrg fi 809504007ebaSmrg continue 809604007ebaSmrg ;; 809704007ebaSmrg esac # linkmode 809804007ebaSmrg ;; # *.$libext 809904007ebaSmrg *.lo | *.$objext) 810005cf1079Smrg if test conv = "$pass"; then 810104007ebaSmrg deplibs="$deplib $deplibs" 810205cf1079Smrg elif test prog = "$linkmode"; then 810305cf1079Smrg if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then 810404007ebaSmrg # If there is no dlopen support or we're linking statically, 810504007ebaSmrg # we need to preload. 810604007ebaSmrg func_append newdlprefiles " $deplib" 810704007ebaSmrg compile_deplibs="$deplib $compile_deplibs" 810804007ebaSmrg finalize_deplibs="$deplib $finalize_deplibs" 810904007ebaSmrg else 811004007ebaSmrg func_append newdlfiles " $deplib" 811104007ebaSmrg fi 811204007ebaSmrg fi 811304007ebaSmrg continue 811404007ebaSmrg ;; 811504007ebaSmrg %DEPLIBS%) 811605cf1079Smrg alldeplibs=: 811704007ebaSmrg continue 811804007ebaSmrg ;; 811904007ebaSmrg esac # case $deplib 812004007ebaSmrg 812105cf1079Smrg $found || test -f "$lib" \ 812205cf1079Smrg || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" 812304007ebaSmrg 812404007ebaSmrg # Check to see that this really is a libtool archive. 812504007ebaSmrg func_lalib_unsafe_p "$lib" \ 812605cf1079Smrg || func_fatal_error "'$lib' is not a valid libtool archive" 812704007ebaSmrg 812804007ebaSmrg func_dirname "$lib" "" "." 812905cf1079Smrg ladir=$func_dirname_result 813004007ebaSmrg 813104007ebaSmrg dlname= 813204007ebaSmrg dlopen= 813304007ebaSmrg dlpreopen= 813404007ebaSmrg libdir= 813504007ebaSmrg library_names= 813604007ebaSmrg old_library= 813704007ebaSmrg inherited_linker_flags= 813804007ebaSmrg # If the library was installed with an old release of libtool, 813904007ebaSmrg # it will not redefine variables installed, or shouldnotlink 814004007ebaSmrg installed=yes 814104007ebaSmrg shouldnotlink=no 814204007ebaSmrg avoidtemprpath= 814304007ebaSmrg 814404007ebaSmrg 814504007ebaSmrg # Read the .la file 814604007ebaSmrg func_source "$lib" 814704007ebaSmrg 814804007ebaSmrg # Convert "-framework foo" to "foo.ltframework" 814904007ebaSmrg if test -n "$inherited_linker_flags"; then 815004007ebaSmrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 815104007ebaSmrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 815204007ebaSmrg case " $new_inherited_linker_flags " in 815304007ebaSmrg *" $tmp_inherited_linker_flag "*) ;; 815404007ebaSmrg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 815504007ebaSmrg esac 815604007ebaSmrg done 815704007ebaSmrg fi 815804007ebaSmrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 815905cf1079Smrg if test lib,link = "$linkmode,$pass" || 816005cf1079Smrg test prog,scan = "$linkmode,$pass" || 816105cf1079Smrg { test prog != "$linkmode" && test lib != "$linkmode"; }; then 816204007ebaSmrg test -n "$dlopen" && func_append dlfiles " $dlopen" 816304007ebaSmrg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 816404007ebaSmrg fi 816504007ebaSmrg 816605cf1079Smrg if test conv = "$pass"; then 816704007ebaSmrg # Only check for convenience libraries 816804007ebaSmrg deplibs="$lib $deplibs" 816904007ebaSmrg if test -z "$libdir"; then 817004007ebaSmrg if test -z "$old_library"; then 817105cf1079Smrg func_fatal_error "cannot find name of link library for '$lib'" 817204007ebaSmrg fi 817304007ebaSmrg # It is a libtool convenience library, so add in its objects. 817404007ebaSmrg func_append convenience " $ladir/$objdir/$old_library" 817504007ebaSmrg func_append old_convenience " $ladir/$objdir/$old_library" 817605cf1079Smrg elif test prog != "$linkmode" && test lib != "$linkmode"; then 817705cf1079Smrg func_fatal_error "'$lib' is not a convenience library" 817804007ebaSmrg fi 817979d5fcd7Smrg tmp_libs= 818079d5fcd7Smrg for deplib in $dependency_libs; do 818179d5fcd7Smrg deplibs="$deplib $deplibs" 818279d5fcd7Smrg if $opt_preserve_dup_deps; then 818379d5fcd7Smrg case "$tmp_libs " in 818479d5fcd7Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 818579d5fcd7Smrg esac 818679d5fcd7Smrg fi 818779d5fcd7Smrg func_append tmp_libs " $deplib" 818879d5fcd7Smrg done 818904007ebaSmrg continue 819004007ebaSmrg fi # $pass = conv 819104007ebaSmrg 819204007ebaSmrg 819304007ebaSmrg # Get the name of the library we link against. 819404007ebaSmrg linklib= 819504007ebaSmrg if test -n "$old_library" && 819605cf1079Smrg { test yes = "$prefer_static_libs" || 819705cf1079Smrg test built,no = "$prefer_static_libs,$installed"; }; then 819804007ebaSmrg linklib=$old_library 819904007ebaSmrg else 820004007ebaSmrg for l in $old_library $library_names; do 820105cf1079Smrg linklib=$l 820204007ebaSmrg done 820304007ebaSmrg fi 820404007ebaSmrg if test -z "$linklib"; then 820505cf1079Smrg func_fatal_error "cannot find name of link library for '$lib'" 820604007ebaSmrg fi 820704007ebaSmrg 820804007ebaSmrg # This library was specified with -dlopen. 820905cf1079Smrg if test dlopen = "$pass"; then 821005cf1079Smrg test -z "$libdir" \ 821105cf1079Smrg && func_fatal_error "cannot -dlopen a convenience library: '$lib'" 821204007ebaSmrg if test -z "$dlname" || 821305cf1079Smrg test yes != "$dlopen_support" || 821405cf1079Smrg test no = "$build_libtool_libs" 821505cf1079Smrg then 821604007ebaSmrg # If there is no dlname, no dlopen support or we're linking 821704007ebaSmrg # statically, we need to preload. We also need to preload any 821804007ebaSmrg # dependent libraries so libltdl's deplib preloader doesn't 821904007ebaSmrg # bomb out in the load deplibs phase. 822004007ebaSmrg func_append dlprefiles " $lib $dependency_libs" 822104007ebaSmrg else 822204007ebaSmrg func_append newdlfiles " $lib" 822304007ebaSmrg fi 822404007ebaSmrg continue 822504007ebaSmrg fi # $pass = dlopen 822604007ebaSmrg 822704007ebaSmrg # We need an absolute path. 822804007ebaSmrg case $ladir in 822905cf1079Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; 823004007ebaSmrg *) 823104007ebaSmrg abs_ladir=`cd "$ladir" && pwd` 823204007ebaSmrg if test -z "$abs_ladir"; then 823305cf1079Smrg func_warning "cannot determine absolute directory name of '$ladir'" 823404007ebaSmrg func_warning "passing it literally to the linker, although it might fail" 823505cf1079Smrg abs_ladir=$ladir 823604007ebaSmrg fi 823704007ebaSmrg ;; 823804007ebaSmrg esac 823904007ebaSmrg func_basename "$lib" 824005cf1079Smrg laname=$func_basename_result 824104007ebaSmrg 824204007ebaSmrg # Find the relevant object directory and library name. 824305cf1079Smrg if test yes = "$installed"; then 824404007ebaSmrg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 824505cf1079Smrg func_warning "library '$lib' was moved." 824605cf1079Smrg dir=$ladir 824705cf1079Smrg absdir=$abs_ladir 824805cf1079Smrg libdir=$abs_ladir 824904007ebaSmrg else 825005cf1079Smrg dir=$lt_sysroot$libdir 825105cf1079Smrg absdir=$lt_sysroot$libdir 825204007ebaSmrg fi 825305cf1079Smrg test yes = "$hardcode_automatic" && avoidtemprpath=yes 825404007ebaSmrg else 825504007ebaSmrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 825605cf1079Smrg dir=$ladir 825705cf1079Smrg absdir=$abs_ladir 825804007ebaSmrg # Remove this search path later 825904007ebaSmrg func_append notinst_path " $abs_ladir" 826004007ebaSmrg else 826105cf1079Smrg dir=$ladir/$objdir 826205cf1079Smrg absdir=$abs_ladir/$objdir 826304007ebaSmrg # Remove this search path later 826404007ebaSmrg func_append notinst_path " $abs_ladir" 826504007ebaSmrg fi 826604007ebaSmrg fi # $installed = yes 826704007ebaSmrg func_stripname 'lib' '.la' "$laname" 826804007ebaSmrg name=$func_stripname_result 826904007ebaSmrg 827004007ebaSmrg # This library was specified with -dlpreopen. 827105cf1079Smrg if test dlpreopen = "$pass"; then 827205cf1079Smrg if test -z "$libdir" && test prog = "$linkmode"; then 827305cf1079Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" 827404007ebaSmrg fi 827505cf1079Smrg case $host in 827604007ebaSmrg # special handling for platforms with PE-DLLs. 827704007ebaSmrg *cygwin* | *mingw* | *cegcc* ) 827804007ebaSmrg # Linker will automatically link against shared library if both 827904007ebaSmrg # static and shared are present. Therefore, ensure we extract 828004007ebaSmrg # symbols from the import library if a shared library is present 828104007ebaSmrg # (otherwise, the dlopen module name will be incorrect). We do 828204007ebaSmrg # this by putting the import library name into $newdlprefiles. 828304007ebaSmrg # We recover the dlopen module name by 'saving' the la file 828404007ebaSmrg # name in a special purpose variable, and (later) extracting the 828504007ebaSmrg # dlname from the la file. 828604007ebaSmrg if test -n "$dlname"; then 828704007ebaSmrg func_tr_sh "$dir/$linklib" 828804007ebaSmrg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 828904007ebaSmrg func_append newdlprefiles " $dir/$linklib" 829004007ebaSmrg else 829104007ebaSmrg func_append newdlprefiles " $dir/$old_library" 829204007ebaSmrg # Keep a list of preopened convenience libraries to check 829304007ebaSmrg # that they are being used correctly in the link pass. 829404007ebaSmrg test -z "$libdir" && \ 829504007ebaSmrg func_append dlpreconveniencelibs " $dir/$old_library" 829604007ebaSmrg fi 829704007ebaSmrg ;; 829804007ebaSmrg * ) 829904007ebaSmrg # Prefer using a static library (so that no silly _DYNAMIC symbols 830004007ebaSmrg # are required to link). 830104007ebaSmrg if test -n "$old_library"; then 830204007ebaSmrg func_append newdlprefiles " $dir/$old_library" 830304007ebaSmrg # Keep a list of preopened convenience libraries to check 830404007ebaSmrg # that they are being used correctly in the link pass. 830504007ebaSmrg test -z "$libdir" && \ 830604007ebaSmrg func_append dlpreconveniencelibs " $dir/$old_library" 830704007ebaSmrg # Otherwise, use the dlname, so that lt_dlopen finds it. 830804007ebaSmrg elif test -n "$dlname"; then 830904007ebaSmrg func_append newdlprefiles " $dir/$dlname" 831004007ebaSmrg else 831104007ebaSmrg func_append newdlprefiles " $dir/$linklib" 831204007ebaSmrg fi 831304007ebaSmrg ;; 831404007ebaSmrg esac 831504007ebaSmrg fi # $pass = dlpreopen 831604007ebaSmrg 831704007ebaSmrg if test -z "$libdir"; then 831804007ebaSmrg # Link the convenience library 831905cf1079Smrg if test lib = "$linkmode"; then 832004007ebaSmrg deplibs="$dir/$old_library $deplibs" 832105cf1079Smrg elif test prog,link = "$linkmode,$pass"; then 832204007ebaSmrg compile_deplibs="$dir/$old_library $compile_deplibs" 832304007ebaSmrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 832404007ebaSmrg else 832504007ebaSmrg deplibs="$lib $deplibs" # used for prog,scan pass 832604007ebaSmrg fi 832704007ebaSmrg continue 832804007ebaSmrg fi 832904007ebaSmrg 833004007ebaSmrg 833105cf1079Smrg if test prog = "$linkmode" && test link != "$pass"; then 833204007ebaSmrg func_append newlib_search_path " $ladir" 833304007ebaSmrg deplibs="$lib $deplibs" 833404007ebaSmrg 833505cf1079Smrg linkalldeplibs=false 833605cf1079Smrg if test no != "$link_all_deplibs" || test -z "$library_names" || 833705cf1079Smrg test no = "$build_libtool_libs"; then 833805cf1079Smrg linkalldeplibs=: 833904007ebaSmrg fi 834004007ebaSmrg 834104007ebaSmrg tmp_libs= 834204007ebaSmrg for deplib in $dependency_libs; do 834304007ebaSmrg case $deplib in 834404007ebaSmrg -L*) func_stripname '-L' '' "$deplib" 834504007ebaSmrg func_resolve_sysroot "$func_stripname_result" 834604007ebaSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 834704007ebaSmrg ;; 834804007ebaSmrg esac 834904007ebaSmrg # Need to link against all dependency_libs? 835005cf1079Smrg if $linkalldeplibs; then 835104007ebaSmrg deplibs="$deplib $deplibs" 835204007ebaSmrg else 835304007ebaSmrg # Need to hardcode shared library paths 835404007ebaSmrg # or/and link against static libraries 835504007ebaSmrg newdependency_libs="$deplib $newdependency_libs" 835604007ebaSmrg fi 835705cf1079Smrg if $opt_preserve_dup_deps; then 835804007ebaSmrg case "$tmp_libs " in 835904007ebaSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 836004007ebaSmrg esac 836104007ebaSmrg fi 836204007ebaSmrg func_append tmp_libs " $deplib" 836304007ebaSmrg done # for deplib 836404007ebaSmrg continue 836504007ebaSmrg fi # $linkmode = prog... 836604007ebaSmrg 836705cf1079Smrg if test prog,link = "$linkmode,$pass"; then 836804007ebaSmrg if test -n "$library_names" && 836905cf1079Smrg { { test no = "$prefer_static_libs" || 837005cf1079Smrg test built,yes = "$prefer_static_libs,$installed"; } || 837104007ebaSmrg test -z "$old_library"; }; then 837204007ebaSmrg # We need to hardcode the library path 837305cf1079Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then 837404007ebaSmrg # Make sure the rpath contains only unique directories. 837505cf1079Smrg case $temp_rpath: in 837604007ebaSmrg *"$absdir:"*) ;; 837704007ebaSmrg *) func_append temp_rpath "$absdir:" ;; 837804007ebaSmrg esac 837904007ebaSmrg fi 838004007ebaSmrg 838104007ebaSmrg # Hardcode the library path. 838204007ebaSmrg # Skip directories that are in the system default run-time 838304007ebaSmrg # search path. 838404007ebaSmrg case " $sys_lib_dlsearch_path " in 838504007ebaSmrg *" $absdir "*) ;; 838604007ebaSmrg *) 838704007ebaSmrg case "$compile_rpath " in 838804007ebaSmrg *" $absdir "*) ;; 838904007ebaSmrg *) func_append compile_rpath " $absdir" ;; 839004007ebaSmrg esac 839104007ebaSmrg ;; 839204007ebaSmrg esac 839304007ebaSmrg case " $sys_lib_dlsearch_path " in 839404007ebaSmrg *" $libdir "*) ;; 839504007ebaSmrg *) 839604007ebaSmrg case "$finalize_rpath " in 839704007ebaSmrg *" $libdir "*) ;; 839804007ebaSmrg *) func_append finalize_rpath " $libdir" ;; 839904007ebaSmrg esac 840004007ebaSmrg ;; 840104007ebaSmrg esac 840204007ebaSmrg fi # $linkmode,$pass = prog,link... 840304007ebaSmrg 840405cf1079Smrg if $alldeplibs && 840505cf1079Smrg { test pass_all = "$deplibs_check_method" || 840605cf1079Smrg { test yes = "$build_libtool_libs" && 840704007ebaSmrg test -n "$library_names"; }; }; then 840804007ebaSmrg # We only need to search for static libraries 840904007ebaSmrg continue 841004007ebaSmrg fi 841104007ebaSmrg fi 841204007ebaSmrg 841304007ebaSmrg link_static=no # Whether the deplib will be linked statically 841404007ebaSmrg use_static_libs=$prefer_static_libs 841505cf1079Smrg if test built = "$use_static_libs" && test yes = "$installed"; then 841604007ebaSmrg use_static_libs=no 841704007ebaSmrg fi 841804007ebaSmrg if test -n "$library_names" && 841905cf1079Smrg { test no = "$use_static_libs" || test -z "$old_library"; }; then 842004007ebaSmrg case $host in 842105cf1079Smrg *cygwin* | *mingw* | *cegcc* | *os2*) 842204007ebaSmrg # No point in relinking DLLs because paths are not encoded 842304007ebaSmrg func_append notinst_deplibs " $lib" 842404007ebaSmrg need_relink=no 842504007ebaSmrg ;; 842604007ebaSmrg *) 842705cf1079Smrg if test no = "$installed"; then 842804007ebaSmrg func_append notinst_deplibs " $lib" 842904007ebaSmrg need_relink=yes 843004007ebaSmrg fi 843104007ebaSmrg ;; 843204007ebaSmrg esac 843304007ebaSmrg # This is a shared library 843404007ebaSmrg 843504007ebaSmrg # Warn about portability, can't link against -module's on some 843604007ebaSmrg # systems (darwin). Don't bleat about dlopened modules though! 843705cf1079Smrg dlopenmodule= 843804007ebaSmrg for dlpremoduletest in $dlprefiles; do 843904007ebaSmrg if test "X$dlpremoduletest" = "X$lib"; then 844005cf1079Smrg dlopenmodule=$dlpremoduletest 844104007ebaSmrg break 844204007ebaSmrg fi 844304007ebaSmrg done 844405cf1079Smrg if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then 844504007ebaSmrg echo 844605cf1079Smrg if test prog = "$linkmode"; then 844704007ebaSmrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 844804007ebaSmrg else 844904007ebaSmrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 845004007ebaSmrg fi 845104007ebaSmrg $ECHO "*** $linklib is not portable!" 845204007ebaSmrg fi 845305cf1079Smrg if test lib = "$linkmode" && 845405cf1079Smrg test yes = "$hardcode_into_libs"; then 845504007ebaSmrg # Hardcode the library path. 845604007ebaSmrg # Skip directories that are in the system default run-time 845704007ebaSmrg # search path. 845804007ebaSmrg case " $sys_lib_dlsearch_path " in 845904007ebaSmrg *" $absdir "*) ;; 846004007ebaSmrg *) 846104007ebaSmrg case "$compile_rpath " in 846204007ebaSmrg *" $absdir "*) ;; 846304007ebaSmrg *) func_append compile_rpath " $absdir" ;; 846404007ebaSmrg esac 846504007ebaSmrg ;; 846604007ebaSmrg esac 846704007ebaSmrg case " $sys_lib_dlsearch_path " in 846804007ebaSmrg *" $libdir "*) ;; 846904007ebaSmrg *) 847004007ebaSmrg case "$finalize_rpath " in 847104007ebaSmrg *" $libdir "*) ;; 847204007ebaSmrg *) func_append finalize_rpath " $libdir" ;; 847304007ebaSmrg esac 847404007ebaSmrg ;; 847504007ebaSmrg esac 847604007ebaSmrg fi 847704007ebaSmrg 847804007ebaSmrg if test -n "$old_archive_from_expsyms_cmds"; then 847904007ebaSmrg # figure out the soname 848004007ebaSmrg set dummy $library_names 848104007ebaSmrg shift 848205cf1079Smrg realname=$1 848304007ebaSmrg shift 848404007ebaSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 848504007ebaSmrg # use dlname if we got it. it's perfectly good, no? 848604007ebaSmrg if test -n "$dlname"; then 848705cf1079Smrg soname=$dlname 848804007ebaSmrg elif test -n "$soname_spec"; then 848904007ebaSmrg # bleh windows 849004007ebaSmrg case $host in 849105cf1079Smrg *cygwin* | mingw* | *cegcc* | *os2*) 849204007ebaSmrg func_arith $current - $age 849304007ebaSmrg major=$func_arith_result 849405cf1079Smrg versuffix=-$major 849504007ebaSmrg ;; 849604007ebaSmrg esac 849704007ebaSmrg eval soname=\"$soname_spec\" 849804007ebaSmrg else 849905cf1079Smrg soname=$realname 850004007ebaSmrg fi 850104007ebaSmrg 850204007ebaSmrg # Make a new name for the extract_expsyms_cmds to use 850305cf1079Smrg soroot=$soname 850404007ebaSmrg func_basename "$soroot" 850505cf1079Smrg soname=$func_basename_result 850604007ebaSmrg func_stripname 'lib' '.dll' "$soname" 850704007ebaSmrg newlib=libimp-$func_stripname_result.a 850804007ebaSmrg 850904007ebaSmrg # If the library has no export list, then create one now 851004007ebaSmrg if test -f "$output_objdir/$soname-def"; then : 851104007ebaSmrg else 851205cf1079Smrg func_verbose "extracting exported symbol list from '$soname'" 851304007ebaSmrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 851404007ebaSmrg fi 851504007ebaSmrg 851604007ebaSmrg # Create $newlib 851704007ebaSmrg if test -f "$output_objdir/$newlib"; then :; else 851805cf1079Smrg func_verbose "generating import library for '$soname'" 851904007ebaSmrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 852004007ebaSmrg fi 852104007ebaSmrg # make sure the library variables are pointing to the new library 852204007ebaSmrg dir=$output_objdir 852304007ebaSmrg linklib=$newlib 852404007ebaSmrg fi # test -n "$old_archive_from_expsyms_cmds" 852504007ebaSmrg 852605cf1079Smrg if test prog = "$linkmode" || test relink != "$opt_mode"; then 852704007ebaSmrg add_shlibpath= 852804007ebaSmrg add_dir= 852904007ebaSmrg add= 853004007ebaSmrg lib_linked=yes 853104007ebaSmrg case $hardcode_action in 853204007ebaSmrg immediate | unsupported) 853305cf1079Smrg if test no = "$hardcode_direct"; then 853405cf1079Smrg add=$dir/$linklib 853504007ebaSmrg case $host in 853605cf1079Smrg *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; 853705cf1079Smrg *-*-sysv4*uw2*) add_dir=-L$dir ;; 853804007ebaSmrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 853905cf1079Smrg *-*-unixware7*) add_dir=-L$dir ;; 854004007ebaSmrg *-*-darwin* ) 854105cf1079Smrg # if the lib is a (non-dlopened) module then we cannot 854204007ebaSmrg # link against it, someone is ignoring the earlier warnings 854304007ebaSmrg if /usr/bin/file -L $add 2> /dev/null | 854405cf1079Smrg $GREP ": [^:]* bundle" >/dev/null; then 854504007ebaSmrg if test "X$dlopenmodule" != "X$lib"; then 854604007ebaSmrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 854705cf1079Smrg if test -z "$old_library"; then 854804007ebaSmrg echo 854904007ebaSmrg echo "*** And there doesn't seem to be a static archive available" 855004007ebaSmrg echo "*** The link will probably fail, sorry" 855104007ebaSmrg else 855205cf1079Smrg add=$dir/$old_library 855304007ebaSmrg fi 855404007ebaSmrg elif test -n "$old_library"; then 855505cf1079Smrg add=$dir/$old_library 855604007ebaSmrg fi 855704007ebaSmrg fi 855804007ebaSmrg esac 855905cf1079Smrg elif test no = "$hardcode_minus_L"; then 856004007ebaSmrg case $host in 856105cf1079Smrg *-*-sunos*) add_shlibpath=$dir ;; 856204007ebaSmrg esac 856305cf1079Smrg add_dir=-L$dir 856405cf1079Smrg add=-l$name 856505cf1079Smrg elif test no = "$hardcode_shlibpath_var"; then 856605cf1079Smrg add_shlibpath=$dir 856705cf1079Smrg add=-l$name 856804007ebaSmrg else 856904007ebaSmrg lib_linked=no 857004007ebaSmrg fi 857104007ebaSmrg ;; 857204007ebaSmrg relink) 857305cf1079Smrg if test yes = "$hardcode_direct" && 857405cf1079Smrg test no = "$hardcode_direct_absolute"; then 857505cf1079Smrg add=$dir/$linklib 857605cf1079Smrg elif test yes = "$hardcode_minus_L"; then 857705cf1079Smrg add_dir=-L$absdir 857804007ebaSmrg # Try looking first in the location we're being installed to. 857904007ebaSmrg if test -n "$inst_prefix_dir"; then 858004007ebaSmrg case $libdir in 858104007ebaSmrg [\\/]*) 858204007ebaSmrg func_append add_dir " -L$inst_prefix_dir$libdir" 858304007ebaSmrg ;; 858404007ebaSmrg esac 858504007ebaSmrg fi 858605cf1079Smrg add=-l$name 858705cf1079Smrg elif test yes = "$hardcode_shlibpath_var"; then 858805cf1079Smrg add_shlibpath=$dir 858905cf1079Smrg add=-l$name 859004007ebaSmrg else 859104007ebaSmrg lib_linked=no 859204007ebaSmrg fi 859304007ebaSmrg ;; 859404007ebaSmrg *) lib_linked=no ;; 859504007ebaSmrg esac 859604007ebaSmrg 859705cf1079Smrg if test yes != "$lib_linked"; then 859804007ebaSmrg func_fatal_configuration "unsupported hardcode properties" 859904007ebaSmrg fi 860004007ebaSmrg 860104007ebaSmrg if test -n "$add_shlibpath"; then 860204007ebaSmrg case :$compile_shlibpath: in 860304007ebaSmrg *":$add_shlibpath:"*) ;; 860404007ebaSmrg *) func_append compile_shlibpath "$add_shlibpath:" ;; 860504007ebaSmrg esac 860604007ebaSmrg fi 860705cf1079Smrg if test prog = "$linkmode"; then 860804007ebaSmrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 860904007ebaSmrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 861004007ebaSmrg else 861104007ebaSmrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 861204007ebaSmrg test -n "$add" && deplibs="$add $deplibs" 861305cf1079Smrg if test yes != "$hardcode_direct" && 861405cf1079Smrg test yes != "$hardcode_minus_L" && 861505cf1079Smrg test yes = "$hardcode_shlibpath_var"; then 861604007ebaSmrg case :$finalize_shlibpath: in 861704007ebaSmrg *":$libdir:"*) ;; 861804007ebaSmrg *) func_append finalize_shlibpath "$libdir:" ;; 861904007ebaSmrg esac 862004007ebaSmrg fi 862104007ebaSmrg fi 862204007ebaSmrg fi 862304007ebaSmrg 862405cf1079Smrg if test prog = "$linkmode" || test relink = "$opt_mode"; then 862504007ebaSmrg add_shlibpath= 862604007ebaSmrg add_dir= 862704007ebaSmrg add= 862804007ebaSmrg # Finalize command for both is simple: just hardcode it. 862905cf1079Smrg if test yes = "$hardcode_direct" && 863005cf1079Smrg test no = "$hardcode_direct_absolute"; then 863105cf1079Smrg add=$libdir/$linklib 863205cf1079Smrg elif test yes = "$hardcode_minus_L"; then 863305cf1079Smrg add_dir=-L$libdir 863405cf1079Smrg add=-l$name 863505cf1079Smrg elif test yes = "$hardcode_shlibpath_var"; then 863604007ebaSmrg case :$finalize_shlibpath: in 863704007ebaSmrg *":$libdir:"*) ;; 863804007ebaSmrg *) func_append finalize_shlibpath "$libdir:" ;; 863904007ebaSmrg esac 864005cf1079Smrg add=-l$name 864105cf1079Smrg elif test yes = "$hardcode_automatic"; then 864204007ebaSmrg if test -n "$inst_prefix_dir" && 864305cf1079Smrg test -f "$inst_prefix_dir$libdir/$linklib"; then 864405cf1079Smrg add=$inst_prefix_dir$libdir/$linklib 864504007ebaSmrg else 864605cf1079Smrg add=$libdir/$linklib 864704007ebaSmrg fi 864804007ebaSmrg else 864904007ebaSmrg # We cannot seem to hardcode it, guess we'll fake it. 865005cf1079Smrg add_dir=-L$libdir 865104007ebaSmrg # Try looking first in the location we're being installed to. 865204007ebaSmrg if test -n "$inst_prefix_dir"; then 865304007ebaSmrg case $libdir in 865404007ebaSmrg [\\/]*) 865504007ebaSmrg func_append add_dir " -L$inst_prefix_dir$libdir" 865604007ebaSmrg ;; 865704007ebaSmrg esac 865804007ebaSmrg fi 865905cf1079Smrg add=-l$name 866004007ebaSmrg fi 866104007ebaSmrg 866205cf1079Smrg if test prog = "$linkmode"; then 866304007ebaSmrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 866404007ebaSmrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 866504007ebaSmrg else 866604007ebaSmrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 866704007ebaSmrg test -n "$add" && deplibs="$add $deplibs" 866804007ebaSmrg fi 866904007ebaSmrg fi 867005cf1079Smrg elif test prog = "$linkmode"; then 867104007ebaSmrg # Here we assume that one of hardcode_direct or hardcode_minus_L 867204007ebaSmrg # is not unsupported. This is valid on all known static and 867304007ebaSmrg # shared platforms. 867405cf1079Smrg if test unsupported != "$hardcode_direct"; then 867505cf1079Smrg test -n "$old_library" && linklib=$old_library 867604007ebaSmrg compile_deplibs="$dir/$linklib $compile_deplibs" 867704007ebaSmrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 867804007ebaSmrg else 867904007ebaSmrg compile_deplibs="-l$name -L$dir $compile_deplibs" 868004007ebaSmrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 868104007ebaSmrg fi 868205cf1079Smrg elif test yes = "$build_libtool_libs"; then 868304007ebaSmrg # Not a shared library 868405cf1079Smrg if test pass_all != "$deplibs_check_method"; then 868504007ebaSmrg # We're trying link a shared library against a static one 868604007ebaSmrg # but the system doesn't support it. 868704007ebaSmrg 868804007ebaSmrg # Just print a warning and add the library to dependency_libs so 868904007ebaSmrg # that the program can be linked against the static library. 869004007ebaSmrg echo 869105cf1079Smrg $ECHO "*** Warning: This system cannot link to static lib archive $lib." 869204007ebaSmrg echo "*** I have the capability to make that library automatically link in when" 869304007ebaSmrg echo "*** you link to this library. But I can only do this if you have a" 869404007ebaSmrg echo "*** shared version of the library, which you do not appear to have." 869505cf1079Smrg if test yes = "$module"; then 869604007ebaSmrg echo "*** But as you try to build a module library, libtool will still create " 869704007ebaSmrg echo "*** a static module, that should work as long as the dlopening application" 869804007ebaSmrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 869904007ebaSmrg if test -z "$global_symbol_pipe"; then 870004007ebaSmrg echo 870104007ebaSmrg echo "*** However, this would only work if libtool was able to extract symbol" 870205cf1079Smrg echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 870304007ebaSmrg echo "*** not find such a program. So, this module is probably useless." 870405cf1079Smrg echo "*** 'nm' from GNU binutils and a full rebuild may help." 870504007ebaSmrg fi 870605cf1079Smrg if test no = "$build_old_libs"; then 870704007ebaSmrg build_libtool_libs=module 870804007ebaSmrg build_old_libs=yes 870904007ebaSmrg else 871004007ebaSmrg build_libtool_libs=no 871104007ebaSmrg fi 871204007ebaSmrg fi 871304007ebaSmrg else 871404007ebaSmrg deplibs="$dir/$old_library $deplibs" 871504007ebaSmrg link_static=yes 871604007ebaSmrg fi 871704007ebaSmrg fi # link shared/static library? 871804007ebaSmrg 871905cf1079Smrg if test lib = "$linkmode"; then 872004007ebaSmrg if test -n "$dependency_libs" && 872105cf1079Smrg { test yes != "$hardcode_into_libs" || 872205cf1079Smrg test yes = "$build_old_libs" || 872305cf1079Smrg test yes = "$link_static"; }; then 872404007ebaSmrg # Extract -R from dependency_libs 872504007ebaSmrg temp_deplibs= 872604007ebaSmrg for libdir in $dependency_libs; do 872704007ebaSmrg case $libdir in 872804007ebaSmrg -R*) func_stripname '-R' '' "$libdir" 872904007ebaSmrg temp_xrpath=$func_stripname_result 873004007ebaSmrg case " $xrpath " in 873104007ebaSmrg *" $temp_xrpath "*) ;; 873204007ebaSmrg *) func_append xrpath " $temp_xrpath";; 873304007ebaSmrg esac;; 873404007ebaSmrg *) func_append temp_deplibs " $libdir";; 873504007ebaSmrg esac 873604007ebaSmrg done 873705cf1079Smrg dependency_libs=$temp_deplibs 873804007ebaSmrg fi 873904007ebaSmrg 874004007ebaSmrg func_append newlib_search_path " $absdir" 874104007ebaSmrg # Link against this library 874205cf1079Smrg test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 874304007ebaSmrg # ... and its dependency_libs 874404007ebaSmrg tmp_libs= 874504007ebaSmrg for deplib in $dependency_libs; do 874604007ebaSmrg newdependency_libs="$deplib $newdependency_libs" 874704007ebaSmrg case $deplib in 874804007ebaSmrg -L*) func_stripname '-L' '' "$deplib" 874904007ebaSmrg func_resolve_sysroot "$func_stripname_result";; 875004007ebaSmrg *) func_resolve_sysroot "$deplib" ;; 875104007ebaSmrg esac 875205cf1079Smrg if $opt_preserve_dup_deps; then 875304007ebaSmrg case "$tmp_libs " in 875404007ebaSmrg *" $func_resolve_sysroot_result "*) 875504007ebaSmrg func_append specialdeplibs " $func_resolve_sysroot_result" ;; 875604007ebaSmrg esac 875704007ebaSmrg fi 875804007ebaSmrg func_append tmp_libs " $func_resolve_sysroot_result" 875904007ebaSmrg done 876004007ebaSmrg 876105cf1079Smrg if test no != "$link_all_deplibs"; then 876204007ebaSmrg # Add the search paths of all dependency libraries 876304007ebaSmrg for deplib in $dependency_libs; do 876404007ebaSmrg path= 876504007ebaSmrg case $deplib in 876605cf1079Smrg -L*) path=$deplib ;; 876704007ebaSmrg *.la) 876804007ebaSmrg func_resolve_sysroot "$deplib" 876904007ebaSmrg deplib=$func_resolve_sysroot_result 877004007ebaSmrg func_dirname "$deplib" "" "." 877104007ebaSmrg dir=$func_dirname_result 877204007ebaSmrg # We need an absolute path. 877304007ebaSmrg case $dir in 877405cf1079Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; 877504007ebaSmrg *) 877604007ebaSmrg absdir=`cd "$dir" && pwd` 877704007ebaSmrg if test -z "$absdir"; then 877805cf1079Smrg func_warning "cannot determine absolute directory name of '$dir'" 877905cf1079Smrg absdir=$dir 878004007ebaSmrg fi 878104007ebaSmrg ;; 878204007ebaSmrg esac 878304007ebaSmrg if $GREP "^installed=no" $deplib > /dev/null; then 878404007ebaSmrg case $host in 878504007ebaSmrg *-*-darwin*) 878604007ebaSmrg depdepl= 878705cf1079Smrg eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 878805cf1079Smrg if test -n "$deplibrary_names"; then 878905cf1079Smrg for tmp in $deplibrary_names; do 879004007ebaSmrg depdepl=$tmp 879104007ebaSmrg done 879205cf1079Smrg if test -f "$absdir/$objdir/$depdepl"; then 879305cf1079Smrg depdepl=$absdir/$objdir/$depdepl 879405cf1079Smrg darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 879504007ebaSmrg if test -z "$darwin_install_name"; then 879605cf1079Smrg darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 879704007ebaSmrg fi 879805cf1079Smrg func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" 879905cf1079Smrg func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" 880004007ebaSmrg path= 880104007ebaSmrg fi 880204007ebaSmrg fi 880304007ebaSmrg ;; 880404007ebaSmrg *) 880505cf1079Smrg path=-L$absdir/$objdir 880604007ebaSmrg ;; 880704007ebaSmrg esac 880804007ebaSmrg else 880905cf1079Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 881004007ebaSmrg test -z "$libdir" && \ 881105cf1079Smrg func_fatal_error "'$deplib' is not a valid libtool archive" 881204007ebaSmrg test "$absdir" != "$libdir" && \ 881305cf1079Smrg func_warning "'$deplib' seems to be moved" 881404007ebaSmrg 881505cf1079Smrg path=-L$absdir 881604007ebaSmrg fi 881704007ebaSmrg ;; 881804007ebaSmrg esac 881904007ebaSmrg case " $deplibs " in 882004007ebaSmrg *" $path "*) ;; 882104007ebaSmrg *) deplibs="$path $deplibs" ;; 882204007ebaSmrg esac 882304007ebaSmrg done 882404007ebaSmrg fi # link_all_deplibs != no 882504007ebaSmrg fi # linkmode = lib 882604007ebaSmrg done # for deplib in $libs 882705cf1079Smrg if test link = "$pass"; then 882805cf1079Smrg if test prog = "$linkmode"; then 882904007ebaSmrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 883004007ebaSmrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 883104007ebaSmrg else 883204007ebaSmrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 883304007ebaSmrg fi 883404007ebaSmrg fi 883505cf1079Smrg dependency_libs=$newdependency_libs 883605cf1079Smrg if test dlpreopen = "$pass"; then 883704007ebaSmrg # Link the dlpreopened libraries before other libraries 883804007ebaSmrg for deplib in $save_deplibs; do 883904007ebaSmrg deplibs="$deplib $deplibs" 884004007ebaSmrg done 884104007ebaSmrg fi 884205cf1079Smrg if test dlopen != "$pass"; then 884305cf1079Smrg test conv = "$pass" || { 884404007ebaSmrg # Make sure lib_search_path contains only unique directories. 884504007ebaSmrg lib_search_path= 884604007ebaSmrg for dir in $newlib_search_path; do 884704007ebaSmrg case "$lib_search_path " in 884804007ebaSmrg *" $dir "*) ;; 884904007ebaSmrg *) func_append lib_search_path " $dir" ;; 885004007ebaSmrg esac 885104007ebaSmrg done 885204007ebaSmrg newlib_search_path= 885305cf1079Smrg } 885404007ebaSmrg 885505cf1079Smrg if test prog,link = "$linkmode,$pass"; then 885604007ebaSmrg vars="compile_deplibs finalize_deplibs" 885705cf1079Smrg else 885805cf1079Smrg vars=deplibs 885904007ebaSmrg fi 886004007ebaSmrg for var in $vars dependency_libs; do 886104007ebaSmrg # Add libraries to $var in reverse order 886204007ebaSmrg eval tmp_libs=\"\$$var\" 886304007ebaSmrg new_libs= 886404007ebaSmrg for deplib in $tmp_libs; do 886504007ebaSmrg # FIXME: Pedantically, this is the right thing to do, so 886604007ebaSmrg # that some nasty dependency loop isn't accidentally 886704007ebaSmrg # broken: 886804007ebaSmrg #new_libs="$deplib $new_libs" 886904007ebaSmrg # Pragmatically, this seems to cause very few problems in 887004007ebaSmrg # practice: 887104007ebaSmrg case $deplib in 887204007ebaSmrg -L*) new_libs="$deplib $new_libs" ;; 887304007ebaSmrg -R*) ;; 887404007ebaSmrg *) 887504007ebaSmrg # And here is the reason: when a library appears more 887604007ebaSmrg # than once as an explicit dependence of a library, or 887704007ebaSmrg # is implicitly linked in more than once by the 887804007ebaSmrg # compiler, it is considered special, and multiple 887904007ebaSmrg # occurrences thereof are not removed. Compare this 888004007ebaSmrg # with having the same library being listed as a 888104007ebaSmrg # dependency of multiple other libraries: in this case, 888204007ebaSmrg # we know (pedantically, we assume) the library does not 888304007ebaSmrg # need to be listed more than once, so we keep only the 888404007ebaSmrg # last copy. This is not always right, but it is rare 888504007ebaSmrg # enough that we require users that really mean to play 888604007ebaSmrg # such unportable linking tricks to link the library 888704007ebaSmrg # using -Wl,-lname, so that libtool does not consider it 888804007ebaSmrg # for duplicate removal. 888904007ebaSmrg case " $specialdeplibs " in 889004007ebaSmrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 889104007ebaSmrg *) 889204007ebaSmrg case " $new_libs " in 889304007ebaSmrg *" $deplib "*) ;; 889404007ebaSmrg *) new_libs="$deplib $new_libs" ;; 889504007ebaSmrg esac 889604007ebaSmrg ;; 889704007ebaSmrg esac 889804007ebaSmrg ;; 889904007ebaSmrg esac 890004007ebaSmrg done 890104007ebaSmrg tmp_libs= 890204007ebaSmrg for deplib in $new_libs; do 890304007ebaSmrg case $deplib in 890404007ebaSmrg -L*) 890504007ebaSmrg case " $tmp_libs " in 890604007ebaSmrg *" $deplib "*) ;; 890704007ebaSmrg *) func_append tmp_libs " $deplib" ;; 890804007ebaSmrg esac 890904007ebaSmrg ;; 891004007ebaSmrg *) func_append tmp_libs " $deplib" ;; 891104007ebaSmrg esac 891204007ebaSmrg done 891304007ebaSmrg eval $var=\"$tmp_libs\" 891404007ebaSmrg done # for var 891504007ebaSmrg fi 891605cf1079Smrg 891705cf1079Smrg # Add Sun CC postdeps if required: 891805cf1079Smrg test CXX = "$tagname" && { 891905cf1079Smrg case $host_os in 892005cf1079Smrg linux*) 892179d5fcd7Smrg case `$CC -V 2>&1 | $SED 5q` in 892205cf1079Smrg *Sun\ C*) # Sun C++ 5.9 892305cf1079Smrg func_suncc_cstd_abi 892405cf1079Smrg 892505cf1079Smrg if test no != "$suncc_use_cstd_abi"; then 892605cf1079Smrg func_append postdeps ' -library=Cstd -library=Crun' 892705cf1079Smrg fi 892805cf1079Smrg ;; 892905cf1079Smrg esac 893005cf1079Smrg ;; 893105cf1079Smrg 893205cf1079Smrg solaris*) 893305cf1079Smrg func_cc_basename "$CC" 893405cf1079Smrg case $func_cc_basename_result in 893505cf1079Smrg CC* | sunCC*) 893605cf1079Smrg func_suncc_cstd_abi 893705cf1079Smrg 893805cf1079Smrg if test no != "$suncc_use_cstd_abi"; then 893905cf1079Smrg func_append postdeps ' -library=Cstd -library=Crun' 894005cf1079Smrg fi 894105cf1079Smrg ;; 894205cf1079Smrg esac 894305cf1079Smrg ;; 894405cf1079Smrg esac 894505cf1079Smrg } 894605cf1079Smrg 894704007ebaSmrg # Last step: remove runtime libs from dependency_libs 894804007ebaSmrg # (they stay in deplibs) 894904007ebaSmrg tmp_libs= 895005cf1079Smrg for i in $dependency_libs; do 895104007ebaSmrg case " $predeps $postdeps $compiler_lib_search_path " in 895204007ebaSmrg *" $i "*) 895305cf1079Smrg i= 895404007ebaSmrg ;; 895504007ebaSmrg esac 895605cf1079Smrg if test -n "$i"; then 895704007ebaSmrg func_append tmp_libs " $i" 895804007ebaSmrg fi 895904007ebaSmrg done 896004007ebaSmrg dependency_libs=$tmp_libs 896104007ebaSmrg done # for pass 896205cf1079Smrg if test prog = "$linkmode"; then 896305cf1079Smrg dlfiles=$newdlfiles 896404007ebaSmrg fi 896505cf1079Smrg if test prog = "$linkmode" || test lib = "$linkmode"; then 896605cf1079Smrg dlprefiles=$newdlprefiles 896704007ebaSmrg fi 896804007ebaSmrg 896904007ebaSmrg case $linkmode in 897004007ebaSmrg oldlib) 897105cf1079Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 897205cf1079Smrg func_warning "'-dlopen' is ignored for archives" 897304007ebaSmrg fi 897404007ebaSmrg 897504007ebaSmrg case " $deplibs" in 897604007ebaSmrg *\ -l* | *\ -L*) 897705cf1079Smrg func_warning "'-l' and '-L' are ignored for archives" ;; 897804007ebaSmrg esac 897904007ebaSmrg 898004007ebaSmrg test -n "$rpath" && \ 898105cf1079Smrg func_warning "'-rpath' is ignored for archives" 898204007ebaSmrg 898304007ebaSmrg test -n "$xrpath" && \ 898405cf1079Smrg func_warning "'-R' is ignored for archives" 898504007ebaSmrg 898604007ebaSmrg test -n "$vinfo" && \ 898705cf1079Smrg func_warning "'-version-info/-version-number' is ignored for archives" 898804007ebaSmrg 898904007ebaSmrg test -n "$release" && \ 899005cf1079Smrg func_warning "'-release' is ignored for archives" 899104007ebaSmrg 899204007ebaSmrg test -n "$export_symbols$export_symbols_regex" && \ 899305cf1079Smrg func_warning "'-export-symbols' is ignored for archives" 899404007ebaSmrg 899504007ebaSmrg # Now set the variables for building old libraries. 899604007ebaSmrg build_libtool_libs=no 899705cf1079Smrg oldlibs=$output 899804007ebaSmrg func_append objs "$old_deplibs" 899904007ebaSmrg ;; 900004007ebaSmrg 900104007ebaSmrg lib) 900205cf1079Smrg # Make sure we only generate libraries of the form 'libNAME.la'. 900304007ebaSmrg case $outputname in 900404007ebaSmrg lib*) 900504007ebaSmrg func_stripname 'lib' '.la' "$outputname" 900604007ebaSmrg name=$func_stripname_result 900704007ebaSmrg eval shared_ext=\"$shrext_cmds\" 900804007ebaSmrg eval libname=\"$libname_spec\" 900904007ebaSmrg ;; 901004007ebaSmrg *) 901105cf1079Smrg test no = "$module" \ 901205cf1079Smrg && func_fatal_help "libtool library '$output' must begin with 'lib'" 901304007ebaSmrg 901405cf1079Smrg if test no != "$need_lib_prefix"; then 901504007ebaSmrg # Add the "lib" prefix for modules if required 901604007ebaSmrg func_stripname '' '.la' "$outputname" 901704007ebaSmrg name=$func_stripname_result 901804007ebaSmrg eval shared_ext=\"$shrext_cmds\" 901904007ebaSmrg eval libname=\"$libname_spec\" 902004007ebaSmrg else 902104007ebaSmrg func_stripname '' '.la' "$outputname" 902204007ebaSmrg libname=$func_stripname_result 902304007ebaSmrg fi 902404007ebaSmrg ;; 902504007ebaSmrg esac 902604007ebaSmrg 902704007ebaSmrg if test -n "$objs"; then 902805cf1079Smrg if test pass_all != "$deplibs_check_method"; then 902905cf1079Smrg func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" 903004007ebaSmrg else 903104007ebaSmrg echo 903204007ebaSmrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 903304007ebaSmrg $ECHO "*** objects $objs is not portable!" 903404007ebaSmrg func_append libobjs " $objs" 903504007ebaSmrg fi 903604007ebaSmrg fi 903704007ebaSmrg 903805cf1079Smrg test no = "$dlself" \ 903905cf1079Smrg || func_warning "'-dlopen self' is ignored for libtool libraries" 904004007ebaSmrg 904104007ebaSmrg set dummy $rpath 904204007ebaSmrg shift 904305cf1079Smrg test 1 -lt "$#" \ 904405cf1079Smrg && func_warning "ignoring multiple '-rpath's for a libtool library" 904504007ebaSmrg 904605cf1079Smrg install_libdir=$1 904704007ebaSmrg 904804007ebaSmrg oldlibs= 904904007ebaSmrg if test -z "$rpath"; then 905005cf1079Smrg if test yes = "$build_libtool_libs"; then 905104007ebaSmrg # Building a libtool convenience library. 905205cf1079Smrg # Some compilers have problems with a '.al' extension so 905304007ebaSmrg # convenience libraries should have the same extension an 905404007ebaSmrg # archive normally would. 905504007ebaSmrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 905604007ebaSmrg build_libtool_libs=convenience 905704007ebaSmrg build_old_libs=yes 905804007ebaSmrg fi 905904007ebaSmrg 906004007ebaSmrg test -n "$vinfo" && \ 906105cf1079Smrg func_warning "'-version-info/-version-number' is ignored for convenience libraries" 906204007ebaSmrg 906304007ebaSmrg test -n "$release" && \ 906405cf1079Smrg func_warning "'-release' is ignored for convenience libraries" 906504007ebaSmrg else 906604007ebaSmrg 906704007ebaSmrg # Parse the version information argument. 906805cf1079Smrg save_ifs=$IFS; IFS=: 906904007ebaSmrg set dummy $vinfo 0 0 0 907004007ebaSmrg shift 907105cf1079Smrg IFS=$save_ifs 907204007ebaSmrg 907304007ebaSmrg test -n "$7" && \ 907405cf1079Smrg func_fatal_help "too many parameters to '-version-info'" 907504007ebaSmrg 907604007ebaSmrg # convert absolute version numbers to libtool ages 907704007ebaSmrg # this retains compatibility with .la files and attempts 907804007ebaSmrg # to make the code below a bit more comprehensible 907904007ebaSmrg 908004007ebaSmrg case $vinfo_number in 908104007ebaSmrg yes) 908205cf1079Smrg number_major=$1 908305cf1079Smrg number_minor=$2 908405cf1079Smrg number_revision=$3 908504007ebaSmrg # 908604007ebaSmrg # There are really only two kinds -- those that 908704007ebaSmrg # use the current revision as the major version 908804007ebaSmrg # and those that subtract age and use age as 908904007ebaSmrg # a minor version. But, then there is irix 909005cf1079Smrg # that has an extra 1 added just for fun 909104007ebaSmrg # 909204007ebaSmrg case $version_type in 909304007ebaSmrg # correct linux to gnu/linux during the next big refactor 909479d5fcd7Smrg darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none) 909504007ebaSmrg func_arith $number_major + $number_minor 909604007ebaSmrg current=$func_arith_result 909705cf1079Smrg age=$number_minor 909805cf1079Smrg revision=$number_revision 909904007ebaSmrg ;; 910005cf1079Smrg freebsd-aout|qnx|sunos) 910105cf1079Smrg current=$number_major 910205cf1079Smrg revision=$number_minor 910305cf1079Smrg age=0 910404007ebaSmrg ;; 910504007ebaSmrg irix|nonstopux) 910604007ebaSmrg func_arith $number_major + $number_minor 910704007ebaSmrg current=$func_arith_result 910805cf1079Smrg age=$number_minor 910905cf1079Smrg revision=$number_minor 911004007ebaSmrg lt_irix_increment=no 911104007ebaSmrg ;; 911204007ebaSmrg esac 911304007ebaSmrg ;; 911404007ebaSmrg no) 911505cf1079Smrg current=$1 911605cf1079Smrg revision=$2 911705cf1079Smrg age=$3 911804007ebaSmrg ;; 911904007ebaSmrg esac 912004007ebaSmrg 912104007ebaSmrg # Check that each of the things are valid numbers. 912204007ebaSmrg case $current in 912304007ebaSmrg 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]) ;; 912404007ebaSmrg *) 912505cf1079Smrg func_error "CURRENT '$current' must be a nonnegative integer" 912605cf1079Smrg func_fatal_error "'$vinfo' is not valid version information" 912704007ebaSmrg ;; 912804007ebaSmrg esac 912904007ebaSmrg 913004007ebaSmrg case $revision in 913104007ebaSmrg 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]) ;; 913204007ebaSmrg *) 913305cf1079Smrg func_error "REVISION '$revision' must be a nonnegative integer" 913405cf1079Smrg func_fatal_error "'$vinfo' is not valid version information" 913504007ebaSmrg ;; 913604007ebaSmrg esac 913704007ebaSmrg 913804007ebaSmrg case $age in 913904007ebaSmrg 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]) ;; 914004007ebaSmrg *) 914105cf1079Smrg func_error "AGE '$age' must be a nonnegative integer" 914205cf1079Smrg func_fatal_error "'$vinfo' is not valid version information" 914304007ebaSmrg ;; 914404007ebaSmrg esac 914504007ebaSmrg 914604007ebaSmrg if test "$age" -gt "$current"; then 914705cf1079Smrg func_error "AGE '$age' is greater than the current interface number '$current'" 914805cf1079Smrg func_fatal_error "'$vinfo' is not valid version information" 914904007ebaSmrg fi 915004007ebaSmrg 915104007ebaSmrg # Calculate the version variables. 915204007ebaSmrg major= 915304007ebaSmrg versuffix= 915404007ebaSmrg verstring= 915504007ebaSmrg case $version_type in 915604007ebaSmrg none) ;; 915704007ebaSmrg 915804007ebaSmrg darwin) 915904007ebaSmrg # Like Linux, but with the current version available in 916004007ebaSmrg # verstring for coding it into the library header 916104007ebaSmrg func_arith $current - $age 916204007ebaSmrg major=.$func_arith_result 916305cf1079Smrg versuffix=$major.$age.$revision 916404007ebaSmrg # Darwin ld doesn't like 0 for these options... 916504007ebaSmrg func_arith $current + 1 916604007ebaSmrg minor_current=$func_arith_result 916705cf1079Smrg xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 916804007ebaSmrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 916905cf1079Smrg # On Darwin other compilers 917005cf1079Smrg case $CC in 917105cf1079Smrg nagfor*) 917205cf1079Smrg verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 917305cf1079Smrg ;; 917405cf1079Smrg *) 917505cf1079Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 917605cf1079Smrg ;; 917705cf1079Smrg esac 917804007ebaSmrg ;; 917904007ebaSmrg 918004007ebaSmrg freebsd-aout) 918105cf1079Smrg major=.$current 918205cf1079Smrg versuffix=.$current.$revision 918304007ebaSmrg ;; 918404007ebaSmrg 918579d5fcd7Smrg freebsd-elf | midnightbsd-elf) 918605cf1079Smrg func_arith $current - $age 918705cf1079Smrg major=.$func_arith_result 918805cf1079Smrg versuffix=$major.$age.$revision 918904007ebaSmrg ;; 919004007ebaSmrg 919104007ebaSmrg irix | nonstopux) 919205cf1079Smrg if test no = "$lt_irix_increment"; then 919304007ebaSmrg func_arith $current - $age 919404007ebaSmrg else 919504007ebaSmrg func_arith $current - $age + 1 919604007ebaSmrg fi 919704007ebaSmrg major=$func_arith_result 919804007ebaSmrg 919904007ebaSmrg case $version_type in 920004007ebaSmrg nonstopux) verstring_prefix=nonstopux ;; 920104007ebaSmrg *) verstring_prefix=sgi ;; 920204007ebaSmrg esac 920305cf1079Smrg verstring=$verstring_prefix$major.$revision 920404007ebaSmrg 920504007ebaSmrg # Add in all the interfaces that we are compatible with. 920604007ebaSmrg loop=$revision 920705cf1079Smrg while test 0 -ne "$loop"; do 920804007ebaSmrg func_arith $revision - $loop 920904007ebaSmrg iface=$func_arith_result 921004007ebaSmrg func_arith $loop - 1 921104007ebaSmrg loop=$func_arith_result 921205cf1079Smrg verstring=$verstring_prefix$major.$iface:$verstring 921304007ebaSmrg done 921404007ebaSmrg 921505cf1079Smrg # Before this point, $major must not contain '.'. 921604007ebaSmrg major=.$major 921705cf1079Smrg versuffix=$major.$revision 921804007ebaSmrg ;; 921904007ebaSmrg 922004007ebaSmrg linux) # correct to gnu/linux during the next big refactor 922104007ebaSmrg func_arith $current - $age 922204007ebaSmrg major=.$func_arith_result 922305cf1079Smrg versuffix=$major.$age.$revision 922404007ebaSmrg ;; 922504007ebaSmrg 922604007ebaSmrg osf) 922704007ebaSmrg func_arith $current - $age 922804007ebaSmrg major=.$func_arith_result 922905cf1079Smrg versuffix=.$current.$age.$revision 923005cf1079Smrg verstring=$current.$age.$revision 923104007ebaSmrg 923204007ebaSmrg # Add in all the interfaces that we are compatible with. 923304007ebaSmrg loop=$age 923405cf1079Smrg while test 0 -ne "$loop"; do 923504007ebaSmrg func_arith $current - $loop 923604007ebaSmrg iface=$func_arith_result 923704007ebaSmrg func_arith $loop - 1 923804007ebaSmrg loop=$func_arith_result 923905cf1079Smrg verstring=$verstring:$iface.0 924004007ebaSmrg done 924104007ebaSmrg 924204007ebaSmrg # Make executables depend on our current version. 924305cf1079Smrg func_append verstring ":$current.0" 924404007ebaSmrg ;; 924504007ebaSmrg 924604007ebaSmrg qnx) 924705cf1079Smrg major=.$current 924805cf1079Smrg versuffix=.$current 924905cf1079Smrg ;; 925005cf1079Smrg 925105cf1079Smrg sco) 925205cf1079Smrg major=.$current 925305cf1079Smrg versuffix=.$current 925404007ebaSmrg ;; 925504007ebaSmrg 925604007ebaSmrg sunos) 925705cf1079Smrg major=.$current 925805cf1079Smrg versuffix=.$current.$revision 925904007ebaSmrg ;; 926004007ebaSmrg 926104007ebaSmrg windows) 926204007ebaSmrg # Use '-' rather than '.', since we only want one 926305cf1079Smrg # extension on DOS 8.3 file systems. 926404007ebaSmrg func_arith $current - $age 926504007ebaSmrg major=$func_arith_result 926605cf1079Smrg versuffix=-$major 926704007ebaSmrg ;; 926804007ebaSmrg 926904007ebaSmrg *) 927005cf1079Smrg func_fatal_configuration "unknown library version type '$version_type'" 927104007ebaSmrg ;; 927204007ebaSmrg esac 927304007ebaSmrg 927404007ebaSmrg # Clear the version info if we defaulted, and they specified a release. 927504007ebaSmrg if test -z "$vinfo" && test -n "$release"; then 927604007ebaSmrg major= 927704007ebaSmrg case $version_type in 927804007ebaSmrg darwin) 927904007ebaSmrg # we can't check for "0.0" in archive_cmds due to quoting 928004007ebaSmrg # problems, so we reset it completely 928104007ebaSmrg verstring= 928204007ebaSmrg ;; 928304007ebaSmrg *) 928405cf1079Smrg verstring=0.0 928504007ebaSmrg ;; 928604007ebaSmrg esac 928705cf1079Smrg if test no = "$need_version"; then 928804007ebaSmrg versuffix= 928904007ebaSmrg else 929005cf1079Smrg versuffix=.0.0 929104007ebaSmrg fi 929204007ebaSmrg fi 929304007ebaSmrg 929404007ebaSmrg # Remove version info from name if versioning should be avoided 929505cf1079Smrg if test yes,no = "$avoid_version,$need_version"; then 929604007ebaSmrg major= 929704007ebaSmrg versuffix= 929805cf1079Smrg verstring= 929904007ebaSmrg fi 930004007ebaSmrg 930104007ebaSmrg # Check to see if the archive will have undefined symbols. 930205cf1079Smrg if test yes = "$allow_undefined"; then 930305cf1079Smrg if test unsupported = "$allow_undefined_flag"; then 930405cf1079Smrg if test yes = "$build_old_libs"; then 930505cf1079Smrg func_warning "undefined symbols not allowed in $host shared libraries; building static only" 930605cf1079Smrg build_libtool_libs=no 930705cf1079Smrg else 930805cf1079Smrg func_fatal_error "can't build $host shared library unless -no-undefined is specified" 930905cf1079Smrg fi 931004007ebaSmrg fi 931104007ebaSmrg else 931204007ebaSmrg # Don't allow undefined symbols. 931305cf1079Smrg allow_undefined_flag=$no_undefined_flag 931404007ebaSmrg fi 931504007ebaSmrg 931604007ebaSmrg fi 931704007ebaSmrg 931805cf1079Smrg func_generate_dlsyms "$libname" "$libname" : 931904007ebaSmrg func_append libobjs " $symfileobj" 932005cf1079Smrg test " " = "$libobjs" && libobjs= 932104007ebaSmrg 932205cf1079Smrg if test relink != "$opt_mode"; then 932304007ebaSmrg # Remove our outputs, but don't remove object files since they 932404007ebaSmrg # may have been created when compiling PIC objects. 932504007ebaSmrg removelist= 932604007ebaSmrg tempremovelist=`$ECHO "$output_objdir/*"` 932704007ebaSmrg for p in $tempremovelist; do 932804007ebaSmrg case $p in 932904007ebaSmrg *.$objext | *.gcno) 933004007ebaSmrg ;; 933105cf1079Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) 933205cf1079Smrg if test -n "$precious_files_regex"; then 933304007ebaSmrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 933404007ebaSmrg then 933504007ebaSmrg continue 933604007ebaSmrg fi 933704007ebaSmrg fi 933804007ebaSmrg func_append removelist " $p" 933904007ebaSmrg ;; 934004007ebaSmrg *) ;; 934104007ebaSmrg esac 934204007ebaSmrg done 934304007ebaSmrg test -n "$removelist" && \ 934404007ebaSmrg func_show_eval "${RM}r \$removelist" 934504007ebaSmrg fi 934604007ebaSmrg 934704007ebaSmrg # Now set the variables for building old libraries. 934805cf1079Smrg if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then 934904007ebaSmrg func_append oldlibs " $output_objdir/$libname.$libext" 935004007ebaSmrg 935104007ebaSmrg # Transform .lo files to .o files. 935205cf1079Smrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` 935304007ebaSmrg fi 935404007ebaSmrg 935504007ebaSmrg # Eliminate all temporary directories. 935604007ebaSmrg #for path in $notinst_path; do 935704007ebaSmrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 935804007ebaSmrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 935904007ebaSmrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 936004007ebaSmrg #done 936104007ebaSmrg 936204007ebaSmrg if test -n "$xrpath"; then 936304007ebaSmrg # If the user specified any rpath flags, then add them. 936404007ebaSmrg temp_xrpath= 936504007ebaSmrg for libdir in $xrpath; do 936604007ebaSmrg func_replace_sysroot "$libdir" 936704007ebaSmrg func_append temp_xrpath " -R$func_replace_sysroot_result" 936804007ebaSmrg case "$finalize_rpath " in 936904007ebaSmrg *" $libdir "*) ;; 937004007ebaSmrg *) func_append finalize_rpath " $libdir" ;; 937104007ebaSmrg esac 937204007ebaSmrg done 937305cf1079Smrg if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then 937404007ebaSmrg dependency_libs="$temp_xrpath $dependency_libs" 937504007ebaSmrg fi 937604007ebaSmrg fi 937704007ebaSmrg 937804007ebaSmrg # Make sure dlfiles contains only unique files that won't be dlpreopened 937905cf1079Smrg old_dlfiles=$dlfiles 938004007ebaSmrg dlfiles= 938104007ebaSmrg for lib in $old_dlfiles; do 938204007ebaSmrg case " $dlprefiles $dlfiles " in 938304007ebaSmrg *" $lib "*) ;; 938404007ebaSmrg *) func_append dlfiles " $lib" ;; 938504007ebaSmrg esac 938604007ebaSmrg done 938704007ebaSmrg 938804007ebaSmrg # Make sure dlprefiles contains only unique files 938905cf1079Smrg old_dlprefiles=$dlprefiles 939004007ebaSmrg dlprefiles= 939104007ebaSmrg for lib in $old_dlprefiles; do 939204007ebaSmrg case "$dlprefiles " in 939304007ebaSmrg *" $lib "*) ;; 939404007ebaSmrg *) func_append dlprefiles " $lib" ;; 939504007ebaSmrg esac 939604007ebaSmrg done 939704007ebaSmrg 939805cf1079Smrg if test yes = "$build_libtool_libs"; then 939904007ebaSmrg if test -n "$rpath"; then 940004007ebaSmrg case $host in 940104007ebaSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 940204007ebaSmrg # these systems don't actually have a c library (as such)! 940304007ebaSmrg ;; 940404007ebaSmrg *-*-rhapsody* | *-*-darwin1.[012]) 940504007ebaSmrg # Rhapsody C library is in the System framework 940604007ebaSmrg func_append deplibs " System.ltframework" 940704007ebaSmrg ;; 940804007ebaSmrg *-*-netbsd*) 940904007ebaSmrg # Don't link with libc until the a.out ld.so is fixed. 941004007ebaSmrg ;; 941179d5fcd7Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) 941204007ebaSmrg # Do not include libc due to us having libc/libc_r. 941304007ebaSmrg ;; 941404007ebaSmrg *-*-sco3.2v5* | *-*-sco5v6*) 941504007ebaSmrg # Causes problems with __ctype 941604007ebaSmrg ;; 941704007ebaSmrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 941804007ebaSmrg # Compiler inserts libc in the correct place for threads to work 941904007ebaSmrg ;; 942004007ebaSmrg *) 942104007ebaSmrg # Add libc to deplibs on all other systems if necessary. 942205cf1079Smrg if test yes = "$build_libtool_need_lc"; then 942304007ebaSmrg func_append deplibs " -lc" 942404007ebaSmrg fi 942504007ebaSmrg ;; 942604007ebaSmrg esac 942704007ebaSmrg fi 942804007ebaSmrg 942904007ebaSmrg # Transform deplibs into only deplibs that can be linked in shared. 943004007ebaSmrg name_save=$name 943104007ebaSmrg libname_save=$libname 943204007ebaSmrg release_save=$release 943304007ebaSmrg versuffix_save=$versuffix 943404007ebaSmrg major_save=$major 943504007ebaSmrg # I'm not sure if I'm treating the release correctly. I think 943604007ebaSmrg # release should show up in the -l (ie -lgmp5) so we don't want to 943704007ebaSmrg # add it in twice. Is that correct? 943805cf1079Smrg release= 943905cf1079Smrg versuffix= 944005cf1079Smrg major= 944104007ebaSmrg newdeplibs= 944204007ebaSmrg droppeddeps=no 944304007ebaSmrg case $deplibs_check_method in 944404007ebaSmrg pass_all) 944504007ebaSmrg # Don't check for shared/static. Everything works. 944604007ebaSmrg # This might be a little naive. We might want to check 944704007ebaSmrg # whether the library exists or not. But this is on 944804007ebaSmrg # osf3 & osf4 and I'm not really sure... Just 944904007ebaSmrg # implementing what was already the behavior. 945004007ebaSmrg newdeplibs=$deplibs 945104007ebaSmrg ;; 945204007ebaSmrg test_compile) 945304007ebaSmrg # This code stresses the "libraries are programs" paradigm to its 945404007ebaSmrg # limits. Maybe even breaks it. We compile a program, linking it 945504007ebaSmrg # against the deplibs as a proxy for the library. Then we can check 945604007ebaSmrg # whether they linked in statically or dynamically with ldd. 945704007ebaSmrg $opt_dry_run || $RM conftest.c 945804007ebaSmrg cat > conftest.c <<EOF 945904007ebaSmrg int main() { return 0; } 946004007ebaSmrgEOF 946104007ebaSmrg $opt_dry_run || $RM conftest 946204007ebaSmrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 946304007ebaSmrg ldd_output=`ldd conftest` 946404007ebaSmrg for i in $deplibs; do 946504007ebaSmrg case $i in 946604007ebaSmrg -l*) 946704007ebaSmrg func_stripname -l '' "$i" 946804007ebaSmrg name=$func_stripname_result 946905cf1079Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 947004007ebaSmrg case " $predeps $postdeps " in 947104007ebaSmrg *" $i "*) 947204007ebaSmrg func_append newdeplibs " $i" 947305cf1079Smrg i= 947404007ebaSmrg ;; 947504007ebaSmrg esac 947604007ebaSmrg fi 947705cf1079Smrg if test -n "$i"; then 947804007ebaSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 947904007ebaSmrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 948004007ebaSmrg set dummy $deplib_matches; shift 948104007ebaSmrg deplib_match=$1 948205cf1079Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 948304007ebaSmrg func_append newdeplibs " $i" 948404007ebaSmrg else 948504007ebaSmrg droppeddeps=yes 948604007ebaSmrg echo 948704007ebaSmrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 948804007ebaSmrg echo "*** I have the capability to make that library automatically link in when" 948904007ebaSmrg echo "*** you link to this library. But I can only do this if you have a" 949004007ebaSmrg echo "*** shared version of the library, which I believe you do not have" 949104007ebaSmrg echo "*** because a test_compile did reveal that the linker did not use it for" 949204007ebaSmrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 949304007ebaSmrg fi 949404007ebaSmrg fi 949504007ebaSmrg ;; 949604007ebaSmrg *) 949704007ebaSmrg func_append newdeplibs " $i" 949804007ebaSmrg ;; 949904007ebaSmrg esac 950004007ebaSmrg done 950104007ebaSmrg else 950204007ebaSmrg # Error occurred in the first compile. Let's try to salvage 950304007ebaSmrg # the situation: Compile a separate program for each library. 950404007ebaSmrg for i in $deplibs; do 950504007ebaSmrg case $i in 950604007ebaSmrg -l*) 950704007ebaSmrg func_stripname -l '' "$i" 950804007ebaSmrg name=$func_stripname_result 950904007ebaSmrg $opt_dry_run || $RM conftest 951004007ebaSmrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 951104007ebaSmrg ldd_output=`ldd conftest` 951205cf1079Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 951304007ebaSmrg case " $predeps $postdeps " in 951404007ebaSmrg *" $i "*) 951504007ebaSmrg func_append newdeplibs " $i" 951605cf1079Smrg i= 951704007ebaSmrg ;; 951804007ebaSmrg esac 951904007ebaSmrg fi 952005cf1079Smrg if test -n "$i"; then 952104007ebaSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 952204007ebaSmrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 952304007ebaSmrg set dummy $deplib_matches; shift 952404007ebaSmrg deplib_match=$1 952505cf1079Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 952604007ebaSmrg func_append newdeplibs " $i" 952704007ebaSmrg else 952804007ebaSmrg droppeddeps=yes 952904007ebaSmrg echo 953004007ebaSmrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 953104007ebaSmrg echo "*** I have the capability to make that library automatically link in when" 953204007ebaSmrg echo "*** you link to this library. But I can only do this if you have a" 953304007ebaSmrg echo "*** shared version of the library, which you do not appear to have" 953404007ebaSmrg echo "*** because a test_compile did reveal that the linker did not use this one" 953504007ebaSmrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 953604007ebaSmrg fi 953704007ebaSmrg fi 953804007ebaSmrg else 953904007ebaSmrg droppeddeps=yes 954004007ebaSmrg echo 954104007ebaSmrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 954204007ebaSmrg echo "*** make it link in! You will probably need to install it or some" 954304007ebaSmrg echo "*** library that it depends on before this library will be fully" 954404007ebaSmrg echo "*** functional. Installing it before continuing would be even better." 954504007ebaSmrg fi 954604007ebaSmrg ;; 954704007ebaSmrg *) 954804007ebaSmrg func_append newdeplibs " $i" 954904007ebaSmrg ;; 955004007ebaSmrg esac 955104007ebaSmrg done 955204007ebaSmrg fi 955304007ebaSmrg ;; 955404007ebaSmrg file_magic*) 955504007ebaSmrg set dummy $deplibs_check_method; shift 955604007ebaSmrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 955704007ebaSmrg for a_deplib in $deplibs; do 955804007ebaSmrg case $a_deplib in 955904007ebaSmrg -l*) 956004007ebaSmrg func_stripname -l '' "$a_deplib" 956104007ebaSmrg name=$func_stripname_result 956205cf1079Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 956304007ebaSmrg case " $predeps $postdeps " in 956404007ebaSmrg *" $a_deplib "*) 956504007ebaSmrg func_append newdeplibs " $a_deplib" 956605cf1079Smrg a_deplib= 956704007ebaSmrg ;; 956804007ebaSmrg esac 956904007ebaSmrg fi 957005cf1079Smrg if test -n "$a_deplib"; then 957104007ebaSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 957204007ebaSmrg if test -n "$file_magic_glob"; then 957304007ebaSmrg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 957404007ebaSmrg else 957504007ebaSmrg libnameglob=$libname 957604007ebaSmrg fi 957705cf1079Smrg test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` 957804007ebaSmrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 957905cf1079Smrg if test yes = "$want_nocaseglob"; then 958004007ebaSmrg shopt -s nocaseglob 958104007ebaSmrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 958204007ebaSmrg $nocaseglob 958304007ebaSmrg else 958404007ebaSmrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 958504007ebaSmrg fi 958604007ebaSmrg for potent_lib in $potential_libs; do 958704007ebaSmrg # Follow soft links. 958804007ebaSmrg if ls -lLd "$potent_lib" 2>/dev/null | 958904007ebaSmrg $GREP " -> " >/dev/null; then 959004007ebaSmrg continue 959104007ebaSmrg fi 959204007ebaSmrg # The statement above tries to avoid entering an 959304007ebaSmrg # endless loop below, in case of cyclic links. 959404007ebaSmrg # We might still enter an endless loop, since a link 959504007ebaSmrg # loop can be closed while we follow links, 959604007ebaSmrg # but so what? 959705cf1079Smrg potlib=$potent_lib 959804007ebaSmrg while test -h "$potlib" 2>/dev/null; do 959905cf1079Smrg potliblink=`ls -ld $potlib | $SED 's/.* -> //'` 960004007ebaSmrg case $potliblink in 960105cf1079Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; 960205cf1079Smrg *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; 960304007ebaSmrg esac 960404007ebaSmrg done 960504007ebaSmrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 960604007ebaSmrg $SED -e 10q | 960704007ebaSmrg $EGREP "$file_magic_regex" > /dev/null; then 960804007ebaSmrg func_append newdeplibs " $a_deplib" 960905cf1079Smrg a_deplib= 961004007ebaSmrg break 2 961104007ebaSmrg fi 961204007ebaSmrg done 961304007ebaSmrg done 961404007ebaSmrg fi 961505cf1079Smrg if test -n "$a_deplib"; then 961604007ebaSmrg droppeddeps=yes 961704007ebaSmrg echo 961804007ebaSmrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 961904007ebaSmrg echo "*** I have the capability to make that library automatically link in when" 962004007ebaSmrg echo "*** you link to this library. But I can only do this if you have a" 962104007ebaSmrg echo "*** shared version of the library, which you do not appear to have" 962204007ebaSmrg echo "*** because I did check the linker path looking for a file starting" 962305cf1079Smrg if test -z "$potlib"; then 962404007ebaSmrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 962504007ebaSmrg else 962604007ebaSmrg $ECHO "*** with $libname and none of the candidates passed a file format test" 962704007ebaSmrg $ECHO "*** using a file magic. Last file checked: $potlib" 962804007ebaSmrg fi 962904007ebaSmrg fi 963004007ebaSmrg ;; 963104007ebaSmrg *) 963204007ebaSmrg # Add a -L argument. 963304007ebaSmrg func_append newdeplibs " $a_deplib" 963404007ebaSmrg ;; 963504007ebaSmrg esac 963604007ebaSmrg done # Gone through all deplibs. 963704007ebaSmrg ;; 963804007ebaSmrg match_pattern*) 963904007ebaSmrg set dummy $deplibs_check_method; shift 964004007ebaSmrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 964104007ebaSmrg for a_deplib in $deplibs; do 964204007ebaSmrg case $a_deplib in 964304007ebaSmrg -l*) 964404007ebaSmrg func_stripname -l '' "$a_deplib" 964504007ebaSmrg name=$func_stripname_result 964605cf1079Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 964704007ebaSmrg case " $predeps $postdeps " in 964804007ebaSmrg *" $a_deplib "*) 964904007ebaSmrg func_append newdeplibs " $a_deplib" 965005cf1079Smrg a_deplib= 965104007ebaSmrg ;; 965204007ebaSmrg esac 965304007ebaSmrg fi 965405cf1079Smrg if test -n "$a_deplib"; then 965504007ebaSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 965604007ebaSmrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 965704007ebaSmrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 965804007ebaSmrg for potent_lib in $potential_libs; do 965905cf1079Smrg potlib=$potent_lib # see symlink-check above in file_magic test 966004007ebaSmrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 966104007ebaSmrg $EGREP "$match_pattern_regex" > /dev/null; then 966204007ebaSmrg func_append newdeplibs " $a_deplib" 966305cf1079Smrg a_deplib= 966404007ebaSmrg break 2 966504007ebaSmrg fi 966604007ebaSmrg done 966704007ebaSmrg done 966804007ebaSmrg fi 966905cf1079Smrg if test -n "$a_deplib"; then 967004007ebaSmrg droppeddeps=yes 967104007ebaSmrg echo 967204007ebaSmrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 967304007ebaSmrg echo "*** I have the capability to make that library automatically link in when" 967404007ebaSmrg echo "*** you link to this library. But I can only do this if you have a" 967504007ebaSmrg echo "*** shared version of the library, which you do not appear to have" 967604007ebaSmrg echo "*** because I did check the linker path looking for a file starting" 967705cf1079Smrg if test -z "$potlib"; then 967804007ebaSmrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 967904007ebaSmrg else 968004007ebaSmrg $ECHO "*** with $libname and none of the candidates passed a file format test" 968104007ebaSmrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 968204007ebaSmrg fi 968304007ebaSmrg fi 968404007ebaSmrg ;; 968504007ebaSmrg *) 968604007ebaSmrg # Add a -L argument. 968704007ebaSmrg func_append newdeplibs " $a_deplib" 968804007ebaSmrg ;; 968904007ebaSmrg esac 969004007ebaSmrg done # Gone through all deplibs. 969104007ebaSmrg ;; 969204007ebaSmrg none | unknown | *) 969305cf1079Smrg newdeplibs= 969404007ebaSmrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 969505cf1079Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 969605cf1079Smrg for i in $predeps $postdeps; do 969704007ebaSmrg # can't use Xsed below, because $i might contain '/' 969805cf1079Smrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` 969904007ebaSmrg done 970004007ebaSmrg fi 970104007ebaSmrg case $tmp_deplibs in 970204007ebaSmrg *[!\ \ ]*) 970304007ebaSmrg echo 970405cf1079Smrg if test none = "$deplibs_check_method"; then 970504007ebaSmrg echo "*** Warning: inter-library dependencies are not supported in this platform." 970604007ebaSmrg else 970704007ebaSmrg echo "*** Warning: inter-library dependencies are not known to be supported." 970804007ebaSmrg fi 970904007ebaSmrg echo "*** All declared inter-library dependencies are being dropped." 971004007ebaSmrg droppeddeps=yes 971104007ebaSmrg ;; 971204007ebaSmrg esac 971304007ebaSmrg ;; 971404007ebaSmrg esac 971504007ebaSmrg versuffix=$versuffix_save 971604007ebaSmrg major=$major_save 971704007ebaSmrg release=$release_save 971804007ebaSmrg libname=$libname_save 971904007ebaSmrg name=$name_save 972004007ebaSmrg 972104007ebaSmrg case $host in 972204007ebaSmrg *-*-rhapsody* | *-*-darwin1.[012]) 972304007ebaSmrg # On Rhapsody replace the C library with the System framework 972404007ebaSmrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 972504007ebaSmrg ;; 972604007ebaSmrg esac 972704007ebaSmrg 972805cf1079Smrg if test yes = "$droppeddeps"; then 972905cf1079Smrg if test yes = "$module"; then 973004007ebaSmrg echo 973104007ebaSmrg echo "*** Warning: libtool could not satisfy all declared inter-library" 973204007ebaSmrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 973304007ebaSmrg echo "*** a static module, that should work as long as the dlopening" 973404007ebaSmrg echo "*** application is linked with the -dlopen flag." 973504007ebaSmrg if test -z "$global_symbol_pipe"; then 973604007ebaSmrg echo 973704007ebaSmrg echo "*** However, this would only work if libtool was able to extract symbol" 973805cf1079Smrg echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 973904007ebaSmrg echo "*** not find such a program. So, this module is probably useless." 974005cf1079Smrg echo "*** 'nm' from GNU binutils and a full rebuild may help." 974104007ebaSmrg fi 974205cf1079Smrg if test no = "$build_old_libs"; then 974305cf1079Smrg oldlibs=$output_objdir/$libname.$libext 974404007ebaSmrg build_libtool_libs=module 974504007ebaSmrg build_old_libs=yes 974604007ebaSmrg else 974704007ebaSmrg build_libtool_libs=no 974804007ebaSmrg fi 974904007ebaSmrg else 975004007ebaSmrg echo "*** The inter-library dependencies that have been dropped here will be" 975104007ebaSmrg echo "*** automatically added whenever a program is linked with this library" 975204007ebaSmrg echo "*** or is declared to -dlopen it." 975304007ebaSmrg 975405cf1079Smrg if test no = "$allow_undefined"; then 975504007ebaSmrg echo 975604007ebaSmrg echo "*** Since this library must not contain undefined symbols," 975704007ebaSmrg echo "*** because either the platform does not support them or" 975804007ebaSmrg echo "*** it was explicitly requested with -no-undefined," 975904007ebaSmrg echo "*** libtool will only create a static version of it." 976005cf1079Smrg if test no = "$build_old_libs"; then 976105cf1079Smrg oldlibs=$output_objdir/$libname.$libext 976204007ebaSmrg build_libtool_libs=module 976304007ebaSmrg build_old_libs=yes 976404007ebaSmrg else 976504007ebaSmrg build_libtool_libs=no 976604007ebaSmrg fi 976704007ebaSmrg fi 976804007ebaSmrg fi 976904007ebaSmrg fi 977004007ebaSmrg # Done checking deplibs! 977104007ebaSmrg deplibs=$newdeplibs 977204007ebaSmrg fi 977304007ebaSmrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 977404007ebaSmrg case $host in 977504007ebaSmrg *-*-darwin*) 977604007ebaSmrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 977704007ebaSmrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 977804007ebaSmrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 977904007ebaSmrg ;; 978004007ebaSmrg esac 978104007ebaSmrg 978204007ebaSmrg # move library search paths that coincide with paths to not yet 978304007ebaSmrg # installed libraries to the beginning of the library search list 978404007ebaSmrg new_libs= 978504007ebaSmrg for path in $notinst_path; do 978604007ebaSmrg case " $new_libs " in 978704007ebaSmrg *" -L$path/$objdir "*) ;; 978804007ebaSmrg *) 978904007ebaSmrg case " $deplibs " in 979004007ebaSmrg *" -L$path/$objdir "*) 979104007ebaSmrg func_append new_libs " -L$path/$objdir" ;; 979204007ebaSmrg esac 979304007ebaSmrg ;; 979404007ebaSmrg esac 979504007ebaSmrg done 979604007ebaSmrg for deplib in $deplibs; do 979704007ebaSmrg case $deplib in 979804007ebaSmrg -L*) 979904007ebaSmrg case " $new_libs " in 980004007ebaSmrg *" $deplib "*) ;; 980104007ebaSmrg *) func_append new_libs " $deplib" ;; 980204007ebaSmrg esac 980304007ebaSmrg ;; 980404007ebaSmrg *) func_append new_libs " $deplib" ;; 980504007ebaSmrg esac 980604007ebaSmrg done 980705cf1079Smrg deplibs=$new_libs 980804007ebaSmrg 980904007ebaSmrg # All the library-specific variables (install_libdir is set above). 981004007ebaSmrg library_names= 981104007ebaSmrg old_library= 981204007ebaSmrg dlname= 981304007ebaSmrg 981404007ebaSmrg # Test again, we may have decided not to build it any more 981505cf1079Smrg if test yes = "$build_libtool_libs"; then 981605cf1079Smrg # Remove $wl instances when linking with ld. 981704007ebaSmrg # FIXME: should test the right _cmds variable. 981804007ebaSmrg case $archive_cmds in 981904007ebaSmrg *\$LD\ *) wl= ;; 982004007ebaSmrg esac 982105cf1079Smrg if test yes = "$hardcode_into_libs"; then 982204007ebaSmrg # Hardcode the library paths 982304007ebaSmrg hardcode_libdirs= 982404007ebaSmrg dep_rpath= 982505cf1079Smrg rpath=$finalize_rpath 982605cf1079Smrg test relink = "$opt_mode" || rpath=$compile_rpath$rpath 982704007ebaSmrg for libdir in $rpath; do 982804007ebaSmrg if test -n "$hardcode_libdir_flag_spec"; then 982904007ebaSmrg if test -n "$hardcode_libdir_separator"; then 983004007ebaSmrg func_replace_sysroot "$libdir" 983104007ebaSmrg libdir=$func_replace_sysroot_result 983204007ebaSmrg if test -z "$hardcode_libdirs"; then 983305cf1079Smrg hardcode_libdirs=$libdir 983404007ebaSmrg else 983504007ebaSmrg # Just accumulate the unique libdirs. 983604007ebaSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 983704007ebaSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 983804007ebaSmrg ;; 983904007ebaSmrg *) 984004007ebaSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 984104007ebaSmrg ;; 984204007ebaSmrg esac 984304007ebaSmrg fi 984404007ebaSmrg else 984504007ebaSmrg eval flag=\"$hardcode_libdir_flag_spec\" 984604007ebaSmrg func_append dep_rpath " $flag" 984704007ebaSmrg fi 984804007ebaSmrg elif test -n "$runpath_var"; then 984904007ebaSmrg case "$perm_rpath " in 985004007ebaSmrg *" $libdir "*) ;; 985104007ebaSmrg *) func_append perm_rpath " $libdir" ;; 985204007ebaSmrg esac 985304007ebaSmrg fi 985404007ebaSmrg done 985504007ebaSmrg # Substitute the hardcoded libdirs into the rpath. 985604007ebaSmrg if test -n "$hardcode_libdir_separator" && 985704007ebaSmrg test -n "$hardcode_libdirs"; then 985805cf1079Smrg libdir=$hardcode_libdirs 985904007ebaSmrg eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 986004007ebaSmrg fi 986104007ebaSmrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 986204007ebaSmrg # We should set the runpath_var. 986304007ebaSmrg rpath= 986404007ebaSmrg for dir in $perm_rpath; do 986504007ebaSmrg func_append rpath "$dir:" 986604007ebaSmrg done 986704007ebaSmrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 986804007ebaSmrg fi 986904007ebaSmrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 987004007ebaSmrg fi 987104007ebaSmrg 987205cf1079Smrg shlibpath=$finalize_shlibpath 987305cf1079Smrg test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath 987404007ebaSmrg if test -n "$shlibpath"; then 987504007ebaSmrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 987604007ebaSmrg fi 987704007ebaSmrg 987804007ebaSmrg # Get the real and link names of the library. 987904007ebaSmrg eval shared_ext=\"$shrext_cmds\" 988004007ebaSmrg eval library_names=\"$library_names_spec\" 988104007ebaSmrg set dummy $library_names 988204007ebaSmrg shift 988305cf1079Smrg realname=$1 988404007ebaSmrg shift 988504007ebaSmrg 988604007ebaSmrg if test -n "$soname_spec"; then 988704007ebaSmrg eval soname=\"$soname_spec\" 988804007ebaSmrg else 988905cf1079Smrg soname=$realname 989004007ebaSmrg fi 989104007ebaSmrg if test -z "$dlname"; then 989204007ebaSmrg dlname=$soname 989304007ebaSmrg fi 989404007ebaSmrg 989505cf1079Smrg lib=$output_objdir/$realname 989604007ebaSmrg linknames= 989704007ebaSmrg for link 989804007ebaSmrg do 989904007ebaSmrg func_append linknames " $link" 990004007ebaSmrg done 990104007ebaSmrg 990204007ebaSmrg # Use standard objects if they are pic 990304007ebaSmrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 990404007ebaSmrg test "X$libobjs" = "X " && libobjs= 990504007ebaSmrg 990604007ebaSmrg delfiles= 990704007ebaSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 990804007ebaSmrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 990905cf1079Smrg export_symbols=$output_objdir/$libname.uexp 991004007ebaSmrg func_append delfiles " $export_symbols" 991104007ebaSmrg fi 991204007ebaSmrg 991304007ebaSmrg orig_export_symbols= 991404007ebaSmrg case $host_os in 991504007ebaSmrg cygwin* | mingw* | cegcc*) 991604007ebaSmrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 991704007ebaSmrg # exporting using user supplied symfile 991805cf1079Smrg func_dll_def_p "$export_symbols" || { 991904007ebaSmrg # and it's NOT already a .def file. Must figure out 992004007ebaSmrg # which of the given symbols are data symbols and tag 992104007ebaSmrg # them as such. So, trigger use of export_symbols_cmds. 992204007ebaSmrg # export_symbols gets reassigned inside the "prepare 992304007ebaSmrg # the list of exported symbols" if statement, so the 992404007ebaSmrg # include_expsyms logic still works. 992505cf1079Smrg orig_export_symbols=$export_symbols 992604007ebaSmrg export_symbols= 992704007ebaSmrg always_export_symbols=yes 992805cf1079Smrg } 992904007ebaSmrg fi 993004007ebaSmrg ;; 993104007ebaSmrg esac 993204007ebaSmrg 993304007ebaSmrg # Prepare the list of exported symbols 993404007ebaSmrg if test -z "$export_symbols"; then 993505cf1079Smrg if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then 993605cf1079Smrg func_verbose "generating symbol list for '$libname.la'" 993705cf1079Smrg export_symbols=$output_objdir/$libname.exp 993804007ebaSmrg $opt_dry_run || $RM $export_symbols 993904007ebaSmrg cmds=$export_symbols_cmds 994005cf1079Smrg save_ifs=$IFS; IFS='~' 994104007ebaSmrg for cmd1 in $cmds; do 994205cf1079Smrg IFS=$save_ifs 994304007ebaSmrg # Take the normal branch if the nm_file_list_spec branch 994404007ebaSmrg # doesn't work or if tool conversion is not needed. 994504007ebaSmrg case $nm_file_list_spec~$to_tool_file_cmd in 994604007ebaSmrg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 994704007ebaSmrg try_normal_branch=yes 994804007ebaSmrg eval cmd=\"$cmd1\" 994904007ebaSmrg func_len " $cmd" 995004007ebaSmrg len=$func_len_result 995104007ebaSmrg ;; 995204007ebaSmrg *) 995304007ebaSmrg try_normal_branch=no 995404007ebaSmrg ;; 995504007ebaSmrg esac 995605cf1079Smrg if test yes = "$try_normal_branch" \ 995704007ebaSmrg && { test "$len" -lt "$max_cmd_len" \ 995804007ebaSmrg || test "$max_cmd_len" -le -1; } 995904007ebaSmrg then 996004007ebaSmrg func_show_eval "$cmd" 'exit $?' 996104007ebaSmrg skipped_export=false 996204007ebaSmrg elif test -n "$nm_file_list_spec"; then 996304007ebaSmrg func_basename "$output" 996404007ebaSmrg output_la=$func_basename_result 996504007ebaSmrg save_libobjs=$libobjs 996604007ebaSmrg save_output=$output 996705cf1079Smrg output=$output_objdir/$output_la.nm 996804007ebaSmrg func_to_tool_file "$output" 996904007ebaSmrg libobjs=$nm_file_list_spec$func_to_tool_file_result 997004007ebaSmrg func_append delfiles " $output" 997104007ebaSmrg func_verbose "creating $NM input file list: $output" 997204007ebaSmrg for obj in $save_libobjs; do 997304007ebaSmrg func_to_tool_file "$obj" 997404007ebaSmrg $ECHO "$func_to_tool_file_result" 997504007ebaSmrg done > "$output" 997604007ebaSmrg eval cmd=\"$cmd1\" 997704007ebaSmrg func_show_eval "$cmd" 'exit $?' 997804007ebaSmrg output=$save_output 997904007ebaSmrg libobjs=$save_libobjs 998004007ebaSmrg skipped_export=false 998104007ebaSmrg else 998204007ebaSmrg # The command line is too long to execute in one step. 998304007ebaSmrg func_verbose "using reloadable object file for export list..." 998404007ebaSmrg skipped_export=: 998504007ebaSmrg # Break out early, otherwise skipped_export may be 998604007ebaSmrg # set to false by a later but shorter cmd. 998704007ebaSmrg break 998804007ebaSmrg fi 998904007ebaSmrg done 999005cf1079Smrg IFS=$save_ifs 999105cf1079Smrg if test -n "$export_symbols_regex" && test : != "$skipped_export"; then 999204007ebaSmrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 999304007ebaSmrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 999404007ebaSmrg fi 999504007ebaSmrg fi 999604007ebaSmrg fi 999704007ebaSmrg 999804007ebaSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 999905cf1079Smrg tmp_export_symbols=$export_symbols 1000005cf1079Smrg test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 1000104007ebaSmrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 1000204007ebaSmrg fi 1000304007ebaSmrg 1000405cf1079Smrg if test : != "$skipped_export" && test -n "$orig_export_symbols"; then 1000504007ebaSmrg # The given exports_symbols file has to be filtered, so filter it. 1000605cf1079Smrg func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 1000704007ebaSmrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 1000805cf1079Smrg # 's' commands, which not all seds can handle. GNU sed should be fine 1000904007ebaSmrg # though. Also, the filter scales superlinearly with the number of 1001004007ebaSmrg # global variables. join(1) would be nice here, but unfortunately 1001104007ebaSmrg # isn't a blessed tool. 1001204007ebaSmrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 1001304007ebaSmrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 1001404007ebaSmrg export_symbols=$output_objdir/$libname.def 1001504007ebaSmrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 1001604007ebaSmrg fi 1001704007ebaSmrg 1001804007ebaSmrg tmp_deplibs= 1001904007ebaSmrg for test_deplib in $deplibs; do 1002004007ebaSmrg case " $convenience " in 1002104007ebaSmrg *" $test_deplib "*) ;; 1002204007ebaSmrg *) 1002304007ebaSmrg func_append tmp_deplibs " $test_deplib" 1002404007ebaSmrg ;; 1002504007ebaSmrg esac 1002604007ebaSmrg done 1002705cf1079Smrg deplibs=$tmp_deplibs 1002804007ebaSmrg 1002904007ebaSmrg if test -n "$convenience"; then 1003004007ebaSmrg if test -n "$whole_archive_flag_spec" && 1003105cf1079Smrg test yes = "$compiler_needs_object" && 1003204007ebaSmrg test -z "$libobjs"; then 1003304007ebaSmrg # extract the archives, so we have objects to list. 1003404007ebaSmrg # TODO: could optimize this to just extract one archive. 1003504007ebaSmrg whole_archive_flag_spec= 1003604007ebaSmrg fi 1003704007ebaSmrg if test -n "$whole_archive_flag_spec"; then 1003804007ebaSmrg save_libobjs=$libobjs 1003904007ebaSmrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 1004004007ebaSmrg test "X$libobjs" = "X " && libobjs= 1004104007ebaSmrg else 1004205cf1079Smrg gentop=$output_objdir/${outputname}x 1004304007ebaSmrg func_append generated " $gentop" 1004404007ebaSmrg 1004504007ebaSmrg func_extract_archives $gentop $convenience 1004604007ebaSmrg func_append libobjs " $func_extract_archives_result" 1004704007ebaSmrg test "X$libobjs" = "X " && libobjs= 1004804007ebaSmrg fi 1004904007ebaSmrg fi 1005004007ebaSmrg 1005105cf1079Smrg if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then 1005204007ebaSmrg eval flag=\"$thread_safe_flag_spec\" 1005304007ebaSmrg func_append linker_flags " $flag" 1005404007ebaSmrg fi 1005504007ebaSmrg 1005604007ebaSmrg # Make a backup of the uninstalled library when relinking 1005705cf1079Smrg if test relink = "$opt_mode"; then 1005804007ebaSmrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 1005904007ebaSmrg fi 1006004007ebaSmrg 1006104007ebaSmrg # Do each of the archive commands. 1006205cf1079Smrg if test yes = "$module" && test -n "$module_cmds"; then 1006304007ebaSmrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 1006404007ebaSmrg eval test_cmds=\"$module_expsym_cmds\" 1006504007ebaSmrg cmds=$module_expsym_cmds 1006604007ebaSmrg else 1006704007ebaSmrg eval test_cmds=\"$module_cmds\" 1006804007ebaSmrg cmds=$module_cmds 1006904007ebaSmrg fi 1007004007ebaSmrg else 1007104007ebaSmrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 1007204007ebaSmrg eval test_cmds=\"$archive_expsym_cmds\" 1007304007ebaSmrg cmds=$archive_expsym_cmds 1007404007ebaSmrg else 1007504007ebaSmrg eval test_cmds=\"$archive_cmds\" 1007604007ebaSmrg cmds=$archive_cmds 1007704007ebaSmrg fi 1007804007ebaSmrg fi 1007904007ebaSmrg 1008005cf1079Smrg if test : != "$skipped_export" && 1008104007ebaSmrg func_len " $test_cmds" && 1008204007ebaSmrg len=$func_len_result && 1008304007ebaSmrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 1008404007ebaSmrg : 1008504007ebaSmrg else 1008604007ebaSmrg # The command line is too long to link in one step, link piecewise 1008704007ebaSmrg # or, if using GNU ld and skipped_export is not :, use a linker 1008804007ebaSmrg # script. 1008904007ebaSmrg 1009004007ebaSmrg # Save the value of $output and $libobjs because we want to 1009104007ebaSmrg # use them later. If we have whole_archive_flag_spec, we 1009204007ebaSmrg # want to use save_libobjs as it was before 1009304007ebaSmrg # whole_archive_flag_spec was expanded, because we can't 1009404007ebaSmrg # assume the linker understands whole_archive_flag_spec. 1009504007ebaSmrg # This may have to be revisited, in case too many 1009604007ebaSmrg # convenience libraries get linked in and end up exceeding 1009704007ebaSmrg # the spec. 1009804007ebaSmrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 1009904007ebaSmrg save_libobjs=$libobjs 1010004007ebaSmrg fi 1010104007ebaSmrg save_output=$output 1010204007ebaSmrg func_basename "$output" 1010304007ebaSmrg output_la=$func_basename_result 1010404007ebaSmrg 1010504007ebaSmrg # Clear the reloadable object creation command queue and 1010604007ebaSmrg # initialize k to one. 1010704007ebaSmrg test_cmds= 1010804007ebaSmrg concat_cmds= 1010904007ebaSmrg objlist= 1011004007ebaSmrg last_robj= 1011104007ebaSmrg k=1 1011204007ebaSmrg 1011305cf1079Smrg if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then 1011405cf1079Smrg output=$output_objdir/$output_la.lnkscript 1011504007ebaSmrg func_verbose "creating GNU ld script: $output" 1011604007ebaSmrg echo 'INPUT (' > $output 1011704007ebaSmrg for obj in $save_libobjs 1011804007ebaSmrg do 1011904007ebaSmrg func_to_tool_file "$obj" 1012004007ebaSmrg $ECHO "$func_to_tool_file_result" >> $output 1012104007ebaSmrg done 1012204007ebaSmrg echo ')' >> $output 1012304007ebaSmrg func_append delfiles " $output" 1012404007ebaSmrg func_to_tool_file "$output" 1012504007ebaSmrg output=$func_to_tool_file_result 1012605cf1079Smrg elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then 1012705cf1079Smrg output=$output_objdir/$output_la.lnk 1012804007ebaSmrg func_verbose "creating linker input file list: $output" 1012904007ebaSmrg : > $output 1013004007ebaSmrg set x $save_libobjs 1013104007ebaSmrg shift 1013204007ebaSmrg firstobj= 1013305cf1079Smrg if test yes = "$compiler_needs_object"; then 1013404007ebaSmrg firstobj="$1 " 1013504007ebaSmrg shift 1013604007ebaSmrg fi 1013704007ebaSmrg for obj 1013804007ebaSmrg do 1013904007ebaSmrg func_to_tool_file "$obj" 1014004007ebaSmrg $ECHO "$func_to_tool_file_result" >> $output 1014104007ebaSmrg done 1014204007ebaSmrg func_append delfiles " $output" 1014304007ebaSmrg func_to_tool_file "$output" 1014404007ebaSmrg output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 1014504007ebaSmrg else 1014604007ebaSmrg if test -n "$save_libobjs"; then 1014704007ebaSmrg func_verbose "creating reloadable object files..." 1014805cf1079Smrg output=$output_objdir/$output_la-$k.$objext 1014904007ebaSmrg eval test_cmds=\"$reload_cmds\" 1015004007ebaSmrg func_len " $test_cmds" 1015104007ebaSmrg len0=$func_len_result 1015204007ebaSmrg len=$len0 1015304007ebaSmrg 1015404007ebaSmrg # Loop over the list of objects to be linked. 1015504007ebaSmrg for obj in $save_libobjs 1015604007ebaSmrg do 1015704007ebaSmrg func_len " $obj" 1015804007ebaSmrg func_arith $len + $func_len_result 1015904007ebaSmrg len=$func_arith_result 1016005cf1079Smrg if test -z "$objlist" || 1016104007ebaSmrg test "$len" -lt "$max_cmd_len"; then 1016204007ebaSmrg func_append objlist " $obj" 1016304007ebaSmrg else 1016404007ebaSmrg # The command $test_cmds is almost too long, add a 1016504007ebaSmrg # command to the queue. 1016605cf1079Smrg if test 1 -eq "$k"; then 1016704007ebaSmrg # The first file doesn't have a previous command to add. 1016804007ebaSmrg reload_objs=$objlist 1016904007ebaSmrg eval concat_cmds=\"$reload_cmds\" 1017004007ebaSmrg else 1017104007ebaSmrg # All subsequent reloadable object files will link in 1017204007ebaSmrg # the last one created. 1017304007ebaSmrg reload_objs="$objlist $last_robj" 1017404007ebaSmrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 1017504007ebaSmrg fi 1017605cf1079Smrg last_robj=$output_objdir/$output_la-$k.$objext 1017704007ebaSmrg func_arith $k + 1 1017804007ebaSmrg k=$func_arith_result 1017905cf1079Smrg output=$output_objdir/$output_la-$k.$objext 1018004007ebaSmrg objlist=" $obj" 1018104007ebaSmrg func_len " $last_robj" 1018204007ebaSmrg func_arith $len0 + $func_len_result 1018304007ebaSmrg len=$func_arith_result 1018404007ebaSmrg fi 1018504007ebaSmrg done 1018604007ebaSmrg # Handle the remaining objects by creating one last 1018704007ebaSmrg # reloadable object file. All subsequent reloadable object 1018804007ebaSmrg # files will link in the last one created. 1018904007ebaSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 1019004007ebaSmrg reload_objs="$objlist $last_robj" 1019105cf1079Smrg eval concat_cmds=\"\$concat_cmds$reload_cmds\" 1019204007ebaSmrg if test -n "$last_robj"; then 1019305cf1079Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 1019404007ebaSmrg fi 1019504007ebaSmrg func_append delfiles " $output" 1019604007ebaSmrg 1019704007ebaSmrg else 1019804007ebaSmrg output= 1019904007ebaSmrg fi 1020004007ebaSmrg 1020105cf1079Smrg ${skipped_export-false} && { 1020205cf1079Smrg func_verbose "generating symbol list for '$libname.la'" 1020305cf1079Smrg export_symbols=$output_objdir/$libname.exp 1020404007ebaSmrg $opt_dry_run || $RM $export_symbols 1020504007ebaSmrg libobjs=$output 1020604007ebaSmrg # Append the command to create the export file. 1020704007ebaSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 1020804007ebaSmrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 1020904007ebaSmrg if test -n "$last_robj"; then 1021004007ebaSmrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 1021104007ebaSmrg fi 1021205cf1079Smrg } 1021304007ebaSmrg 1021404007ebaSmrg test -n "$save_libobjs" && 1021504007ebaSmrg func_verbose "creating a temporary reloadable object file: $output" 1021604007ebaSmrg 1021704007ebaSmrg # Loop through the commands generated above and execute them. 1021805cf1079Smrg save_ifs=$IFS; IFS='~' 1021904007ebaSmrg for cmd in $concat_cmds; do 1022005cf1079Smrg IFS=$save_ifs 1022105cf1079Smrg $opt_quiet || { 1022279d5fcd7Smrg func_quote_arg expand,pretty "$cmd" 1022379d5fcd7Smrg eval "func_echo $func_quote_arg_result" 1022404007ebaSmrg } 1022504007ebaSmrg $opt_dry_run || eval "$cmd" || { 1022604007ebaSmrg lt_exit=$? 1022704007ebaSmrg 1022804007ebaSmrg # Restore the uninstalled library and exit 1022905cf1079Smrg if test relink = "$opt_mode"; then 1023004007ebaSmrg ( cd "$output_objdir" && \ 1023104007ebaSmrg $RM "${realname}T" && \ 1023204007ebaSmrg $MV "${realname}U" "$realname" ) 1023304007ebaSmrg fi 1023404007ebaSmrg 1023504007ebaSmrg exit $lt_exit 1023604007ebaSmrg } 1023704007ebaSmrg done 1023805cf1079Smrg IFS=$save_ifs 1023904007ebaSmrg 1024004007ebaSmrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 1024104007ebaSmrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 1024204007ebaSmrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 1024304007ebaSmrg fi 1024404007ebaSmrg fi 1024504007ebaSmrg 1024605cf1079Smrg ${skipped_export-false} && { 1024704007ebaSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 1024805cf1079Smrg tmp_export_symbols=$export_symbols 1024905cf1079Smrg test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 1025004007ebaSmrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 1025104007ebaSmrg fi 1025204007ebaSmrg 1025304007ebaSmrg if test -n "$orig_export_symbols"; then 1025404007ebaSmrg # The given exports_symbols file has to be filtered, so filter it. 1025505cf1079Smrg func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 1025604007ebaSmrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 1025705cf1079Smrg # 's' commands, which not all seds can handle. GNU sed should be fine 1025804007ebaSmrg # though. Also, the filter scales superlinearly with the number of 1025904007ebaSmrg # global variables. join(1) would be nice here, but unfortunately 1026004007ebaSmrg # isn't a blessed tool. 1026104007ebaSmrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 1026204007ebaSmrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 1026304007ebaSmrg export_symbols=$output_objdir/$libname.def 1026404007ebaSmrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 1026504007ebaSmrg fi 1026605cf1079Smrg } 1026704007ebaSmrg 1026804007ebaSmrg libobjs=$output 1026904007ebaSmrg # Restore the value of output. 1027004007ebaSmrg output=$save_output 1027104007ebaSmrg 1027204007ebaSmrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 1027304007ebaSmrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 1027404007ebaSmrg test "X$libobjs" = "X " && libobjs= 1027504007ebaSmrg fi 1027604007ebaSmrg # Expand the library linking commands again to reset the 1027704007ebaSmrg # value of $libobjs for piecewise linking. 1027804007ebaSmrg 1027904007ebaSmrg # Do each of the archive commands. 1028005cf1079Smrg if test yes = "$module" && test -n "$module_cmds"; then 1028104007ebaSmrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 1028204007ebaSmrg cmds=$module_expsym_cmds 1028304007ebaSmrg else 1028404007ebaSmrg cmds=$module_cmds 1028504007ebaSmrg fi 1028604007ebaSmrg else 1028704007ebaSmrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 1028804007ebaSmrg cmds=$archive_expsym_cmds 1028904007ebaSmrg else 1029004007ebaSmrg cmds=$archive_cmds 1029104007ebaSmrg fi 1029204007ebaSmrg fi 1029304007ebaSmrg fi 1029404007ebaSmrg 1029504007ebaSmrg if test -n "$delfiles"; then 1029604007ebaSmrg # Append the command to remove temporary files to $cmds. 1029704007ebaSmrg eval cmds=\"\$cmds~\$RM $delfiles\" 1029804007ebaSmrg fi 1029904007ebaSmrg 1030004007ebaSmrg # Add any objects from preloaded convenience libraries 1030104007ebaSmrg if test -n "$dlprefiles"; then 1030205cf1079Smrg gentop=$output_objdir/${outputname}x 1030304007ebaSmrg func_append generated " $gentop" 1030404007ebaSmrg 1030504007ebaSmrg func_extract_archives $gentop $dlprefiles 1030604007ebaSmrg func_append libobjs " $func_extract_archives_result" 1030704007ebaSmrg test "X$libobjs" = "X " && libobjs= 1030804007ebaSmrg fi 1030904007ebaSmrg 1031005cf1079Smrg save_ifs=$IFS; IFS='~' 1031104007ebaSmrg for cmd in $cmds; do 1031205cf1079Smrg IFS=$sp$nl 1031304007ebaSmrg eval cmd=\"$cmd\" 1031405cf1079Smrg IFS=$save_ifs 1031505cf1079Smrg $opt_quiet || { 1031679d5fcd7Smrg func_quote_arg expand,pretty "$cmd" 1031779d5fcd7Smrg eval "func_echo $func_quote_arg_result" 1031804007ebaSmrg } 1031904007ebaSmrg $opt_dry_run || eval "$cmd" || { 1032004007ebaSmrg lt_exit=$? 1032104007ebaSmrg 1032204007ebaSmrg # Restore the uninstalled library and exit 1032305cf1079Smrg if test relink = "$opt_mode"; then 1032404007ebaSmrg ( cd "$output_objdir" && \ 1032504007ebaSmrg $RM "${realname}T" && \ 1032604007ebaSmrg $MV "${realname}U" "$realname" ) 1032704007ebaSmrg fi 1032804007ebaSmrg 1032904007ebaSmrg exit $lt_exit 1033004007ebaSmrg } 1033104007ebaSmrg done 1033205cf1079Smrg IFS=$save_ifs 1033304007ebaSmrg 1033404007ebaSmrg # Restore the uninstalled library and exit 1033505cf1079Smrg if test relink = "$opt_mode"; then 1033604007ebaSmrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 1033704007ebaSmrg 1033804007ebaSmrg if test -n "$convenience"; then 1033904007ebaSmrg if test -z "$whole_archive_flag_spec"; then 1034004007ebaSmrg func_show_eval '${RM}r "$gentop"' 1034104007ebaSmrg fi 1034204007ebaSmrg fi 1034304007ebaSmrg 1034404007ebaSmrg exit $EXIT_SUCCESS 1034504007ebaSmrg fi 1034604007ebaSmrg 1034704007ebaSmrg # Create links to the real library. 1034804007ebaSmrg for linkname in $linknames; do 1034904007ebaSmrg if test "$realname" != "$linkname"; then 1035004007ebaSmrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 1035104007ebaSmrg fi 1035204007ebaSmrg done 1035304007ebaSmrg 1035404007ebaSmrg # If -module or -export-dynamic was specified, set the dlname. 1035505cf1079Smrg if test yes = "$module" || test yes = "$export_dynamic"; then 1035604007ebaSmrg # On all known operating systems, these are identical. 1035705cf1079Smrg dlname=$soname 1035804007ebaSmrg fi 1035904007ebaSmrg fi 1036004007ebaSmrg ;; 1036104007ebaSmrg 1036204007ebaSmrg obj) 1036305cf1079Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 1036405cf1079Smrg func_warning "'-dlopen' is ignored for objects" 1036504007ebaSmrg fi 1036604007ebaSmrg 1036704007ebaSmrg case " $deplibs" in 1036804007ebaSmrg *\ -l* | *\ -L*) 1036905cf1079Smrg func_warning "'-l' and '-L' are ignored for objects" ;; 1037004007ebaSmrg esac 1037104007ebaSmrg 1037204007ebaSmrg test -n "$rpath" && \ 1037305cf1079Smrg func_warning "'-rpath' is ignored for objects" 1037404007ebaSmrg 1037504007ebaSmrg test -n "$xrpath" && \ 1037605cf1079Smrg func_warning "'-R' is ignored for objects" 1037704007ebaSmrg 1037804007ebaSmrg test -n "$vinfo" && \ 1037905cf1079Smrg func_warning "'-version-info' is ignored for objects" 1038004007ebaSmrg 1038104007ebaSmrg test -n "$release" && \ 1038205cf1079Smrg func_warning "'-release' is ignored for objects" 1038304007ebaSmrg 1038404007ebaSmrg case $output in 1038504007ebaSmrg *.lo) 1038604007ebaSmrg test -n "$objs$old_deplibs" && \ 1038705cf1079Smrg func_fatal_error "cannot build library object '$output' from non-libtool objects" 1038804007ebaSmrg 1038904007ebaSmrg libobj=$output 1039004007ebaSmrg func_lo2o "$libobj" 1039104007ebaSmrg obj=$func_lo2o_result 1039204007ebaSmrg ;; 1039304007ebaSmrg *) 1039404007ebaSmrg libobj= 1039505cf1079Smrg obj=$output 1039604007ebaSmrg ;; 1039704007ebaSmrg esac 1039804007ebaSmrg 1039904007ebaSmrg # Delete the old objects. 1040004007ebaSmrg $opt_dry_run || $RM $obj $libobj 1040104007ebaSmrg 1040204007ebaSmrg # Objects from convenience libraries. This assumes 1040304007ebaSmrg # single-version convenience libraries. Whenever we create 1040404007ebaSmrg # different ones for PIC/non-PIC, this we'll have to duplicate 1040504007ebaSmrg # the extraction. 1040604007ebaSmrg reload_conv_objs= 1040704007ebaSmrg gentop= 1040805cf1079Smrg # if reload_cmds runs $LD directly, get rid of -Wl from 1040905cf1079Smrg # whole_archive_flag_spec and hope we can get by with turning comma 1041005cf1079Smrg # into space. 1041105cf1079Smrg case $reload_cmds in 1041205cf1079Smrg *\$LD[\ \$]*) wl= ;; 1041305cf1079Smrg esac 1041404007ebaSmrg if test -n "$convenience"; then 1041504007ebaSmrg if test -n "$whole_archive_flag_spec"; then 1041604007ebaSmrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 1041705cf1079Smrg test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 1041805cf1079Smrg reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags 1041904007ebaSmrg else 1042005cf1079Smrg gentop=$output_objdir/${obj}x 1042104007ebaSmrg func_append generated " $gentop" 1042204007ebaSmrg 1042304007ebaSmrg func_extract_archives $gentop $convenience 1042404007ebaSmrg reload_conv_objs="$reload_objs $func_extract_archives_result" 1042504007ebaSmrg fi 1042604007ebaSmrg fi 1042704007ebaSmrg 1042804007ebaSmrg # If we're not building shared, we need to use non_pic_objs 1042905cf1079Smrg test yes = "$build_libtool_libs" || libobjs=$non_pic_objects 1043004007ebaSmrg 1043104007ebaSmrg # Create the old-style object. 1043205cf1079Smrg reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs 1043304007ebaSmrg 1043405cf1079Smrg output=$obj 1043504007ebaSmrg func_execute_cmds "$reload_cmds" 'exit $?' 1043604007ebaSmrg 1043704007ebaSmrg # Exit if we aren't doing a library object file. 1043804007ebaSmrg if test -z "$libobj"; then 1043904007ebaSmrg if test -n "$gentop"; then 1044004007ebaSmrg func_show_eval '${RM}r "$gentop"' 1044104007ebaSmrg fi 1044204007ebaSmrg 1044304007ebaSmrg exit $EXIT_SUCCESS 1044404007ebaSmrg fi 1044504007ebaSmrg 1044605cf1079Smrg test yes = "$build_libtool_libs" || { 1044704007ebaSmrg if test -n "$gentop"; then 1044804007ebaSmrg func_show_eval '${RM}r "$gentop"' 1044904007ebaSmrg fi 1045004007ebaSmrg 1045104007ebaSmrg # Create an invalid libtool object if no PIC, so that we don't 1045204007ebaSmrg # accidentally link it into a program. 1045304007ebaSmrg # $show "echo timestamp > $libobj" 1045404007ebaSmrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 1045504007ebaSmrg exit $EXIT_SUCCESS 1045605cf1079Smrg } 1045704007ebaSmrg 1045805cf1079Smrg if test -n "$pic_flag" || test default != "$pic_mode"; then 1045904007ebaSmrg # Only do commands if we really have different PIC objects. 1046004007ebaSmrg reload_objs="$libobjs $reload_conv_objs" 1046105cf1079Smrg output=$libobj 1046204007ebaSmrg func_execute_cmds "$reload_cmds" 'exit $?' 1046304007ebaSmrg fi 1046404007ebaSmrg 1046504007ebaSmrg if test -n "$gentop"; then 1046604007ebaSmrg func_show_eval '${RM}r "$gentop"' 1046704007ebaSmrg fi 1046804007ebaSmrg 1046904007ebaSmrg exit $EXIT_SUCCESS 1047004007ebaSmrg ;; 1047104007ebaSmrg 1047204007ebaSmrg prog) 1047304007ebaSmrg case $host in 1047404007ebaSmrg *cygwin*) func_stripname '' '.exe' "$output" 1047504007ebaSmrg output=$func_stripname_result.exe;; 1047604007ebaSmrg esac 1047704007ebaSmrg test -n "$vinfo" && \ 1047805cf1079Smrg func_warning "'-version-info' is ignored for programs" 1047904007ebaSmrg 1048004007ebaSmrg test -n "$release" && \ 1048105cf1079Smrg func_warning "'-release' is ignored for programs" 1048204007ebaSmrg 1048305cf1079Smrg $preload \ 1048405cf1079Smrg && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ 1048505cf1079Smrg && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." 1048604007ebaSmrg 1048704007ebaSmrg case $host in 1048804007ebaSmrg *-*-rhapsody* | *-*-darwin1.[012]) 1048904007ebaSmrg # On Rhapsody replace the C library is the System framework 1049004007ebaSmrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 1049104007ebaSmrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 1049204007ebaSmrg ;; 1049304007ebaSmrg esac 1049404007ebaSmrg 1049504007ebaSmrg case $host in 1049604007ebaSmrg *-*-darwin*) 1049704007ebaSmrg # Don't allow lazy linking, it breaks C++ global constructors 1049804007ebaSmrg # But is supposedly fixed on 10.4 or later (yay!). 1049905cf1079Smrg if test CXX = "$tagname"; then 1050004007ebaSmrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 1050104007ebaSmrg 10.[0123]) 1050205cf1079Smrg func_append compile_command " $wl-bind_at_load" 1050305cf1079Smrg func_append finalize_command " $wl-bind_at_load" 1050404007ebaSmrg ;; 1050504007ebaSmrg esac 1050604007ebaSmrg fi 1050704007ebaSmrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 1050804007ebaSmrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 1050904007ebaSmrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 1051004007ebaSmrg ;; 1051104007ebaSmrg esac 1051204007ebaSmrg 1051304007ebaSmrg 1051404007ebaSmrg # move library search paths that coincide with paths to not yet 1051504007ebaSmrg # installed libraries to the beginning of the library search list 1051604007ebaSmrg new_libs= 1051704007ebaSmrg for path in $notinst_path; do 1051804007ebaSmrg case " $new_libs " in 1051904007ebaSmrg *" -L$path/$objdir "*) ;; 1052004007ebaSmrg *) 1052104007ebaSmrg case " $compile_deplibs " in 1052204007ebaSmrg *" -L$path/$objdir "*) 1052304007ebaSmrg func_append new_libs " -L$path/$objdir" ;; 1052404007ebaSmrg esac 1052504007ebaSmrg ;; 1052604007ebaSmrg esac 1052704007ebaSmrg done 1052804007ebaSmrg for deplib in $compile_deplibs; do 1052904007ebaSmrg case $deplib in 1053004007ebaSmrg -L*) 1053104007ebaSmrg case " $new_libs " in 1053204007ebaSmrg *" $deplib "*) ;; 1053304007ebaSmrg *) func_append new_libs " $deplib" ;; 1053404007ebaSmrg esac 1053504007ebaSmrg ;; 1053604007ebaSmrg *) func_append new_libs " $deplib" ;; 1053704007ebaSmrg esac 1053804007ebaSmrg done 1053905cf1079Smrg compile_deplibs=$new_libs 1054004007ebaSmrg 1054104007ebaSmrg 1054204007ebaSmrg func_append compile_command " $compile_deplibs" 1054304007ebaSmrg func_append finalize_command " $finalize_deplibs" 1054404007ebaSmrg 1054504007ebaSmrg if test -n "$rpath$xrpath"; then 1054604007ebaSmrg # If the user specified any rpath flags, then add them. 1054704007ebaSmrg for libdir in $rpath $xrpath; do 1054804007ebaSmrg # This is the magic to use -rpath. 1054904007ebaSmrg case "$finalize_rpath " in 1055004007ebaSmrg *" $libdir "*) ;; 1055104007ebaSmrg *) func_append finalize_rpath " $libdir" ;; 1055204007ebaSmrg esac 1055304007ebaSmrg done 1055404007ebaSmrg fi 1055504007ebaSmrg 1055604007ebaSmrg # Now hardcode the library paths 1055704007ebaSmrg rpath= 1055804007ebaSmrg hardcode_libdirs= 1055904007ebaSmrg for libdir in $compile_rpath $finalize_rpath; do 1056004007ebaSmrg if test -n "$hardcode_libdir_flag_spec"; then 1056104007ebaSmrg if test -n "$hardcode_libdir_separator"; then 1056204007ebaSmrg if test -z "$hardcode_libdirs"; then 1056305cf1079Smrg hardcode_libdirs=$libdir 1056404007ebaSmrg else 1056504007ebaSmrg # Just accumulate the unique libdirs. 1056604007ebaSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 1056704007ebaSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 1056804007ebaSmrg ;; 1056904007ebaSmrg *) 1057004007ebaSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 1057104007ebaSmrg ;; 1057204007ebaSmrg esac 1057304007ebaSmrg fi 1057404007ebaSmrg else 1057504007ebaSmrg eval flag=\"$hardcode_libdir_flag_spec\" 1057604007ebaSmrg func_append rpath " $flag" 1057704007ebaSmrg fi 1057804007ebaSmrg elif test -n "$runpath_var"; then 1057904007ebaSmrg case "$perm_rpath " in 1058004007ebaSmrg *" $libdir "*) ;; 1058104007ebaSmrg *) func_append perm_rpath " $libdir" ;; 1058204007ebaSmrg esac 1058304007ebaSmrg fi 1058404007ebaSmrg case $host in 1058504007ebaSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 1058605cf1079Smrg testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` 1058704007ebaSmrg case :$dllsearchpath: in 1058804007ebaSmrg *":$libdir:"*) ;; 1058904007ebaSmrg ::) dllsearchpath=$libdir;; 1059004007ebaSmrg *) func_append dllsearchpath ":$libdir";; 1059104007ebaSmrg esac 1059204007ebaSmrg case :$dllsearchpath: in 1059304007ebaSmrg *":$testbindir:"*) ;; 1059404007ebaSmrg ::) dllsearchpath=$testbindir;; 1059504007ebaSmrg *) func_append dllsearchpath ":$testbindir";; 1059604007ebaSmrg esac 1059704007ebaSmrg ;; 1059804007ebaSmrg esac 1059904007ebaSmrg done 1060004007ebaSmrg # Substitute the hardcoded libdirs into the rpath. 1060104007ebaSmrg if test -n "$hardcode_libdir_separator" && 1060204007ebaSmrg test -n "$hardcode_libdirs"; then 1060305cf1079Smrg libdir=$hardcode_libdirs 1060404007ebaSmrg eval rpath=\" $hardcode_libdir_flag_spec\" 1060504007ebaSmrg fi 1060605cf1079Smrg compile_rpath=$rpath 1060704007ebaSmrg 1060804007ebaSmrg rpath= 1060904007ebaSmrg hardcode_libdirs= 1061004007ebaSmrg for libdir in $finalize_rpath; do 1061104007ebaSmrg if test -n "$hardcode_libdir_flag_spec"; then 1061204007ebaSmrg if test -n "$hardcode_libdir_separator"; then 1061304007ebaSmrg if test -z "$hardcode_libdirs"; then 1061405cf1079Smrg hardcode_libdirs=$libdir 1061504007ebaSmrg else 1061604007ebaSmrg # Just accumulate the unique libdirs. 1061704007ebaSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 1061804007ebaSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 1061904007ebaSmrg ;; 1062004007ebaSmrg *) 1062104007ebaSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 1062204007ebaSmrg ;; 1062304007ebaSmrg esac 1062404007ebaSmrg fi 1062504007ebaSmrg else 1062604007ebaSmrg eval flag=\"$hardcode_libdir_flag_spec\" 1062704007ebaSmrg func_append rpath " $flag" 1062804007ebaSmrg fi 1062904007ebaSmrg elif test -n "$runpath_var"; then 1063004007ebaSmrg case "$finalize_perm_rpath " in 1063104007ebaSmrg *" $libdir "*) ;; 1063204007ebaSmrg *) func_append finalize_perm_rpath " $libdir" ;; 1063304007ebaSmrg esac 1063404007ebaSmrg fi 1063504007ebaSmrg done 1063604007ebaSmrg # Substitute the hardcoded libdirs into the rpath. 1063704007ebaSmrg if test -n "$hardcode_libdir_separator" && 1063804007ebaSmrg test -n "$hardcode_libdirs"; then 1063905cf1079Smrg libdir=$hardcode_libdirs 1064004007ebaSmrg eval rpath=\" $hardcode_libdir_flag_spec\" 1064104007ebaSmrg fi 1064205cf1079Smrg finalize_rpath=$rpath 1064304007ebaSmrg 1064405cf1079Smrg if test -n "$libobjs" && test yes = "$build_old_libs"; then 1064504007ebaSmrg # Transform all the library objects into standard objects. 1064604007ebaSmrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 1064704007ebaSmrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 1064804007ebaSmrg fi 1064904007ebaSmrg 1065005cf1079Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" false 1065104007ebaSmrg 1065204007ebaSmrg # template prelinking step 1065304007ebaSmrg if test -n "$prelink_cmds"; then 1065404007ebaSmrg func_execute_cmds "$prelink_cmds" 'exit $?' 1065504007ebaSmrg fi 1065604007ebaSmrg 1065705cf1079Smrg wrappers_required=: 1065804007ebaSmrg case $host in 1065904007ebaSmrg *cegcc* | *mingw32ce*) 1066004007ebaSmrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 1066105cf1079Smrg wrappers_required=false 1066204007ebaSmrg ;; 1066304007ebaSmrg *cygwin* | *mingw* ) 1066405cf1079Smrg test yes = "$build_libtool_libs" || wrappers_required=false 1066504007ebaSmrg ;; 1066604007ebaSmrg *) 1066705cf1079Smrg if test no = "$need_relink" || test yes != "$build_libtool_libs"; then 1066805cf1079Smrg wrappers_required=false 1066904007ebaSmrg fi 1067004007ebaSmrg ;; 1067104007ebaSmrg esac 1067205cf1079Smrg $wrappers_required || { 1067304007ebaSmrg # Replace the output file specification. 1067404007ebaSmrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 1067505cf1079Smrg link_command=$compile_command$compile_rpath 1067604007ebaSmrg 1067704007ebaSmrg # We have no uninstalled library dependencies, so finalize right now. 1067804007ebaSmrg exit_status=0 1067904007ebaSmrg func_show_eval "$link_command" 'exit_status=$?' 1068004007ebaSmrg 1068104007ebaSmrg if test -n "$postlink_cmds"; then 1068204007ebaSmrg func_to_tool_file "$output" 1068304007ebaSmrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 1068404007ebaSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 1068504007ebaSmrg fi 1068604007ebaSmrg 1068704007ebaSmrg # Delete the generated files. 1068805cf1079Smrg if test -f "$output_objdir/${outputname}S.$objext"; then 1068905cf1079Smrg func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' 1069004007ebaSmrg fi 1069104007ebaSmrg 1069204007ebaSmrg exit $exit_status 1069305cf1079Smrg } 1069404007ebaSmrg 1069504007ebaSmrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 1069604007ebaSmrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 1069704007ebaSmrg fi 1069804007ebaSmrg if test -n "$finalize_shlibpath"; then 1069904007ebaSmrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 1070004007ebaSmrg fi 1070104007ebaSmrg 1070204007ebaSmrg compile_var= 1070304007ebaSmrg finalize_var= 1070404007ebaSmrg if test -n "$runpath_var"; then 1070504007ebaSmrg if test -n "$perm_rpath"; then 1070604007ebaSmrg # We should set the runpath_var. 1070704007ebaSmrg rpath= 1070804007ebaSmrg for dir in $perm_rpath; do 1070904007ebaSmrg func_append rpath "$dir:" 1071004007ebaSmrg done 1071104007ebaSmrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 1071204007ebaSmrg fi 1071304007ebaSmrg if test -n "$finalize_perm_rpath"; then 1071404007ebaSmrg # We should set the runpath_var. 1071504007ebaSmrg rpath= 1071604007ebaSmrg for dir in $finalize_perm_rpath; do 1071704007ebaSmrg func_append rpath "$dir:" 1071804007ebaSmrg done 1071904007ebaSmrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 1072004007ebaSmrg fi 1072104007ebaSmrg fi 1072204007ebaSmrg 1072305cf1079Smrg if test yes = "$no_install"; then 1072404007ebaSmrg # We don't need to create a wrapper script. 1072505cf1079Smrg link_command=$compile_var$compile_command$compile_rpath 1072604007ebaSmrg # Replace the output file specification. 1072704007ebaSmrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 1072804007ebaSmrg # Delete the old output file. 1072904007ebaSmrg $opt_dry_run || $RM $output 1073004007ebaSmrg # Link the executable and exit 1073104007ebaSmrg func_show_eval "$link_command" 'exit $?' 1073204007ebaSmrg 1073304007ebaSmrg if test -n "$postlink_cmds"; then 1073404007ebaSmrg func_to_tool_file "$output" 1073504007ebaSmrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 1073604007ebaSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 1073704007ebaSmrg fi 1073804007ebaSmrg 1073904007ebaSmrg exit $EXIT_SUCCESS 1074004007ebaSmrg fi 1074104007ebaSmrg 1074205cf1079Smrg case $hardcode_action,$fast_install in 1074305cf1079Smrg relink,*) 1074405cf1079Smrg # Fast installation is not supported 1074505cf1079Smrg link_command=$compile_var$compile_command$compile_rpath 1074605cf1079Smrg relink_command=$finalize_var$finalize_command$finalize_rpath 1074704007ebaSmrg 1074805cf1079Smrg func_warning "this platform does not like uninstalled shared libraries" 1074905cf1079Smrg func_warning "'$output' will be relinked during installation" 1075005cf1079Smrg ;; 1075105cf1079Smrg *,yes) 1075205cf1079Smrg link_command=$finalize_var$compile_command$finalize_rpath 1075305cf1079Smrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 1075405cf1079Smrg ;; 1075505cf1079Smrg *,no) 1075605cf1079Smrg link_command=$compile_var$compile_command$compile_rpath 1075705cf1079Smrg relink_command=$finalize_var$finalize_command$finalize_rpath 1075805cf1079Smrg ;; 1075905cf1079Smrg *,needless) 1076005cf1079Smrg link_command=$finalize_var$compile_command$finalize_rpath 1076105cf1079Smrg relink_command= 1076205cf1079Smrg ;; 1076305cf1079Smrg esac 1076404007ebaSmrg 1076504007ebaSmrg # Replace the output file specification. 1076604007ebaSmrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 1076704007ebaSmrg 1076804007ebaSmrg # Delete the old output files. 1076904007ebaSmrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 1077004007ebaSmrg 1077104007ebaSmrg func_show_eval "$link_command" 'exit $?' 1077204007ebaSmrg 1077304007ebaSmrg if test -n "$postlink_cmds"; then 1077404007ebaSmrg func_to_tool_file "$output_objdir/$outputname" 1077504007ebaSmrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 1077604007ebaSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 1077704007ebaSmrg fi 1077804007ebaSmrg 1077904007ebaSmrg # Now create the wrapper script. 1078004007ebaSmrg func_verbose "creating $output" 1078104007ebaSmrg 1078204007ebaSmrg # Quote the relink command for shipping. 1078304007ebaSmrg if test -n "$relink_command"; then 1078404007ebaSmrg # Preserve any variables that may affect compiler behavior 1078504007ebaSmrg for var in $variables_saved_for_relink; do 1078604007ebaSmrg if eval test -z \"\${$var+set}\"; then 1078704007ebaSmrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 1078804007ebaSmrg elif eval var_value=\$$var; test -z "$var_value"; then 1078904007ebaSmrg relink_command="$var=; export $var; $relink_command" 1079004007ebaSmrg else 1079179d5fcd7Smrg func_quote_arg pretty "$var_value" 1079279d5fcd7Smrg relink_command="$var=$func_quote_arg_result; export $var; $relink_command" 1079304007ebaSmrg fi 1079404007ebaSmrg done 1079579d5fcd7Smrg func_quote eval cd "`pwd`" 1079679d5fcd7Smrg func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)" 1079779d5fcd7Smrg relink_command=$func_quote_arg_unquoted_result 1079804007ebaSmrg fi 1079904007ebaSmrg 1080004007ebaSmrg # Only actually do things if not in dry run mode. 1080104007ebaSmrg $opt_dry_run || { 1080204007ebaSmrg # win32 will think the script is a binary if it has 1080304007ebaSmrg # a .exe suffix, so we strip it off here. 1080404007ebaSmrg case $output in 1080504007ebaSmrg *.exe) func_stripname '' '.exe' "$output" 1080604007ebaSmrg output=$func_stripname_result ;; 1080704007ebaSmrg esac 1080804007ebaSmrg # test for cygwin because mv fails w/o .exe extensions 1080904007ebaSmrg case $host in 1081004007ebaSmrg *cygwin*) 1081104007ebaSmrg exeext=.exe 1081204007ebaSmrg func_stripname '' '.exe' "$outputname" 1081304007ebaSmrg outputname=$func_stripname_result ;; 1081404007ebaSmrg *) exeext= ;; 1081504007ebaSmrg esac 1081604007ebaSmrg case $host in 1081704007ebaSmrg *cygwin* | *mingw* ) 1081804007ebaSmrg func_dirname_and_basename "$output" "" "." 1081904007ebaSmrg output_name=$func_basename_result 1082004007ebaSmrg output_path=$func_dirname_result 1082105cf1079Smrg cwrappersource=$output_path/$objdir/lt-$output_name.c 1082205cf1079Smrg cwrapper=$output_path/$output_name.exe 1082304007ebaSmrg $RM $cwrappersource $cwrapper 1082404007ebaSmrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 1082504007ebaSmrg 1082604007ebaSmrg func_emit_cwrapperexe_src > $cwrappersource 1082704007ebaSmrg 1082804007ebaSmrg # The wrapper executable is built using the $host compiler, 1082904007ebaSmrg # because it contains $host paths and files. If cross- 1083004007ebaSmrg # compiling, it, like the target executable, must be 1083104007ebaSmrg # executed on the $host or under an emulation environment. 1083204007ebaSmrg $opt_dry_run || { 1083304007ebaSmrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 1083404007ebaSmrg $STRIP $cwrapper 1083504007ebaSmrg } 1083604007ebaSmrg 1083704007ebaSmrg # Now, create the wrapper script for func_source use: 1083804007ebaSmrg func_ltwrapper_scriptname $cwrapper 1083904007ebaSmrg $RM $func_ltwrapper_scriptname_result 1084004007ebaSmrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 1084104007ebaSmrg $opt_dry_run || { 1084204007ebaSmrg # note: this script will not be executed, so do not chmod. 1084305cf1079Smrg if test "x$build" = "x$host"; then 1084404007ebaSmrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 1084504007ebaSmrg else 1084604007ebaSmrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 1084704007ebaSmrg fi 1084804007ebaSmrg } 1084904007ebaSmrg ;; 1085004007ebaSmrg * ) 1085104007ebaSmrg $RM $output 1085204007ebaSmrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 1085304007ebaSmrg 1085404007ebaSmrg func_emit_wrapper no > $output 1085504007ebaSmrg chmod +x $output 1085604007ebaSmrg ;; 1085704007ebaSmrg esac 1085804007ebaSmrg } 1085904007ebaSmrg exit $EXIT_SUCCESS 1086004007ebaSmrg ;; 1086104007ebaSmrg esac 1086204007ebaSmrg 1086304007ebaSmrg # See if we need to build an old-fashioned archive. 1086404007ebaSmrg for oldlib in $oldlibs; do 1086504007ebaSmrg 1086605cf1079Smrg case $build_libtool_libs in 1086705cf1079Smrg convenience) 1086805cf1079Smrg oldobjs="$libobjs_save $symfileobj" 1086905cf1079Smrg addlibs=$convenience 1087004007ebaSmrg build_libtool_libs=no 1087105cf1079Smrg ;; 1087205cf1079Smrg module) 1087305cf1079Smrg oldobjs=$libobjs_save 1087405cf1079Smrg addlibs=$old_convenience 1087505cf1079Smrg build_libtool_libs=no 1087605cf1079Smrg ;; 1087705cf1079Smrg *) 1087804007ebaSmrg oldobjs="$old_deplibs $non_pic_objects" 1087905cf1079Smrg $preload && test -f "$symfileobj" \ 1088005cf1079Smrg && func_append oldobjs " $symfileobj" 1088105cf1079Smrg addlibs=$old_convenience 1088205cf1079Smrg ;; 1088305cf1079Smrg esac 1088404007ebaSmrg 1088504007ebaSmrg if test -n "$addlibs"; then 1088605cf1079Smrg gentop=$output_objdir/${outputname}x 1088704007ebaSmrg func_append generated " $gentop" 1088804007ebaSmrg 1088904007ebaSmrg func_extract_archives $gentop $addlibs 1089004007ebaSmrg func_append oldobjs " $func_extract_archives_result" 1089104007ebaSmrg fi 1089204007ebaSmrg 1089304007ebaSmrg # Do each command in the archive commands. 1089405cf1079Smrg if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then 1089504007ebaSmrg cmds=$old_archive_from_new_cmds 1089604007ebaSmrg else 1089704007ebaSmrg 1089804007ebaSmrg # Add any objects from preloaded convenience libraries 1089904007ebaSmrg if test -n "$dlprefiles"; then 1090005cf1079Smrg gentop=$output_objdir/${outputname}x 1090104007ebaSmrg func_append generated " $gentop" 1090204007ebaSmrg 1090304007ebaSmrg func_extract_archives $gentop $dlprefiles 1090404007ebaSmrg func_append oldobjs " $func_extract_archives_result" 1090504007ebaSmrg fi 1090604007ebaSmrg 1090704007ebaSmrg # POSIX demands no paths to be encoded in archives. We have 1090804007ebaSmrg # to avoid creating archives with duplicate basenames if we 1090904007ebaSmrg # might have to extract them afterwards, e.g., when creating a 1091004007ebaSmrg # static archive out of a convenience library, or when linking 1091104007ebaSmrg # the entirety of a libtool archive into another (currently 1091204007ebaSmrg # not supported by libtool). 1091304007ebaSmrg if (for obj in $oldobjs 1091404007ebaSmrg do 1091504007ebaSmrg func_basename "$obj" 1091604007ebaSmrg $ECHO "$func_basename_result" 1091704007ebaSmrg done | sort | sort -uc >/dev/null 2>&1); then 1091804007ebaSmrg : 1091904007ebaSmrg else 1092004007ebaSmrg echo "copying selected object files to avoid basename conflicts..." 1092105cf1079Smrg gentop=$output_objdir/${outputname}x 1092204007ebaSmrg func_append generated " $gentop" 1092304007ebaSmrg func_mkdir_p "$gentop" 1092404007ebaSmrg save_oldobjs=$oldobjs 1092504007ebaSmrg oldobjs= 1092604007ebaSmrg counter=1 1092704007ebaSmrg for obj in $save_oldobjs 1092804007ebaSmrg do 1092904007ebaSmrg func_basename "$obj" 1093005cf1079Smrg objbase=$func_basename_result 1093104007ebaSmrg case " $oldobjs " in 1093204007ebaSmrg " ") oldobjs=$obj ;; 1093304007ebaSmrg *[\ /]"$objbase "*) 1093404007ebaSmrg while :; do 1093504007ebaSmrg # Make sure we don't pick an alternate name that also 1093604007ebaSmrg # overlaps. 1093704007ebaSmrg newobj=lt$counter-$objbase 1093804007ebaSmrg func_arith $counter + 1 1093904007ebaSmrg counter=$func_arith_result 1094004007ebaSmrg case " $oldobjs " in 1094104007ebaSmrg *[\ /]"$newobj "*) ;; 1094204007ebaSmrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 1094304007ebaSmrg esac 1094404007ebaSmrg done 1094504007ebaSmrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 1094604007ebaSmrg func_append oldobjs " $gentop/$newobj" 1094704007ebaSmrg ;; 1094804007ebaSmrg *) func_append oldobjs " $obj" ;; 1094904007ebaSmrg esac 1095004007ebaSmrg done 1095104007ebaSmrg fi 1095204007ebaSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 1095304007ebaSmrg tool_oldlib=$func_to_tool_file_result 1095404007ebaSmrg eval cmds=\"$old_archive_cmds\" 1095504007ebaSmrg 1095604007ebaSmrg func_len " $cmds" 1095704007ebaSmrg len=$func_len_result 1095804007ebaSmrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 1095904007ebaSmrg cmds=$old_archive_cmds 1096004007ebaSmrg elif test -n "$archiver_list_spec"; then 1096104007ebaSmrg func_verbose "using command file archive linking..." 1096204007ebaSmrg for obj in $oldobjs 1096304007ebaSmrg do 1096404007ebaSmrg func_to_tool_file "$obj" 1096504007ebaSmrg $ECHO "$func_to_tool_file_result" 1096604007ebaSmrg done > $output_objdir/$libname.libcmd 1096704007ebaSmrg func_to_tool_file "$output_objdir/$libname.libcmd" 1096804007ebaSmrg oldobjs=" $archiver_list_spec$func_to_tool_file_result" 1096904007ebaSmrg cmds=$old_archive_cmds 1097004007ebaSmrg else 1097104007ebaSmrg # the command line is too long to link in one step, link in parts 1097204007ebaSmrg func_verbose "using piecewise archive linking..." 1097304007ebaSmrg save_RANLIB=$RANLIB 1097404007ebaSmrg RANLIB=: 1097504007ebaSmrg objlist= 1097604007ebaSmrg concat_cmds= 1097704007ebaSmrg save_oldobjs=$oldobjs 1097804007ebaSmrg oldobjs= 1097904007ebaSmrg # Is there a better way of finding the last object in the list? 1098004007ebaSmrg for obj in $save_oldobjs 1098104007ebaSmrg do 1098204007ebaSmrg last_oldobj=$obj 1098304007ebaSmrg done 1098404007ebaSmrg eval test_cmds=\"$old_archive_cmds\" 1098504007ebaSmrg func_len " $test_cmds" 1098604007ebaSmrg len0=$func_len_result 1098704007ebaSmrg len=$len0 1098804007ebaSmrg for obj in $save_oldobjs 1098904007ebaSmrg do 1099004007ebaSmrg func_len " $obj" 1099104007ebaSmrg func_arith $len + $func_len_result 1099204007ebaSmrg len=$func_arith_result 1099304007ebaSmrg func_append objlist " $obj" 1099404007ebaSmrg if test "$len" -lt "$max_cmd_len"; then 1099504007ebaSmrg : 1099604007ebaSmrg else 1099704007ebaSmrg # the above command should be used before it gets too long 1099804007ebaSmrg oldobjs=$objlist 1099905cf1079Smrg if test "$obj" = "$last_oldobj"; then 1100004007ebaSmrg RANLIB=$save_RANLIB 1100104007ebaSmrg fi 1100204007ebaSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 1100305cf1079Smrg eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" 1100404007ebaSmrg objlist= 1100504007ebaSmrg len=$len0 1100604007ebaSmrg fi 1100704007ebaSmrg done 1100804007ebaSmrg RANLIB=$save_RANLIB 1100904007ebaSmrg oldobjs=$objlist 1101005cf1079Smrg if test -z "$oldobjs"; then 1101104007ebaSmrg eval cmds=\"\$concat_cmds\" 1101204007ebaSmrg else 1101304007ebaSmrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 1101404007ebaSmrg fi 1101504007ebaSmrg fi 1101604007ebaSmrg fi 1101704007ebaSmrg func_execute_cmds "$cmds" 'exit $?' 1101804007ebaSmrg done 1101904007ebaSmrg 1102004007ebaSmrg test -n "$generated" && \ 1102104007ebaSmrg func_show_eval "${RM}r$generated" 1102204007ebaSmrg 1102304007ebaSmrg # Now create the libtool archive. 1102404007ebaSmrg case $output in 1102504007ebaSmrg *.la) 1102604007ebaSmrg old_library= 1102705cf1079Smrg test yes = "$build_old_libs" && old_library=$libname.$libext 1102804007ebaSmrg func_verbose "creating $output" 1102904007ebaSmrg 1103004007ebaSmrg # Preserve any variables that may affect compiler behavior 1103104007ebaSmrg for var in $variables_saved_for_relink; do 1103204007ebaSmrg if eval test -z \"\${$var+set}\"; then 1103304007ebaSmrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 1103404007ebaSmrg elif eval var_value=\$$var; test -z "$var_value"; then 1103504007ebaSmrg relink_command="$var=; export $var; $relink_command" 1103604007ebaSmrg else 1103779d5fcd7Smrg func_quote_arg pretty,unquoted "$var_value" 1103879d5fcd7Smrg relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command" 1103904007ebaSmrg fi 1104004007ebaSmrg done 1104104007ebaSmrg # Quote the link command for shipping. 1104279d5fcd7Smrg func_quote eval cd "`pwd`" 1104379d5fcd7Smrg relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 1104479d5fcd7Smrg func_quote_arg pretty,unquoted "$relink_command" 1104579d5fcd7Smrg relink_command=$func_quote_arg_unquoted_result 1104605cf1079Smrg if test yes = "$hardcode_automatic"; then 1104704007ebaSmrg relink_command= 1104804007ebaSmrg fi 1104904007ebaSmrg 1105004007ebaSmrg # Only create the output if not a dry run. 1105104007ebaSmrg $opt_dry_run || { 1105204007ebaSmrg for installed in no yes; do 1105305cf1079Smrg if test yes = "$installed"; then 1105404007ebaSmrg if test -z "$install_libdir"; then 1105504007ebaSmrg break 1105604007ebaSmrg fi 1105705cf1079Smrg output=$output_objdir/${outputname}i 1105804007ebaSmrg # Replace all uninstalled libtool libraries with the installed ones 1105904007ebaSmrg newdependency_libs= 1106004007ebaSmrg for deplib in $dependency_libs; do 1106104007ebaSmrg case $deplib in 1106204007ebaSmrg *.la) 1106304007ebaSmrg func_basename "$deplib" 1106405cf1079Smrg name=$func_basename_result 1106504007ebaSmrg func_resolve_sysroot "$deplib" 1106605cf1079Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 1106704007ebaSmrg test -z "$libdir" && \ 1106805cf1079Smrg func_fatal_error "'$deplib' is not a valid libtool archive" 1106904007ebaSmrg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 1107004007ebaSmrg ;; 1107104007ebaSmrg -L*) 1107204007ebaSmrg func_stripname -L '' "$deplib" 1107304007ebaSmrg func_replace_sysroot "$func_stripname_result" 1107404007ebaSmrg func_append newdependency_libs " -L$func_replace_sysroot_result" 1107504007ebaSmrg ;; 1107604007ebaSmrg -R*) 1107704007ebaSmrg func_stripname -R '' "$deplib" 1107804007ebaSmrg func_replace_sysroot "$func_stripname_result" 1107904007ebaSmrg func_append newdependency_libs " -R$func_replace_sysroot_result" 1108004007ebaSmrg ;; 1108104007ebaSmrg *) func_append newdependency_libs " $deplib" ;; 1108204007ebaSmrg esac 1108304007ebaSmrg done 1108405cf1079Smrg dependency_libs=$newdependency_libs 1108504007ebaSmrg newdlfiles= 1108604007ebaSmrg 1108704007ebaSmrg for lib in $dlfiles; do 1108804007ebaSmrg case $lib in 1108904007ebaSmrg *.la) 1109004007ebaSmrg func_basename "$lib" 1109105cf1079Smrg name=$func_basename_result 1109205cf1079Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 1109304007ebaSmrg test -z "$libdir" && \ 1109405cf1079Smrg func_fatal_error "'$lib' is not a valid libtool archive" 1109504007ebaSmrg func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 1109604007ebaSmrg ;; 1109704007ebaSmrg *) func_append newdlfiles " $lib" ;; 1109804007ebaSmrg esac 1109904007ebaSmrg done 1110005cf1079Smrg dlfiles=$newdlfiles 1110104007ebaSmrg newdlprefiles= 1110204007ebaSmrg for lib in $dlprefiles; do 1110304007ebaSmrg case $lib in 1110404007ebaSmrg *.la) 1110504007ebaSmrg # Only pass preopened files to the pseudo-archive (for 1110604007ebaSmrg # eventual linking with the app. that links it) if we 1110704007ebaSmrg # didn't already link the preopened objects directly into 1110804007ebaSmrg # the library: 1110904007ebaSmrg func_basename "$lib" 1111005cf1079Smrg name=$func_basename_result 1111105cf1079Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 1111204007ebaSmrg test -z "$libdir" && \ 1111305cf1079Smrg func_fatal_error "'$lib' is not a valid libtool archive" 1111404007ebaSmrg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 1111504007ebaSmrg ;; 1111604007ebaSmrg esac 1111704007ebaSmrg done 1111805cf1079Smrg dlprefiles=$newdlprefiles 1111904007ebaSmrg else 1112004007ebaSmrg newdlfiles= 1112104007ebaSmrg for lib in $dlfiles; do 1112204007ebaSmrg case $lib in 1112305cf1079Smrg [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 1112404007ebaSmrg *) abs=`pwd`"/$lib" ;; 1112504007ebaSmrg esac 1112604007ebaSmrg func_append newdlfiles " $abs" 1112704007ebaSmrg done 1112805cf1079Smrg dlfiles=$newdlfiles 1112904007ebaSmrg newdlprefiles= 1113004007ebaSmrg for lib in $dlprefiles; do 1113104007ebaSmrg case $lib in 1113205cf1079Smrg [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 1113304007ebaSmrg *) abs=`pwd`"/$lib" ;; 1113404007ebaSmrg esac 1113504007ebaSmrg func_append newdlprefiles " $abs" 1113604007ebaSmrg done 1113705cf1079Smrg dlprefiles=$newdlprefiles 1113804007ebaSmrg fi 1113904007ebaSmrg $RM $output 1114004007ebaSmrg # place dlname in correct position for cygwin 1114104007ebaSmrg # In fact, it would be nice if we could use this code for all target 1114204007ebaSmrg # systems that can't hard-code library paths into their executables 1114304007ebaSmrg # and that have no shared library path variable independent of PATH, 1114404007ebaSmrg # but it turns out we can't easily determine that from inspecting 1114504007ebaSmrg # libtool variables, so we have to hard-code the OSs to which it 1114604007ebaSmrg # applies here; at the moment, that means platforms that use the PE 1114704007ebaSmrg # object format with DLL files. See the long comment at the top of 1114804007ebaSmrg # tests/bindir.at for full details. 1114904007ebaSmrg tdlname=$dlname 1115004007ebaSmrg case $host,$output,$installed,$module,$dlname in 1115104007ebaSmrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 1115204007ebaSmrg # If a -bindir argument was supplied, place the dll there. 1115305cf1079Smrg if test -n "$bindir"; then 1115404007ebaSmrg func_relative_path "$install_libdir" "$bindir" 1115505cf1079Smrg tdlname=$func_relative_path_result/$dlname 1115604007ebaSmrg else 1115704007ebaSmrg # Otherwise fall back on heuristic. 1115804007ebaSmrg tdlname=../bin/$dlname 1115904007ebaSmrg fi 1116004007ebaSmrg ;; 1116104007ebaSmrg esac 1116204007ebaSmrg $ECHO > $output "\ 1116304007ebaSmrg# $outputname - a libtool library file 1116405cf1079Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 1116504007ebaSmrg# 1116604007ebaSmrg# Please DO NOT delete this file! 1116704007ebaSmrg# It is necessary for linking the library. 1116804007ebaSmrg 1116904007ebaSmrg# The name that we can dlopen(3). 1117004007ebaSmrgdlname='$tdlname' 1117104007ebaSmrg 1117204007ebaSmrg# Names of this library. 1117304007ebaSmrglibrary_names='$library_names' 1117404007ebaSmrg 1117504007ebaSmrg# The name of the static archive. 1117604007ebaSmrgold_library='$old_library' 1117704007ebaSmrg 1117805cf1079Smrg# Linker flags that cannot go in dependency_libs. 1117904007ebaSmrginherited_linker_flags='$new_inherited_linker_flags' 1118004007ebaSmrg 1118104007ebaSmrg# Libraries that this one depends upon. 1118204007ebaSmrgdependency_libs='$dependency_libs' 1118304007ebaSmrg 1118404007ebaSmrg# Names of additional weak libraries provided by this library 1118504007ebaSmrgweak_library_names='$weak_libs' 1118604007ebaSmrg 1118704007ebaSmrg# Version information for $libname. 1118804007ebaSmrgcurrent=$current 1118904007ebaSmrgage=$age 1119004007ebaSmrgrevision=$revision 1119104007ebaSmrg 1119204007ebaSmrg# Is this an already installed library? 1119304007ebaSmrginstalled=$installed 1119404007ebaSmrg 1119504007ebaSmrg# Should we warn about portability when linking against -modules? 1119604007ebaSmrgshouldnotlink=$module 1119704007ebaSmrg 1119804007ebaSmrg# Files to dlopen/dlpreopen 1119904007ebaSmrgdlopen='$dlfiles' 1120004007ebaSmrgdlpreopen='$dlprefiles' 1120104007ebaSmrg 1120204007ebaSmrg# Directory that this library needs to be installed in: 1120304007ebaSmrglibdir='$install_libdir'" 1120405cf1079Smrg if test no,yes = "$installed,$need_relink"; then 1120504007ebaSmrg $ECHO >> $output "\ 1120604007ebaSmrgrelink_command=\"$relink_command\"" 1120704007ebaSmrg fi 1120804007ebaSmrg done 1120904007ebaSmrg } 1121004007ebaSmrg 1121104007ebaSmrg # Do a symbolic link so that the libtool archive can be found in 1121204007ebaSmrg # LD_LIBRARY_PATH before the program is installed. 1121304007ebaSmrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 1121404007ebaSmrg ;; 1121504007ebaSmrg esac 1121604007ebaSmrg exit $EXIT_SUCCESS 1121704007ebaSmrg} 1121804007ebaSmrg 1121905cf1079Smrgif test link = "$opt_mode" || test relink = "$opt_mode"; then 1122005cf1079Smrg func_mode_link ${1+"$@"} 1122105cf1079Smrgfi 1122204007ebaSmrg 1122304007ebaSmrg 1122404007ebaSmrg# func_mode_uninstall arg... 1122504007ebaSmrgfunc_mode_uninstall () 1122604007ebaSmrg{ 1122705cf1079Smrg $debug_cmd 1122805cf1079Smrg 1122905cf1079Smrg RM=$nonopt 1123004007ebaSmrg files= 1123105cf1079Smrg rmforce=false 1123204007ebaSmrg exit_status=0 1123304007ebaSmrg 1123404007ebaSmrg # This variable tells wrapper scripts just to set variables rather 1123504007ebaSmrg # than running their programs. 1123605cf1079Smrg libtool_install_magic=$magic 1123704007ebaSmrg 1123804007ebaSmrg for arg 1123904007ebaSmrg do 1124004007ebaSmrg case $arg in 1124105cf1079Smrg -f) func_append RM " $arg"; rmforce=: ;; 1124204007ebaSmrg -*) func_append RM " $arg" ;; 1124304007ebaSmrg *) func_append files " $arg" ;; 1124404007ebaSmrg esac 1124504007ebaSmrg done 1124604007ebaSmrg 1124704007ebaSmrg test -z "$RM" && \ 1124804007ebaSmrg func_fatal_help "you must specify an RM program" 1124904007ebaSmrg 1125004007ebaSmrg rmdirs= 1125104007ebaSmrg 1125204007ebaSmrg for file in $files; do 1125304007ebaSmrg func_dirname "$file" "" "." 1125405cf1079Smrg dir=$func_dirname_result 1125505cf1079Smrg if test . = "$dir"; then 1125605cf1079Smrg odir=$objdir 1125704007ebaSmrg else 1125805cf1079Smrg odir=$dir/$objdir 1125904007ebaSmrg fi 1126004007ebaSmrg func_basename "$file" 1126105cf1079Smrg name=$func_basename_result 1126205cf1079Smrg test uninstall = "$opt_mode" && odir=$dir 1126304007ebaSmrg 1126404007ebaSmrg # Remember odir for removal later, being careful to avoid duplicates 1126505cf1079Smrg if test clean = "$opt_mode"; then 1126604007ebaSmrg case " $rmdirs " in 1126704007ebaSmrg *" $odir "*) ;; 1126804007ebaSmrg *) func_append rmdirs " $odir" ;; 1126904007ebaSmrg esac 1127004007ebaSmrg fi 1127104007ebaSmrg 1127204007ebaSmrg # Don't error if the file doesn't exist and rm -f was used. 1127304007ebaSmrg if { test -L "$file"; } >/dev/null 2>&1 || 1127404007ebaSmrg { test -h "$file"; } >/dev/null 2>&1 || 1127504007ebaSmrg test -f "$file"; then 1127604007ebaSmrg : 1127704007ebaSmrg elif test -d "$file"; then 1127804007ebaSmrg exit_status=1 1127904007ebaSmrg continue 1128005cf1079Smrg elif $rmforce; then 1128104007ebaSmrg continue 1128204007ebaSmrg fi 1128304007ebaSmrg 1128405cf1079Smrg rmfiles=$file 1128504007ebaSmrg 1128604007ebaSmrg case $name in 1128704007ebaSmrg *.la) 1128804007ebaSmrg # Possibly a libtool archive, so verify it. 1128904007ebaSmrg if func_lalib_p "$file"; then 1129004007ebaSmrg func_source $dir/$name 1129104007ebaSmrg 1129204007ebaSmrg # Delete the libtool libraries and symlinks. 1129304007ebaSmrg for n in $library_names; do 1129404007ebaSmrg func_append rmfiles " $odir/$n" 1129504007ebaSmrg done 1129604007ebaSmrg test -n "$old_library" && func_append rmfiles " $odir/$old_library" 1129704007ebaSmrg 1129805cf1079Smrg case $opt_mode in 1129904007ebaSmrg clean) 1130004007ebaSmrg case " $library_names " in 1130104007ebaSmrg *" $dlname "*) ;; 1130204007ebaSmrg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 1130304007ebaSmrg esac 1130404007ebaSmrg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 1130504007ebaSmrg ;; 1130604007ebaSmrg uninstall) 1130704007ebaSmrg if test -n "$library_names"; then 1130804007ebaSmrg # Do each command in the postuninstall commands. 1130905cf1079Smrg func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' 1131004007ebaSmrg fi 1131104007ebaSmrg 1131204007ebaSmrg if test -n "$old_library"; then 1131304007ebaSmrg # Do each command in the old_postuninstall commands. 1131405cf1079Smrg func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' 1131504007ebaSmrg fi 1131604007ebaSmrg # FIXME: should reinstall the best remaining shared library. 1131704007ebaSmrg ;; 1131804007ebaSmrg esac 1131904007ebaSmrg fi 1132004007ebaSmrg ;; 1132104007ebaSmrg 1132204007ebaSmrg *.lo) 1132304007ebaSmrg # Possibly a libtool object, so verify it. 1132404007ebaSmrg if func_lalib_p "$file"; then 1132504007ebaSmrg 1132604007ebaSmrg # Read the .lo file 1132704007ebaSmrg func_source $dir/$name 1132804007ebaSmrg 1132904007ebaSmrg # Add PIC object to the list of files to remove. 1133005cf1079Smrg if test -n "$pic_object" && test none != "$pic_object"; then 1133104007ebaSmrg func_append rmfiles " $dir/$pic_object" 1133204007ebaSmrg fi 1133304007ebaSmrg 1133404007ebaSmrg # Add non-PIC object to the list of files to remove. 1133505cf1079Smrg if test -n "$non_pic_object" && test none != "$non_pic_object"; then 1133604007ebaSmrg func_append rmfiles " $dir/$non_pic_object" 1133704007ebaSmrg fi 1133804007ebaSmrg fi 1133904007ebaSmrg ;; 1134004007ebaSmrg 1134104007ebaSmrg *) 1134205cf1079Smrg if test clean = "$opt_mode"; then 1134304007ebaSmrg noexename=$name 1134404007ebaSmrg case $file in 1134504007ebaSmrg *.exe) 1134604007ebaSmrg func_stripname '' '.exe' "$file" 1134704007ebaSmrg file=$func_stripname_result 1134804007ebaSmrg func_stripname '' '.exe' "$name" 1134904007ebaSmrg noexename=$func_stripname_result 1135004007ebaSmrg # $file with .exe has already been added to rmfiles, 1135104007ebaSmrg # add $file without .exe 1135204007ebaSmrg func_append rmfiles " $file" 1135304007ebaSmrg ;; 1135404007ebaSmrg esac 1135504007ebaSmrg # Do a test to see if this is a libtool program. 1135604007ebaSmrg if func_ltwrapper_p "$file"; then 1135704007ebaSmrg if func_ltwrapper_executable_p "$file"; then 1135804007ebaSmrg func_ltwrapper_scriptname "$file" 1135904007ebaSmrg relink_command= 1136004007ebaSmrg func_source $func_ltwrapper_scriptname_result 1136104007ebaSmrg func_append rmfiles " $func_ltwrapper_scriptname_result" 1136204007ebaSmrg else 1136304007ebaSmrg relink_command= 1136404007ebaSmrg func_source $dir/$noexename 1136504007ebaSmrg fi 1136604007ebaSmrg 1136704007ebaSmrg # note $name still contains .exe if it was in $file originally 1136804007ebaSmrg # as does the version of $file that was added into $rmfiles 1136905cf1079Smrg func_append rmfiles " $odir/$name $odir/${name}S.$objext" 1137005cf1079Smrg if test yes = "$fast_install" && test -n "$relink_command"; then 1137104007ebaSmrg func_append rmfiles " $odir/lt-$name" 1137204007ebaSmrg fi 1137305cf1079Smrg if test "X$noexename" != "X$name"; then 1137405cf1079Smrg func_append rmfiles " $odir/lt-$noexename.c" 1137504007ebaSmrg fi 1137604007ebaSmrg fi 1137704007ebaSmrg fi 1137804007ebaSmrg ;; 1137904007ebaSmrg esac 1138004007ebaSmrg func_show_eval "$RM $rmfiles" 'exit_status=1' 1138104007ebaSmrg done 1138204007ebaSmrg 1138305cf1079Smrg # Try to remove the $objdir's in the directories where we deleted files 1138404007ebaSmrg for dir in $rmdirs; do 1138504007ebaSmrg if test -d "$dir"; then 1138604007ebaSmrg func_show_eval "rmdir $dir >/dev/null 2>&1" 1138704007ebaSmrg fi 1138804007ebaSmrg done 1138904007ebaSmrg 1139004007ebaSmrg exit $exit_status 1139104007ebaSmrg} 1139204007ebaSmrg 1139305cf1079Smrgif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then 1139405cf1079Smrg func_mode_uninstall ${1+"$@"} 1139505cf1079Smrgfi 1139604007ebaSmrg 1139704007ebaSmrgtest -z "$opt_mode" && { 1139805cf1079Smrg help=$generic_help 1139904007ebaSmrg func_fatal_help "you must specify a MODE" 1140004007ebaSmrg} 1140104007ebaSmrg 1140204007ebaSmrgtest -z "$exec_cmd" && \ 1140305cf1079Smrg func_fatal_help "invalid operation mode '$opt_mode'" 1140404007ebaSmrg 1140504007ebaSmrgif test -n "$exec_cmd"; then 1140604007ebaSmrg eval exec "$exec_cmd" 1140704007ebaSmrg exit $EXIT_FAILURE 1140804007ebaSmrgfi 1140904007ebaSmrg 1141004007ebaSmrgexit $exit_status 1141104007ebaSmrg 1141204007ebaSmrg 1141304007ebaSmrg# The TAGs below are defined such that we never get into a situation 1141405cf1079Smrg# where we disable both kinds of libraries. Given conflicting 1141504007ebaSmrg# choices, we go for a static library, that is the most portable, 1141604007ebaSmrg# since we can't tell whether shared libraries were disabled because 1141704007ebaSmrg# the user asked for that or because the platform doesn't support 1141804007ebaSmrg# them. This is particularly important on AIX, because we don't 1141904007ebaSmrg# support having both static and shared libraries enabled at the same 1142004007ebaSmrg# time on that platform, so we default to a shared-only configuration. 1142104007ebaSmrg# If a disable-shared tag is given, we'll fallback to a static-only 1142204007ebaSmrg# configuration. But we'll never go from static-only to shared-only. 1142304007ebaSmrg 1142404007ebaSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 1142504007ebaSmrgbuild_libtool_libs=no 1142604007ebaSmrgbuild_old_libs=yes 1142704007ebaSmrg# ### END LIBTOOL TAG CONFIG: disable-shared 1142804007ebaSmrg 1142904007ebaSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 1143004007ebaSmrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 1143104007ebaSmrg# ### END LIBTOOL TAG CONFIG: disable-static 1143204007ebaSmrg 1143304007ebaSmrg# Local Variables: 1143404007ebaSmrg# mode:shell-script 1143504007ebaSmrg# sh-indentation:2 1143604007ebaSmrg# End: 11437