13d05230fSmrg#! /usr/bin/env sh 2fbc03982Smrg## DO NOT EDIT - This file generated from ./build-aux/ltmain.in 33d05230fSmrg## by inline-source v2019-02-19.15 4ed6f5d66Smrg 5a3680546Smrg# libtool (GNU libtool) 2.5.4 6fbc03982Smrg# Provide generalized library-building support services. 7ed6f5d66Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 8ed6f5d66Smrg 9a3680546Smrg# Copyright (C) 1996-2019, 2021-2024 Free Software Foundation, Inc. 10ed6f5d66Smrg# This is free software; see the source for copying conditions. There is NO 11ed6f5d66Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12ed6f5d66Smrg 13ed6f5d66Smrg# GNU Libtool is free software; you can redistribute it and/or modify 14ed6f5d66Smrg# it under the terms of the GNU General Public License as published by 15ed6f5d66Smrg# the Free Software Foundation; either version 2 of the License, or 16ed6f5d66Smrg# (at your option) any later version. 17ed6f5d66Smrg# 18ed6f5d66Smrg# As a special exception to the GNU General Public License, 19ed6f5d66Smrg# if you distribute this file as part of a program or library that 20ed6f5d66Smrg# is built using GNU Libtool, you may include this file under the 21ed6f5d66Smrg# same distribution terms that you use for the rest of that program. 22ed6f5d66Smrg# 23ed6f5d66Smrg# GNU Libtool is distributed in the hope that it will be useful, but 24ed6f5d66Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 25ed6f5d66Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 26ed6f5d66Smrg# General Public License for more details. 27ed6f5d66Smrg# 28ed6f5d66Smrg# You should have received a copy of the GNU General Public License 29fbc03982Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 30ed6f5d66Smrg 31ed6f5d66Smrg 32ed6f5d66SmrgPROGRAM=libtool 33ed6f5d66SmrgPACKAGE=libtool 34a3680546SmrgVERSION=2.5.4 35a3680546Smrgpackage_revision=2.5.4 36ed6f5d66Smrg 37fbc03982Smrg 38fbc03982Smrg## ------ ## 39fbc03982Smrg## Usage. ## 40fbc03982Smrg## ------ ## 41fbc03982Smrg 42fbc03982Smrg# Run './libtool --help' for help with using this script from the 43fbc03982Smrg# command line. 44fbc03982Smrg 45fbc03982Smrg 46fbc03982Smrg## ------------------------------- ## 47fbc03982Smrg## User overridable command paths. ## 48fbc03982Smrg## ------------------------------- ## 49fbc03982Smrg 50fbc03982Smrg# After configure completes, it has a better idea of some of the 51fbc03982Smrg# shell tools we need than the defaults used by the functions shared 52fbc03982Smrg# with bootstrap, so set those here where they can still be over- 53fbc03982Smrg# ridden by the user, but otherwise take precedence. 54fbc03982Smrg 55fbc03982Smrg: ${AUTOCONF="autoconf"} 56fbc03982Smrg: ${AUTOMAKE="automake"} 57fbc03982Smrg 58fbc03982Smrg 59fbc03982Smrg## -------------------------- ## 60fbc03982Smrg## Source external libraries. ## 61fbc03982Smrg## -------------------------- ## 62fbc03982Smrg 63fbc03982Smrg# Much of our low-level functionality needs to be sourced from external 64fbc03982Smrg# libraries, which are installed to $pkgauxdir. 65fbc03982Smrg 66fbc03982Smrg# Set a version string for this script. 673d05230fSmrgscriptversion=2019-02-19.15; # UTC 68fbc03982Smrg 69fbc03982Smrg# General shell script boiler plate, and helper functions. 70fbc03982Smrg# Written by Gary V. Vaughan, 2004 71fbc03982Smrg 723d05230fSmrg# This is free software. There is NO warranty; not even for 733d05230fSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 743d05230fSmrg# 75a3680546Smrg# Copyright (C) 2004-2019, 2021, 2023-2024 Bootstrap Authors 763d05230fSmrg# 773d05230fSmrg# This file is dual licensed under the terms of the MIT license 78a3680546Smrg# <https://opensource.org/licenses/MIT>, and GPL version 2 or later 79a3680546Smrg# <https://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of 803d05230fSmrg# these licenses when using or redistributing this software or any of 813d05230fSmrg# the files within it. See the URLs above, or the file `LICENSE` 823d05230fSmrg# included in the Bootstrap distribution for the full license texts. 83fbc03982Smrg 843d05230fSmrg# Please report bugs or propose patches to: 853d05230fSmrg# <https://github.com/gnulib-modules/bootstrap/issues> 86fbc03982Smrg 87fbc03982Smrg 88fbc03982Smrg## ------ ## 89fbc03982Smrg## Usage. ## 90fbc03982Smrg## ------ ## 91fbc03982Smrg 92fbc03982Smrg# Evaluate this file near the top of your script to gain access to 93fbc03982Smrg# the functions and variables defined here: 94fbc03982Smrg# 95fbc03982Smrg# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh 96fbc03982Smrg# 97fbc03982Smrg# If you need to override any of the default environment variable 98fbc03982Smrg# settings, do that before evaluating this file. 99fbc03982Smrg 100fbc03982Smrg 101fbc03982Smrg## -------------------- ## 102fbc03982Smrg## Shell normalisation. ## 103fbc03982Smrg## -------------------- ## 104fbc03982Smrg 105fbc03982Smrg# Some shells need a little help to be as Bourne compatible as possible. 106fbc03982Smrg# Before doing anything else, make sure all that help has been provided! 107fbc03982Smrg 108fbc03982SmrgDUALCASE=1; export DUALCASE # for MKS sh 109fbc03982Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : 110ed6f5d66Smrg emulate sh 111ed6f5d66Smrg NULLCMD=: 112fbc03982Smrg # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which 113ed6f5d66Smrg # is contrary to our usage. Disable this feature. 114ed6f5d66Smrg alias -g '${1+"$@"}'='"$@"' 115ed6f5d66Smrg setopt NO_GLOB_SUBST 116ed6f5d66Smrgelse 117fbc03982Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac 118ed6f5d66Smrgfi 119ed6f5d66Smrg 120fbc03982Smrg# NLS nuisances: We save the old values in case they are required later. 121fbc03982Smrg_G_user_locale= 122fbc03982Smrg_G_safe_locale= 123fbc03982Smrgfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 124ed6f5d66Smrgdo 125fbc03982Smrg eval "if test set = \"\${$_G_var+set}\"; then 126fbc03982Smrg save_$_G_var=\$$_G_var 127fbc03982Smrg $_G_var=C 128fbc03982Smrg export $_G_var 129fbc03982Smrg _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" 130fbc03982Smrg _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" 131ed6f5d66Smrg fi" 132ed6f5d66Smrgdone 1333d05230fSmrg# These NLS vars are set unconditionally (bootstrap issue #24). Unset those 1343d05230fSmrg# in case the environment reset is needed later and the $save_* variant is not 1353d05230fSmrg# defined (see the code above). 1363d05230fSmrgLC_ALL=C 1373d05230fSmrgLANGUAGE=C 1383d05230fSmrgexport LANGUAGE LC_ALL 139ed6f5d66Smrg 140fbc03982Smrg# Make sure IFS has a sensible default 141fbc03982Smrgsp=' ' 142fbc03982Smrgnl=' 143fbc03982Smrg' 144fbc03982SmrgIFS="$sp $nl" 145fbc03982Smrg 146a3680546Smrg# There are apparently some systems that use ';' as a PATH separator! 147fbc03982Smrgif test "${PATH_SEPARATOR+set}" != set; then 148fbc03982Smrg PATH_SEPARATOR=: 149fbc03982Smrg (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { 150fbc03982Smrg (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || 151fbc03982Smrg PATH_SEPARATOR=';' 152fbc03982Smrg } 153fbc03982Smrgfi 154ed6f5d66Smrg 155ed6f5d66Smrg 1563d05230fSmrg# func_unset VAR 1573d05230fSmrg# -------------- 1583d05230fSmrg# Portably unset VAR. 1593d05230fSmrg# In some shells, an 'unset VAR' statement leaves a non-zero return 1603d05230fSmrg# status if VAR is already unset, which might be problematic if the 1613d05230fSmrg# statement is used at the end of a function (thus poisoning its return 1623d05230fSmrg# value) or when 'set -e' is active (causing even a spurious abort of 1633d05230fSmrg# the script in this case). 1643d05230fSmrgfunc_unset () 1653d05230fSmrg{ 1663d05230fSmrg { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; } 1673d05230fSmrg} 1683d05230fSmrg 1693d05230fSmrg 1703d05230fSmrg# Make sure CDPATH doesn't cause `cd` commands to output the target dir. 1713d05230fSmrgfunc_unset CDPATH 1723d05230fSmrg 1733d05230fSmrg# Make sure ${,E,F}GREP behave sanely. 1743d05230fSmrgfunc_unset GREP_OPTIONS 1753d05230fSmrg 176ed6f5d66Smrg 177fbc03982Smrg## ------------------------- ## 178fbc03982Smrg## Locate command utilities. ## 179fbc03982Smrg## ------------------------- ## 180fbc03982Smrg 181fbc03982Smrg 182fbc03982Smrg# func_executable_p FILE 183fbc03982Smrg# ---------------------- 184fbc03982Smrg# Check that FILE is an executable regular file. 185fbc03982Smrgfunc_executable_p () 186fbc03982Smrg{ 187fbc03982Smrg test -f "$1" && test -x "$1" 188fbc03982Smrg} 189fbc03982Smrg 190fbc03982Smrg 191fbc03982Smrg# func_path_progs PROGS_LIST CHECK_FUNC [PATH] 192fbc03982Smrg# -------------------------------------------- 193fbc03982Smrg# Search for either a program that responds to --version with output 194fbc03982Smrg# containing "GNU", or else returned by CHECK_FUNC otherwise, by 195fbc03982Smrg# trying all the directories in PATH with each of the elements of 196fbc03982Smrg# PROGS_LIST. 197fbc03982Smrg# 198fbc03982Smrg# CHECK_FUNC should accept the path to a candidate program, and 199fbc03982Smrg# set $func_check_prog_result if it truncates its output less than 200fbc03982Smrg# $_G_path_prog_max characters. 201fbc03982Smrgfunc_path_progs () 202fbc03982Smrg{ 203fbc03982Smrg _G_progs_list=$1 204fbc03982Smrg _G_check_func=$2 205fbc03982Smrg _G_PATH=${3-"$PATH"} 206fbc03982Smrg 207fbc03982Smrg _G_path_prog_max=0 208fbc03982Smrg _G_path_prog_found=false 209fbc03982Smrg _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} 210fbc03982Smrg for _G_dir in $_G_PATH; do 211fbc03982Smrg IFS=$_G_save_IFS 212fbc03982Smrg test -z "$_G_dir" && _G_dir=. 213fbc03982Smrg for _G_prog_name in $_G_progs_list; do 214fbc03982Smrg for _exeext in '' .EXE; do 215fbc03982Smrg _G_path_prog=$_G_dir/$_G_prog_name$_exeext 216fbc03982Smrg func_executable_p "$_G_path_prog" || continue 217fbc03982Smrg case `"$_G_path_prog" --version 2>&1` in 218fbc03982Smrg *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; 219fbc03982Smrg *) $_G_check_func $_G_path_prog 220fbc03982Smrg func_path_progs_result=$func_check_prog_result 221fbc03982Smrg ;; 222fbc03982Smrg esac 223fbc03982Smrg $_G_path_prog_found && break 3 224fbc03982Smrg done 225fbc03982Smrg done 226fbc03982Smrg done 227fbc03982Smrg IFS=$_G_save_IFS 228fbc03982Smrg test -z "$func_path_progs_result" && { 229fbc03982Smrg echo "no acceptable sed could be found in \$PATH" >&2 230fbc03982Smrg exit 1 231fbc03982Smrg } 232fbc03982Smrg} 233fbc03982Smrg 234fbc03982Smrg 235fbc03982Smrg# We want to be able to use the functions in this file before configure 236fbc03982Smrg# has figured out where the best binaries are kept, which means we have 237fbc03982Smrg# to search for them ourselves - except when the results are already set 238fbc03982Smrg# where we skip the searches. 239fbc03982Smrg 240fbc03982Smrg# Unless the user overrides by setting SED, search the path for either GNU 241fbc03982Smrg# sed, or the sed that truncates its output the least. 242fbc03982Smrgtest -z "$SED" && { 243fbc03982Smrg _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ 244fbc03982Smrg for _G_i in 1 2 3 4 5 6 7; do 245fbc03982Smrg _G_sed_script=$_G_sed_script$nl$_G_sed_script 246fbc03982Smrg done 247fbc03982Smrg echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed 248fbc03982Smrg _G_sed_script= 249fbc03982Smrg 250fbc03982Smrg func_check_prog_sed () 251fbc03982Smrg { 252fbc03982Smrg _G_path_prog=$1 253fbc03982Smrg 254fbc03982Smrg _G_count=0 255fbc03982Smrg printf 0123456789 >conftest.in 256fbc03982Smrg while : 257fbc03982Smrg do 258fbc03982Smrg cat conftest.in conftest.in >conftest.tmp 259fbc03982Smrg mv conftest.tmp conftest.in 260fbc03982Smrg cp conftest.in conftest.nl 261fbc03982Smrg echo '' >> conftest.nl 262fbc03982Smrg "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break 263fbc03982Smrg diff conftest.out conftest.nl >/dev/null 2>&1 || break 264fbc03982Smrg _G_count=`expr $_G_count + 1` 265fbc03982Smrg if test "$_G_count" -gt "$_G_path_prog_max"; then 266fbc03982Smrg # Best one so far, save it but keep looking for a better one 267fbc03982Smrg func_check_prog_result=$_G_path_prog 268fbc03982Smrg _G_path_prog_max=$_G_count 269fbc03982Smrg fi 270fbc03982Smrg # 10*(2^10) chars as input seems more than enough 271fbc03982Smrg test 10 -lt "$_G_count" && break 272fbc03982Smrg done 273fbc03982Smrg rm -f conftest.in conftest.tmp conftest.nl conftest.out 274fbc03982Smrg } 275fbc03982Smrg 2763d05230fSmrg func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin" 277fbc03982Smrg rm -f conftest.sed 278fbc03982Smrg SED=$func_path_progs_result 279fbc03982Smrg} 280fbc03982Smrg 281fbc03982Smrg 282fbc03982Smrg# Unless the user overrides by setting GREP, search the path for either GNU 283fbc03982Smrg# grep, or the grep that truncates its output the least. 284fbc03982Smrgtest -z "$GREP" && { 285fbc03982Smrg func_check_prog_grep () 286fbc03982Smrg { 287fbc03982Smrg _G_path_prog=$1 288fbc03982Smrg 289fbc03982Smrg _G_count=0 290fbc03982Smrg _G_path_prog_max=0 291fbc03982Smrg printf 0123456789 >conftest.in 292fbc03982Smrg while : 293fbc03982Smrg do 294fbc03982Smrg cat conftest.in conftest.in >conftest.tmp 295fbc03982Smrg mv conftest.tmp conftest.in 296fbc03982Smrg cp conftest.in conftest.nl 297fbc03982Smrg echo 'GREP' >> conftest.nl 298fbc03982Smrg "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break 299fbc03982Smrg diff conftest.out conftest.nl >/dev/null 2>&1 || break 300fbc03982Smrg _G_count=`expr $_G_count + 1` 301fbc03982Smrg if test "$_G_count" -gt "$_G_path_prog_max"; then 302fbc03982Smrg # Best one so far, save it but keep looking for a better one 303fbc03982Smrg func_check_prog_result=$_G_path_prog 304fbc03982Smrg _G_path_prog_max=$_G_count 305fbc03982Smrg fi 306fbc03982Smrg # 10*(2^10) chars as input seems more than enough 307fbc03982Smrg test 10 -lt "$_G_count" && break 308fbc03982Smrg done 309fbc03982Smrg rm -f conftest.in conftest.tmp conftest.nl conftest.out 310fbc03982Smrg } 311fbc03982Smrg 3123d05230fSmrg func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin" 313fbc03982Smrg GREP=$func_path_progs_result 314fbc03982Smrg} 315fbc03982Smrg 316fbc03982Smrg 317fbc03982Smrg## ------------------------------- ## 318fbc03982Smrg## User overridable command paths. ## 319fbc03982Smrg## ------------------------------- ## 320fbc03982Smrg 321fbc03982Smrg# All uppercase variable names are used for environment variables. These 322fbc03982Smrg# variables can be overridden by the user before calling a script that 323fbc03982Smrg# uses them if a suitable command of that name is not already available 324fbc03982Smrg# in the command search PATH. 325ed6f5d66Smrg 326ed6f5d66Smrg: ${CP="cp -f"} 327fbc03982Smrg: ${ECHO="printf %s\n"} 328fbc03982Smrg: ${EGREP="$GREP -E"} 329fbc03982Smrg: ${FGREP="$GREP -F"} 330fbc03982Smrg: ${LN_S="ln -s"} 331ed6f5d66Smrg: ${MAKE="make"} 332ed6f5d66Smrg: ${MKDIR="mkdir"} 333ed6f5d66Smrg: ${MV="mv -f"} 334ed6f5d66Smrg: ${RM="rm -f"} 335ed6f5d66Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 336ed6f5d66Smrg 337ed6f5d66Smrg 338fbc03982Smrg## -------------------- ## 339fbc03982Smrg## Useful sed snippets. ## 340fbc03982Smrg## -------------------- ## 341ed6f5d66Smrg 342fbc03982Smrgsed_dirname='s|/[^/]*$||' 343fbc03982Smrgsed_basename='s|^.*/||' 344ed6f5d66Smrg 345fbc03982Smrg# Sed substitution that helps us do robust quoting. It backslashifies 346fbc03982Smrg# metacharacters that are still active within double-quoted strings. 347fbc03982Smrgsed_quote_subst='s|\([`"$\\]\)|\\\1|g' 348ed6f5d66Smrg 349fbc03982Smrg# Same as above, but do not quote variable references. 350fbc03982Smrgsed_double_quote_subst='s/\(["`\\]\)/\\\1/g' 351ed6f5d66Smrg 352fbc03982Smrg# Sed substitution that turns a string into a regex matching for the 353fbc03982Smrg# string literally. 354fbc03982Smrgsed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' 355ed6f5d66Smrg 356fbc03982Smrg# Sed substitution that converts a w32 file name or path 357fbc03982Smrg# that contains forward slashes, into one that contains 358fbc03982Smrg# (escaped) backslashes. A very naive implementation. 359fbc03982Smrgsed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 360fbc03982Smrg 361fbc03982Smrg# Re-'\' parameter expansions in output of sed_double_quote_subst that 362fbc03982Smrg# were '\'-ed in input to the same. If an odd number of '\' preceded a 363fbc03982Smrg# '$' in input to sed_double_quote_subst, that '$' was protected from 364fbc03982Smrg# expansion. Since each input '\' is now two '\'s, look for any number 365fbc03982Smrg# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. 366fbc03982Smrg_G_bs='\\' 367fbc03982Smrg_G_bs2='\\\\' 368fbc03982Smrg_G_bs4='\\\\\\\\' 369fbc03982Smrg_G_dollar='\$' 370fbc03982Smrgsed_double_backslash="\ 371fbc03982Smrg s/$_G_bs4/&\\ 372fbc03982Smrg/g 373fbc03982Smrg s/^$_G_bs2$_G_dollar/$_G_bs&/ 374fbc03982Smrg s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g 375fbc03982Smrg s/\n//g" 376ed6f5d66Smrg 3773d05230fSmrg# require_check_ifs_backslash 3783d05230fSmrg# --------------------------- 3793d05230fSmrg# Check if we can use backslash as IFS='\' separator, and set 3803d05230fSmrg# $check_ifs_backshlash_broken to ':' or 'false'. 3813d05230fSmrgrequire_check_ifs_backslash=func_require_check_ifs_backslash 3823d05230fSmrgfunc_require_check_ifs_backslash () 3833d05230fSmrg{ 3843d05230fSmrg _G_save_IFS=$IFS 3853d05230fSmrg IFS='\' 3863d05230fSmrg _G_check_ifs_backshlash='a\\b' 3873d05230fSmrg for _G_i in $_G_check_ifs_backshlash 3883d05230fSmrg do 3893d05230fSmrg case $_G_i in 3903d05230fSmrg a) 3913d05230fSmrg check_ifs_backshlash_broken=false 3923d05230fSmrg ;; 3933d05230fSmrg '') 3943d05230fSmrg break 3953d05230fSmrg ;; 3963d05230fSmrg *) 3973d05230fSmrg check_ifs_backshlash_broken=: 3983d05230fSmrg break 3993d05230fSmrg ;; 4003d05230fSmrg esac 4013d05230fSmrg done 4023d05230fSmrg IFS=$_G_save_IFS 4033d05230fSmrg require_check_ifs_backslash=: 4043d05230fSmrg} 4053d05230fSmrg 406ed6f5d66Smrg 407fbc03982Smrg## ----------------- ## 408fbc03982Smrg## Global variables. ## 409fbc03982Smrg## ----------------- ## 410ed6f5d66Smrg 411fbc03982Smrg# Except for the global variables explicitly listed below, the following 412fbc03982Smrg# functions in the '^func_' namespace, and the '^require_' namespace 413fbc03982Smrg# variables initialised in the 'Resource management' section, sourcing 414fbc03982Smrg# this file will not pollute your global namespace with anything 415fbc03982Smrg# else. There's no portable way to scope variables in Bourne shell 416fbc03982Smrg# though, so actually running these functions will sometimes place 417fbc03982Smrg# results into a variable named after the function, and often use 418fbc03982Smrg# temporary variables in the '^_G_' namespace. If you are careful to 419fbc03982Smrg# avoid using those namespaces casually in your sourcing script, things 420fbc03982Smrg# should continue to work as you expect. And, of course, you can freely 421fbc03982Smrg# overwrite any of the functions or variables defined here before 422fbc03982Smrg# calling anything to customize them. 423ed6f5d66Smrg 424fbc03982SmrgEXIT_SUCCESS=0 425fbc03982SmrgEXIT_FAILURE=1 426fbc03982SmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 427fbc03982SmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 428ed6f5d66Smrg 429fbc03982Smrg# Allow overriding, eg assuming that you follow the convention of 430fbc03982Smrg# putting '$debug_cmd' at the start of all your functions, you can get 431fbc03982Smrg# bash to show function call trace with: 432fbc03982Smrg# 433fbc03982Smrg# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name 434fbc03982Smrgdebug_cmd=${debug_cmd-":"} 435fbc03982Smrgexit_cmd=: 436ed6f5d66Smrg 437fbc03982Smrg# By convention, finish your script with: 438fbc03982Smrg# 439fbc03982Smrg# exit $exit_status 440fbc03982Smrg# 441fbc03982Smrg# so that you can set exit_status to non-zero if you want to indicate 442fbc03982Smrg# something went wrong during execution without actually bailing out at 443fbc03982Smrg# the point of failure. 444fbc03982Smrgexit_status=$EXIT_SUCCESS 445ed6f5d66Smrg 446fbc03982Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 447fbc03982Smrg# is ksh but when the shell is invoked as "sh" and the current value of 448fbc03982Smrg# the _XPG environment variable is not equal to 1 (one), the special 449fbc03982Smrg# positional parameter $0, within a function call, is the name of the 450fbc03982Smrg# function. 451fbc03982Smrgprogpath=$0 452ed6f5d66Smrg 453fbc03982Smrg# The name of this program. 454fbc03982Smrgprogname=`$ECHO "$progpath" |$SED "$sed_basename"` 455ed6f5d66Smrg 456fbc03982Smrg# Make sure we have an absolute progpath for reexecution: 457ed6f5d66Smrgcase $progpath in 458ed6f5d66Smrg [\\/]*|[A-Za-z]:\\*) ;; 459ed6f5d66Smrg *[\\/]*) 460fbc03982Smrg progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` 461ed6f5d66Smrg progdir=`cd "$progdir" && pwd` 462fbc03982Smrg progpath=$progdir/$progname 463ed6f5d66Smrg ;; 464ed6f5d66Smrg *) 465fbc03982Smrg _G_IFS=$IFS 466ed6f5d66Smrg IFS=${PATH_SEPARATOR-:} 467ed6f5d66Smrg for progdir in $PATH; do 468fbc03982Smrg IFS=$_G_IFS 469ed6f5d66Smrg test -x "$progdir/$progname" && break 470ed6f5d66Smrg done 471fbc03982Smrg IFS=$_G_IFS 472ed6f5d66Smrg test -n "$progdir" || progdir=`pwd` 473fbc03982Smrg progpath=$progdir/$progname 474ed6f5d66Smrg ;; 475ed6f5d66Smrgesac 476ed6f5d66Smrg 477ed6f5d66Smrg 478fbc03982Smrg## ----------------- ## 479fbc03982Smrg## Standard options. ## 480fbc03982Smrg## ----------------- ## 481ed6f5d66Smrg 482fbc03982Smrg# The following options affect the operation of the functions defined 483fbc03982Smrg# below, and should be set appropriately depending on run-time para- 484fbc03982Smrg# meters passed on the command line. 485ed6f5d66Smrg 486ed6f5d66Smrgopt_dry_run=false 487ed6f5d66Smrgopt_quiet=false 488ed6f5d66Smrgopt_verbose=false 489ed6f5d66Smrg 490fbc03982Smrg# Categories 'all' and 'none' are always available. Append any others 491fbc03982Smrg# you will pass as the first argument to func_warning from your own 492fbc03982Smrg# code. 493fbc03982Smrgwarning_categories= 494ed6f5d66Smrg 495fbc03982Smrg# By default, display warnings according to 'opt_warning_types'. Set 496fbc03982Smrg# 'warning_func' to ':' to elide all warnings, or func_fatal_error to 497fbc03982Smrg# treat the next displayed warning as a fatal error. 498fbc03982Smrgwarning_func=func_warn_and_continue 499ed6f5d66Smrg 500fbc03982Smrg# Set to 'all' to display all warnings, 'none' to suppress all 501fbc03982Smrg# warnings, or a space delimited list of some subset of 502fbc03982Smrg# 'warning_categories' to display only the listed warnings. 503fbc03982Smrgopt_warning_types=all 504ed6f5d66Smrg 505ed6f5d66Smrg 506fbc03982Smrg## -------------------- ## 507fbc03982Smrg## Resource management. ## 508fbc03982Smrg## -------------------- ## 509ed6f5d66Smrg 510fbc03982Smrg# This section contains definitions for functions that each ensure a 511fbc03982Smrg# particular resource (a file, or a non-empty configuration variable for 512fbc03982Smrg# example) is available, and if appropriate to extract default values 513fbc03982Smrg# from pertinent package files. Call them using their associated 514fbc03982Smrg# 'require_*' variable to ensure that they are executed, at most, once. 515fbc03982Smrg# 516fbc03982Smrg# It's entirely deliberate that calling these functions can set 517fbc03982Smrg# variables that don't obey the namespace limitations obeyed by the rest 518fbc03982Smrg# of this file, in order that that they be as useful as possible to 519fbc03982Smrg# callers. 520ed6f5d66Smrg 521ed6f5d66Smrg 522fbc03982Smrg# require_term_colors 523fbc03982Smrg# ------------------- 524fbc03982Smrg# Allow display of bold text on terminals that support it. 525fbc03982Smrgrequire_term_colors=func_require_term_colors 526fbc03982Smrgfunc_require_term_colors () 527ed6f5d66Smrg{ 528fbc03982Smrg $debug_cmd 529fbc03982Smrg 530fbc03982Smrg test -t 1 && { 531fbc03982Smrg # COLORTERM and USE_ANSI_COLORS environment variables take 532fbc03982Smrg # precedence, because most terminfo databases neglect to describe 533fbc03982Smrg # whether color sequences are supported. 534fbc03982Smrg test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} 535fbc03982Smrg 536fbc03982Smrg if test 1 = "$USE_ANSI_COLORS"; then 537fbc03982Smrg # Standard ANSI escape sequences 538fbc03982Smrg tc_reset='[0m' 539fbc03982Smrg tc_bold='[1m'; tc_standout='[7m' 540fbc03982Smrg tc_red='[31m'; tc_green='[32m' 541fbc03982Smrg tc_blue='[34m'; tc_cyan='[36m' 542fbc03982Smrg else 543fbc03982Smrg # Otherwise trust the terminfo database after all. 544fbc03982Smrg test -n "`tput sgr0 2>/dev/null`" && { 545fbc03982Smrg tc_reset=`tput sgr0` 546fbc03982Smrg test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` 547fbc03982Smrg tc_standout=$tc_bold 548fbc03982Smrg test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` 549fbc03982Smrg test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` 550fbc03982Smrg test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` 551fbc03982Smrg test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` 552fbc03982Smrg test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` 553fbc03982Smrg } 554fbc03982Smrg fi 555fbc03982Smrg } 556ed6f5d66Smrg 557fbc03982Smrg require_term_colors=: 558ed6f5d66Smrg} 559ed6f5d66Smrg 560ed6f5d66Smrg 561fbc03982Smrg## ----------------- ## 562fbc03982Smrg## Function library. ## 563fbc03982Smrg## ----------------- ## 564fbc03982Smrg 565fbc03982Smrg# This section contains a variety of useful functions to call in your 566fbc03982Smrg# scripts. Take note of the portable wrappers for features provided by 567fbc03982Smrg# some modern shells, which will fall back to slower equivalents on 568fbc03982Smrg# less featureful shells. 569fbc03982Smrg 570fbc03982Smrg 571fbc03982Smrg# func_append VAR VALUE 572fbc03982Smrg# --------------------- 573fbc03982Smrg# Append VALUE onto the existing contents of VAR. 574fbc03982Smrg 575fbc03982Smrg # We should try to minimise forks, especially on Windows where they are 576fbc03982Smrg # unreasonably slow, so skip the feature probes when bash or zsh are 577fbc03982Smrg # being used: 578fbc03982Smrg if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then 579fbc03982Smrg : ${_G_HAVE_ARITH_OP="yes"} 580fbc03982Smrg : ${_G_HAVE_XSI_OPS="yes"} 581fbc03982Smrg # The += operator was introduced in bash 3.1 582fbc03982Smrg case $BASH_VERSION in 583fbc03982Smrg [12].* | 3.0 | 3.0*) ;; 584fbc03982Smrg *) 585fbc03982Smrg : ${_G_HAVE_PLUSEQ_OP="yes"} 586fbc03982Smrg ;; 587fbc03982Smrg esac 588fbc03982Smrg fi 589fbc03982Smrg 590fbc03982Smrg # _G_HAVE_PLUSEQ_OP 591fbc03982Smrg # Can be empty, in which case the shell is probed, "yes" if += is 592a3680546Smrg # usable or anything else if it does not work. 593fbc03982Smrg test -z "$_G_HAVE_PLUSEQ_OP" \ 594fbc03982Smrg && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ 595fbc03982Smrg && _G_HAVE_PLUSEQ_OP=yes 596fbc03982Smrg 597fbc03982Smrgif test yes = "$_G_HAVE_PLUSEQ_OP" 598fbc03982Smrgthen 599fbc03982Smrg # This is an XSI compatible shell, allowing a faster implementation... 600fbc03982Smrg eval 'func_append () 601fbc03982Smrg { 602fbc03982Smrg $debug_cmd 603fbc03982Smrg 604fbc03982Smrg eval "$1+=\$2" 605fbc03982Smrg }' 606fbc03982Smrgelse 607fbc03982Smrg # ...otherwise fall back to using expr, which is often a shell builtin. 608fbc03982Smrg func_append () 609fbc03982Smrg { 610fbc03982Smrg $debug_cmd 611fbc03982Smrg 612fbc03982Smrg eval "$1=\$$1\$2" 613fbc03982Smrg } 614fbc03982Smrgfi 615fbc03982Smrg 616fbc03982Smrg 617fbc03982Smrg# func_append_quoted VAR VALUE 618fbc03982Smrg# ---------------------------- 619fbc03982Smrg# Quote VALUE and append to the end of shell variable VAR, separated 620fbc03982Smrg# by a space. 621fbc03982Smrgif test yes = "$_G_HAVE_PLUSEQ_OP"; then 622fbc03982Smrg eval 'func_append_quoted () 623fbc03982Smrg { 624fbc03982Smrg $debug_cmd 625fbc03982Smrg 6263d05230fSmrg func_quote_arg pretty "$2" 6273d05230fSmrg eval "$1+=\\ \$func_quote_arg_result" 628fbc03982Smrg }' 629fbc03982Smrgelse 630fbc03982Smrg func_append_quoted () 631fbc03982Smrg { 632fbc03982Smrg $debug_cmd 633fbc03982Smrg 6343d05230fSmrg func_quote_arg pretty "$2" 6353d05230fSmrg eval "$1=\$$1\\ \$func_quote_arg_result" 636fbc03982Smrg } 637fbc03982Smrgfi 638fbc03982Smrg 639fbc03982Smrg 640fbc03982Smrg# func_append_uniq VAR VALUE 641fbc03982Smrg# -------------------------- 642fbc03982Smrg# Append unique VALUE onto the existing contents of VAR, assuming 643fbc03982Smrg# entries are delimited by the first character of VALUE. For example: 644fbc03982Smrg# 645fbc03982Smrg# func_append_uniq options " --another-option option-argument" 646fbc03982Smrg# 647fbc03982Smrg# will only append to $options if " --another-option option-argument " 648fbc03982Smrg# is not already present somewhere in $options already (note spaces at 649fbc03982Smrg# each end implied by leading space in second argument). 650fbc03982Smrgfunc_append_uniq () 651fbc03982Smrg{ 652fbc03982Smrg $debug_cmd 653fbc03982Smrg 654fbc03982Smrg eval _G_current_value='`$ECHO $'$1'`' 655fbc03982Smrg _G_delim=`expr "$2" : '\(.\)'` 656fbc03982Smrg 657fbc03982Smrg case $_G_delim$_G_current_value$_G_delim in 658fbc03982Smrg *"$2$_G_delim"*) ;; 659fbc03982Smrg *) func_append "$@" ;; 660fbc03982Smrg esac 661fbc03982Smrg} 662fbc03982Smrg 663fbc03982Smrg 664fbc03982Smrg# func_arith TERM... 665fbc03982Smrg# ------------------ 666fbc03982Smrg# Set func_arith_result to the result of evaluating TERMs. 667fbc03982Smrg test -z "$_G_HAVE_ARITH_OP" \ 668fbc03982Smrg && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ 669fbc03982Smrg && _G_HAVE_ARITH_OP=yes 670fbc03982Smrg 671fbc03982Smrgif test yes = "$_G_HAVE_ARITH_OP"; then 672fbc03982Smrg eval 'func_arith () 673fbc03982Smrg { 674fbc03982Smrg $debug_cmd 675fbc03982Smrg 676fbc03982Smrg func_arith_result=$(( $* )) 677fbc03982Smrg }' 678fbc03982Smrgelse 679fbc03982Smrg func_arith () 680fbc03982Smrg { 681fbc03982Smrg $debug_cmd 682fbc03982Smrg 683fbc03982Smrg func_arith_result=`expr "$@"` 684fbc03982Smrg } 685fbc03982Smrgfi 686fbc03982Smrg 687fbc03982Smrg 688fbc03982Smrg# func_basename FILE 689fbc03982Smrg# ------------------ 690fbc03982Smrg# Set func_basename_result to FILE with everything up to and including 691fbc03982Smrg# the last / stripped. 692fbc03982Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 693fbc03982Smrg # If this shell supports suffix pattern removal, then use it to avoid 694fbc03982Smrg # forking. Hide the definitions single quotes in case the shell chokes 695fbc03982Smrg # on unsupported syntax... 696fbc03982Smrg _b='func_basename_result=${1##*/}' 697fbc03982Smrg _d='case $1 in 698fbc03982Smrg */*) func_dirname_result=${1%/*}$2 ;; 699fbc03982Smrg * ) func_dirname_result=$3 ;; 700fbc03982Smrg esac' 701fbc03982Smrg 702fbc03982Smrgelse 703fbc03982Smrg # ...otherwise fall back to using sed. 704fbc03982Smrg _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' 705fbc03982Smrg _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` 706fbc03982Smrg if test "X$func_dirname_result" = "X$1"; then 707fbc03982Smrg func_dirname_result=$3 708fbc03982Smrg else 709fbc03982Smrg func_append func_dirname_result "$2" 710fbc03982Smrg fi' 711fbc03982Smrgfi 712fbc03982Smrg 713fbc03982Smrgeval 'func_basename () 714fbc03982Smrg{ 715fbc03982Smrg $debug_cmd 716fbc03982Smrg 717fbc03982Smrg '"$_b"' 718fbc03982Smrg}' 719fbc03982Smrg 720fbc03982Smrg 721fbc03982Smrg# func_dirname FILE APPEND NONDIR_REPLACEMENT 722fbc03982Smrg# ------------------------------------------- 723fbc03982Smrg# Compute the dirname of FILE. If nonempty, add APPEND to the result, 724fbc03982Smrg# otherwise set result to NONDIR_REPLACEMENT. 725fbc03982Smrgeval 'func_dirname () 726fbc03982Smrg{ 727fbc03982Smrg $debug_cmd 728fbc03982Smrg 729fbc03982Smrg '"$_d"' 730fbc03982Smrg}' 731fbc03982Smrg 732fbc03982Smrg 733fbc03982Smrg# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT 734fbc03982Smrg# -------------------------------------------------------- 735fbc03982Smrg# Perform func_basename and func_dirname in a single function 736fbc03982Smrg# call: 737fbc03982Smrg# dirname: Compute the dirname of FILE. If nonempty, 738fbc03982Smrg# add APPEND to the result, otherwise set result 739fbc03982Smrg# to NONDIR_REPLACEMENT. 740fbc03982Smrg# value returned in "$func_dirname_result" 741fbc03982Smrg# basename: Compute filename of FILE. 742a3680546Smrg# value returned in "$func_basename_result" 743fbc03982Smrg# For efficiency, we do not delegate to the functions above but instead 744fbc03982Smrg# duplicate the functionality here. 745fbc03982Smrgeval 'func_dirname_and_basename () 746fbc03982Smrg{ 747fbc03982Smrg $debug_cmd 748fbc03982Smrg 749fbc03982Smrg '"$_b"' 750fbc03982Smrg '"$_d"' 751fbc03982Smrg}' 752fbc03982Smrg 753fbc03982Smrg 754fbc03982Smrg# func_echo ARG... 755fbc03982Smrg# ---------------- 756fbc03982Smrg# Echo program name prefixed message. 757fbc03982Smrgfunc_echo () 758fbc03982Smrg{ 759fbc03982Smrg $debug_cmd 760fbc03982Smrg 761fbc03982Smrg _G_message=$* 762fbc03982Smrg 763fbc03982Smrg func_echo_IFS=$IFS 764fbc03982Smrg IFS=$nl 765fbc03982Smrg for _G_line in $_G_message; do 766fbc03982Smrg IFS=$func_echo_IFS 767fbc03982Smrg $ECHO "$progname: $_G_line" 768fbc03982Smrg done 769fbc03982Smrg IFS=$func_echo_IFS 770fbc03982Smrg} 771fbc03982Smrg 772fbc03982Smrg 773fbc03982Smrg# func_echo_all ARG... 774fbc03982Smrg# -------------------- 775fbc03982Smrg# Invoke $ECHO with all args, space-separated. 776fbc03982Smrgfunc_echo_all () 777fbc03982Smrg{ 778fbc03982Smrg $ECHO "$*" 779fbc03982Smrg} 780fbc03982Smrg 781fbc03982Smrg 782fbc03982Smrg# func_echo_infix_1 INFIX ARG... 783fbc03982Smrg# ------------------------------ 784fbc03982Smrg# Echo program name, followed by INFIX on the first line, with any 785fbc03982Smrg# additional lines not showing INFIX. 786fbc03982Smrgfunc_echo_infix_1 () 787fbc03982Smrg{ 788fbc03982Smrg $debug_cmd 789fbc03982Smrg 790fbc03982Smrg $require_term_colors 791fbc03982Smrg 792fbc03982Smrg _G_infix=$1; shift 793fbc03982Smrg _G_indent=$_G_infix 794fbc03982Smrg _G_prefix="$progname: $_G_infix: " 795fbc03982Smrg _G_message=$* 796fbc03982Smrg 797fbc03982Smrg # Strip color escape sequences before counting printable length 798fbc03982Smrg for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" 799fbc03982Smrg do 800fbc03982Smrg test -n "$_G_tc" && { 801fbc03982Smrg _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` 802fbc03982Smrg _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` 803fbc03982Smrg } 804fbc03982Smrg done 805fbc03982Smrg _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes 806fbc03982Smrg 807fbc03982Smrg func_echo_infix_1_IFS=$IFS 808fbc03982Smrg IFS=$nl 809fbc03982Smrg for _G_line in $_G_message; do 810fbc03982Smrg IFS=$func_echo_infix_1_IFS 811fbc03982Smrg $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 812fbc03982Smrg _G_prefix=$_G_indent 813fbc03982Smrg done 814fbc03982Smrg IFS=$func_echo_infix_1_IFS 815fbc03982Smrg} 816fbc03982Smrg 817fbc03982Smrg 818fbc03982Smrg# func_error ARG... 819fbc03982Smrg# ----------------- 820fbc03982Smrg# Echo program name prefixed message to standard error. 821fbc03982Smrgfunc_error () 822fbc03982Smrg{ 823fbc03982Smrg $debug_cmd 824fbc03982Smrg 825fbc03982Smrg $require_term_colors 826fbc03982Smrg 827fbc03982Smrg func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 828fbc03982Smrg} 829fbc03982Smrg 830fbc03982Smrg 831fbc03982Smrg# func_fatal_error ARG... 832fbc03982Smrg# ----------------------- 833fbc03982Smrg# Echo program name prefixed message to standard error, and exit. 834fbc03982Smrgfunc_fatal_error () 835fbc03982Smrg{ 836fbc03982Smrg $debug_cmd 837fbc03982Smrg 838fbc03982Smrg func_error "$*" 839fbc03982Smrg exit $EXIT_FAILURE 840fbc03982Smrg} 841fbc03982Smrg 842fbc03982Smrg 843fbc03982Smrg# func_grep EXPRESSION FILENAME 844fbc03982Smrg# ----------------------------- 845ed6f5d66Smrg# Check whether EXPRESSION matches any line of FILENAME, without output. 846ed6f5d66Smrgfunc_grep () 847ed6f5d66Smrg{ 848fbc03982Smrg $debug_cmd 849fbc03982Smrg 850ed6f5d66Smrg $GREP "$1" "$2" >/dev/null 2>&1 851ed6f5d66Smrg} 852ed6f5d66Smrg 853ed6f5d66Smrg 854fbc03982Smrg# func_len STRING 855fbc03982Smrg# --------------- 856fbc03982Smrg# Set func_len_result to the length of STRING. STRING may not 857fbc03982Smrg# start with a hyphen. 858fbc03982Smrg test -z "$_G_HAVE_XSI_OPS" \ 859fbc03982Smrg && (eval 'x=a/b/c; 860fbc03982Smrg test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 861fbc03982Smrg && _G_HAVE_XSI_OPS=yes 862fbc03982Smrg 863fbc03982Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 864fbc03982Smrg eval 'func_len () 865fbc03982Smrg { 866fbc03982Smrg $debug_cmd 867fbc03982Smrg 868fbc03982Smrg func_len_result=${#1} 869fbc03982Smrg }' 870fbc03982Smrgelse 871fbc03982Smrg func_len () 872fbc03982Smrg { 873fbc03982Smrg $debug_cmd 874fbc03982Smrg 875fbc03982Smrg func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` 876fbc03982Smrg } 877fbc03982Smrgfi 878fbc03982Smrg 879fbc03982Smrg 880fbc03982Smrg# func_mkdir_p DIRECTORY-PATH 881fbc03982Smrg# --------------------------- 882ed6f5d66Smrg# Make sure the entire path to DIRECTORY-PATH is available. 883ed6f5d66Smrgfunc_mkdir_p () 884ed6f5d66Smrg{ 885fbc03982Smrg $debug_cmd 886ed6f5d66Smrg 887fbc03982Smrg _G_directory_path=$1 888fbc03982Smrg _G_dir_list= 889ed6f5d66Smrg 890fbc03982Smrg if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then 891fbc03982Smrg 892fbc03982Smrg # Protect directory names starting with '-' 893fbc03982Smrg case $_G_directory_path in 894fbc03982Smrg -*) _G_directory_path=./$_G_directory_path ;; 895ed6f5d66Smrg esac 896ed6f5d66Smrg 897ed6f5d66Smrg # While some portion of DIR does not yet exist... 898fbc03982Smrg while test ! -d "$_G_directory_path"; do 899ed6f5d66Smrg # ...make a list in topmost first order. Use a colon delimited 900a3680546Smrg # list in case some portion of path contains whitespace. 901fbc03982Smrg _G_dir_list=$_G_directory_path:$_G_dir_list 902ed6f5d66Smrg 903ed6f5d66Smrg # If the last portion added has no slash in it, the list is done 904fbc03982Smrg case $_G_directory_path in */*) ;; *) break ;; esac 905ed6f5d66Smrg 906ed6f5d66Smrg # ...otherwise throw away the child directory and loop 907fbc03982Smrg _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` 908ed6f5d66Smrg done 909fbc03982Smrg _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` 910ed6f5d66Smrg 911fbc03982Smrg func_mkdir_p_IFS=$IFS; IFS=: 912fbc03982Smrg for _G_dir in $_G_dir_list; do 913fbc03982Smrg IFS=$func_mkdir_p_IFS 914fbc03982Smrg # mkdir can fail with a 'File exist' error if two processes 915ed6f5d66Smrg # try to create one of the directories concurrently. Don't 916ed6f5d66Smrg # stop in that case! 917fbc03982Smrg $MKDIR "$_G_dir" 2>/dev/null || : 918ed6f5d66Smrg done 919fbc03982Smrg IFS=$func_mkdir_p_IFS 920ed6f5d66Smrg 921ed6f5d66Smrg # Bail out if we (or some other process) failed to create a directory. 922fbc03982Smrg test -d "$_G_directory_path" || \ 923fbc03982Smrg func_fatal_error "Failed to create '$1'" 924ed6f5d66Smrg fi 925ed6f5d66Smrg} 926ed6f5d66Smrg 927ed6f5d66Smrg 928fbc03982Smrg# func_mktempdir [BASENAME] 929fbc03982Smrg# ------------------------- 930ed6f5d66Smrg# Make a temporary directory that won't clash with other running 931ed6f5d66Smrg# libtool processes, and avoids race conditions if possible. If 932fbc03982Smrg# given, BASENAME is the basename for that directory. 933ed6f5d66Smrgfunc_mktempdir () 934ed6f5d66Smrg{ 935fbc03982Smrg $debug_cmd 936fbc03982Smrg 937fbc03982Smrg _G_template=${TMPDIR-/tmp}/${1-$progname} 938ed6f5d66Smrg 939fbc03982Smrg if test : = "$opt_dry_run"; then 940ed6f5d66Smrg # Return a directory name, but don't create it in dry-run mode 941fbc03982Smrg _G_tmpdir=$_G_template-$$ 942ed6f5d66Smrg else 943ed6f5d66Smrg 944ed6f5d66Smrg # If mktemp works, use that first and foremost 945fbc03982Smrg _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` 946ed6f5d66Smrg 947fbc03982Smrg if test ! -d "$_G_tmpdir"; then 948ed6f5d66Smrg # Failing that, at least try and use $RANDOM to avoid a race 949fbc03982Smrg _G_tmpdir=$_G_template-${RANDOM-0}$$ 950ed6f5d66Smrg 951fbc03982Smrg func_mktempdir_umask=`umask` 952ed6f5d66Smrg umask 0077 953fbc03982Smrg $MKDIR "$_G_tmpdir" 954fbc03982Smrg umask $func_mktempdir_umask 955ed6f5d66Smrg fi 956ed6f5d66Smrg 957ed6f5d66Smrg # If we're not in dry-run mode, bomb out on failure 958fbc03982Smrg test -d "$_G_tmpdir" || \ 959fbc03982Smrg func_fatal_error "cannot create temporary directory '$_G_tmpdir'" 960ed6f5d66Smrg fi 961ed6f5d66Smrg 962fbc03982Smrg $ECHO "$_G_tmpdir" 963ed6f5d66Smrg} 964ed6f5d66Smrg 965ed6f5d66Smrg 966fbc03982Smrg# func_normal_abspath PATH 967fbc03982Smrg# ------------------------ 968fbc03982Smrg# Remove doubled-up and trailing slashes, "." path components, 969fbc03982Smrg# and cancel out any ".." path components in PATH after making 970fbc03982Smrg# it an absolute path. 971fbc03982Smrgfunc_normal_abspath () 972ed6f5d66Smrg{ 973fbc03982Smrg $debug_cmd 974fbc03982Smrg 975fbc03982Smrg # These SED scripts presuppose an absolute path with a trailing slash. 976fbc03982Smrg _G_pathcar='s|^/\([^/]*\).*$|\1|' 977fbc03982Smrg _G_pathcdr='s|^/[^/]*||' 978fbc03982Smrg _G_removedotparts=':dotsl 979fbc03982Smrg s|/\./|/|g 980fbc03982Smrg t dotsl 981fbc03982Smrg s|/\.$|/|' 982fbc03982Smrg _G_collapseslashes='s|/\{1,\}|/|g' 983fbc03982Smrg _G_finalslash='s|/*$|/|' 984fbc03982Smrg 985fbc03982Smrg # Start from root dir and reassemble the path. 986fbc03982Smrg func_normal_abspath_result= 987fbc03982Smrg func_normal_abspath_tpath=$1 988fbc03982Smrg func_normal_abspath_altnamespace= 989fbc03982Smrg case $func_normal_abspath_tpath in 990fbc03982Smrg "") 991fbc03982Smrg # Empty path, that just means $cwd. 992fbc03982Smrg func_stripname '' '/' "`pwd`" 993fbc03982Smrg func_normal_abspath_result=$func_stripname_result 994fbc03982Smrg return 995fbc03982Smrg ;; 996fbc03982Smrg # The next three entries are used to spot a run of precisely 997fbc03982Smrg # two leading slashes without using negated character classes; 998fbc03982Smrg # we take advantage of case's first-match behaviour. 999fbc03982Smrg ///*) 1000fbc03982Smrg # Unusual form of absolute path, do nothing. 1001fbc03982Smrg ;; 1002fbc03982Smrg //*) 1003fbc03982Smrg # Not necessarily an ordinary path; POSIX reserves leading '//' 1004fbc03982Smrg # and for example Cygwin uses it to access remote file shares 1005fbc03982Smrg # over CIFS/SMB, so we conserve a leading double slash if found. 1006fbc03982Smrg func_normal_abspath_altnamespace=/ 1007fbc03982Smrg ;; 1008fbc03982Smrg /*) 1009fbc03982Smrg # Absolute path, do nothing. 1010fbc03982Smrg ;; 1011ed6f5d66Smrg *) 1012fbc03982Smrg # Relative path, prepend $cwd. 1013fbc03982Smrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 1014fbc03982Smrg ;; 1015ed6f5d66Smrg esac 1016ed6f5d66Smrg 1017fbc03982Smrg # Cancel out all the simple stuff to save iterations. We also want 1018fbc03982Smrg # the path to end with a slash for ease of parsing, so make sure 1019fbc03982Smrg # there is one (and only one) here. 1020fbc03982Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 1021fbc03982Smrg -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` 1022fbc03982Smrg while :; do 1023fbc03982Smrg # Processed it all yet? 1024fbc03982Smrg if test / = "$func_normal_abspath_tpath"; then 1025fbc03982Smrg # If we ascended to the root using ".." the result may be empty now. 1026fbc03982Smrg if test -z "$func_normal_abspath_result"; then 1027fbc03982Smrg func_normal_abspath_result=/ 1028fbc03982Smrg fi 1029fbc03982Smrg break 1030fbc03982Smrg fi 1031fbc03982Smrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 1032fbc03982Smrg -e "$_G_pathcar"` 1033fbc03982Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 1034fbc03982Smrg -e "$_G_pathcdr"` 1035fbc03982Smrg # Figure out what to do with it 1036fbc03982Smrg case $func_normal_abspath_tcomponent in 1037fbc03982Smrg "") 1038fbc03982Smrg # Trailing empty path component, ignore it. 1039fbc03982Smrg ;; 1040fbc03982Smrg ..) 1041fbc03982Smrg # Parent dir; strip last assembled component from result. 1042fbc03982Smrg func_dirname "$func_normal_abspath_result" 1043fbc03982Smrg func_normal_abspath_result=$func_dirname_result 1044fbc03982Smrg ;; 1045fbc03982Smrg *) 1046fbc03982Smrg # Actual path component, append it. 1047fbc03982Smrg func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" 1048fbc03982Smrg ;; 1049fbc03982Smrg esac 1050fbc03982Smrg done 1051fbc03982Smrg # Restore leading double-slash if one was found on entry. 1052fbc03982Smrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 1053fbc03982Smrg} 1054fbc03982Smrg 1055fbc03982Smrg 1056fbc03982Smrg# func_notquiet ARG... 1057fbc03982Smrg# -------------------- 1058fbc03982Smrg# Echo program name prefixed message only when not in quiet mode. 1059fbc03982Smrgfunc_notquiet () 1060fbc03982Smrg{ 1061fbc03982Smrg $debug_cmd 1062fbc03982Smrg 1063fbc03982Smrg $opt_quiet || func_echo ${1+"$@"} 1064fbc03982Smrg 1065fbc03982Smrg # A bug in bash halts the script if the last line of a function 1066fbc03982Smrg # fails when set -e is in force, so we need another command to 1067fbc03982Smrg # work around that: 1068fbc03982Smrg : 1069fbc03982Smrg} 1070fbc03982Smrg 1071fbc03982Smrg 1072fbc03982Smrg# func_relative_path SRCDIR DSTDIR 1073fbc03982Smrg# -------------------------------- 1074fbc03982Smrg# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. 1075fbc03982Smrgfunc_relative_path () 1076fbc03982Smrg{ 1077fbc03982Smrg $debug_cmd 1078fbc03982Smrg 1079fbc03982Smrg func_relative_path_result= 1080fbc03982Smrg func_normal_abspath "$1" 1081fbc03982Smrg func_relative_path_tlibdir=$func_normal_abspath_result 1082fbc03982Smrg func_normal_abspath "$2" 1083fbc03982Smrg func_relative_path_tbindir=$func_normal_abspath_result 1084fbc03982Smrg 1085fbc03982Smrg # Ascend the tree starting from libdir 1086fbc03982Smrg while :; do 1087fbc03982Smrg # check if we have found a prefix of bindir 1088fbc03982Smrg case $func_relative_path_tbindir in 1089fbc03982Smrg $func_relative_path_tlibdir) 1090fbc03982Smrg # found an exact match 1091fbc03982Smrg func_relative_path_tcancelled= 1092fbc03982Smrg break 1093fbc03982Smrg ;; 1094fbc03982Smrg $func_relative_path_tlibdir*) 1095fbc03982Smrg # found a matching prefix 1096fbc03982Smrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 1097fbc03982Smrg func_relative_path_tcancelled=$func_stripname_result 1098fbc03982Smrg if test -z "$func_relative_path_result"; then 1099fbc03982Smrg func_relative_path_result=. 1100fbc03982Smrg fi 1101fbc03982Smrg break 1102fbc03982Smrg ;; 1103fbc03982Smrg *) 1104fbc03982Smrg func_dirname $func_relative_path_tlibdir 1105fbc03982Smrg func_relative_path_tlibdir=$func_dirname_result 1106fbc03982Smrg if test -z "$func_relative_path_tlibdir"; then 1107fbc03982Smrg # Have to descend all the way to the root! 1108fbc03982Smrg func_relative_path_result=../$func_relative_path_result 1109fbc03982Smrg func_relative_path_tcancelled=$func_relative_path_tbindir 1110fbc03982Smrg break 1111fbc03982Smrg fi 1112fbc03982Smrg func_relative_path_result=../$func_relative_path_result 1113fbc03982Smrg ;; 1114fbc03982Smrg esac 1115fbc03982Smrg done 1116fbc03982Smrg 1117fbc03982Smrg # Now calculate path; take care to avoid doubling-up slashes. 1118fbc03982Smrg func_stripname '' '/' "$func_relative_path_result" 1119fbc03982Smrg func_relative_path_result=$func_stripname_result 1120fbc03982Smrg func_stripname '/' '/' "$func_relative_path_tcancelled" 1121fbc03982Smrg if test -n "$func_stripname_result"; then 1122fbc03982Smrg func_append func_relative_path_result "/$func_stripname_result" 1123fbc03982Smrg fi 1124fbc03982Smrg 1125fbc03982Smrg # Normalisation. If bindir is libdir, return '.' else relative path. 1126fbc03982Smrg if test -n "$func_relative_path_result"; then 1127fbc03982Smrg func_stripname './' '' "$func_relative_path_result" 1128fbc03982Smrg func_relative_path_result=$func_stripname_result 1129fbc03982Smrg fi 1130fbc03982Smrg 1131fbc03982Smrg test -n "$func_relative_path_result" || func_relative_path_result=. 1132fbc03982Smrg 1133fbc03982Smrg : 1134fbc03982Smrg} 1135fbc03982Smrg 1136fbc03982Smrg 11373d05230fSmrg# func_quote_portable EVAL ARG 11383d05230fSmrg# ---------------------------- 11393d05230fSmrg# Internal function to portably implement func_quote_arg. Note that we still 11403d05230fSmrg# keep attention to performance here so we as much as possible try to avoid 11413d05230fSmrg# calling sed binary (so far O(N) complexity as long as func_append is O(1)). 11423d05230fSmrgfunc_quote_portable () 1143fbc03982Smrg{ 1144fbc03982Smrg $debug_cmd 1145fbc03982Smrg 11463d05230fSmrg $require_check_ifs_backslash 1147fbc03982Smrg 11483d05230fSmrg func_quote_portable_result=$2 1149fbc03982Smrg 11503d05230fSmrg # one-time-loop (easy break) 11513d05230fSmrg while true 11523d05230fSmrg do 11533d05230fSmrg if $1; then 11543d05230fSmrg func_quote_portable_result=`$ECHO "$2" | $SED \ 11553d05230fSmrg -e "$sed_double_quote_subst" -e "$sed_double_backslash"` 11563d05230fSmrg break 11573d05230fSmrg fi 11583d05230fSmrg 11593d05230fSmrg # Quote for eval. 11603d05230fSmrg case $func_quote_portable_result in 11613d05230fSmrg *[\\\`\"\$]*) 11623d05230fSmrg # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string 11633d05230fSmrg # contains the shell wildcard characters. 11643d05230fSmrg case $check_ifs_backshlash_broken$func_quote_portable_result in 11653d05230fSmrg :*|*[\[\*\?]*) 11663d05230fSmrg func_quote_portable_result=`$ECHO "$func_quote_portable_result" \ 11673d05230fSmrg | $SED "$sed_quote_subst"` 11683d05230fSmrg break 1169fbc03982Smrg ;; 11703d05230fSmrg esac 11713d05230fSmrg 11723d05230fSmrg func_quote_portable_old_IFS=$IFS 11733d05230fSmrg for _G_char in '\' '`' '"' '$' 11743d05230fSmrg do 11753d05230fSmrg # STATE($1) PREV($2) SEPARATOR($3) 11763d05230fSmrg set start "" "" 11773d05230fSmrg func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy 11783d05230fSmrg IFS=$_G_char 11793d05230fSmrg for _G_part in $func_quote_portable_result 11803d05230fSmrg do 11813d05230fSmrg case $1 in 11823d05230fSmrg quote) 11833d05230fSmrg func_append func_quote_portable_result "$3$2" 11843d05230fSmrg set quote "$_G_part" "\\$_G_char" 11853d05230fSmrg ;; 11863d05230fSmrg start) 11873d05230fSmrg set first "" "" 11883d05230fSmrg func_quote_portable_result= 11893d05230fSmrg ;; 11903d05230fSmrg first) 11913d05230fSmrg set quote "$_G_part" "" 11923d05230fSmrg ;; 11933d05230fSmrg esac 11943d05230fSmrg done 1195fbc03982Smrg done 11963d05230fSmrg IFS=$func_quote_portable_old_IFS 11973d05230fSmrg ;; 11983d05230fSmrg *) ;; 11993d05230fSmrg esac 12003d05230fSmrg break 12013d05230fSmrg done 12023d05230fSmrg 12033d05230fSmrg func_quote_portable_unquoted_result=$func_quote_portable_result 12043d05230fSmrg case $func_quote_portable_result in 12053d05230fSmrg # double-quote args containing shell metacharacters to delay 12063d05230fSmrg # word splitting, command substitution and variable expansion 12073d05230fSmrg # for a subsequent eval. 12083d05230fSmrg # many bourne shells cannot handle close brackets correctly 12093d05230fSmrg # in scan sets, so we specify it separately. 12103d05230fSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 12113d05230fSmrg func_quote_portable_result=\"$func_quote_portable_result\" 1212ed6f5d66Smrg ;; 1213ed6f5d66Smrg esac 1214ed6f5d66Smrg} 1215ed6f5d66Smrg 1216ed6f5d66Smrg 12173d05230fSmrg# func_quotefast_eval ARG 12183d05230fSmrg# ----------------------- 12193d05230fSmrg# Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG', 12203d05230fSmrg# but optimized for speed. Result is stored in $func_quotefast_eval. 12213d05230fSmrgif test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then 12223d05230fSmrg printf -v _GL_test_printf_tilde %q '~' 12233d05230fSmrg if test '\~' = "$_GL_test_printf_tilde"; then 12243d05230fSmrg func_quotefast_eval () 12253d05230fSmrg { 12263d05230fSmrg printf -v func_quotefast_eval_result %q "$1" 12273d05230fSmrg } 12283d05230fSmrg else 12293d05230fSmrg # Broken older Bash implementations. Make those faster too if possible. 12303d05230fSmrg func_quotefast_eval () 12313d05230fSmrg { 12323d05230fSmrg case $1 in 12333d05230fSmrg '~'*) 12343d05230fSmrg func_quote_portable false "$1" 12353d05230fSmrg func_quotefast_eval_result=$func_quote_portable_result 1236fbc03982Smrg ;; 1237fbc03982Smrg *) 12383d05230fSmrg printf -v func_quotefast_eval_result %q "$1" 12393d05230fSmrg ;; 1240fbc03982Smrg esac 12413d05230fSmrg } 12423d05230fSmrg fi 12433d05230fSmrgelse 12443d05230fSmrg func_quotefast_eval () 12453d05230fSmrg { 12463d05230fSmrg func_quote_portable false "$1" 12473d05230fSmrg func_quotefast_eval_result=$func_quote_portable_result 12483d05230fSmrg } 12493d05230fSmrgfi 1250fbc03982Smrg 1251fbc03982Smrg 12523d05230fSmrg# func_quote_arg MODEs ARG 12533d05230fSmrg# ------------------------ 12543d05230fSmrg# Quote one ARG to be evaled later. MODEs argument may contain zero or more 12553d05230fSmrg# specifiers listed below separated by ',' character. This function returns two 12563d05230fSmrg# values: 12573d05230fSmrg# i) func_quote_arg_result 12583d05230fSmrg# double-quoted (when needed), suitable for a subsequent eval 12593d05230fSmrg# ii) func_quote_arg_unquoted_result 12603d05230fSmrg# has all characters that are still active within double 12613d05230fSmrg# quotes backslashified. Available only if 'unquoted' is specified. 12623d05230fSmrg# 12633d05230fSmrg# Available modes: 12643d05230fSmrg# ---------------- 12653d05230fSmrg# 'eval' (default) 12663d05230fSmrg# - escape shell special characters 12673d05230fSmrg# 'expand' 12683d05230fSmrg# - the same as 'eval'; but do not quote variable references 12693d05230fSmrg# 'pretty' 12703d05230fSmrg# - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might 12713d05230fSmrg# be used later in func_quote to get output like: 'echo "a b"' instead 12723d05230fSmrg# of 'echo a\ b'. This is slower than default on some shells. 12733d05230fSmrg# 'unquoted' 12743d05230fSmrg# - produce also $func_quote_arg_unquoted_result which does not contain 12753d05230fSmrg# wrapping double-quotes. 12763d05230fSmrg# 12773d05230fSmrg# Examples for 'func_quote_arg pretty,unquoted string': 12783d05230fSmrg# 12793d05230fSmrg# string | *_result | *_unquoted_result 12803d05230fSmrg# ------------+-----------------------+------------------- 12813d05230fSmrg# " | \" | \" 12823d05230fSmrg# a b | "a b" | a b 12833d05230fSmrg# "a b" | "\"a b\"" | \"a b\" 12843d05230fSmrg# * | "*" | * 12853d05230fSmrg# z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\" 12863d05230fSmrg# 12873d05230fSmrg# Examples for 'func_quote_arg pretty,unquoted,expand string': 12883d05230fSmrg# 12893d05230fSmrg# string | *_result | *_unquoted_result 12903d05230fSmrg# --------------+---------------------+-------------------- 12913d05230fSmrg# z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\" 12923d05230fSmrgfunc_quote_arg () 12933d05230fSmrg{ 12943d05230fSmrg _G_quote_expand=false 12953d05230fSmrg case ,$1, in 12963d05230fSmrg *,expand,*) 12973d05230fSmrg _G_quote_expand=: 12983d05230fSmrg ;; 1299ed6f5d66Smrg esac 1300ed6f5d66Smrg 13013d05230fSmrg case ,$1, in 13023d05230fSmrg *,pretty,*|*,expand,*|*,unquoted,*) 13033d05230fSmrg func_quote_portable $_G_quote_expand "$2" 13043d05230fSmrg func_quote_arg_result=$func_quote_portable_result 13053d05230fSmrg func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result 13063d05230fSmrg ;; 13073d05230fSmrg *) 13083d05230fSmrg # Faster quote-for-eval for some shells. 13093d05230fSmrg func_quotefast_eval "$2" 13103d05230fSmrg func_quote_arg_result=$func_quotefast_eval_result 1311ed6f5d66Smrg ;; 1312ed6f5d66Smrg esac 13133d05230fSmrg} 1314ed6f5d66Smrg 13153d05230fSmrg 13163d05230fSmrg# func_quote MODEs ARGs... 13173d05230fSmrg# ------------------------ 13183d05230fSmrg# Quote all ARGs to be evaled later and join them into single command. See 13193d05230fSmrg# func_quote_arg's description for more info. 13203d05230fSmrgfunc_quote () 13213d05230fSmrg{ 13223d05230fSmrg $debug_cmd 13233d05230fSmrg _G_func_quote_mode=$1 ; shift 13243d05230fSmrg func_quote_result= 13253d05230fSmrg while test 0 -lt $#; do 13263d05230fSmrg func_quote_arg "$_G_func_quote_mode" "$1" 13273d05230fSmrg if test -n "$func_quote_result"; then 13283d05230fSmrg func_append func_quote_result " $func_quote_arg_result" 13293d05230fSmrg else 13303d05230fSmrg func_append func_quote_result "$func_quote_arg_result" 13313d05230fSmrg fi 13323d05230fSmrg shift 13333d05230fSmrg done 1334fbc03982Smrg} 1335fbc03982Smrg 1336fbc03982Smrg 1337fbc03982Smrg# func_stripname PREFIX SUFFIX NAME 1338fbc03982Smrg# --------------------------------- 1339fbc03982Smrg# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. 1340fbc03982Smrg# PREFIX and SUFFIX must not contain globbing or regex special 1341fbc03982Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading 1342fbc03982Smrg# dot (in which case that matches only a dot). 1343fbc03982Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 1344fbc03982Smrg eval 'func_stripname () 1345fbc03982Smrg { 1346fbc03982Smrg $debug_cmd 1347fbc03982Smrg 1348fbc03982Smrg # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are 1349fbc03982Smrg # positional parameters, so assign one to ordinary variable first. 1350fbc03982Smrg func_stripname_result=$3 1351fbc03982Smrg func_stripname_result=${func_stripname_result#"$1"} 1352fbc03982Smrg func_stripname_result=${func_stripname_result%"$2"} 1353fbc03982Smrg }' 1354fbc03982Smrgelse 1355fbc03982Smrg func_stripname () 1356fbc03982Smrg { 1357fbc03982Smrg $debug_cmd 1358fbc03982Smrg 1359fbc03982Smrg case $2 in 1360fbc03982Smrg .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; 1361fbc03982Smrg *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; 1362fbc03982Smrg esac 1363fbc03982Smrg } 1364fbc03982Smrgfi 1365fbc03982Smrg 1366fbc03982Smrg 1367fbc03982Smrg# func_show_eval CMD [FAIL_EXP] 1368fbc03982Smrg# ----------------------------- 1369fbc03982Smrg# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 1370fbc03982Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 1371fbc03982Smrg# is given, then evaluate it. 1372fbc03982Smrgfunc_show_eval () 1373fbc03982Smrg{ 1374fbc03982Smrg $debug_cmd 1375fbc03982Smrg 1376fbc03982Smrg _G_cmd=$1 1377fbc03982Smrg _G_fail_exp=${2-':'} 1378fbc03982Smrg 13793d05230fSmrg func_quote_arg pretty,expand "$_G_cmd" 13803d05230fSmrg eval "func_notquiet $func_quote_arg_result" 1381fbc03982Smrg 1382fbc03982Smrg $opt_dry_run || { 1383fbc03982Smrg eval "$_G_cmd" 1384fbc03982Smrg _G_status=$? 1385fbc03982Smrg if test 0 -ne "$_G_status"; then 1386fbc03982Smrg eval "(exit $_G_status); $_G_fail_exp" 1387fbc03982Smrg fi 1388fbc03982Smrg } 1389fbc03982Smrg} 1390fbc03982Smrg 1391fbc03982Smrg 1392fbc03982Smrg# func_show_eval_locale CMD [FAIL_EXP] 1393fbc03982Smrg# ------------------------------------ 1394fbc03982Smrg# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 1395fbc03982Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 1396fbc03982Smrg# is given, then evaluate it. Use the saved locale for evaluation. 1397fbc03982Smrgfunc_show_eval_locale () 1398fbc03982Smrg{ 1399fbc03982Smrg $debug_cmd 1400fbc03982Smrg 1401fbc03982Smrg _G_cmd=$1 1402fbc03982Smrg _G_fail_exp=${2-':'} 1403fbc03982Smrg 1404fbc03982Smrg $opt_quiet || { 14053d05230fSmrg func_quote_arg expand,pretty "$_G_cmd" 14063d05230fSmrg eval "func_echo $func_quote_arg_result" 1407fbc03982Smrg } 1408fbc03982Smrg 1409fbc03982Smrg $opt_dry_run || { 1410fbc03982Smrg eval "$_G_user_locale 1411fbc03982Smrg $_G_cmd" 1412fbc03982Smrg _G_status=$? 1413fbc03982Smrg eval "$_G_safe_locale" 1414fbc03982Smrg if test 0 -ne "$_G_status"; then 1415fbc03982Smrg eval "(exit $_G_status); $_G_fail_exp" 1416fbc03982Smrg fi 1417fbc03982Smrg } 1418fbc03982Smrg} 1419fbc03982Smrg 1420fbc03982Smrg 1421fbc03982Smrg# func_tr_sh 1422fbc03982Smrg# ---------- 1423fbc03982Smrg# Turn $1 into a string suitable for a shell variable name. 1424fbc03982Smrg# Result is stored in $func_tr_sh_result. All characters 1425fbc03982Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 1426fbc03982Smrg# if $1 begins with a digit, a '_' is prepended as well. 1427fbc03982Smrgfunc_tr_sh () 1428fbc03982Smrg{ 1429fbc03982Smrg $debug_cmd 1430fbc03982Smrg 1431fbc03982Smrg case $1 in 1432fbc03982Smrg [0-9]* | *[!a-zA-Z0-9_]*) 1433fbc03982Smrg func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` 1434fbc03982Smrg ;; 1435fbc03982Smrg * ) 1436fbc03982Smrg func_tr_sh_result=$1 1437fbc03982Smrg ;; 1438fbc03982Smrg esac 1439fbc03982Smrg} 1440fbc03982Smrg 1441fbc03982Smrg 1442fbc03982Smrg# func_verbose ARG... 1443fbc03982Smrg# ------------------- 1444fbc03982Smrg# Echo program name prefixed message in verbose mode only. 1445fbc03982Smrgfunc_verbose () 1446fbc03982Smrg{ 1447fbc03982Smrg $debug_cmd 1448fbc03982Smrg 1449fbc03982Smrg $opt_verbose && func_echo "$*" 1450fbc03982Smrg 1451fbc03982Smrg : 1452ed6f5d66Smrg} 1453ed6f5d66Smrg 1454ed6f5d66Smrg 1455fbc03982Smrg# func_warn_and_continue ARG... 1456fbc03982Smrg# ----------------------------- 1457fbc03982Smrg# Echo program name prefixed warning message to standard error. 1458fbc03982Smrgfunc_warn_and_continue () 1459fbc03982Smrg{ 1460fbc03982Smrg $debug_cmd 1461fbc03982Smrg 1462fbc03982Smrg $require_term_colors 1463fbc03982Smrg 1464fbc03982Smrg func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 1465fbc03982Smrg} 1466fbc03982Smrg 1467fbc03982Smrg 1468fbc03982Smrg# func_warning CATEGORY ARG... 1469fbc03982Smrg# ---------------------------- 1470fbc03982Smrg# Echo program name prefixed warning message to standard error. Warning 1471fbc03982Smrg# messages can be filtered according to CATEGORY, where this function 1472fbc03982Smrg# elides messages where CATEGORY is not listed in the global variable 1473fbc03982Smrg# 'opt_warning_types'. 1474fbc03982Smrgfunc_warning () 1475fbc03982Smrg{ 1476fbc03982Smrg $debug_cmd 1477fbc03982Smrg 1478fbc03982Smrg # CATEGORY must be in the warning_categories list! 1479fbc03982Smrg case " $warning_categories " in 1480fbc03982Smrg *" $1 "*) ;; 1481fbc03982Smrg *) func_internal_error "invalid warning category '$1'" ;; 1482fbc03982Smrg esac 1483fbc03982Smrg 1484fbc03982Smrg _G_category=$1 1485fbc03982Smrg shift 1486fbc03982Smrg 1487fbc03982Smrg case " $opt_warning_types " in 1488fbc03982Smrg *" $_G_category "*) $warning_func ${1+"$@"} ;; 1489fbc03982Smrg esac 1490fbc03982Smrg} 1491fbc03982Smrg 1492fbc03982Smrg 1493fbc03982Smrg# func_sort_ver VER1 VER2 1494fbc03982Smrg# ----------------------- 1495fbc03982Smrg# 'sort -V' is not generally available. 1496fbc03982Smrg# Note this deviates from the version comparison in automake 1497fbc03982Smrg# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a 1498fbc03982Smrg# but this should suffice as we won't be specifying old 1499fbc03982Smrg# version formats or redundant trailing .0 in bootstrap.conf. 1500fbc03982Smrg# If we did want full compatibility then we should probably 1501fbc03982Smrg# use m4_version_compare from autoconf. 1502fbc03982Smrgfunc_sort_ver () 1503fbc03982Smrg{ 1504fbc03982Smrg $debug_cmd 1505fbc03982Smrg 1506fbc03982Smrg printf '%s\n%s\n' "$1" "$2" \ 1507fbc03982Smrg | 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 1508fbc03982Smrg} 1509fbc03982Smrg 1510fbc03982Smrg# func_lt_ver PREV CURR 1511fbc03982Smrg# --------------------- 1512fbc03982Smrg# Return true if PREV and CURR are in the correct order according to 1513fbc03982Smrg# func_sort_ver, otherwise false. Use it like this: 1514fbc03982Smrg# 1515fbc03982Smrg# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." 1516fbc03982Smrgfunc_lt_ver () 1517fbc03982Smrg{ 1518fbc03982Smrg $debug_cmd 1519fbc03982Smrg 1520fbc03982Smrg test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` 1521fbc03982Smrg} 1522fbc03982Smrg 1523fbc03982Smrg 1524fbc03982Smrg# Local variables: 1525fbc03982Smrg# mode: shell-script 1526fbc03982Smrg# sh-indentation: 2 1527fbc03982Smrg# eval: (add-hook 'before-save-hook 'time-stamp) 1528fbc03982Smrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" 1529fbc03982Smrg# time-stamp-time-zone: "UTC" 1530fbc03982Smrg# End: 1531fbc03982Smrg#! /bin/sh 1532fbc03982Smrg 1533fbc03982Smrg# A portable, pluggable option parser for Bourne shell. 1534fbc03982Smrg# Written by Gary V. Vaughan, 2010 1535fbc03982Smrg 15363d05230fSmrg# This is free software. There is NO warranty; not even for 15373d05230fSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 15383d05230fSmrg# 1539a3680546Smrg# Copyright (C) 2010-2019, 2021, 2023-2024 Bootstrap Authors 15403d05230fSmrg# 15413d05230fSmrg# This file is dual licensed under the terms of the MIT license 1542a3680546Smrg# <https://opensource.org/licenses/MIT>, and GPL version 2 or later 1543a3680546Smrg# <https://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of 15443d05230fSmrg# these licenses when using or redistributing this software or any of 15453d05230fSmrg# the files within it. See the URLs above, or the file `LICENSE` 15463d05230fSmrg# included in the Bootstrap distribution for the full license texts. 1547fbc03982Smrg 15483d05230fSmrg# Please report bugs or propose patches to: 15493d05230fSmrg# <https://github.com/gnulib-modules/bootstrap/issues> 1550fbc03982Smrg 15513d05230fSmrg# Set a version string for this script. 15523d05230fSmrgscriptversion=2019-02-19.15; # UTC 1553fbc03982Smrg 1554fbc03982Smrg 1555fbc03982Smrg## ------ ## 1556fbc03982Smrg## Usage. ## 1557fbc03982Smrg## ------ ## 1558fbc03982Smrg 1559fbc03982Smrg# This file is a library for parsing options in your shell scripts along 1560fbc03982Smrg# with assorted other useful supporting features that you can make use 1561fbc03982Smrg# of too. 1562fbc03982Smrg# 1563fbc03982Smrg# For the simplest scripts you might need only: 1564fbc03982Smrg# 1565fbc03982Smrg# #!/bin/sh 1566fbc03982Smrg# . relative/path/to/funclib.sh 1567fbc03982Smrg# . relative/path/to/options-parser 1568fbc03982Smrg# scriptversion=1.0 1569fbc03982Smrg# func_options ${1+"$@"} 1570fbc03982Smrg# eval set dummy "$func_options_result"; shift 1571fbc03982Smrg# ...rest of your script... 1572fbc03982Smrg# 1573fbc03982Smrg# In order for the '--version' option to work, you will need to have a 1574fbc03982Smrg# suitably formatted comment like the one at the top of this file 15753d05230fSmrg# starting with '# Written by ' and ending with '# Copyright'. 1576fbc03982Smrg# 1577fbc03982Smrg# For '-h' and '--help' to work, you will also need a one line 1578fbc03982Smrg# description of your script's purpose in a comment directly above the 1579fbc03982Smrg# '# Written by ' line, like the one at the top of this file. 1580fbc03982Smrg# 1581fbc03982Smrg# The default options also support '--debug', which will turn on shell 1582fbc03982Smrg# execution tracing (see the comment above debug_cmd below for another 1583fbc03982Smrg# use), and '--verbose' and the func_verbose function to allow your script 1584fbc03982Smrg# to display verbose messages only when your user has specified 1585fbc03982Smrg# '--verbose'. 1586fbc03982Smrg# 15873d05230fSmrg# After sourcing this file, you can plug in processing for additional 1588fbc03982Smrg# options by amending the variables from the 'Configuration' section 1589fbc03982Smrg# below, and following the instructions in the 'Option parsing' 1590fbc03982Smrg# section further down. 1591fbc03982Smrg 1592fbc03982Smrg## -------------- ## 1593fbc03982Smrg## Configuration. ## 1594fbc03982Smrg## -------------- ## 1595fbc03982Smrg 1596fbc03982Smrg# You should override these variables in your script after sourcing this 1597fbc03982Smrg# file so that they reflect the customisations you have added to the 1598fbc03982Smrg# option parser. 1599fbc03982Smrg 1600fbc03982Smrg# The usage line for option parsing errors and the start of '-h' and 1601fbc03982Smrg# '--help' output messages. You can embed shell variables for delayed 1602fbc03982Smrg# expansion at the time the message is displayed, but you will need to 1603fbc03982Smrg# quote other shell meta-characters carefully to prevent them being 1604fbc03982Smrg# expanded when the contents are evaled. 1605fbc03982Smrgusage='$progpath [OPTION]...' 1606fbc03982Smrg 1607fbc03982Smrg# Short help message in response to '-h' and '--help'. Add to this or 1608fbc03982Smrg# override it after sourcing this library to reflect the full set of 1609fbc03982Smrg# options your script accepts. 1610fbc03982Smrgusage_message="\ 1611fbc03982Smrg --debug enable verbose shell tracing 1612fbc03982Smrg -W, --warnings=CATEGORY 1613fbc03982Smrg report the warnings falling in CATEGORY [all] 1614fbc03982Smrg -v, --verbose verbosely report processing 1615fbc03982Smrg --version print version information and exit 1616fbc03982Smrg -h, --help print short or long help message and exit 1617fbc03982Smrg" 1618fbc03982Smrg 1619fbc03982Smrg# Additional text appended to 'usage_message' in response to '--help'. 1620fbc03982Smrglong_help_message=" 1621fbc03982SmrgWarning categories include: 1622fbc03982Smrg 'all' show all warnings 1623fbc03982Smrg 'none' turn off all the warnings 1624fbc03982Smrg 'error' warnings are treated as fatal errors" 1625fbc03982Smrg 1626fbc03982Smrg# Help message printed before fatal option parsing errors. 1627fbc03982Smrgfatal_help="Try '\$progname --help' for more information." 1628fbc03982Smrg 1629fbc03982Smrg 1630fbc03982Smrg 1631fbc03982Smrg## ------------------------- ## 1632fbc03982Smrg## Hook function management. ## 1633fbc03982Smrg## ------------------------- ## 1634fbc03982Smrg 1635fbc03982Smrg# This section contains functions for adding, removing, and running hooks 16363d05230fSmrg# in the main code. A hook is just a list of function names that can be 16373d05230fSmrg# run in order later on. 1638fbc03982Smrg 1639fbc03982Smrg# func_hookable FUNC_NAME 1640fbc03982Smrg# ----------------------- 1641fbc03982Smrg# Declare that FUNC_NAME will run hooks added with 1642fbc03982Smrg# 'func_add_hook FUNC_NAME ...'. 1643fbc03982Smrgfunc_hookable () 1644fbc03982Smrg{ 1645fbc03982Smrg $debug_cmd 1646fbc03982Smrg 1647fbc03982Smrg func_append hookable_fns " $1" 1648fbc03982Smrg} 1649fbc03982Smrg 1650fbc03982Smrg 1651fbc03982Smrg# func_add_hook FUNC_NAME HOOK_FUNC 1652fbc03982Smrg# --------------------------------- 1653fbc03982Smrg# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must 1654fbc03982Smrg# first have been declared "hookable" by a call to 'func_hookable'. 1655fbc03982Smrgfunc_add_hook () 1656fbc03982Smrg{ 1657fbc03982Smrg $debug_cmd 1658fbc03982Smrg 1659fbc03982Smrg case " $hookable_fns " in 1660fbc03982Smrg *" $1 "*) ;; 1661fbc03982Smrg *) func_fatal_error "'$1' does not accept hook functions." ;; 1662fbc03982Smrg esac 1663fbc03982Smrg 1664fbc03982Smrg eval func_append ${1}_hooks '" $2"' 1665fbc03982Smrg} 1666fbc03982Smrg 1667fbc03982Smrg 1668fbc03982Smrg# func_remove_hook FUNC_NAME HOOK_FUNC 1669fbc03982Smrg# ------------------------------------ 16703d05230fSmrg# Remove HOOK_FUNC from the list of hook functions to be called by 16713d05230fSmrg# FUNC_NAME. 1672fbc03982Smrgfunc_remove_hook () 1673fbc03982Smrg{ 1674fbc03982Smrg $debug_cmd 1675fbc03982Smrg 1676fbc03982Smrg eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' 1677fbc03982Smrg} 1678fbc03982Smrg 1679fbc03982Smrg 16803d05230fSmrg# func_propagate_result FUNC_NAME_A FUNC_NAME_B 16813d05230fSmrg# --------------------------------------------- 16823d05230fSmrg# If the *_result variable of FUNC_NAME_A _is set_, assign its value to 16833d05230fSmrg# *_result variable of FUNC_NAME_B. 16843d05230fSmrgfunc_propagate_result () 16853d05230fSmrg{ 16863d05230fSmrg $debug_cmd 16873d05230fSmrg 16883d05230fSmrg func_propagate_result_result=: 16893d05230fSmrg if eval "test \"\${${1}_result+set}\" = set" 16903d05230fSmrg then 16913d05230fSmrg eval "${2}_result=\$${1}_result" 16923d05230fSmrg else 16933d05230fSmrg func_propagate_result_result=false 16943d05230fSmrg fi 16953d05230fSmrg} 16963d05230fSmrg 16973d05230fSmrg 1698fbc03982Smrg# func_run_hooks FUNC_NAME [ARG]... 1699fbc03982Smrg# --------------------------------- 1700fbc03982Smrg# Run all hook functions registered to FUNC_NAME. 17013d05230fSmrg# It's assumed that the list of hook functions contains nothing more 1702fbc03982Smrg# than a whitespace-delimited list of legal shell function names, and 1703fbc03982Smrg# no effort is wasted trying to catch shell meta-characters or preserve 1704fbc03982Smrg# whitespace. 1705fbc03982Smrgfunc_run_hooks () 1706fbc03982Smrg{ 1707fbc03982Smrg $debug_cmd 1708fbc03982Smrg 1709fbc03982Smrg case " $hookable_fns " in 1710fbc03982Smrg *" $1 "*) ;; 17113d05230fSmrg *) func_fatal_error "'$1' does not support hook functions." ;; 1712fbc03982Smrg esac 1713fbc03982Smrg 1714fbc03982Smrg eval _G_hook_fns=\$$1_hooks; shift 1715fbc03982Smrg 1716fbc03982Smrg for _G_hook in $_G_hook_fns; do 17173d05230fSmrg func_unset "${_G_hook}_result" 17183d05230fSmrg eval $_G_hook '${1+"$@"}' 17193d05230fSmrg func_propagate_result $_G_hook func_run_hooks 17203d05230fSmrg if $func_propagate_result_result; then 17213d05230fSmrg eval set dummy "$func_run_hooks_result"; shift 17223d05230fSmrg fi 1723fbc03982Smrg done 1724fbc03982Smrg} 1725fbc03982Smrg 1726fbc03982Smrg 1727fbc03982Smrg 1728fbc03982Smrg## --------------- ## 1729fbc03982Smrg## Option parsing. ## 1730fbc03982Smrg## --------------- ## 1731fbc03982Smrg 1732fbc03982Smrg# In order to add your own option parsing hooks, you must accept the 17333d05230fSmrg# full positional parameter list from your hook function. You may remove 17343d05230fSmrg# or edit any options that you action, and then pass back the remaining 17353d05230fSmrg# unprocessed options in '<hooked_function_name>_result', escaped 17363d05230fSmrg# suitably for 'eval'. 17373d05230fSmrg# 17383d05230fSmrg# The '<hooked_function_name>_result' variable is automatically unset 17393d05230fSmrg# before your hook gets called; for best performance, only set the 17403d05230fSmrg# *_result variable when necessary (i.e. don't call the 'func_quote' 17413d05230fSmrg# function unnecessarily because it can be an expensive operation on some 17423d05230fSmrg# machines). 17433d05230fSmrg# 17443d05230fSmrg# Like this: 1745fbc03982Smrg# 1746fbc03982Smrg# my_options_prep () 1747fbc03982Smrg# { 1748fbc03982Smrg# $debug_cmd 1749fbc03982Smrg# 1750fbc03982Smrg# # Extend the existing usage message. 1751fbc03982Smrg# usage_message=$usage_message' 1752fbc03982Smrg# -s, --silent don'\''t print informational messages 1753fbc03982Smrg# ' 17543d05230fSmrg# # No change in '$@' (ignored completely by this hook). Leave 17553d05230fSmrg# # my_options_prep_result variable intact. 1756fbc03982Smrg# } 1757fbc03982Smrg# func_add_hook func_options_prep my_options_prep 1758fbc03982Smrg# 1759fbc03982Smrg# 1760fbc03982Smrg# my_silent_option () 1761fbc03982Smrg# { 1762fbc03982Smrg# $debug_cmd 1763fbc03982Smrg# 17643d05230fSmrg# args_changed=false 17653d05230fSmrg# 17663d05230fSmrg# # Note that, for efficiency, we parse as many options as we can 1767fbc03982Smrg# # recognise in a loop before passing the remainder back to the 1768fbc03982Smrg# # caller on the first unrecognised argument we encounter. 1769fbc03982Smrg# while test $# -gt 0; do 1770fbc03982Smrg# opt=$1; shift 1771fbc03982Smrg# case $opt in 17723d05230fSmrg# --silent|-s) opt_silent=: 17733d05230fSmrg# args_changed=: 17743d05230fSmrg# ;; 1775fbc03982Smrg# # Separate non-argument short options: 1776fbc03982Smrg# -s*) func_split_short_opt "$_G_opt" 1777fbc03982Smrg# set dummy "$func_split_short_opt_name" \ 1778fbc03982Smrg# "-$func_split_short_opt_arg" ${1+"$@"} 1779fbc03982Smrg# shift 17803d05230fSmrg# args_changed=: 1781fbc03982Smrg# ;; 17823d05230fSmrg# *) # Make sure the first unrecognised option "$_G_opt" 17833d05230fSmrg# # is added back to "$@" in case we need it later, 17843d05230fSmrg# # if $args_changed was set to 'true'. 17853d05230fSmrg# set dummy "$_G_opt" ${1+"$@"}; shift; break ;; 1786fbc03982Smrg# esac 1787fbc03982Smrg# done 1788fbc03982Smrg# 17893d05230fSmrg# # Only call 'func_quote' here if we processed at least one argument. 17903d05230fSmrg# if $args_changed; then 17913d05230fSmrg# func_quote eval ${1+"$@"} 17923d05230fSmrg# my_silent_option_result=$func_quote_result 17933d05230fSmrg# fi 1794fbc03982Smrg# } 1795fbc03982Smrg# func_add_hook func_parse_options my_silent_option 1796fbc03982Smrg# 1797fbc03982Smrg# 1798fbc03982Smrg# my_option_validation () 1799fbc03982Smrg# { 1800fbc03982Smrg# $debug_cmd 1801fbc03982Smrg# 1802fbc03982Smrg# $opt_silent && $opt_verbose && func_fatal_help "\ 1803fbc03982Smrg# '--silent' and '--verbose' options are mutually exclusive." 1804fbc03982Smrg# } 1805fbc03982Smrg# func_add_hook func_validate_options my_option_validation 1806fbc03982Smrg# 18073d05230fSmrg# You'll also need to manually amend $usage_message to reflect the extra 1808fbc03982Smrg# options you parse. It's preferable to append if you can, so that 1809fbc03982Smrg# multiple option parsing hooks can be added safely. 1810fbc03982Smrg 1811fbc03982Smrg 18123d05230fSmrg# func_options_finish [ARG]... 18133d05230fSmrg# ---------------------------- 18143d05230fSmrg# Finishing the option parse loop (call 'func_options' hooks ATM). 18153d05230fSmrgfunc_options_finish () 18163d05230fSmrg{ 18173d05230fSmrg $debug_cmd 18183d05230fSmrg 18193d05230fSmrg func_run_hooks func_options ${1+"$@"} 18203d05230fSmrg func_propagate_result func_run_hooks func_options_finish 18213d05230fSmrg} 18223d05230fSmrg 18233d05230fSmrg 1824fbc03982Smrg# func_options [ARG]... 1825fbc03982Smrg# --------------------- 1826fbc03982Smrg# All the functions called inside func_options are hookable. See the 1827fbc03982Smrg# individual implementations for details. 1828fbc03982Smrgfunc_hookable func_options 1829fbc03982Smrgfunc_options () 1830ed6f5d66Smrg{ 1831fbc03982Smrg $debug_cmd 1832ed6f5d66Smrg 18333d05230fSmrg _G_options_quoted=false 1834ed6f5d66Smrg 18353d05230fSmrg for my_func in options_prep parse_options validate_options options_finish 18363d05230fSmrg do 18373d05230fSmrg func_unset func_${my_func}_result 18383d05230fSmrg func_unset func_run_hooks_result 18393d05230fSmrg eval func_$my_func '${1+"$@"}' 18403d05230fSmrg func_propagate_result func_$my_func func_options 18413d05230fSmrg if $func_propagate_result_result; then 18423d05230fSmrg eval set dummy "$func_options_result"; shift 18433d05230fSmrg _G_options_quoted=: 18443d05230fSmrg fi 18453d05230fSmrg done 1846fbc03982Smrg 18473d05230fSmrg $_G_options_quoted || { 18483d05230fSmrg # As we (func_options) are top-level options-parser function and 18493d05230fSmrg # nobody quoted "$@" for us yet, we need to do it explicitly for 18503d05230fSmrg # caller. 18513d05230fSmrg func_quote eval ${1+"$@"} 18523d05230fSmrg func_options_result=$func_quote_result 18533d05230fSmrg } 1854ed6f5d66Smrg} 1855ed6f5d66Smrg 1856ed6f5d66Smrg 1857fbc03982Smrg# func_options_prep [ARG]... 1858fbc03982Smrg# -------------------------- 1859fbc03982Smrg# All initialisations required before starting the option parse loop. 1860fbc03982Smrg# Note that when calling hook functions, we pass through the list of 1861fbc03982Smrg# positional parameters. If a hook function modifies that list, and 18623d05230fSmrg# needs to propagate that back to rest of this script, then the complete 18633d05230fSmrg# modified list must be put in 'func_run_hooks_result' before returning. 1864fbc03982Smrgfunc_hookable func_options_prep 1865fbc03982Smrgfunc_options_prep () 1866ed6f5d66Smrg{ 1867fbc03982Smrg $debug_cmd 1868ed6f5d66Smrg 1869fbc03982Smrg # Option defaults: 1870fbc03982Smrg opt_verbose=false 1871fbc03982Smrg opt_warning_types= 1872ed6f5d66Smrg 1873fbc03982Smrg func_run_hooks func_options_prep ${1+"$@"} 18743d05230fSmrg func_propagate_result func_run_hooks func_options_prep 1875ed6f5d66Smrg} 1876ed6f5d66Smrg 1877fbc03982Smrg 1878fbc03982Smrg# func_parse_options [ARG]... 1879fbc03982Smrg# --------------------------- 1880fbc03982Smrg# The main option parsing loop. 1881fbc03982Smrgfunc_hookable func_parse_options 1882fbc03982Smrgfunc_parse_options () 1883ed6f5d66Smrg{ 1884fbc03982Smrg $debug_cmd 1885fbc03982Smrg 18863d05230fSmrg _G_parse_options_requote=false 1887fbc03982Smrg # this just eases exit handling 1888fbc03982Smrg while test $# -gt 0; do 1889fbc03982Smrg # Defer to hook functions for initial option parsing, so they 1890fbc03982Smrg # get priority in the event of reusing an option name. 1891fbc03982Smrg func_run_hooks func_parse_options ${1+"$@"} 18923d05230fSmrg func_propagate_result func_run_hooks func_parse_options 18933d05230fSmrg if $func_propagate_result_result; then 18943d05230fSmrg eval set dummy "$func_parse_options_result"; shift 18953d05230fSmrg # Even though we may have changed "$@", we passed the "$@" array 18963d05230fSmrg # down into the hook and it quoted it for us (because we are in 18973d05230fSmrg # this if-branch). No need to quote it again. 18983d05230fSmrg _G_parse_options_requote=false 18993d05230fSmrg fi 1900fbc03982Smrg 1901fbc03982Smrg # Break out of the loop if we already parsed every option. 1902fbc03982Smrg test $# -gt 0 || break 1903fbc03982Smrg 19043d05230fSmrg # We expect that one of the options parsed in this function matches 19053d05230fSmrg # and thus we remove _G_opt from "$@" and need to re-quote. 19063d05230fSmrg _G_match_parse_options=: 1907fbc03982Smrg _G_opt=$1 1908fbc03982Smrg shift 1909fbc03982Smrg case $_G_opt in 1910fbc03982Smrg --debug|-x) debug_cmd='set -x' 19113d05230fSmrg func_echo "enabling shell trace mode" >&2 1912fbc03982Smrg $debug_cmd 1913fbc03982Smrg ;; 1914fbc03982Smrg 1915fbc03982Smrg --no-warnings|--no-warning|--no-warn) 1916fbc03982Smrg set dummy --warnings none ${1+"$@"} 1917fbc03982Smrg shift 1918fbc03982Smrg ;; 1919fbc03982Smrg 1920fbc03982Smrg --warnings|--warning|-W) 19213d05230fSmrg if test $# = 0 && func_missing_arg $_G_opt; then 19223d05230fSmrg _G_parse_options_requote=: 19233d05230fSmrg break 19243d05230fSmrg fi 1925fbc03982Smrg case " $warning_categories $1" in 1926fbc03982Smrg *" $1 "*) 1927fbc03982Smrg # trailing space prevents matching last $1 above 1928fbc03982Smrg func_append_uniq opt_warning_types " $1" 1929fbc03982Smrg ;; 1930fbc03982Smrg *all) 1931fbc03982Smrg opt_warning_types=$warning_categories 1932fbc03982Smrg ;; 1933fbc03982Smrg *none) 1934fbc03982Smrg opt_warning_types=none 1935fbc03982Smrg warning_func=: 1936fbc03982Smrg ;; 1937fbc03982Smrg *error) 1938fbc03982Smrg opt_warning_types=$warning_categories 1939fbc03982Smrg warning_func=func_fatal_error 1940fbc03982Smrg ;; 1941fbc03982Smrg *) 1942fbc03982Smrg func_fatal_error \ 1943fbc03982Smrg "unsupported warning category: '$1'" 1944fbc03982Smrg ;; 1945fbc03982Smrg esac 1946fbc03982Smrg shift 1947fbc03982Smrg ;; 1948fbc03982Smrg 1949fbc03982Smrg --verbose|-v) opt_verbose=: ;; 1950fbc03982Smrg --version) func_version ;; 1951fbc03982Smrg -\?|-h) func_usage ;; 1952fbc03982Smrg --help) func_help ;; 1953fbc03982Smrg 1954fbc03982Smrg # Separate optargs to long options (plugins may need this): 1955fbc03982Smrg --*=*) func_split_equals "$_G_opt" 1956fbc03982Smrg set dummy "$func_split_equals_lhs" \ 1957fbc03982Smrg "$func_split_equals_rhs" ${1+"$@"} 1958fbc03982Smrg shift 1959fbc03982Smrg ;; 1960fbc03982Smrg 1961fbc03982Smrg # Separate optargs to short options: 1962fbc03982Smrg -W*) 1963fbc03982Smrg func_split_short_opt "$_G_opt" 1964fbc03982Smrg set dummy "$func_split_short_opt_name" \ 1965fbc03982Smrg "$func_split_short_opt_arg" ${1+"$@"} 1966fbc03982Smrg shift 1967fbc03982Smrg ;; 1968fbc03982Smrg 1969fbc03982Smrg # Separate non-argument short options: 1970fbc03982Smrg -\?*|-h*|-v*|-x*) 1971fbc03982Smrg func_split_short_opt "$_G_opt" 1972fbc03982Smrg set dummy "$func_split_short_opt_name" \ 1973fbc03982Smrg "-$func_split_short_opt_arg" ${1+"$@"} 1974fbc03982Smrg shift 1975fbc03982Smrg ;; 1976fbc03982Smrg 19773d05230fSmrg --) _G_parse_options_requote=: ; break ;; 1978fbc03982Smrg -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; 19793d05230fSmrg *) set dummy "$_G_opt" ${1+"$@"}; shift 19803d05230fSmrg _G_match_parse_options=false 19813d05230fSmrg break 19823d05230fSmrg ;; 1983fbc03982Smrg esac 19843d05230fSmrg 19853d05230fSmrg if $_G_match_parse_options; then 19863d05230fSmrg _G_parse_options_requote=: 19873d05230fSmrg fi 1988fbc03982Smrg done 1989fbc03982Smrg 19903d05230fSmrg if $_G_parse_options_requote; then 19913d05230fSmrg # save modified positional parameters for caller 19923d05230fSmrg func_quote eval ${1+"$@"} 19933d05230fSmrg func_parse_options_result=$func_quote_result 19943d05230fSmrg fi 1995ed6f5d66Smrg} 1996ed6f5d66Smrg 1997ed6f5d66Smrg 1998fbc03982Smrg# func_validate_options [ARG]... 1999fbc03982Smrg# ------------------------------ 2000fbc03982Smrg# Perform any sanity checks on option settings and/or unconsumed 2001fbc03982Smrg# arguments. 2002fbc03982Smrgfunc_hookable func_validate_options 2003fbc03982Smrgfunc_validate_options () 2004ed6f5d66Smrg{ 2005fbc03982Smrg $debug_cmd 2006ed6f5d66Smrg 2007fbc03982Smrg # Display all warnings if -W was not given. 2008fbc03982Smrg test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" 2009fbc03982Smrg 2010fbc03982Smrg func_run_hooks func_validate_options ${1+"$@"} 20113d05230fSmrg func_propagate_result func_run_hooks func_validate_options 2012fbc03982Smrg 2013fbc03982Smrg # Bail if the options were screwed! 2014fbc03982Smrg $exit_cmd $EXIT_FAILURE 2015ed6f5d66Smrg} 2016ed6f5d66Smrg 2017fbc03982Smrg 2018fbc03982Smrg 2019fbc03982Smrg## ----------------- ## 2020fbc03982Smrg## Helper functions. ## 2021fbc03982Smrg## ----------------- ## 2022fbc03982Smrg 2023fbc03982Smrg# This section contains the helper functions used by the rest of the 2024fbc03982Smrg# hookable option parser framework in ascii-betical order. 2025fbc03982Smrg 2026fbc03982Smrg 2027fbc03982Smrg# func_fatal_help ARG... 2028fbc03982Smrg# ---------------------- 2029fbc03982Smrg# Echo program name prefixed message to standard error, followed by 2030fbc03982Smrg# a help hint, and exit. 2031fbc03982Smrgfunc_fatal_help () 2032ed6f5d66Smrg{ 2033fbc03982Smrg $debug_cmd 2034ed6f5d66Smrg 2035fbc03982Smrg eval \$ECHO \""Usage: $usage"\" 2036fbc03982Smrg eval \$ECHO \""$fatal_help"\" 2037fbc03982Smrg func_error ${1+"$@"} 2038fbc03982Smrg exit $EXIT_FAILURE 2039ed6f5d66Smrg} 2040ed6f5d66Smrg 2041fbc03982Smrg 2042fbc03982Smrg# func_help 2043fbc03982Smrg# --------- 2044fbc03982Smrg# Echo long help message to standard output and exit. 2045ed6f5d66Smrgfunc_help () 2046ed6f5d66Smrg{ 2047fbc03982Smrg $debug_cmd 2048fbc03982Smrg 2049fbc03982Smrg func_usage_message 2050fbc03982Smrg $ECHO "$long_help_message" 2051fbc03982Smrg exit 0 2052ed6f5d66Smrg} 2053ed6f5d66Smrg 2054fbc03982Smrg 2055fbc03982Smrg# func_missing_arg ARGNAME 2056fbc03982Smrg# ------------------------ 2057ed6f5d66Smrg# Echo program name prefixed message to standard error and set global 2058ed6f5d66Smrg# exit_cmd. 2059ed6f5d66Smrgfunc_missing_arg () 2060ed6f5d66Smrg{ 2061fbc03982Smrg $debug_cmd 2062ed6f5d66Smrg 2063fbc03982Smrg func_error "Missing argument for '$1'." 2064ed6f5d66Smrg exit_cmd=exit 2065ed6f5d66Smrg} 2066ed6f5d66Smrg 2067ed6f5d66Smrg 2068fbc03982Smrg# func_split_equals STRING 2069fbc03982Smrg# ------------------------ 20703d05230fSmrg# Set func_split_equals_lhs and func_split_equals_rhs shell variables 20713d05230fSmrg# after splitting STRING at the '=' sign. 2072fbc03982Smrgtest -z "$_G_HAVE_XSI_OPS" \ 2073fbc03982Smrg && (eval 'x=a/b/c; 2074fbc03982Smrg test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 2075fbc03982Smrg && _G_HAVE_XSI_OPS=yes 2076fbc03982Smrg 2077fbc03982Smrgif test yes = "$_G_HAVE_XSI_OPS" 2078fbc03982Smrgthen 2079fbc03982Smrg # This is an XSI compatible shell, allowing a faster implementation... 2080fbc03982Smrg eval 'func_split_equals () 2081fbc03982Smrg { 2082fbc03982Smrg $debug_cmd 2083fbc03982Smrg 2084fbc03982Smrg func_split_equals_lhs=${1%%=*} 2085fbc03982Smrg func_split_equals_rhs=${1#*=} 20863d05230fSmrg if test "x$func_split_equals_lhs" = "x$1"; then 20873d05230fSmrg func_split_equals_rhs= 20883d05230fSmrg fi 2089fbc03982Smrg }' 2090fbc03982Smrgelse 2091fbc03982Smrg # ...otherwise fall back to using expr, which is often a shell builtin. 2092fbc03982Smrg func_split_equals () 2093fbc03982Smrg { 2094fbc03982Smrg $debug_cmd 2095fbc03982Smrg 2096fbc03982Smrg func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` 2097fbc03982Smrg func_split_equals_rhs= 20983d05230fSmrg test "x$func_split_equals_lhs=" = "x$1" \ 2099fbc03982Smrg || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` 2100fbc03982Smrg } 2101fbc03982Smrgfi #func_split_equals 2102fbc03982Smrg 2103fbc03982Smrg 2104fbc03982Smrg# func_split_short_opt SHORTOPT 2105fbc03982Smrg# ----------------------------- 2106ed6f5d66Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell 2107ed6f5d66Smrg# variables after splitting SHORTOPT after the 2nd character. 2108fbc03982Smrgif test yes = "$_G_HAVE_XSI_OPS" 2109fbc03982Smrgthen 2110fbc03982Smrg # This is an XSI compatible shell, allowing a faster implementation... 2111fbc03982Smrg eval 'func_split_short_opt () 2112fbc03982Smrg { 2113fbc03982Smrg $debug_cmd 2114fbc03982Smrg 2115fbc03982Smrg func_split_short_opt_arg=${1#??} 2116fbc03982Smrg func_split_short_opt_name=${1%"$func_split_short_opt_arg"} 2117fbc03982Smrg }' 2118fbc03982Smrgelse 2119fbc03982Smrg # ...otherwise fall back to using expr, which is often a shell builtin. 2120fbc03982Smrg func_split_short_opt () 2121fbc03982Smrg { 2122fbc03982Smrg $debug_cmd 2123fbc03982Smrg 21243d05230fSmrg func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'` 2125fbc03982Smrg func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` 2126fbc03982Smrg } 2127fbc03982Smrgfi #func_split_short_opt 2128fbc03982Smrg 2129fbc03982Smrg 2130fbc03982Smrg# func_usage 2131fbc03982Smrg# ---------- 2132fbc03982Smrg# Echo short help message to standard output and exit. 2133fbc03982Smrgfunc_usage () 2134ed6f5d66Smrg{ 2135fbc03982Smrg $debug_cmd 2136ed6f5d66Smrg 2137fbc03982Smrg func_usage_message 2138fbc03982Smrg $ECHO "Run '$progname --help |${PAGER-more}' for full usage" 2139fbc03982Smrg exit 0 2140fbc03982Smrg} 2141ed6f5d66Smrg 2142ed6f5d66Smrg 2143fbc03982Smrg# func_usage_message 2144fbc03982Smrg# ------------------ 2145fbc03982Smrg# Echo short help message to standard output. 2146fbc03982Smrgfunc_usage_message () 2147ed6f5d66Smrg{ 2148fbc03982Smrg $debug_cmd 2149ed6f5d66Smrg 2150fbc03982Smrg eval \$ECHO \""Usage: $usage"\" 2151fbc03982Smrg echo 2152fbc03982Smrg $SED -n 's|^# || 2153fbc03982Smrg /^Written by/{ 2154fbc03982Smrg x;p;x 2155fbc03982Smrg } 2156fbc03982Smrg h 2157fbc03982Smrg /^Written by/q' < "$progpath" 2158fbc03982Smrg echo 2159fbc03982Smrg eval \$ECHO \""$usage_message"\" 2160fbc03982Smrg} 2161ed6f5d66Smrg 2162ed6f5d66Smrg 2163fbc03982Smrg# func_version 2164fbc03982Smrg# ------------ 2165fbc03982Smrg# Echo version message to standard output and exit. 21663d05230fSmrg# The version message is extracted from the calling file's header 21673d05230fSmrg# comments, with leading '# ' stripped: 21683d05230fSmrg# 1. First display the progname and version 21693d05230fSmrg# 2. Followed by the header comment line matching /^# Written by / 21703d05230fSmrg# 3. Then a blank line followed by the first following line matching 21713d05230fSmrg# /^# Copyright / 21723d05230fSmrg# 4. Immediately followed by any lines between the previous matches, 21733d05230fSmrg# except lines preceding the intervening completely blank line. 21743d05230fSmrg# For example, see the header comments of this file. 2175fbc03982Smrgfunc_version () 2176fbc03982Smrg{ 2177fbc03982Smrg $debug_cmd 2178ed6f5d66Smrg 2179fbc03982Smrg printf '%s\n' "$progname $scriptversion" 2180fbc03982Smrg $SED -n ' 21813d05230fSmrg /^# Written by /!b 21823d05230fSmrg s|^# ||; p; n 21833d05230fSmrg 21843d05230fSmrg :fwd2blnk 21853d05230fSmrg /./ { 21863d05230fSmrg n 21873d05230fSmrg b fwd2blnk 2188fbc03982Smrg } 21893d05230fSmrg p; n 21903d05230fSmrg 21913d05230fSmrg :holdwrnt 21923d05230fSmrg s|^# || 21933d05230fSmrg s|^# *$|| 21943d05230fSmrg /^Copyright /!{ 21953d05230fSmrg /./H 21963d05230fSmrg n 21973d05230fSmrg b holdwrnt 2198fbc03982Smrg } 21993d05230fSmrg 22003d05230fSmrg s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| 22013d05230fSmrg G 22023d05230fSmrg s|\(\n\)\n*|\1|g 22033d05230fSmrg p; q' < "$progpath" 2204ed6f5d66Smrg 2205fbc03982Smrg exit $? 2206fbc03982Smrg} 2207ed6f5d66Smrg 2208ed6f5d66Smrg 2209fbc03982Smrg# Local variables: 2210fbc03982Smrg# mode: shell-script 2211fbc03982Smrg# sh-indentation: 2 2212fbc03982Smrg# eval: (add-hook 'before-save-hook 'time-stamp) 22133d05230fSmrg# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC" 2214fbc03982Smrg# time-stamp-time-zone: "UTC" 2215fbc03982Smrg# End: 2216ed6f5d66Smrg 2217fbc03982Smrg# Set a version string. 2218a3680546Smrgscriptversion='(GNU libtool) 2.5.4' 2219a3680546Smrg 2220a3680546Smrg# func_version 2221a3680546Smrg# ------------ 2222a3680546Smrg# Echo version message to standard output and exit. 2223a3680546Smrgfunc_version () 2224a3680546Smrg{ 2225a3680546Smrg $debug_cmd 2226a3680546Smrg 2227a3680546Smrg year=`date +%Y` 2228a3680546Smrg 2229a3680546Smrg cat <<EOF 2230a3680546Smrg$progname $scriptversion 2231a3680546SmrgCopyright (C) $year Free Software Foundation, Inc. 2232a3680546SmrgLicense GPLv2+: GNU GPL version 2 or later <https://gnu.org/licenses/gpl.html> 2233a3680546SmrgThis is free software: you are free to change and redistribute it. 2234a3680546SmrgThere is NO WARRANTY, to the extent permitted by law. 2235a3680546Smrg 2236a3680546SmrgOriginally written by Gordon Matzigkeit, 1996 2237a3680546Smrg(See AUTHORS for complete contributor listing) 2238a3680546SmrgEOF 2239a3680546Smrg 2240a3680546Smrg exit $? 2241a3680546Smrg} 2242ed6f5d66Smrg 2243ed6f5d66Smrg 2244fbc03982Smrg# func_echo ARG... 2245fbc03982Smrg# ---------------- 2246fbc03982Smrg# Libtool also displays the current mode in messages, so override 2247fbc03982Smrg# funclib.sh func_echo with this custom definition. 2248fbc03982Smrgfunc_echo () 2249ed6f5d66Smrg{ 2250fbc03982Smrg $debug_cmd 2251ed6f5d66Smrg 2252fbc03982Smrg _G_message=$* 2253fbc03982Smrg 2254fbc03982Smrg func_echo_IFS=$IFS 2255fbc03982Smrg IFS=$nl 2256fbc03982Smrg for _G_line in $_G_message; do 2257fbc03982Smrg IFS=$func_echo_IFS 2258fbc03982Smrg $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" 2259fbc03982Smrg done 2260fbc03982Smrg IFS=$func_echo_IFS 2261fbc03982Smrg} 2262ed6f5d66Smrg 2263ed6f5d66Smrg 2264fbc03982Smrg## ---------------- ## 2265fbc03982Smrg## Options parsing. ## 2266fbc03982Smrg## ---------------- ## 2267fbc03982Smrg 2268fbc03982Smrg# Hook in the functions to make sure our own options are parsed during 2269fbc03982Smrg# the option parsing loop. 2270fbc03982Smrg 2271fbc03982Smrgusage='$progpath [OPTION]... [MODE-ARG]...' 2272fbc03982Smrg 2273fbc03982Smrg# Short help message in response to '-h'. 2274fbc03982Smrgusage_message="Options: 2275a3680546Smrg --config show all configuration variables 2276a3680546Smrg --debug enable verbose shell tracing 2277a3680546Smrg -n, --dry-run display commands without modifying any files 2278a3680546Smrg --features display basic configuration information 2279a3680546Smrg --finish use operation '--mode=finish' 2280a3680546Smrg --mode=MODE use operation mode MODE 2281a3680546Smrg --no-finish don't update shared library cache 2282a3680546Smrg --no-quiet, --no-silent print default informational messages 2283a3680546Smrg --no-warnings equivalent to '-Wnone' 2284a3680546Smrg --preserve-dup-deps don't remove duplicate dependency libraries 2285a3680546Smrg --quiet, --silent don't print informational messages 2286a3680546Smrg --reorder-cache=DIRS reorder shared library cache for preferred DIRS 2287a3680546Smrg --tag=TAG use configuration variables from tag TAG 2288a3680546Smrg -v, --verbose print more informational messages than default 2289a3680546Smrg --version print version information 2290a3680546Smrg -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] 2291a3680546Smrg -h, --help, --help-all print short, long, or detailed help message 2292fbc03982Smrg" 2293ed6f5d66Smrg 2294fbc03982Smrg# Additional text appended to 'usage_message' in response to '--help'. 2295fbc03982Smrgfunc_help () 2296ed6f5d66Smrg{ 2297fbc03982Smrg $debug_cmd 2298fbc03982Smrg 2299fbc03982Smrg func_usage_message 2300fbc03982Smrg $ECHO "$long_help_message 2301fbc03982Smrg 2302fbc03982SmrgMODE must be one of the following: 2303fbc03982Smrg 2304fbc03982Smrg clean remove files from the build directory 2305fbc03982Smrg compile compile a source file into a libtool object 2306fbc03982Smrg execute automatically set library path, then run a program 2307fbc03982Smrg finish complete the installation of libtool libraries 2308fbc03982Smrg install install libraries or executables 2309fbc03982Smrg link create a library or an executable 2310fbc03982Smrg uninstall remove libraries from an installed directory 2311fbc03982Smrg 2312fbc03982SmrgMODE-ARGS vary depending on the MODE. When passed as first option, 2313fbc03982Smrg'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. 2314fbc03982SmrgTry '$progname --help --mode=MODE' for a more detailed description of MODE. 2315fbc03982Smrg 2316fbc03982SmrgWhen reporting a bug, please describe a test case to reproduce it and 2317fbc03982Smrginclude the following information: 2318fbc03982Smrg 2319fbc03982Smrg host-triplet: $host 2320fbc03982Smrg shell: $SHELL 2321fbc03982Smrg compiler: $LTCC 2322fbc03982Smrg compiler flags: $LTCFLAGS 2323fbc03982Smrg linker: $LD (gnu? $with_gnu_ld) 2324a3680546Smrg version: $progname $scriptversion 2325fbc03982Smrg automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` 2326fbc03982Smrg autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` 2327fbc03982Smrg 2328fbc03982SmrgReport bugs to <bug-libtool@gnu.org>. 2329a3680546SmrgGNU libtool home page: <https://www.gnu.org/software/libtool/>. 2330a3680546SmrgGeneral help using GNU software: <https://www.gnu.org/gethelp/>." 2331fbc03982Smrg exit 0 2332fbc03982Smrg} 2333ed6f5d66Smrg 2334ed6f5d66Smrg 2335fbc03982Smrg# func_lo2o OBJECT-NAME 2336fbc03982Smrg# --------------------- 2337fbc03982Smrg# Transform OBJECT-NAME from a '.lo' suffix to the platform specific 2338fbc03982Smrg# object suffix. 2339ed6f5d66Smrg 2340fbc03982Smrglo2o=s/\\.lo\$/.$objext/ 2341fbc03982Smrgo2lo=s/\\.$objext\$/.lo/ 2342ed6f5d66Smrg 2343fbc03982Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 2344fbc03982Smrg eval 'func_lo2o () 2345fbc03982Smrg { 2346fbc03982Smrg case $1 in 2347fbc03982Smrg *.lo) func_lo2o_result=${1%.lo}.$objext ;; 2348fbc03982Smrg * ) func_lo2o_result=$1 ;; 2349fbc03982Smrg esac 2350fbc03982Smrg }' 2351fbc03982Smrg 2352fbc03982Smrg # func_xform LIBOBJ-OR-SOURCE 2353fbc03982Smrg # --------------------------- 2354fbc03982Smrg # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) 2355fbc03982Smrg # suffix to a '.lo' libtool-object suffix. 2356fbc03982Smrg eval 'func_xform () 2357fbc03982Smrg { 2358fbc03982Smrg func_xform_result=${1%.*}.lo 2359fbc03982Smrg }' 2360fbc03982Smrgelse 2361fbc03982Smrg # ...otherwise fall back to using sed. 2362fbc03982Smrg func_lo2o () 2363fbc03982Smrg { 2364fbc03982Smrg func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` 2365fbc03982Smrg } 2366fbc03982Smrg 2367fbc03982Smrg func_xform () 2368fbc03982Smrg { 2369fbc03982Smrg func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` 2370fbc03982Smrg } 2371fbc03982Smrgfi 2372ed6f5d66Smrg 2373ed6f5d66Smrg 2374fbc03982Smrg# func_fatal_configuration ARG... 2375fbc03982Smrg# ------------------------------- 2376ed6f5d66Smrg# Echo program name prefixed message to standard error, followed by 2377ed6f5d66Smrg# a configuration failure hint, and exit. 2378ed6f5d66Smrgfunc_fatal_configuration () 2379ed6f5d66Smrg{ 23803d05230fSmrg func_fatal_error ${1+"$@"} \ 2381fbc03982Smrg "See the $PACKAGE documentation for more information." \ 2382fbc03982Smrg "Fatal configuration error." 2383ed6f5d66Smrg} 2384ed6f5d66Smrg 2385ed6f5d66Smrg 2386ed6f5d66Smrg# func_config 2387fbc03982Smrg# ----------- 2388ed6f5d66Smrg# Display the configuration for all the tags in this script. 2389ed6f5d66Smrgfunc_config () 2390ed6f5d66Smrg{ 2391ed6f5d66Smrg re_begincf='^# ### BEGIN LIBTOOL' 2392ed6f5d66Smrg re_endcf='^# ### END LIBTOOL' 2393ed6f5d66Smrg 2394ed6f5d66Smrg # Default configuration. 2395ed6f5d66Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 2396ed6f5d66Smrg 2397ed6f5d66Smrg # Now print the configurations for the tags. 2398ed6f5d66Smrg for tagname in $taglist; do 2399ed6f5d66Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 2400ed6f5d66Smrg done 2401ed6f5d66Smrg 2402ed6f5d66Smrg exit $? 2403ed6f5d66Smrg} 2404ed6f5d66Smrg 2405fbc03982Smrg 2406ed6f5d66Smrg# func_features 2407fbc03982Smrg# ------------- 2408ed6f5d66Smrg# Display the features supported by this script. 2409ed6f5d66Smrgfunc_features () 2410ed6f5d66Smrg{ 2411ed6f5d66Smrg echo "host: $host" 2412fbc03982Smrg if test yes = "$build_libtool_libs"; then 2413ed6f5d66Smrg echo "enable shared libraries" 2414ed6f5d66Smrg else 2415ed6f5d66Smrg echo "disable shared libraries" 2416ed6f5d66Smrg fi 2417fbc03982Smrg if test yes = "$build_old_libs"; then 2418ed6f5d66Smrg echo "enable static libraries" 2419ed6f5d66Smrg else 2420ed6f5d66Smrg echo "disable static libraries" 2421ed6f5d66Smrg fi 2422ed6f5d66Smrg 2423ed6f5d66Smrg exit $? 2424ed6f5d66Smrg} 2425ed6f5d66Smrg 2426fbc03982Smrg 2427fbc03982Smrg# func_enable_tag TAGNAME 2428fbc03982Smrg# ----------------------- 2429ed6f5d66Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 2430ed6f5d66Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 2431ed6f5d66Smrg# variable here. 2432ed6f5d66Smrgfunc_enable_tag () 2433ed6f5d66Smrg{ 2434fbc03982Smrg # Global variable: 2435fbc03982Smrg tagname=$1 2436ed6f5d66Smrg 2437fbc03982Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 2438fbc03982Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 2439fbc03982Smrg sed_extractcf=/$re_begincf/,/$re_endcf/p 2440ed6f5d66Smrg 2441fbc03982Smrg # Validate tagname. 2442fbc03982Smrg case $tagname in 2443fbc03982Smrg *[!-_A-Za-z0-9,/]*) 2444fbc03982Smrg func_fatal_error "invalid tag name: $tagname" 2445fbc03982Smrg ;; 2446fbc03982Smrg esac 2447ed6f5d66Smrg 2448fbc03982Smrg # Don't test for the "default" C tag, as we know it's 2449fbc03982Smrg # there but not specially marked. 2450fbc03982Smrg case $tagname in 2451fbc03982Smrg CC) ;; 2452ed6f5d66Smrg *) 2453fbc03982Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 2454fbc03982Smrg taglist="$taglist $tagname" 2455fbc03982Smrg 2456fbc03982Smrg # Evaluate the configuration. Be careful to quote the path 2457fbc03982Smrg # and the sed script, to avoid splitting on whitespace, but 2458fbc03982Smrg # also don't use non-portable quotes within backquotes within 2459fbc03982Smrg # quotes we have to do it in 2 steps: 2460fbc03982Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 2461fbc03982Smrg eval "$extractedcf" 2462fbc03982Smrg else 2463fbc03982Smrg func_error "ignoring unknown tag $tagname" 2464fbc03982Smrg fi 2465fbc03982Smrg ;; 2466fbc03982Smrg esac 2467ed6f5d66Smrg} 2468ed6f5d66Smrg 2469fbc03982Smrg 2470ed6f5d66Smrg# func_check_version_match 2471fbc03982Smrg# ------------------------ 2472ed6f5d66Smrg# Ensure that we are using m4 macros, and libtool script from the same 2473ed6f5d66Smrg# release of libtool. 2474ed6f5d66Smrgfunc_check_version_match () 2475ed6f5d66Smrg{ 2476fbc03982Smrg if test "$package_revision" != "$macro_revision"; then 2477fbc03982Smrg if test "$VERSION" != "$macro_version"; then 2478fbc03982Smrg if test -z "$macro_version"; then 2479fbc03982Smrg cat >&2 <<_LT_EOF 2480ed6f5d66Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2481ed6f5d66Smrg$progname: definition of this LT_INIT comes from an older release. 2482ed6f5d66Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2483ed6f5d66Smrg$progname: and run autoconf again. 2484ed6f5d66Smrg_LT_EOF 2485fbc03982Smrg else 2486fbc03982Smrg cat >&2 <<_LT_EOF 2487ed6f5d66Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2488ed6f5d66Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 2489ed6f5d66Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2490ed6f5d66Smrg$progname: and run autoconf again. 2491ed6f5d66Smrg_LT_EOF 2492fbc03982Smrg fi 2493fbc03982Smrg else 2494fbc03982Smrg cat >&2 <<_LT_EOF 2495ed6f5d66Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 2496ed6f5d66Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 2497ed6f5d66Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 2498ed6f5d66Smrg$progname: of $PACKAGE $VERSION and run autoconf again. 2499ed6f5d66Smrg_LT_EOF 2500fbc03982Smrg fi 2501ed6f5d66Smrg 2502fbc03982Smrg exit $EXIT_MISMATCH 2503fbc03982Smrg fi 2504ed6f5d66Smrg} 2505ed6f5d66Smrg 2506ed6f5d66Smrg 2507fbc03982Smrg# libtool_options_prep [ARG]... 2508fbc03982Smrg# ----------------------------- 2509fbc03982Smrg# Preparation for options parsed by libtool. 2510fbc03982Smrglibtool_options_prep () 2511fbc03982Smrg{ 2512fbc03982Smrg $debug_mode 2513ed6f5d66Smrg 2514fbc03982Smrg # Option defaults: 2515fbc03982Smrg opt_config=false 2516fbc03982Smrg opt_dlopen= 2517fbc03982Smrg opt_dry_run=false 2518fbc03982Smrg opt_help=false 2519fbc03982Smrg opt_mode= 2520a3680546Smrg opt_reorder_cache=false 2521fbc03982Smrg opt_preserve_dup_deps=false 2522fbc03982Smrg opt_quiet=false 2523a3680546Smrg opt_finishing=true 2524a3680546Smrg opt_warning= 2525ed6f5d66Smrg 2526fbc03982Smrg nonopt= 2527fbc03982Smrg preserve_args= 2528ed6f5d66Smrg 25293d05230fSmrg _G_rc_lt_options_prep=: 25303d05230fSmrg 2531fbc03982Smrg # Shorthand for --mode=foo, only valid as the first argument 2532fbc03982Smrg case $1 in 2533fbc03982Smrg clean|clea|cle|cl) 2534fbc03982Smrg shift; set dummy --mode clean ${1+"$@"}; shift 2535fbc03982Smrg ;; 2536fbc03982Smrg compile|compil|compi|comp|com|co|c) 2537fbc03982Smrg shift; set dummy --mode compile ${1+"$@"}; shift 2538fbc03982Smrg ;; 2539fbc03982Smrg execute|execut|execu|exec|exe|ex|e) 2540fbc03982Smrg shift; set dummy --mode execute ${1+"$@"}; shift 2541fbc03982Smrg ;; 2542fbc03982Smrg finish|finis|fini|fin|fi|f) 2543fbc03982Smrg shift; set dummy --mode finish ${1+"$@"}; shift 2544fbc03982Smrg ;; 2545fbc03982Smrg install|instal|insta|inst|ins|in|i) 2546fbc03982Smrg shift; set dummy --mode install ${1+"$@"}; shift 2547fbc03982Smrg ;; 2548fbc03982Smrg link|lin|li|l) 2549fbc03982Smrg shift; set dummy --mode link ${1+"$@"}; shift 2550fbc03982Smrg ;; 2551fbc03982Smrg uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 2552fbc03982Smrg shift; set dummy --mode uninstall ${1+"$@"}; shift 2553fbc03982Smrg ;; 25543d05230fSmrg *) 25553d05230fSmrg _G_rc_lt_options_prep=false 25563d05230fSmrg ;; 2557fbc03982Smrg esac 2558fbc03982Smrg 25593d05230fSmrg if $_G_rc_lt_options_prep; then 25603d05230fSmrg # Pass back the list of options. 25613d05230fSmrg func_quote eval ${1+"$@"} 25623d05230fSmrg libtool_options_prep_result=$func_quote_result 25633d05230fSmrg fi 2564fbc03982Smrg} 2565fbc03982Smrgfunc_add_hook func_options_prep libtool_options_prep 2566ed6f5d66Smrg 2567ed6f5d66Smrg 2568fbc03982Smrg# libtool_parse_options [ARG]... 2569fbc03982Smrg# --------------------------------- 2570fbc03982Smrg# Provide handling for libtool specific options. 2571fbc03982Smrglibtool_parse_options () 2572ed6f5d66Smrg{ 2573fbc03982Smrg $debug_cmd 2574ed6f5d66Smrg 25753d05230fSmrg _G_rc_lt_parse_options=false 25763d05230fSmrg 2577fbc03982Smrg # Perform our own loop to consume as many options as possible in 2578fbc03982Smrg # each iteration. 2579fbc03982Smrg while test $# -gt 0; do 25803d05230fSmrg _G_match_lt_parse_options=: 2581fbc03982Smrg _G_opt=$1 2582fbc03982Smrg shift 2583fbc03982Smrg case $_G_opt in 2584fbc03982Smrg --dry-run|--dryrun|-n) 2585fbc03982Smrg opt_dry_run=: 2586fbc03982Smrg ;; 2587fbc03982Smrg 2588fbc03982Smrg --config) func_config ;; 2589fbc03982Smrg 2590fbc03982Smrg --dlopen|-dlopen) 2591fbc03982Smrg opt_dlopen="${opt_dlopen+$opt_dlopen 2592fbc03982Smrg}$1" 2593fbc03982Smrg shift 2594fbc03982Smrg ;; 2595fbc03982Smrg 2596fbc03982Smrg --preserve-dup-deps) 2597fbc03982Smrg opt_preserve_dup_deps=: ;; 2598fbc03982Smrg 2599fbc03982Smrg --features) func_features ;; 2600fbc03982Smrg 2601fbc03982Smrg --finish) set dummy --mode finish ${1+"$@"}; shift ;; 2602fbc03982Smrg 2603fbc03982Smrg --help) opt_help=: ;; 2604fbc03982Smrg 2605fbc03982Smrg --help-all) opt_help=': help-all' ;; 2606fbc03982Smrg 2607fbc03982Smrg --mode) test $# = 0 && func_missing_arg $_G_opt && break 2608fbc03982Smrg opt_mode=$1 2609fbc03982Smrg case $1 in 2610fbc03982Smrg # Valid mode arguments: 2611fbc03982Smrg clean|compile|execute|finish|install|link|relink|uninstall) ;; 2612fbc03982Smrg 2613fbc03982Smrg # Catch anything else as an error 2614a3680546Smrg *) func_error "invalid argument '$1' for $_G_opt" 2615fbc03982Smrg exit_cmd=exit 2616fbc03982Smrg ;; 2617fbc03982Smrg esac 2618fbc03982Smrg shift 2619fbc03982Smrg ;; 2620fbc03982Smrg 2621a3680546Smrg --no-finish) 2622a3680546Smrg opt_finishing=false 2623a3680546Smrg func_append preserve_args " $_G_opt" 2624a3680546Smrg ;; 2625a3680546Smrg 2626fbc03982Smrg --no-silent|--no-quiet) 2627fbc03982Smrg opt_quiet=false 2628fbc03982Smrg func_append preserve_args " $_G_opt" 2629fbc03982Smrg ;; 2630fbc03982Smrg 2631fbc03982Smrg --no-warnings|--no-warning|--no-warn) 2632fbc03982Smrg opt_warning=false 2633fbc03982Smrg func_append preserve_args " $_G_opt" 2634fbc03982Smrg ;; 2635fbc03982Smrg 2636fbc03982Smrg --no-verbose) 2637fbc03982Smrg opt_verbose=false 2638fbc03982Smrg func_append preserve_args " $_G_opt" 2639fbc03982Smrg ;; 2640fbc03982Smrg 2641a3680546Smrg --reorder-cache) 2642a3680546Smrg opt_reorder_cache=true 2643a3680546Smrg shared_lib_dirs=$1 2644a3680546Smrg if test -n "$shared_lib_dirs"; then 2645a3680546Smrg case $1 in 2646a3680546Smrg # Must begin with /: 2647a3680546Smrg /*) ;; 2648a3680546Smrg 2649a3680546Smrg # Catch anything else as an error (relative paths) 2650a3680546Smrg *) func_error "invalid argument '$1' for $_G_opt" 2651a3680546Smrg func_error "absolute paths are required for $_G_opt" 2652a3680546Smrg exit_cmd=exit 2653a3680546Smrg ;; 2654a3680546Smrg esac 2655a3680546Smrg fi 2656a3680546Smrg shift 2657a3680546Smrg ;; 2658a3680546Smrg 2659fbc03982Smrg --silent|--quiet) 2660fbc03982Smrg opt_quiet=: 2661fbc03982Smrg opt_verbose=false 2662fbc03982Smrg func_append preserve_args " $_G_opt" 2663fbc03982Smrg ;; 2664fbc03982Smrg 2665fbc03982Smrg --tag) test $# = 0 && func_missing_arg $_G_opt && break 2666fbc03982Smrg opt_tag=$1 2667fbc03982Smrg func_append preserve_args " $_G_opt $1" 2668fbc03982Smrg func_enable_tag "$1" 2669fbc03982Smrg shift 2670fbc03982Smrg ;; 2671fbc03982Smrg 2672fbc03982Smrg --verbose|-v) opt_quiet=false 2673fbc03982Smrg opt_verbose=: 2674fbc03982Smrg func_append preserve_args " $_G_opt" 2675fbc03982Smrg ;; 2676fbc03982Smrg 26773d05230fSmrg # An option not handled by this hook function: 26783d05230fSmrg *) set dummy "$_G_opt" ${1+"$@"} ; shift 26793d05230fSmrg _G_match_lt_parse_options=false 26803d05230fSmrg break 26813d05230fSmrg ;; 2682fbc03982Smrg esac 26833d05230fSmrg $_G_match_lt_parse_options && _G_rc_lt_parse_options=: 2684fbc03982Smrg done 2685ed6f5d66Smrg 26863d05230fSmrg if $_G_rc_lt_parse_options; then 26873d05230fSmrg # save modified positional parameters for caller 26883d05230fSmrg func_quote eval ${1+"$@"} 26893d05230fSmrg libtool_parse_options_result=$func_quote_result 26903d05230fSmrg fi 2691fbc03982Smrg} 2692fbc03982Smrgfunc_add_hook func_parse_options libtool_parse_options 2693ed6f5d66Smrg 2694ed6f5d66Smrg 2695a3680546Smrg# func_warning ARG... 2696a3680546Smrg# ------------------- 2697a3680546Smrg# Libtool warnings are not categorized, so override funclib.sh 2698a3680546Smrg# func_warning with this simpler definition. 2699a3680546Smrgfunc_warning () 2700a3680546Smrg{ 2701a3680546Smrg if $opt_warning; then 2702a3680546Smrg $debug_cmd 2703a3680546Smrg $warning_func ${1+"$@"} 2704a3680546Smrg fi 2705a3680546Smrg} 2706a3680546Smrg 2707ed6f5d66Smrg 2708fbc03982Smrg# libtool_validate_options [ARG]... 2709fbc03982Smrg# --------------------------------- 2710fbc03982Smrg# Perform any sanity checks on option settings and/or unconsumed 2711fbc03982Smrg# arguments. 2712fbc03982Smrglibtool_validate_options () 2713fbc03982Smrg{ 2714fbc03982Smrg # save first non-option argument 2715fbc03982Smrg if test 0 -lt $#; then 2716fbc03982Smrg nonopt=$1 2717fbc03982Smrg shift 2718ed6f5d66Smrg fi 2719ed6f5d66Smrg 2720fbc03982Smrg # preserve --debug 2721fbc03982Smrg test : = "$debug_cmd" || func_append preserve_args " --debug" 2722ed6f5d66Smrg 2723a3680546Smrg case $host_os in 2724fbc03982Smrg # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 2725fbc03982Smrg # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 2726a3680546Smrg cygwin* | mingw* | windows* | pw32* | cegcc* | solaris2* | os2*) 2727fbc03982Smrg # don't eliminate duplications in $postdeps and $predeps 2728fbc03982Smrg opt_duplicate_compiler_generated_deps=: 2729fbc03982Smrg ;; 2730fbc03982Smrg *) 2731fbc03982Smrg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 2732fbc03982Smrg ;; 2733fbc03982Smrg esac 2734ed6f5d66Smrg 2735fbc03982Smrg $opt_help || { 2736fbc03982Smrg # Sanity checks first: 2737fbc03982Smrg func_check_version_match 2738ed6f5d66Smrg 2739fbc03982Smrg test yes != "$build_libtool_libs" \ 2740fbc03982Smrg && test yes != "$build_old_libs" \ 2741fbc03982Smrg && func_fatal_configuration "not configured to build any kind of library" 2742ed6f5d66Smrg 2743fbc03982Smrg # Darwin sucks 2744fbc03982Smrg eval std_shrext=\"$shrext_cmds\" 2745fbc03982Smrg 2746fbc03982Smrg # Only execute mode is allowed to have -dlopen flags. 2747fbc03982Smrg if test -n "$opt_dlopen" && test execute != "$opt_mode"; then 2748fbc03982Smrg func_error "unrecognized option '-dlopen'" 2749fbc03982Smrg $ECHO "$help" 1>&2 2750fbc03982Smrg exit $EXIT_FAILURE 2751fbc03982Smrg fi 2752fbc03982Smrg 2753fbc03982Smrg # Change the help message to a mode-specific one. 2754fbc03982Smrg generic_help=$help 2755fbc03982Smrg help="Try '$progname --help --mode=$opt_mode' for more information." 2756fbc03982Smrg } 2757fbc03982Smrg 2758fbc03982Smrg # Pass back the unparsed argument list 27593d05230fSmrg func_quote eval ${1+"$@"} 27603d05230fSmrg libtool_validate_options_result=$func_quote_result 2761ed6f5d66Smrg} 2762fbc03982Smrgfunc_add_hook func_validate_options libtool_validate_options 2763fbc03982Smrg 2764ed6f5d66Smrg 2765fbc03982Smrg# Process options as early as possible so that --help and --version 2766fbc03982Smrg# can return quickly. 2767fbc03982Smrgfunc_options ${1+"$@"} 2768fbc03982Smrgeval set dummy "$func_options_result"; shift 2769ed6f5d66Smrg 2770ed6f5d66Smrg 2771ed6f5d66Smrg 2772ed6f5d66Smrg## ----------- ## 2773ed6f5d66Smrg## Main. ## 2774ed6f5d66Smrg## ----------- ## 2775ed6f5d66Smrg 2776fbc03982Smrgmagic='%%%MAGIC variable%%%' 2777fbc03982Smrgmagic_exe='%%%MAGIC EXE variable%%%' 2778fbc03982Smrg 2779fbc03982Smrg# Global variables. 2780fbc03982Smrgextracted_archives= 2781fbc03982Smrgextracted_serial=0 2782fbc03982Smrg 2783fbc03982Smrg# If this variable is set in any of the actions, the command in it 2784fbc03982Smrg# will be execed at the end. This prevents here-documents from being 2785fbc03982Smrg# left over by shells. 2786fbc03982Smrgexec_cmd= 2787fbc03982Smrg 2788fbc03982Smrg 2789fbc03982Smrg# A function that is used when there is no print builtin or printf. 2790fbc03982Smrgfunc_fallback_echo () 2791fbc03982Smrg{ 2792fbc03982Smrg eval 'cat <<_LTECHO_EOF 2793fbc03982Smrg$1 2794fbc03982Smrg_LTECHO_EOF' 2795fbc03982Smrg} 2796fbc03982Smrg 2797fbc03982Smrg# func_generated_by_libtool 2798fbc03982Smrg# True iff stdin has been generated by Libtool. This function is only 2799fbc03982Smrg# a basic sanity check; it will hardly flush out determined imposters. 2800fbc03982Smrgfunc_generated_by_libtool_p () 2801fbc03982Smrg{ 2802fbc03982Smrg $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 2803fbc03982Smrg} 2804fbc03982Smrg 2805ed6f5d66Smrg# func_lalib_p file 2806fbc03982Smrg# True iff FILE is a libtool '.la' library or '.lo' object file. 2807ed6f5d66Smrg# This function is only a basic sanity check; it will hardly flush out 2808ed6f5d66Smrg# determined imposters. 2809ed6f5d66Smrgfunc_lalib_p () 2810ed6f5d66Smrg{ 2811ed6f5d66Smrg test -f "$1" && 2812fbc03982Smrg $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p 2813ed6f5d66Smrg} 2814ed6f5d66Smrg 2815ed6f5d66Smrg# func_lalib_unsafe_p file 2816fbc03982Smrg# True iff FILE is a libtool '.la' library or '.lo' object file. 2817ed6f5d66Smrg# This function implements the same check as func_lalib_p without 2818ed6f5d66Smrg# resorting to external programs. To this end, it redirects stdin and 2819ed6f5d66Smrg# closes it afterwards, without saving the original file descriptor. 2820ed6f5d66Smrg# As a safety measure, use it only where a negative result would be 2821fbc03982Smrg# fatal anyway. Works if 'file' does not exist. 2822ed6f5d66Smrgfunc_lalib_unsafe_p () 2823ed6f5d66Smrg{ 2824ed6f5d66Smrg lalib_p=no 2825ed6f5d66Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 2826ed6f5d66Smrg for lalib_p_l in 1 2 3 4 2827ed6f5d66Smrg do 2828ed6f5d66Smrg read lalib_p_line 2829fbc03982Smrg case $lalib_p_line in 2830ed6f5d66Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 2831ed6f5d66Smrg esac 2832ed6f5d66Smrg done 2833ed6f5d66Smrg exec 0<&5 5<&- 2834ed6f5d66Smrg fi 2835fbc03982Smrg test yes = "$lalib_p" 2836ed6f5d66Smrg} 2837ed6f5d66Smrg 2838ed6f5d66Smrg# func_ltwrapper_script_p file 2839ed6f5d66Smrg# True iff FILE is a libtool wrapper script 2840ed6f5d66Smrg# This function is only a basic sanity check; it will hardly flush out 2841ed6f5d66Smrg# determined imposters. 2842ed6f5d66Smrgfunc_ltwrapper_script_p () 2843ed6f5d66Smrg{ 2844fbc03982Smrg test -f "$1" && 2845fbc03982Smrg $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p 2846ed6f5d66Smrg} 2847ed6f5d66Smrg 2848ed6f5d66Smrg# func_ltwrapper_executable_p file 2849ed6f5d66Smrg# True iff FILE is a libtool wrapper executable 2850ed6f5d66Smrg# This function is only a basic sanity check; it will hardly flush out 2851ed6f5d66Smrg# determined imposters. 2852ed6f5d66Smrgfunc_ltwrapper_executable_p () 2853ed6f5d66Smrg{ 2854ed6f5d66Smrg func_ltwrapper_exec_suffix= 2855ed6f5d66Smrg case $1 in 2856ed6f5d66Smrg *.exe) ;; 2857ed6f5d66Smrg *) func_ltwrapper_exec_suffix=.exe ;; 2858ed6f5d66Smrg esac 2859ed6f5d66Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 2860ed6f5d66Smrg} 2861ed6f5d66Smrg 2862ed6f5d66Smrg# func_ltwrapper_scriptname file 2863ed6f5d66Smrg# Assumes file is an ltwrapper_executable 2864ed6f5d66Smrg# uses $file to determine the appropriate filename for a 2865ed6f5d66Smrg# temporary ltwrapper_script. 2866ed6f5d66Smrgfunc_ltwrapper_scriptname () 2867ed6f5d66Smrg{ 2868ed6f5d66Smrg func_dirname_and_basename "$1" "" "." 2869ed6f5d66Smrg func_stripname '' '.exe' "$func_basename_result" 2870fbc03982Smrg func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper 2871ed6f5d66Smrg} 2872ed6f5d66Smrg 2873ed6f5d66Smrg# func_ltwrapper_p file 2874ed6f5d66Smrg# True iff FILE is a libtool wrapper script or wrapper executable 2875ed6f5d66Smrg# This function is only a basic sanity check; it will hardly flush out 2876ed6f5d66Smrg# determined imposters. 2877ed6f5d66Smrgfunc_ltwrapper_p () 2878ed6f5d66Smrg{ 2879ed6f5d66Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 2880ed6f5d66Smrg} 2881ed6f5d66Smrg 2882ed6f5d66Smrg 2883ed6f5d66Smrg# func_execute_cmds commands fail_cmd 2884ed6f5d66Smrg# Execute tilde-delimited COMMANDS. 2885ed6f5d66Smrg# If FAIL_CMD is given, eval that upon failure. 2886ed6f5d66Smrg# FAIL_CMD may read-access the current command in variable CMD! 2887ed6f5d66Smrgfunc_execute_cmds () 2888ed6f5d66Smrg{ 2889fbc03982Smrg $debug_cmd 2890fbc03982Smrg 2891ed6f5d66Smrg save_ifs=$IFS; IFS='~' 2892ed6f5d66Smrg for cmd in $1; do 2893fbc03982Smrg IFS=$sp$nl 2894ed6f5d66Smrg eval cmd=\"$cmd\" 2895fbc03982Smrg IFS=$save_ifs 2896ed6f5d66Smrg func_show_eval "$cmd" "${2-:}" 2897ed6f5d66Smrg done 2898ed6f5d66Smrg IFS=$save_ifs 2899ed6f5d66Smrg} 2900ed6f5d66Smrg 2901ed6f5d66Smrg 2902ed6f5d66Smrg# func_source file 2903ed6f5d66Smrg# Source FILE, adding directory component if necessary. 2904ed6f5d66Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 2905ed6f5d66Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 2906ed6f5d66Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 2907fbc03982Smrg# 'FILE.' does not work on cygwin managed mounts. 2908ed6f5d66Smrgfunc_source () 2909ed6f5d66Smrg{ 2910fbc03982Smrg $debug_cmd 2911fbc03982Smrg 2912ed6f5d66Smrg case $1 in 2913ed6f5d66Smrg */* | *\\*) . "$1" ;; 2914ed6f5d66Smrg *) . "./$1" ;; 2915ed6f5d66Smrg esac 2916ed6f5d66Smrg} 2917ed6f5d66Smrg 2918ed6f5d66Smrg 2919ed6f5d66Smrg# func_resolve_sysroot PATH 2920ed6f5d66Smrg# Replace a leading = in PATH with a sysroot. Store the result into 2921ed6f5d66Smrg# func_resolve_sysroot_result 2922ed6f5d66Smrgfunc_resolve_sysroot () 2923ed6f5d66Smrg{ 2924ed6f5d66Smrg func_resolve_sysroot_result=$1 2925ed6f5d66Smrg case $func_resolve_sysroot_result in 2926ed6f5d66Smrg =*) 2927ed6f5d66Smrg func_stripname '=' '' "$func_resolve_sysroot_result" 2928ed6f5d66Smrg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 2929ed6f5d66Smrg ;; 2930ed6f5d66Smrg esac 2931ed6f5d66Smrg} 2932ed6f5d66Smrg 2933ed6f5d66Smrg# func_replace_sysroot PATH 2934ed6f5d66Smrg# If PATH begins with the sysroot, replace it with = and 2935ed6f5d66Smrg# store the result into func_replace_sysroot_result. 2936ed6f5d66Smrgfunc_replace_sysroot () 2937ed6f5d66Smrg{ 2938fbc03982Smrg case $lt_sysroot:$1 in 2939ed6f5d66Smrg ?*:"$lt_sysroot"*) 2940ed6f5d66Smrg func_stripname "$lt_sysroot" '' "$1" 2941fbc03982Smrg func_replace_sysroot_result='='$func_stripname_result 2942ed6f5d66Smrg ;; 2943ed6f5d66Smrg *) 2944ed6f5d66Smrg # Including no sysroot. 2945ed6f5d66Smrg func_replace_sysroot_result=$1 2946ed6f5d66Smrg ;; 2947ed6f5d66Smrg esac 2948ed6f5d66Smrg} 2949ed6f5d66Smrg 2950ed6f5d66Smrg# func_infer_tag arg 2951ed6f5d66Smrg# Infer tagged configuration to use if any are available and 2952ed6f5d66Smrg# if one wasn't chosen via the "--tag" command line option. 2953ed6f5d66Smrg# Only attempt this if the compiler in the base compile 2954ed6f5d66Smrg# command doesn't match the default compiler. 2955ed6f5d66Smrg# arg is usually of the form 'gcc ...' 2956ed6f5d66Smrgfunc_infer_tag () 2957ed6f5d66Smrg{ 2958fbc03982Smrg $debug_cmd 2959fbc03982Smrg 2960ed6f5d66Smrg if test -n "$available_tags" && test -z "$tagname"; then 2961ed6f5d66Smrg CC_quoted= 2962ed6f5d66Smrg for arg in $CC; do 2963ed6f5d66Smrg func_append_quoted CC_quoted "$arg" 2964ed6f5d66Smrg done 2965ed6f5d66Smrg CC_expanded=`func_echo_all $CC` 2966ed6f5d66Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 2967ed6f5d66Smrg case $@ in 2968ed6f5d66Smrg # Blanks in the command may have been stripped by the calling shell, 2969ed6f5d66Smrg # but not from the CC environment variable when configure was run. 2970ed6f5d66Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2971ed6f5d66Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 2972ed6f5d66Smrg # Blanks at the start of $base_compile will cause this to fail 2973ed6f5d66Smrg # if we don't check for them as well. 2974ed6f5d66Smrg *) 2975ed6f5d66Smrg for z in $available_tags; do 2976ed6f5d66Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 2977ed6f5d66Smrg # Evaluate the configuration. 2978fbc03982Smrg eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 2979ed6f5d66Smrg CC_quoted= 2980ed6f5d66Smrg for arg in $CC; do 2981ed6f5d66Smrg # Double-quote args containing other shell metacharacters. 2982ed6f5d66Smrg func_append_quoted CC_quoted "$arg" 2983ed6f5d66Smrg done 2984ed6f5d66Smrg CC_expanded=`func_echo_all $CC` 2985ed6f5d66Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 2986ed6f5d66Smrg case "$@ " in 2987ed6f5d66Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2988ed6f5d66Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 2989ed6f5d66Smrg # The compiler in the base compile command matches 2990ed6f5d66Smrg # the one in the tagged configuration. 2991ed6f5d66Smrg # Assume this is the tagged configuration we want. 2992ed6f5d66Smrg tagname=$z 2993ed6f5d66Smrg break 2994ed6f5d66Smrg ;; 2995ed6f5d66Smrg esac 2996ed6f5d66Smrg fi 2997ed6f5d66Smrg done 2998ed6f5d66Smrg # If $tagname still isn't set, then no tagged configuration 2999ed6f5d66Smrg # was found and let the user know that the "--tag" command 3000ed6f5d66Smrg # line option must be used. 3001ed6f5d66Smrg if test -z "$tagname"; then 3002ed6f5d66Smrg func_echo "unable to infer tagged configuration" 3003fbc03982Smrg func_fatal_error "specify a tag with '--tag'" 3004ed6f5d66Smrg# else 3005ed6f5d66Smrg# func_verbose "using $tagname tagged configuration" 3006ed6f5d66Smrg fi 3007ed6f5d66Smrg ;; 3008ed6f5d66Smrg esac 3009ed6f5d66Smrg fi 3010ed6f5d66Smrg} 3011ed6f5d66Smrg 3012ed6f5d66Smrg 3013ed6f5d66Smrg 3014ed6f5d66Smrg# func_write_libtool_object output_name pic_name nonpic_name 3015ed6f5d66Smrg# Create a libtool object file (analogous to a ".la" file), 3016ed6f5d66Smrg# but don't create it if we're doing a dry run. 3017ed6f5d66Smrgfunc_write_libtool_object () 3018ed6f5d66Smrg{ 3019fbc03982Smrg write_libobj=$1 3020fbc03982Smrg if test yes = "$build_libtool_libs"; then 3021fbc03982Smrg write_lobj=\'$2\' 3022ed6f5d66Smrg else 3023ed6f5d66Smrg write_lobj=none 3024ed6f5d66Smrg fi 3025ed6f5d66Smrg 3026fbc03982Smrg if test yes = "$build_old_libs"; then 3027fbc03982Smrg write_oldobj=\'$3\' 3028ed6f5d66Smrg else 3029ed6f5d66Smrg write_oldobj=none 3030ed6f5d66Smrg fi 3031ed6f5d66Smrg 3032ed6f5d66Smrg $opt_dry_run || { 3033ed6f5d66Smrg cat >${write_libobj}T <<EOF 3034ed6f5d66Smrg# $write_libobj - a libtool object file 3035fbc03982Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 3036ed6f5d66Smrg# 3037ed6f5d66Smrg# Please DO NOT delete this file! 3038ed6f5d66Smrg# It is necessary for linking the library. 3039ed6f5d66Smrg 3040ed6f5d66Smrg# Name of the PIC object. 3041ed6f5d66Smrgpic_object=$write_lobj 3042ed6f5d66Smrg 3043ed6f5d66Smrg# Name of the non-PIC object 3044ed6f5d66Smrgnon_pic_object=$write_oldobj 3045ed6f5d66Smrg 3046ed6f5d66SmrgEOF 3047fbc03982Smrg $MV "${write_libobj}T" "$write_libobj" 3048ed6f5d66Smrg } 3049ed6f5d66Smrg} 3050ed6f5d66Smrg 3051ed6f5d66Smrg 3052ed6f5d66Smrg################################################## 3053ed6f5d66Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 3054ed6f5d66Smrg################################################## 3055ed6f5d66Smrg 3056ed6f5d66Smrg# func_convert_core_file_wine_to_w32 ARG 3057ed6f5d66Smrg# Helper function used by file name conversion functions when $build is *nix, 3058a3680546Smrg# and $host is mingw, windows, cygwin, or some other w32 environment. Relies on a 3059ed6f5d66Smrg# correctly configured wine environment available, with the winepath program 3060ed6f5d66Smrg# in $build's $PATH. 3061ed6f5d66Smrg# 3062ed6f5d66Smrg# ARG is the $build file name to be converted to w32 format. 3063ed6f5d66Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will 3064ed6f5d66Smrg# be empty on error (or when ARG is empty) 3065ed6f5d66Smrgfunc_convert_core_file_wine_to_w32 () 3066ed6f5d66Smrg{ 3067fbc03982Smrg $debug_cmd 3068fbc03982Smrg 3069fbc03982Smrg func_convert_core_file_wine_to_w32_result=$1 3070ed6f5d66Smrg if test -n "$1"; then 3071ed6f5d66Smrg # Unfortunately, winepath does not exit with a non-zero error code, so we 3072ed6f5d66Smrg # are forced to check the contents of stdout. On the other hand, if the 3073ed6f5d66Smrg # command is not found, the shell will set an exit code of 127 and print 3074ed6f5d66Smrg # *an error message* to stdout. So we must check for both error code of 3075ed6f5d66Smrg # zero AND non-empty stdout, which explains the odd construction: 3076ed6f5d66Smrg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 3077fbc03982Smrg if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then 3078ed6f5d66Smrg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 3079fbc03982Smrg $SED -e "$sed_naive_backslashify"` 3080ed6f5d66Smrg else 3081ed6f5d66Smrg func_convert_core_file_wine_to_w32_result= 3082ed6f5d66Smrg fi 3083ed6f5d66Smrg fi 3084ed6f5d66Smrg} 3085ed6f5d66Smrg# end: func_convert_core_file_wine_to_w32 3086ed6f5d66Smrg 3087ed6f5d66Smrg 3088ed6f5d66Smrg# func_convert_core_path_wine_to_w32 ARG 3089ed6f5d66Smrg# Helper function used by path conversion functions when $build is *nix, and 3090a3680546Smrg# $host is mingw, windows, cygwin, or some other w32 environment. Relies on a 3091a3680546Smrg# correctly configured wine environment available, with the winepath program 3092a3680546Smrg# in $build's $PATH. Assumes ARG has no leading or trailing path separator 3093a3680546Smrg# characters. 3094ed6f5d66Smrg# 3095ed6f5d66Smrg# ARG is path to be converted from $build format to win32. 3096ed6f5d66Smrg# Result is available in $func_convert_core_path_wine_to_w32_result. 3097ed6f5d66Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names 3098ed6f5d66Smrg# are convertible, then the result may be empty. 3099ed6f5d66Smrgfunc_convert_core_path_wine_to_w32 () 3100ed6f5d66Smrg{ 3101fbc03982Smrg $debug_cmd 3102fbc03982Smrg 3103ed6f5d66Smrg # unfortunately, winepath doesn't convert paths, only file names 3104fbc03982Smrg func_convert_core_path_wine_to_w32_result= 3105ed6f5d66Smrg if test -n "$1"; then 3106ed6f5d66Smrg oldIFS=$IFS 3107ed6f5d66Smrg IFS=: 3108ed6f5d66Smrg for func_convert_core_path_wine_to_w32_f in $1; do 3109ed6f5d66Smrg IFS=$oldIFS 3110ed6f5d66Smrg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 3111fbc03982Smrg if test -n "$func_convert_core_file_wine_to_w32_result"; then 3112ed6f5d66Smrg if test -z "$func_convert_core_path_wine_to_w32_result"; then 3113fbc03982Smrg func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result 3114ed6f5d66Smrg else 3115ed6f5d66Smrg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 3116ed6f5d66Smrg fi 3117ed6f5d66Smrg fi 3118ed6f5d66Smrg done 3119ed6f5d66Smrg IFS=$oldIFS 3120ed6f5d66Smrg fi 3121ed6f5d66Smrg} 3122ed6f5d66Smrg# end: func_convert_core_path_wine_to_w32 3123ed6f5d66Smrg 3124ed6f5d66Smrg 3125ed6f5d66Smrg# func_cygpath ARGS... 3126ed6f5d66Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 3127ed6f5d66Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 3128ed6f5d66Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 3129ed6f5d66Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input 3130ed6f5d66Smrg# file name or path is assumed to be in w32 format, as previously converted 3131ed6f5d66Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name 3132ed6f5d66Smrg# or path in func_cygpath_result (input file name or path is assumed to be in 3133ed6f5d66Smrg# Cygwin format). Returns an empty string on error. 3134ed6f5d66Smrg# 3135ed6f5d66Smrg# ARGS are passed to cygpath, with the last one being the file name or path to 3136ed6f5d66Smrg# be converted. 3137ed6f5d66Smrg# 3138ed6f5d66Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 3139ed6f5d66Smrg# environment variable; do not put it in $PATH. 3140ed6f5d66Smrgfunc_cygpath () 3141ed6f5d66Smrg{ 3142fbc03982Smrg $debug_cmd 3143fbc03982Smrg 3144ed6f5d66Smrg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 3145ed6f5d66Smrg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 3146ed6f5d66Smrg if test "$?" -ne 0; then 3147ed6f5d66Smrg # on failure, ensure result is empty 3148ed6f5d66Smrg func_cygpath_result= 3149ed6f5d66Smrg fi 3150ed6f5d66Smrg else 3151ed6f5d66Smrg func_cygpath_result= 3152fbc03982Smrg func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" 3153ed6f5d66Smrg fi 3154ed6f5d66Smrg} 3155ed6f5d66Smrg#end: func_cygpath 3156ed6f5d66Smrg 3157ed6f5d66Smrg 3158ed6f5d66Smrg# func_convert_core_msys_to_w32 ARG 3159ed6f5d66Smrg# Convert file name or path ARG from MSYS format to w32 format. Return 3160ed6f5d66Smrg# result in func_convert_core_msys_to_w32_result. 3161ed6f5d66Smrgfunc_convert_core_msys_to_w32 () 3162ed6f5d66Smrg{ 3163fbc03982Smrg $debug_cmd 3164fbc03982Smrg 3165ed6f5d66Smrg # awkward: cmd appends spaces to result 3166ed6f5d66Smrg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 3167fbc03982Smrg $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` 3168ed6f5d66Smrg} 3169ed6f5d66Smrg#end: func_convert_core_msys_to_w32 3170ed6f5d66Smrg 3171ed6f5d66Smrg 3172ed6f5d66Smrg# func_convert_file_check ARG1 ARG2 3173ed6f5d66Smrg# Verify that ARG1 (a file name in $build format) was converted to $host 3174ed6f5d66Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting 3175ed6f5d66Smrg# func_to_host_file_result to ARG1). 3176ed6f5d66Smrgfunc_convert_file_check () 3177ed6f5d66Smrg{ 3178fbc03982Smrg $debug_cmd 3179fbc03982Smrg 3180fbc03982Smrg if test -z "$2" && test -n "$1"; then 3181ed6f5d66Smrg func_error "Could not determine host file name corresponding to" 3182fbc03982Smrg func_error " '$1'" 3183ed6f5d66Smrg func_error "Continuing, but uninstalled executables may not work." 3184ed6f5d66Smrg # Fallback: 3185fbc03982Smrg func_to_host_file_result=$1 3186ed6f5d66Smrg fi 3187ed6f5d66Smrg} 3188ed6f5d66Smrg# end func_convert_file_check 3189ed6f5d66Smrg 3190ed6f5d66Smrg 3191ed6f5d66Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 3192ed6f5d66Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host 3193ed6f5d66Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 3194ed6f5d66Smrg# func_to_host_file_result to a simplistic fallback value (see below). 3195ed6f5d66Smrgfunc_convert_path_check () 3196ed6f5d66Smrg{ 3197fbc03982Smrg $debug_cmd 3198fbc03982Smrg 3199ed6f5d66Smrg if test -z "$4" && test -n "$3"; then 3200ed6f5d66Smrg func_error "Could not determine the host path corresponding to" 3201fbc03982Smrg func_error " '$3'" 3202ed6f5d66Smrg func_error "Continuing, but uninstalled executables may not work." 3203ed6f5d66Smrg # Fallback. This is a deliberately simplistic "conversion" and 3204ed6f5d66Smrg # should not be "improved". See libtool.info. 3205ed6f5d66Smrg if test "x$1" != "x$2"; then 3206ed6f5d66Smrg lt_replace_pathsep_chars="s|$1|$2|g" 3207ed6f5d66Smrg func_to_host_path_result=`echo "$3" | 3208ed6f5d66Smrg $SED -e "$lt_replace_pathsep_chars"` 3209ed6f5d66Smrg else 3210fbc03982Smrg func_to_host_path_result=$3 3211ed6f5d66Smrg fi 3212ed6f5d66Smrg fi 3213ed6f5d66Smrg} 3214ed6f5d66Smrg# end func_convert_path_check 3215ed6f5d66Smrg 3216ed6f5d66Smrg 3217ed6f5d66Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 3218ed6f5d66Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 3219ed6f5d66Smrg# and appending REPL if ORIG matches BACKPAT. 3220ed6f5d66Smrgfunc_convert_path_front_back_pathsep () 3221ed6f5d66Smrg{ 3222fbc03982Smrg $debug_cmd 3223fbc03982Smrg 3224ed6f5d66Smrg case $4 in 3225fbc03982Smrg $1 ) func_to_host_path_result=$3$func_to_host_path_result 3226ed6f5d66Smrg ;; 3227ed6f5d66Smrg esac 3228ed6f5d66Smrg case $4 in 3229ed6f5d66Smrg $2 ) func_append func_to_host_path_result "$3" 3230ed6f5d66Smrg ;; 3231ed6f5d66Smrg esac 3232ed6f5d66Smrg} 3233ed6f5d66Smrg# end func_convert_path_front_back_pathsep 3234ed6f5d66Smrg 3235ed6f5d66Smrg 3236a3680546Smrg# func_convert_delimited_path PATH ORIG_DELIMITER NEW_DELIMITER 3237a3680546Smrg# Replaces a delimiter for a given path. 3238a3680546Smrgfunc_convert_delimited_path () 3239a3680546Smrg{ 3240a3680546Smrg converted_path=`$ECHO "$1" | $SED "s#$2#$3#g"` 3241a3680546Smrg} 3242a3680546Smrg# end func_convert_delimited_path 3243a3680546Smrg 3244a3680546Smrg 3245ed6f5d66Smrg################################################## 3246ed6f5d66Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS # 3247ed6f5d66Smrg################################################## 3248fbc03982Smrg# invoked via '$to_host_file_cmd ARG' 3249ed6f5d66Smrg# 3250ed6f5d66Smrg# In each case, ARG is the path to be converted from $build to $host format. 3251ed6f5d66Smrg# Result will be available in $func_to_host_file_result. 3252ed6f5d66Smrg 3253ed6f5d66Smrg 3254ed6f5d66Smrg# func_to_host_file ARG 3255ed6f5d66Smrg# Converts the file name ARG from $build format to $host format. Return result 3256ed6f5d66Smrg# in func_to_host_file_result. 3257ed6f5d66Smrgfunc_to_host_file () 3258ed6f5d66Smrg{ 3259fbc03982Smrg $debug_cmd 3260fbc03982Smrg 3261ed6f5d66Smrg $to_host_file_cmd "$1" 3262ed6f5d66Smrg} 3263ed6f5d66Smrg# end func_to_host_file 3264ed6f5d66Smrg 3265ed6f5d66Smrg 3266ed6f5d66Smrg# func_to_tool_file ARG LAZY 3267ed6f5d66Smrg# converts the file name ARG from $build format to toolchain format. Return 3268ed6f5d66Smrg# result in func_to_tool_file_result. If the conversion in use is listed 3269ed6f5d66Smrg# in (the comma separated) LAZY, no conversion takes place. 3270ed6f5d66Smrgfunc_to_tool_file () 3271ed6f5d66Smrg{ 3272fbc03982Smrg $debug_cmd 3273fbc03982Smrg 3274ed6f5d66Smrg case ,$2, in 3275ed6f5d66Smrg *,"$to_tool_file_cmd",*) 3276ed6f5d66Smrg func_to_tool_file_result=$1 3277ed6f5d66Smrg ;; 3278ed6f5d66Smrg *) 3279ed6f5d66Smrg $to_tool_file_cmd "$1" 3280ed6f5d66Smrg func_to_tool_file_result=$func_to_host_file_result 3281ed6f5d66Smrg ;; 3282ed6f5d66Smrg esac 3283ed6f5d66Smrg} 3284ed6f5d66Smrg# end func_to_tool_file 3285ed6f5d66Smrg 3286ed6f5d66Smrg 3287ed6f5d66Smrg# func_convert_file_noop ARG 3288ed6f5d66Smrg# Copy ARG to func_to_host_file_result. 3289ed6f5d66Smrgfunc_convert_file_noop () 3290ed6f5d66Smrg{ 3291fbc03982Smrg func_to_host_file_result=$1 3292ed6f5d66Smrg} 3293ed6f5d66Smrg# end func_convert_file_noop 3294ed6f5d66Smrg 3295ed6f5d66Smrg 3296ed6f5d66Smrg# func_convert_file_msys_to_w32 ARG 3297ed6f5d66Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 3298ed6f5d66Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 3299ed6f5d66Smrg# func_to_host_file_result. 3300ed6f5d66Smrgfunc_convert_file_msys_to_w32 () 3301ed6f5d66Smrg{ 3302fbc03982Smrg $debug_cmd 3303fbc03982Smrg 3304fbc03982Smrg func_to_host_file_result=$1 3305ed6f5d66Smrg if test -n "$1"; then 3306ed6f5d66Smrg func_convert_core_msys_to_w32 "$1" 3307fbc03982Smrg func_to_host_file_result=$func_convert_core_msys_to_w32_result 3308ed6f5d66Smrg fi 3309ed6f5d66Smrg func_convert_file_check "$1" "$func_to_host_file_result" 3310ed6f5d66Smrg} 3311ed6f5d66Smrg# end func_convert_file_msys_to_w32 3312ed6f5d66Smrg 3313ed6f5d66Smrg 3314ed6f5d66Smrg# func_convert_file_cygwin_to_w32 ARG 3315ed6f5d66Smrg# Convert file name ARG from Cygwin to w32 format. Returns result in 3316ed6f5d66Smrg# func_to_host_file_result. 3317ed6f5d66Smrgfunc_convert_file_cygwin_to_w32 () 3318ed6f5d66Smrg{ 3319fbc03982Smrg $debug_cmd 3320fbc03982Smrg 3321fbc03982Smrg func_to_host_file_result=$1 3322ed6f5d66Smrg if test -n "$1"; then 3323ed6f5d66Smrg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 3324ed6f5d66Smrg # LT_CYGPATH in this case. 3325ed6f5d66Smrg func_to_host_file_result=`cygpath -m "$1"` 3326ed6f5d66Smrg fi 3327ed6f5d66Smrg func_convert_file_check "$1" "$func_to_host_file_result" 3328ed6f5d66Smrg} 3329ed6f5d66Smrg# end func_convert_file_cygwin_to_w32 3330ed6f5d66Smrg 3331ed6f5d66Smrg 3332ed6f5d66Smrg# func_convert_file_nix_to_w32 ARG 3333ed6f5d66Smrg# Convert file name ARG from *nix to w32 format. Requires a wine environment 3334ed6f5d66Smrg# and a working winepath. Returns result in func_to_host_file_result. 3335ed6f5d66Smrgfunc_convert_file_nix_to_w32 () 3336ed6f5d66Smrg{ 3337fbc03982Smrg $debug_cmd 3338fbc03982Smrg 3339fbc03982Smrg func_to_host_file_result=$1 3340ed6f5d66Smrg if test -n "$1"; then 3341ed6f5d66Smrg func_convert_core_file_wine_to_w32 "$1" 3342fbc03982Smrg func_to_host_file_result=$func_convert_core_file_wine_to_w32_result 3343ed6f5d66Smrg fi 3344ed6f5d66Smrg func_convert_file_check "$1" "$func_to_host_file_result" 3345ed6f5d66Smrg} 3346ed6f5d66Smrg# end func_convert_file_nix_to_w32 3347ed6f5d66Smrg 3348ed6f5d66Smrg 3349ed6f5d66Smrg# func_convert_file_msys_to_cygwin ARG 3350ed6f5d66Smrg# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3351ed6f5d66Smrg# Returns result in func_to_host_file_result. 3352ed6f5d66Smrgfunc_convert_file_msys_to_cygwin () 3353ed6f5d66Smrg{ 3354fbc03982Smrg $debug_cmd 3355fbc03982Smrg 3356fbc03982Smrg func_to_host_file_result=$1 3357ed6f5d66Smrg if test -n "$1"; then 3358ed6f5d66Smrg func_convert_core_msys_to_w32 "$1" 3359ed6f5d66Smrg func_cygpath -u "$func_convert_core_msys_to_w32_result" 3360fbc03982Smrg func_to_host_file_result=$func_cygpath_result 3361ed6f5d66Smrg fi 3362ed6f5d66Smrg func_convert_file_check "$1" "$func_to_host_file_result" 3363ed6f5d66Smrg} 3364ed6f5d66Smrg# end func_convert_file_msys_to_cygwin 3365ed6f5d66Smrg 3366ed6f5d66Smrg 3367ed6f5d66Smrg# func_convert_file_nix_to_cygwin ARG 3368ed6f5d66Smrg# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 3369ed6f5d66Smrg# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 3370ed6f5d66Smrg# in func_to_host_file_result. 3371ed6f5d66Smrgfunc_convert_file_nix_to_cygwin () 3372ed6f5d66Smrg{ 3373fbc03982Smrg $debug_cmd 3374fbc03982Smrg 3375fbc03982Smrg func_to_host_file_result=$1 3376ed6f5d66Smrg if test -n "$1"; then 3377ed6f5d66Smrg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 3378ed6f5d66Smrg func_convert_core_file_wine_to_w32 "$1" 3379ed6f5d66Smrg func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 3380fbc03982Smrg func_to_host_file_result=$func_cygpath_result 3381ed6f5d66Smrg fi 3382ed6f5d66Smrg func_convert_file_check "$1" "$func_to_host_file_result" 3383ed6f5d66Smrg} 3384ed6f5d66Smrg# end func_convert_file_nix_to_cygwin 3385ed6f5d66Smrg 3386ed6f5d66Smrg 3387ed6f5d66Smrg############################################# 3388ed6f5d66Smrg# $build to $host PATH CONVERSION FUNCTIONS # 3389ed6f5d66Smrg############################################# 3390fbc03982Smrg# invoked via '$to_host_path_cmd ARG' 3391ed6f5d66Smrg# 3392ed6f5d66Smrg# In each case, ARG is the path to be converted from $build to $host format. 3393ed6f5d66Smrg# The result will be available in $func_to_host_path_result. 3394ed6f5d66Smrg# 3395ed6f5d66Smrg# Path separators are also converted from $build format to $host format. If 3396ed6f5d66Smrg# ARG begins or ends with a path separator character, it is preserved (but 3397ed6f5d66Smrg# converted to $host format) on output. 3398ed6f5d66Smrg# 3399ed6f5d66Smrg# All path conversion functions are named using the following convention: 3400ed6f5d66Smrg# file name conversion function : func_convert_file_X_to_Y () 3401ed6f5d66Smrg# path conversion function : func_convert_path_X_to_Y () 3402ed6f5d66Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the 3403ed6f5d66Smrg# same. If conversion functions are added for new $build/$host combinations, 3404ed6f5d66Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd 3405ed6f5d66Smrg# will break. 3406ed6f5d66Smrg 3407ed6f5d66Smrg 3408ed6f5d66Smrg# func_init_to_host_path_cmd 3409ed6f5d66Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the 3410ed6f5d66Smrg# appropriate value, based on the value of $to_host_file_cmd. 3411ed6f5d66Smrgto_host_path_cmd= 3412ed6f5d66Smrgfunc_init_to_host_path_cmd () 3413ed6f5d66Smrg{ 3414fbc03982Smrg $debug_cmd 3415fbc03982Smrg 3416ed6f5d66Smrg if test -z "$to_host_path_cmd"; then 3417ed6f5d66Smrg func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 3418fbc03982Smrg to_host_path_cmd=func_convert_path_$func_stripname_result 3419ed6f5d66Smrg fi 3420ed6f5d66Smrg} 3421ed6f5d66Smrg 3422ed6f5d66Smrg 3423ed6f5d66Smrg# func_to_host_path ARG 3424ed6f5d66Smrg# Converts the path ARG from $build format to $host format. Return result 3425ed6f5d66Smrg# in func_to_host_path_result. 3426ed6f5d66Smrgfunc_to_host_path () 3427ed6f5d66Smrg{ 3428fbc03982Smrg $debug_cmd 3429fbc03982Smrg 3430ed6f5d66Smrg func_init_to_host_path_cmd 3431ed6f5d66Smrg $to_host_path_cmd "$1" 3432ed6f5d66Smrg} 3433ed6f5d66Smrg# end func_to_host_path 3434ed6f5d66Smrg 3435ed6f5d66Smrg 3436ed6f5d66Smrg# func_convert_path_noop ARG 3437ed6f5d66Smrg# Copy ARG to func_to_host_path_result. 3438ed6f5d66Smrgfunc_convert_path_noop () 3439ed6f5d66Smrg{ 3440fbc03982Smrg func_to_host_path_result=$1 3441ed6f5d66Smrg} 3442ed6f5d66Smrg# end func_convert_path_noop 3443ed6f5d66Smrg 3444ed6f5d66Smrg 3445ed6f5d66Smrg# func_convert_path_msys_to_w32 ARG 3446ed6f5d66Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 3447ed6f5d66Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 3448ed6f5d66Smrg# func_to_host_path_result. 3449ed6f5d66Smrgfunc_convert_path_msys_to_w32 () 3450ed6f5d66Smrg{ 3451fbc03982Smrg $debug_cmd 3452fbc03982Smrg 3453fbc03982Smrg func_to_host_path_result=$1 3454ed6f5d66Smrg if test -n "$1"; then 3455ed6f5d66Smrg # Remove leading and trailing path separator characters from ARG. MSYS 3456ed6f5d66Smrg # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 3457ed6f5d66Smrg # and winepath ignores them completely. 3458ed6f5d66Smrg func_stripname : : "$1" 3459ed6f5d66Smrg func_to_host_path_tmp1=$func_stripname_result 3460ed6f5d66Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 3461fbc03982Smrg func_to_host_path_result=$func_convert_core_msys_to_w32_result 3462ed6f5d66Smrg func_convert_path_check : ";" \ 3463ed6f5d66Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3464ed6f5d66Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3465ed6f5d66Smrg fi 3466ed6f5d66Smrg} 3467ed6f5d66Smrg# end func_convert_path_msys_to_w32 3468ed6f5d66Smrg 3469ed6f5d66Smrg 3470ed6f5d66Smrg# func_convert_path_cygwin_to_w32 ARG 3471ed6f5d66Smrg# Convert path ARG from Cygwin to w32 format. Returns result in 3472ed6f5d66Smrg# func_to_host_file_result. 3473ed6f5d66Smrgfunc_convert_path_cygwin_to_w32 () 3474ed6f5d66Smrg{ 3475fbc03982Smrg $debug_cmd 3476fbc03982Smrg 3477fbc03982Smrg func_to_host_path_result=$1 3478ed6f5d66Smrg if test -n "$1"; then 3479ed6f5d66Smrg # See func_convert_path_msys_to_w32: 3480ed6f5d66Smrg func_stripname : : "$1" 3481ed6f5d66Smrg func_to_host_path_tmp1=$func_stripname_result 3482ed6f5d66Smrg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 3483ed6f5d66Smrg func_convert_path_check : ";" \ 3484ed6f5d66Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3485ed6f5d66Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3486ed6f5d66Smrg fi 3487ed6f5d66Smrg} 3488ed6f5d66Smrg# end func_convert_path_cygwin_to_w32 3489ed6f5d66Smrg 3490ed6f5d66Smrg 3491ed6f5d66Smrg# func_convert_path_nix_to_w32 ARG 3492ed6f5d66Smrg# Convert path ARG from *nix to w32 format. Requires a wine environment and 3493ed6f5d66Smrg# a working winepath. Returns result in func_to_host_file_result. 3494ed6f5d66Smrgfunc_convert_path_nix_to_w32 () 3495ed6f5d66Smrg{ 3496fbc03982Smrg $debug_cmd 3497fbc03982Smrg 3498fbc03982Smrg func_to_host_path_result=$1 3499ed6f5d66Smrg if test -n "$1"; then 3500ed6f5d66Smrg # See func_convert_path_msys_to_w32: 3501ed6f5d66Smrg func_stripname : : "$1" 3502ed6f5d66Smrg func_to_host_path_tmp1=$func_stripname_result 3503ed6f5d66Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 3504fbc03982Smrg func_to_host_path_result=$func_convert_core_path_wine_to_w32_result 3505ed6f5d66Smrg func_convert_path_check : ";" \ 3506ed6f5d66Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3507ed6f5d66Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3508ed6f5d66Smrg fi 3509ed6f5d66Smrg} 3510ed6f5d66Smrg# end func_convert_path_nix_to_w32 3511ed6f5d66Smrg 3512ed6f5d66Smrg 3513ed6f5d66Smrg# func_convert_path_msys_to_cygwin ARG 3514ed6f5d66Smrg# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3515ed6f5d66Smrg# Returns result in func_to_host_file_result. 3516ed6f5d66Smrgfunc_convert_path_msys_to_cygwin () 3517ed6f5d66Smrg{ 3518fbc03982Smrg $debug_cmd 3519fbc03982Smrg 3520fbc03982Smrg func_to_host_path_result=$1 3521ed6f5d66Smrg if test -n "$1"; then 3522ed6f5d66Smrg # See func_convert_path_msys_to_w32: 3523ed6f5d66Smrg func_stripname : : "$1" 3524ed6f5d66Smrg func_to_host_path_tmp1=$func_stripname_result 3525ed6f5d66Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 3526ed6f5d66Smrg func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 3527fbc03982Smrg func_to_host_path_result=$func_cygpath_result 3528ed6f5d66Smrg func_convert_path_check : : \ 3529ed6f5d66Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3530ed6f5d66Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3531ed6f5d66Smrg fi 3532ed6f5d66Smrg} 3533ed6f5d66Smrg# end func_convert_path_msys_to_cygwin 3534ed6f5d66Smrg 3535ed6f5d66Smrg 3536ed6f5d66Smrg# func_convert_path_nix_to_cygwin ARG 3537ed6f5d66Smrg# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 3538ed6f5d66Smrg# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 3539ed6f5d66Smrg# func_to_host_file_result. 3540ed6f5d66Smrgfunc_convert_path_nix_to_cygwin () 3541ed6f5d66Smrg{ 3542fbc03982Smrg $debug_cmd 3543fbc03982Smrg 3544fbc03982Smrg func_to_host_path_result=$1 3545ed6f5d66Smrg if test -n "$1"; then 3546ed6f5d66Smrg # Remove leading and trailing path separator characters from 3547ed6f5d66Smrg # ARG. msys behavior is inconsistent here, cygpath turns them 3548ed6f5d66Smrg # into '.;' and ';.', and winepath ignores them completely. 3549ed6f5d66Smrg func_stripname : : "$1" 3550ed6f5d66Smrg func_to_host_path_tmp1=$func_stripname_result 3551ed6f5d66Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 3552ed6f5d66Smrg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 3553fbc03982Smrg func_to_host_path_result=$func_cygpath_result 3554ed6f5d66Smrg func_convert_path_check : : \ 3555ed6f5d66Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3556ed6f5d66Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3557ed6f5d66Smrg fi 3558ed6f5d66Smrg} 3559ed6f5d66Smrg# end func_convert_path_nix_to_cygwin 3560ed6f5d66Smrg 3561ed6f5d66Smrg 3562fbc03982Smrg# func_dll_def_p FILE 3563fbc03982Smrg# True iff FILE is a Windows DLL '.def' file. 3564fbc03982Smrg# Keep in sync with _LT_DLL_DEF_P in libtool.m4 3565fbc03982Smrgfunc_dll_def_p () 3566fbc03982Smrg{ 3567fbc03982Smrg $debug_cmd 3568fbc03982Smrg 3569fbc03982Smrg func_dll_def_p_tmp=`$SED -n \ 3570fbc03982Smrg -e 's/^[ ]*//' \ 3571fbc03982Smrg -e '/^\(;.*\)*$/d' \ 3572fbc03982Smrg -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ 3573fbc03982Smrg -e q \ 3574fbc03982Smrg "$1"` 3575fbc03982Smrg test DEF = "$func_dll_def_p_tmp" 3576fbc03982Smrg} 3577fbc03982Smrg 3578fbc03982Smrg 3579a3680546Smrg# func_reorder_shared_lib_cache DIRS 3580a3680546Smrg# Reorder the shared library cache by unconfiguring previous shared library cache 3581a3680546Smrg# and configuring preferred search directories before previous search directories. 3582a3680546Smrg# Previous shared library cache: /usr/lib /usr/local/lib 3583a3680546Smrg# Preferred search directories: /tmp/testing 3584a3680546Smrg# Reordered shared library cache: /tmp/testing /usr/lib /usr/local/lib 3585a3680546Smrgfunc_reorder_shared_lib_cache () 3586a3680546Smrg{ 3587a3680546Smrg $debug_cmd 3588a3680546Smrg 3589a3680546Smrg case $host_os in 3590a3680546Smrg openbsd*) 3591a3680546Smrg get_search_directories=`PATH="$PATH:/sbin" ldconfig -r | $GREP "search directories" | $SED "s#.*search directories:\ ##g"` 3592a3680546Smrg func_convert_delimited_path "$get_search_directories" ':' '\ ' 3593a3680546Smrg save_search_directories=$converted_path 3594a3680546Smrg func_convert_delimited_path "$1" ':' '\ ' 3595a3680546Smrg 3596a3680546Smrg # Ensure directories exist 3597a3680546Smrg for dir in $converted_path; do 3598a3680546Smrg # Ensure each directory is an absolute path 3599a3680546Smrg case $dir in 3600a3680546Smrg /*) ;; 3601a3680546Smrg *) func_error "Directory '$dir' is not an absolute path" 3602a3680546Smrg exit $EXIT_FAILURE ;; 3603a3680546Smrg esac 3604a3680546Smrg # Ensure no trailing slashes 3605a3680546Smrg func_stripname '' '/' "$dir" 3606a3680546Smrg dir=$func_stripname_result 3607a3680546Smrg if test -d "$dir"; then 3608a3680546Smrg if test -n "$preferred_search_directories"; then 3609a3680546Smrg preferred_search_directories="$preferred_search_directories $dir" 3610a3680546Smrg else 3611a3680546Smrg preferred_search_directories=$dir 3612a3680546Smrg fi 3613a3680546Smrg else 3614a3680546Smrg func_error "Directory '$dir' does not exist" 3615a3680546Smrg exit $EXIT_FAILURE 3616a3680546Smrg fi 3617a3680546Smrg done 3618a3680546Smrg 3619a3680546Smrg PATH="$PATH:/sbin" ldconfig -U $save_search_directories 3620a3680546Smrg PATH="$PATH:/sbin" ldconfig -m $preferred_search_directories $save_search_directories 3621a3680546Smrg get_search_directories=`PATH="$PATH:/sbin" ldconfig -r | $GREP "search directories" | $SED "s#.*search directories:\ ##g"` 3622a3680546Smrg func_convert_delimited_path "$get_search_directories" ':' '\ ' 3623a3680546Smrg reordered_search_directories=$converted_path 3624a3680546Smrg 3625a3680546Smrg $ECHO "Original: $save_search_directories" 3626a3680546Smrg $ECHO "Reordered: $reordered_search_directories" 3627a3680546Smrg exit $EXIT_SUCCESS 3628a3680546Smrg ;; 3629a3680546Smrg *) 3630a3680546Smrg func_error "--reorder-cache is not supported for host_os=$host_os." 3631a3680546Smrg exit $EXIT_FAILURE 3632a3680546Smrg ;; 3633a3680546Smrg esac 3634a3680546Smrg} 3635a3680546Smrg# end func_reorder_shared_lib_cache 3636a3680546Smrg 3637a3680546Smrg 3638ed6f5d66Smrg# func_mode_compile arg... 3639ed6f5d66Smrgfunc_mode_compile () 3640ed6f5d66Smrg{ 3641fbc03982Smrg $debug_cmd 3642fbc03982Smrg 3643ed6f5d66Smrg # Get the compilation command and the source file. 3644ed6f5d66Smrg base_compile= 3645fbc03982Smrg srcfile=$nonopt # always keep a non-empty value in "srcfile" 3646ed6f5d66Smrg suppress_opt=yes 3647ed6f5d66Smrg suppress_output= 3648ed6f5d66Smrg arg_mode=normal 3649ed6f5d66Smrg libobj= 3650ed6f5d66Smrg later= 3651ed6f5d66Smrg pie_flag= 3652ed6f5d66Smrg 3653ed6f5d66Smrg for arg 3654ed6f5d66Smrg do 3655ed6f5d66Smrg case $arg_mode in 3656ed6f5d66Smrg arg ) 3657ed6f5d66Smrg # do not "continue". Instead, add this to base_compile 3658fbc03982Smrg lastarg=$arg 3659ed6f5d66Smrg arg_mode=normal 3660ed6f5d66Smrg ;; 3661ed6f5d66Smrg 3662ed6f5d66Smrg target ) 3663fbc03982Smrg libobj=$arg 3664ed6f5d66Smrg arg_mode=normal 3665ed6f5d66Smrg continue 3666ed6f5d66Smrg ;; 3667ed6f5d66Smrg 3668ed6f5d66Smrg normal ) 3669ed6f5d66Smrg # Accept any command-line options. 3670ed6f5d66Smrg case $arg in 3671ed6f5d66Smrg -o) 3672ed6f5d66Smrg test -n "$libobj" && \ 3673fbc03982Smrg func_fatal_error "you cannot specify '-o' more than once" 3674ed6f5d66Smrg arg_mode=target 3675ed6f5d66Smrg continue 3676ed6f5d66Smrg ;; 3677ed6f5d66Smrg 3678ed6f5d66Smrg -pie | -fpie | -fPIE) 3679ed6f5d66Smrg func_append pie_flag " $arg" 3680ed6f5d66Smrg continue 3681ed6f5d66Smrg ;; 3682ed6f5d66Smrg 3683ed6f5d66Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 3684ed6f5d66Smrg func_append later " $arg" 3685ed6f5d66Smrg continue 3686ed6f5d66Smrg ;; 3687ed6f5d66Smrg 3688ed6f5d66Smrg -no-suppress) 3689ed6f5d66Smrg suppress_opt=no 3690ed6f5d66Smrg continue 3691ed6f5d66Smrg ;; 3692ed6f5d66Smrg 3693ed6f5d66Smrg -Xcompiler) 3694ed6f5d66Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 3695ed6f5d66Smrg continue # The current "srcfile" will either be retained or 3696ed6f5d66Smrg ;; # replaced later. I would guess that would be a bug. 3697ed6f5d66Smrg 3698ed6f5d66Smrg -Wc,*) 3699ed6f5d66Smrg func_stripname '-Wc,' '' "$arg" 3700ed6f5d66Smrg args=$func_stripname_result 3701ed6f5d66Smrg lastarg= 3702fbc03982Smrg save_ifs=$IFS; IFS=, 3703ed6f5d66Smrg for arg in $args; do 3704fbc03982Smrg IFS=$save_ifs 3705ed6f5d66Smrg func_append_quoted lastarg "$arg" 3706ed6f5d66Smrg done 3707fbc03982Smrg IFS=$save_ifs 3708ed6f5d66Smrg func_stripname ' ' '' "$lastarg" 3709ed6f5d66Smrg lastarg=$func_stripname_result 3710ed6f5d66Smrg 3711ed6f5d66Smrg # Add the arguments to base_compile. 3712ed6f5d66Smrg func_append base_compile " $lastarg" 3713ed6f5d66Smrg continue 3714ed6f5d66Smrg ;; 3715ed6f5d66Smrg 3716ed6f5d66Smrg *) 3717ed6f5d66Smrg # Accept the current argument as the source file. 3718ed6f5d66Smrg # The previous "srcfile" becomes the current argument. 3719ed6f5d66Smrg # 3720fbc03982Smrg lastarg=$srcfile 3721fbc03982Smrg srcfile=$arg 3722ed6f5d66Smrg ;; 3723ed6f5d66Smrg esac # case $arg 3724ed6f5d66Smrg ;; 3725ed6f5d66Smrg esac # case $arg_mode 3726ed6f5d66Smrg 3727ed6f5d66Smrg # Aesthetically quote the previous argument. 3728ed6f5d66Smrg func_append_quoted base_compile "$lastarg" 3729ed6f5d66Smrg done # for arg 3730ed6f5d66Smrg 3731ed6f5d66Smrg case $arg_mode in 3732ed6f5d66Smrg arg) 3733ed6f5d66Smrg func_fatal_error "you must specify an argument for -Xcompile" 3734ed6f5d66Smrg ;; 3735ed6f5d66Smrg target) 3736fbc03982Smrg func_fatal_error "you must specify a target with '-o'" 3737ed6f5d66Smrg ;; 3738ed6f5d66Smrg *) 3739ed6f5d66Smrg # Get the name of the library object. 3740ed6f5d66Smrg test -z "$libobj" && { 3741ed6f5d66Smrg func_basename "$srcfile" 3742fbc03982Smrg libobj=$func_basename_result 3743ed6f5d66Smrg } 3744ed6f5d66Smrg ;; 3745ed6f5d66Smrg esac 3746ed6f5d66Smrg 3747ed6f5d66Smrg # Recognize several different file suffixes. 3748ed6f5d66Smrg # If the user specifies -o file.o, it is replaced with file.lo 3749ed6f5d66Smrg case $libobj in 3750ed6f5d66Smrg *.[cCFSifmso] | \ 3751ed6f5d66Smrg *.ada | *.adb | *.ads | *.asm | \ 3752ed6f5d66Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 3753ed6f5d66Smrg *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 3754ed6f5d66Smrg func_xform "$libobj" 3755ed6f5d66Smrg libobj=$func_xform_result 3756ed6f5d66Smrg ;; 3757ed6f5d66Smrg esac 3758ed6f5d66Smrg 3759ed6f5d66Smrg case $libobj in 3760ed6f5d66Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 3761ed6f5d66Smrg *) 3762fbc03982Smrg func_fatal_error "cannot determine name of library object from '$libobj'" 3763ed6f5d66Smrg ;; 3764ed6f5d66Smrg esac 3765ed6f5d66Smrg 3766ed6f5d66Smrg func_infer_tag $base_compile 3767ed6f5d66Smrg 3768ed6f5d66Smrg for arg in $later; do 3769ed6f5d66Smrg case $arg in 3770ed6f5d66Smrg -shared) 3771fbc03982Smrg test yes = "$build_libtool_libs" \ 3772fbc03982Smrg || func_fatal_configuration "cannot build a shared library" 3773ed6f5d66Smrg build_old_libs=no 3774ed6f5d66Smrg continue 3775ed6f5d66Smrg ;; 3776ed6f5d66Smrg 3777ed6f5d66Smrg -static) 3778ed6f5d66Smrg build_libtool_libs=no 3779ed6f5d66Smrg build_old_libs=yes 3780ed6f5d66Smrg continue 3781ed6f5d66Smrg ;; 3782ed6f5d66Smrg 3783ed6f5d66Smrg -prefer-pic) 3784ed6f5d66Smrg pic_mode=yes 3785ed6f5d66Smrg continue 3786ed6f5d66Smrg ;; 3787ed6f5d66Smrg 3788ed6f5d66Smrg -prefer-non-pic) 3789ed6f5d66Smrg pic_mode=no 3790ed6f5d66Smrg continue 3791ed6f5d66Smrg ;; 3792ed6f5d66Smrg esac 3793ed6f5d66Smrg done 3794ed6f5d66Smrg 37953d05230fSmrg func_quote_arg pretty "$libobj" 37963d05230fSmrg test "X$libobj" != "X$func_quote_arg_result" \ 3797ed6f5d66Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 3798fbc03982Smrg && func_warning "libobj name '$libobj' may not contain shell special characters." 3799ed6f5d66Smrg func_dirname_and_basename "$obj" "/" "" 3800fbc03982Smrg objname=$func_basename_result 3801fbc03982Smrg xdir=$func_dirname_result 3802fbc03982Smrg lobj=$xdir$objdir/$objname 3803ed6f5d66Smrg 3804ed6f5d66Smrg test -z "$base_compile" && \ 3805ed6f5d66Smrg func_fatal_help "you must specify a compilation command" 3806ed6f5d66Smrg 3807ed6f5d66Smrg # Delete any leftover library objects. 3808fbc03982Smrg if test yes = "$build_old_libs"; then 3809ed6f5d66Smrg removelist="$obj $lobj $libobj ${libobj}T" 3810ed6f5d66Smrg else 3811ed6f5d66Smrg removelist="$lobj $libobj ${libobj}T" 3812ed6f5d66Smrg fi 3813ed6f5d66Smrg 3814ed6f5d66Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 3815ed6f5d66Smrg case $host_os in 3816a3680546Smrg cygwin* | mingw* | windows* | pw32* | os2* | cegcc*) 3817ed6f5d66Smrg pic_mode=default 3818ed6f5d66Smrg ;; 3819ed6f5d66Smrg esac 3820fbc03982Smrg if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then 3821ed6f5d66Smrg # non-PIC code in shared libraries is not supported 3822ed6f5d66Smrg pic_mode=default 3823ed6f5d66Smrg fi 3824ed6f5d66Smrg 3825ed6f5d66Smrg # Calculate the filename of the output object if compiler does 3826ed6f5d66Smrg # not support -o with -c 3827fbc03982Smrg if test no = "$compiler_c_o"; then 3828fbc03982Smrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext 3829fbc03982Smrg lockfile=$output_obj.lock 3830ed6f5d66Smrg else 3831ed6f5d66Smrg output_obj= 3832ed6f5d66Smrg need_locks=no 3833ed6f5d66Smrg lockfile= 3834ed6f5d66Smrg fi 3835ed6f5d66Smrg 3836ed6f5d66Smrg # Lock this critical section if it is needed 3837ed6f5d66Smrg # We use this script file to make the link, it avoids creating a new file 3838fbc03982Smrg if test yes = "$need_locks"; then 3839ed6f5d66Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 3840ed6f5d66Smrg func_echo "Waiting for $lockfile to be removed" 3841ed6f5d66Smrg sleep 2 3842ed6f5d66Smrg done 3843fbc03982Smrg elif test warn = "$need_locks"; then 3844ed6f5d66Smrg if test -f "$lockfile"; then 3845ed6f5d66Smrg $ECHO "\ 3846ed6f5d66Smrg*** ERROR, $lockfile exists and contains: 3847ed6f5d66Smrg`cat $lockfile 2>/dev/null` 3848ed6f5d66Smrg 3849ed6f5d66SmrgThis indicates that another process is trying to use the same 3850ed6f5d66Smrgtemporary object file, and libtool could not work around it because 3851fbc03982Smrgyour compiler does not support '-c' and '-o' together. If you 3852ed6f5d66Smrgrepeat this compilation, it may succeed, by chance, but you had better 3853ed6f5d66Smrgavoid parallel builds (make -j) in this platform, or get a better 3854ed6f5d66Smrgcompiler." 3855ed6f5d66Smrg 3856ed6f5d66Smrg $opt_dry_run || $RM $removelist 3857ed6f5d66Smrg exit $EXIT_FAILURE 3858ed6f5d66Smrg fi 3859ed6f5d66Smrg func_append removelist " $output_obj" 3860ed6f5d66Smrg $ECHO "$srcfile" > "$lockfile" 3861ed6f5d66Smrg fi 3862ed6f5d66Smrg 3863ed6f5d66Smrg $opt_dry_run || $RM $removelist 3864ed6f5d66Smrg func_append removelist " $lockfile" 3865ed6f5d66Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 3866ed6f5d66Smrg 3867ed6f5d66Smrg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 3868ed6f5d66Smrg srcfile=$func_to_tool_file_result 38693d05230fSmrg func_quote_arg pretty "$srcfile" 38703d05230fSmrg qsrcfile=$func_quote_arg_result 3871ed6f5d66Smrg 3872ed6f5d66Smrg # Only build a PIC object if we are building libtool libraries. 3873fbc03982Smrg if test yes = "$build_libtool_libs"; then 3874ed6f5d66Smrg # Without this assignment, base_compile gets emptied. 3875ed6f5d66Smrg fbsd_hideous_sh_bug=$base_compile 3876ed6f5d66Smrg 3877fbc03982Smrg if test no != "$pic_mode"; then 3878ed6f5d66Smrg command="$base_compile $qsrcfile $pic_flag" 3879ed6f5d66Smrg else 3880ed6f5d66Smrg # Don't build PIC code 3881ed6f5d66Smrg command="$base_compile $qsrcfile" 3882ed6f5d66Smrg fi 3883ed6f5d66Smrg 3884ed6f5d66Smrg func_mkdir_p "$xdir$objdir" 3885ed6f5d66Smrg 3886ed6f5d66Smrg if test -z "$output_obj"; then 3887ed6f5d66Smrg # Place PIC objects in $objdir 3888ed6f5d66Smrg func_append command " -o $lobj" 3889ed6f5d66Smrg fi 3890ed6f5d66Smrg 3891ed6f5d66Smrg func_show_eval_locale "$command" \ 3892ed6f5d66Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 3893ed6f5d66Smrg 3894fbc03982Smrg if test warn = "$need_locks" && 3895ed6f5d66Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3896ed6f5d66Smrg $ECHO "\ 3897ed6f5d66Smrg*** ERROR, $lockfile contains: 3898ed6f5d66Smrg`cat $lockfile 2>/dev/null` 3899ed6f5d66Smrg 3900ed6f5d66Smrgbut it should contain: 3901ed6f5d66Smrg$srcfile 3902ed6f5d66Smrg 3903ed6f5d66SmrgThis indicates that another process is trying to use the same 3904ed6f5d66Smrgtemporary object file, and libtool could not work around it because 3905fbc03982Smrgyour compiler does not support '-c' and '-o' together. If you 3906ed6f5d66Smrgrepeat this compilation, it may succeed, by chance, but you had better 3907ed6f5d66Smrgavoid parallel builds (make -j) in this platform, or get a better 3908ed6f5d66Smrgcompiler." 3909ed6f5d66Smrg 3910ed6f5d66Smrg $opt_dry_run || $RM $removelist 3911ed6f5d66Smrg exit $EXIT_FAILURE 3912ed6f5d66Smrg fi 3913ed6f5d66Smrg 3914ed6f5d66Smrg # Just move the object if needed, then go on to compile the next one 3915ed6f5d66Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 3916ed6f5d66Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 3917ed6f5d66Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 3918ed6f5d66Smrg fi 3919ed6f5d66Smrg 3920ed6f5d66Smrg # Allow error messages only from the first compilation. 3921fbc03982Smrg if test yes = "$suppress_opt"; then 3922ed6f5d66Smrg suppress_output=' >/dev/null 2>&1' 3923ed6f5d66Smrg fi 3924ed6f5d66Smrg fi 3925ed6f5d66Smrg 3926ed6f5d66Smrg # Only build a position-dependent object if we build old libraries. 3927fbc03982Smrg if test yes = "$build_old_libs"; then 3928fbc03982Smrg if test yes != "$pic_mode"; then 3929ed6f5d66Smrg # Don't build PIC code 3930ed6f5d66Smrg command="$base_compile $qsrcfile$pie_flag" 3931ed6f5d66Smrg else 3932ed6f5d66Smrg command="$base_compile $qsrcfile $pic_flag" 3933ed6f5d66Smrg fi 3934fbc03982Smrg if test yes = "$compiler_c_o"; then 3935ed6f5d66Smrg func_append command " -o $obj" 3936ed6f5d66Smrg fi 3937ed6f5d66Smrg 3938ed6f5d66Smrg # Suppress compiler output if we already did a PIC compilation. 3939ed6f5d66Smrg func_append command "$suppress_output" 3940ed6f5d66Smrg func_show_eval_locale "$command" \ 3941ed6f5d66Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 3942ed6f5d66Smrg 3943fbc03982Smrg if test warn = "$need_locks" && 3944ed6f5d66Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3945ed6f5d66Smrg $ECHO "\ 3946ed6f5d66Smrg*** ERROR, $lockfile contains: 3947ed6f5d66Smrg`cat $lockfile 2>/dev/null` 3948ed6f5d66Smrg 3949ed6f5d66Smrgbut it should contain: 3950ed6f5d66Smrg$srcfile 3951ed6f5d66Smrg 3952ed6f5d66SmrgThis indicates that another process is trying to use the same 3953ed6f5d66Smrgtemporary object file, and libtool could not work around it because 3954fbc03982Smrgyour compiler does not support '-c' and '-o' together. If you 3955ed6f5d66Smrgrepeat this compilation, it may succeed, by chance, but you had better 3956ed6f5d66Smrgavoid parallel builds (make -j) in this platform, or get a better 3957ed6f5d66Smrgcompiler." 3958ed6f5d66Smrg 3959ed6f5d66Smrg $opt_dry_run || $RM $removelist 3960ed6f5d66Smrg exit $EXIT_FAILURE 3961ed6f5d66Smrg fi 3962ed6f5d66Smrg 3963ed6f5d66Smrg # Just move the object if needed 3964ed6f5d66Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 3965ed6f5d66Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 3966ed6f5d66Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 3967ed6f5d66Smrg fi 3968ed6f5d66Smrg fi 3969ed6f5d66Smrg 3970ed6f5d66Smrg $opt_dry_run || { 3971ed6f5d66Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 3972ed6f5d66Smrg 3973ed6f5d66Smrg # Unlock the critical section if it was locked 3974fbc03982Smrg if test no != "$need_locks"; then 3975ed6f5d66Smrg removelist=$lockfile 3976ed6f5d66Smrg $RM "$lockfile" 3977ed6f5d66Smrg fi 3978ed6f5d66Smrg } 3979ed6f5d66Smrg 3980ed6f5d66Smrg exit $EXIT_SUCCESS 3981ed6f5d66Smrg} 3982ed6f5d66Smrg 3983ed6f5d66Smrg$opt_help || { 3984fbc03982Smrg test compile = "$opt_mode" && func_mode_compile ${1+"$@"} 3985ed6f5d66Smrg} 3986ed6f5d66Smrg 3987ed6f5d66Smrgfunc_mode_help () 3988ed6f5d66Smrg{ 3989ed6f5d66Smrg # We need to display help for each of the modes. 3990ed6f5d66Smrg case $opt_mode in 3991ed6f5d66Smrg "") 3992ed6f5d66Smrg # Generic help is extracted from the usage comments 3993ed6f5d66Smrg # at the start of this file. 3994ed6f5d66Smrg func_help 3995ed6f5d66Smrg ;; 3996ed6f5d66Smrg 3997ed6f5d66Smrg clean) 3998ed6f5d66Smrg $ECHO \ 3999ed6f5d66Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 4000ed6f5d66Smrg 4001ed6f5d66SmrgRemove files from the build directory. 4002ed6f5d66Smrg 4003ed6f5d66SmrgRM is the name of the program to use to delete files associated with each FILE 4004fbc03982Smrg(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 4005ed6f5d66Smrgto RM. 4006ed6f5d66Smrg 4007ed6f5d66SmrgIf FILE is a libtool library, object or program, all the files associated 4008ed6f5d66Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 4009ed6f5d66Smrg ;; 4010ed6f5d66Smrg 4011ed6f5d66Smrg compile) 4012ed6f5d66Smrg $ECHO \ 4013ed6f5d66Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 4014ed6f5d66Smrg 4015ed6f5d66SmrgCompile a source file into a libtool library object. 4016ed6f5d66Smrg 4017ed6f5d66SmrgThis mode accepts the following additional options: 4018ed6f5d66Smrg 4019ed6f5d66Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 4020ed6f5d66Smrg -no-suppress do not suppress compiler output for multiple passes 4021ed6f5d66Smrg -prefer-pic try to build PIC objects only 4022ed6f5d66Smrg -prefer-non-pic try to build non-PIC objects only 4023fbc03982Smrg -shared do not build a '.o' file suitable for static linking 4024fbc03982Smrg -static only build a '.o' file suitable for static linking 40253d05230fSmrg -Wc,FLAG 40263d05230fSmrg -Xcompiler FLAG pass FLAG directly to the compiler 4027ed6f5d66Smrg 4028fbc03982SmrgCOMPILE-COMMAND is a command to be used in creating a 'standard' object file 4029ed6f5d66Smrgfrom the given SOURCEFILE. 4030ed6f5d66Smrg 4031ed6f5d66SmrgThe output file name is determined by removing the directory component from 4032fbc03982SmrgSOURCEFILE, then substituting the C source code suffix '.c' with the 4033fbc03982Smrglibrary object suffix, '.lo'." 4034ed6f5d66Smrg ;; 4035ed6f5d66Smrg 4036ed6f5d66Smrg execute) 4037ed6f5d66Smrg $ECHO \ 4038ed6f5d66Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 4039ed6f5d66Smrg 4040ed6f5d66SmrgAutomatically set library path, then run a program. 4041ed6f5d66Smrg 4042ed6f5d66SmrgThis mode accepts the following additional options: 4043ed6f5d66Smrg 4044ed6f5d66Smrg -dlopen FILE add the directory containing FILE to the library path 4045ed6f5d66Smrg 4046fbc03982SmrgThis mode sets the library path environment variable according to '-dlopen' 4047ed6f5d66Smrgflags. 4048ed6f5d66Smrg 4049ed6f5d66SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 4050ed6f5d66Smrginto their corresponding uninstalled binary, and any of their required library 4051ed6f5d66Smrgdirectories are added to the library path. 4052ed6f5d66Smrg 4053ed6f5d66SmrgThen, COMMAND is executed, with ARGS as arguments." 4054ed6f5d66Smrg ;; 4055ed6f5d66Smrg 4056ed6f5d66Smrg finish) 4057ed6f5d66Smrg $ECHO \ 4058ed6f5d66Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 4059ed6f5d66Smrg 4060ed6f5d66SmrgComplete the installation of libtool libraries. 4061ed6f5d66Smrg 4062ed6f5d66SmrgEach LIBDIR is a directory that contains libtool libraries. 4063ed6f5d66Smrg 4064ed6f5d66SmrgThe commands that this mode executes may require superuser privileges. Use 4065fbc03982Smrgthe '--dry-run' option if you just want to see what would be executed." 4066ed6f5d66Smrg ;; 4067ed6f5d66Smrg 4068ed6f5d66Smrg install) 4069ed6f5d66Smrg $ECHO \ 4070ed6f5d66Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 4071ed6f5d66Smrg 4072ed6f5d66SmrgInstall executables or libraries. 4073ed6f5d66Smrg 4074ed6f5d66SmrgINSTALL-COMMAND is the installation command. The first component should be 4075fbc03982Smrgeither the 'install' or 'cp' program. 4076ed6f5d66Smrg 4077ed6f5d66SmrgThe following components of INSTALL-COMMAND are treated specially: 4078ed6f5d66Smrg 4079ed6f5d66Smrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 4080ed6f5d66Smrg 4081ed6f5d66SmrgThe rest of the components are interpreted as arguments to that command (only 4082ed6f5d66SmrgBSD-compatible install options are recognized)." 4083ed6f5d66Smrg ;; 4084ed6f5d66Smrg 4085ed6f5d66Smrg link) 4086ed6f5d66Smrg $ECHO \ 4087ed6f5d66Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 4088ed6f5d66Smrg 4089ed6f5d66SmrgLink object files or libraries together to form another library, or to 4090ed6f5d66Smrgcreate an executable program. 4091ed6f5d66Smrg 4092ed6f5d66SmrgLINK-COMMAND is a command using the C compiler that you would use to create 4093ed6f5d66Smrga program from several object files. 4094ed6f5d66Smrg 4095ed6f5d66SmrgThe following components of LINK-COMMAND are treated specially: 4096ed6f5d66Smrg 4097ed6f5d66Smrg -all-static do not do any dynamic linking at all 4098ed6f5d66Smrg -avoid-version do not add a version suffix if possible 4099ed6f5d66Smrg -bindir BINDIR specify path to binaries directory (for systems where 4100ed6f5d66Smrg libraries must be found in the PATH setting at runtime) 4101fbc03982Smrg -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime 4102ed6f5d66Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 4103ed6f5d66Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 4104ed6f5d66Smrg -export-symbols SYMFILE 4105ed6f5d66Smrg try to export only the symbols listed in SYMFILE 4106ed6f5d66Smrg -export-symbols-regex REGEX 4107ed6f5d66Smrg try to export only the symbols matching REGEX 4108ed6f5d66Smrg -LLIBDIR search LIBDIR for required installed libraries 4109ed6f5d66Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 4110ed6f5d66Smrg -module build a library that can dlopened 4111ed6f5d66Smrg -no-fast-install disable the fast-install mode 4112ed6f5d66Smrg -no-install link a not-installable executable 4113ed6f5d66Smrg -no-undefined declare that a library does not refer to external symbols 4114ed6f5d66Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 4115fbc03982Smrg -objectlist FILE use a list of object files found in FILE to specify objects 4116fbc03982Smrg -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) 4117ed6f5d66Smrg -precious-files-regex REGEX 4118ed6f5d66Smrg don't remove output files matching REGEX 4119ed6f5d66Smrg -release RELEASE specify package release information 4120ed6f5d66Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 4121ed6f5d66Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 4122ed6f5d66Smrg -shared only do dynamic linking of libtool libraries 4123ed6f5d66Smrg -shrext SUFFIX override the standard shared library file extension 4124ed6f5d66Smrg -static do not do any dynamic linking of uninstalled libtool libraries 4125ed6f5d66Smrg -static-libtool-libs 4126ed6f5d66Smrg do not do any dynamic linking of libtool libraries 4127ed6f5d66Smrg -version-info CURRENT[:REVISION[:AGE]] 4128ed6f5d66Smrg specify library version info [each variable defaults to 0] 4129ed6f5d66Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 4130ed6f5d66Smrg -Wc,FLAG 4131ed6f5d66Smrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 41323d05230fSmrg -Wa,FLAG 41333d05230fSmrg -Xassembler FLAG pass linker-specific FLAG directly to the assembler 4134ed6f5d66Smrg -Wl,FLAG 4135ed6f5d66Smrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 4136ed6f5d66Smrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 4137ed6f5d66Smrg 4138fbc03982SmrgAll other options (arguments beginning with '-') are ignored. 4139ed6f5d66Smrg 4140fbc03982SmrgEvery other argument is treated as a filename. Files ending in '.la' are 4141ed6f5d66Smrgtreated as uninstalled libtool libraries, other files are standard or library 4142ed6f5d66Smrgobject files. 4143ed6f5d66Smrg 4144fbc03982SmrgIf the OUTPUT-FILE ends in '.la', then a libtool library is created, 4145fbc03982Smrgonly library objects ('.lo' files) may be specified, and '-rpath' is 4146ed6f5d66Smrgrequired, except when creating a convenience library. 4147ed6f5d66Smrg 4148fbc03982SmrgIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created 4149fbc03982Smrgusing 'ar' and 'ranlib', or on Windows using 'lib'. 4150ed6f5d66Smrg 4151fbc03982SmrgIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file 4152ed6f5d66Smrgis created, otherwise an executable program is created." 4153ed6f5d66Smrg ;; 4154ed6f5d66Smrg 4155ed6f5d66Smrg uninstall) 4156ed6f5d66Smrg $ECHO \ 4157ed6f5d66Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 4158ed6f5d66Smrg 4159ed6f5d66SmrgRemove libraries from an installation directory. 4160ed6f5d66Smrg 4161ed6f5d66SmrgRM is the name of the program to use to delete files associated with each FILE 4162fbc03982Smrg(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 4163ed6f5d66Smrgto RM. 4164ed6f5d66Smrg 4165ed6f5d66SmrgIf FILE is a libtool library, all the files associated with it are deleted. 4166ed6f5d66SmrgOtherwise, only FILE itself is deleted using RM." 4167ed6f5d66Smrg ;; 4168ed6f5d66Smrg 4169ed6f5d66Smrg *) 4170fbc03982Smrg func_fatal_help "invalid operation mode '$opt_mode'" 4171ed6f5d66Smrg ;; 4172ed6f5d66Smrg esac 4173ed6f5d66Smrg 4174ed6f5d66Smrg echo 4175fbc03982Smrg $ECHO "Try '$progname --help' for more information about other modes." 4176ed6f5d66Smrg} 4177ed6f5d66Smrg 4178ed6f5d66Smrg# Now that we've collected a possible --mode arg, show help if necessary 4179ed6f5d66Smrgif $opt_help; then 4180fbc03982Smrg if test : = "$opt_help"; then 4181ed6f5d66Smrg func_mode_help 4182ed6f5d66Smrg else 4183ed6f5d66Smrg { 4184ed6f5d66Smrg func_help noexit 4185ed6f5d66Smrg for opt_mode in compile link execute install finish uninstall clean; do 4186ed6f5d66Smrg func_mode_help 4187ed6f5d66Smrg done 4188fbc03982Smrg } | $SED -n '1p; 2,$s/^Usage:/ or: /p' 4189ed6f5d66Smrg { 4190ed6f5d66Smrg func_help noexit 4191ed6f5d66Smrg for opt_mode in compile link execute install finish uninstall clean; do 4192ed6f5d66Smrg echo 4193ed6f5d66Smrg func_mode_help 4194ed6f5d66Smrg done 4195ed6f5d66Smrg } | 4196fbc03982Smrg $SED '1d 4197ed6f5d66Smrg /^When reporting/,/^Report/{ 4198ed6f5d66Smrg H 4199ed6f5d66Smrg d 4200ed6f5d66Smrg } 4201ed6f5d66Smrg $x 4202ed6f5d66Smrg /information about other modes/d 4203ed6f5d66Smrg /more detailed .*MODE/d 4204ed6f5d66Smrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 4205ed6f5d66Smrg fi 4206ed6f5d66Smrg exit $? 4207ed6f5d66Smrgfi 4208ed6f5d66Smrg 4209ed6f5d66Smrg 4210a3680546Smrg# If option '--reorder-cache', reorder the shared library cache and exit. 4211a3680546Smrgif $opt_reorder_cache; then 4212a3680546Smrg func_reorder_shared_lib_cache $shared_lib_dirs 4213a3680546Smrgfi 4214a3680546Smrg 4215a3680546Smrg 4216ed6f5d66Smrg# func_mode_execute arg... 4217ed6f5d66Smrgfunc_mode_execute () 4218ed6f5d66Smrg{ 4219fbc03982Smrg $debug_cmd 4220fbc03982Smrg 4221ed6f5d66Smrg # The first argument is the command name. 4222fbc03982Smrg cmd=$nonopt 4223ed6f5d66Smrg test -z "$cmd" && \ 4224ed6f5d66Smrg func_fatal_help "you must specify a COMMAND" 4225ed6f5d66Smrg 4226ed6f5d66Smrg # Handle -dlopen flags immediately. 4227ed6f5d66Smrg for file in $opt_dlopen; do 4228ed6f5d66Smrg test -f "$file" \ 4229fbc03982Smrg || func_fatal_help "'$file' is not a file" 4230ed6f5d66Smrg 4231ed6f5d66Smrg dir= 4232ed6f5d66Smrg case $file in 4233ed6f5d66Smrg *.la) 4234ed6f5d66Smrg func_resolve_sysroot "$file" 4235ed6f5d66Smrg file=$func_resolve_sysroot_result 4236ed6f5d66Smrg 4237ed6f5d66Smrg # Check to see that this really is a libtool archive. 4238ed6f5d66Smrg func_lalib_unsafe_p "$file" \ 4239fbc03982Smrg || func_fatal_help "'$lib' is not a valid libtool archive" 4240ed6f5d66Smrg 4241ed6f5d66Smrg # Read the libtool library. 4242ed6f5d66Smrg dlname= 4243ed6f5d66Smrg library_names= 4244ed6f5d66Smrg func_source "$file" 4245ed6f5d66Smrg 4246ed6f5d66Smrg # Skip this library if it cannot be dlopened. 4247ed6f5d66Smrg if test -z "$dlname"; then 4248ed6f5d66Smrg # Warn if it was a shared library. 4249ed6f5d66Smrg test -n "$library_names" && \ 4250fbc03982Smrg func_warning "'$file' was not linked with '-export-dynamic'" 4251ed6f5d66Smrg continue 4252ed6f5d66Smrg fi 4253ed6f5d66Smrg 4254ed6f5d66Smrg func_dirname "$file" "" "." 4255fbc03982Smrg dir=$func_dirname_result 4256ed6f5d66Smrg 4257ed6f5d66Smrg if test -f "$dir/$objdir/$dlname"; then 4258ed6f5d66Smrg func_append dir "/$objdir" 4259ed6f5d66Smrg else 4260ed6f5d66Smrg if test ! -f "$dir/$dlname"; then 4261fbc03982Smrg func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" 4262ed6f5d66Smrg fi 4263ed6f5d66Smrg fi 4264ed6f5d66Smrg ;; 4265ed6f5d66Smrg 4266ed6f5d66Smrg *.lo) 4267ed6f5d66Smrg # Just add the directory containing the .lo file. 4268ed6f5d66Smrg func_dirname "$file" "" "." 4269fbc03982Smrg dir=$func_dirname_result 4270ed6f5d66Smrg ;; 4271ed6f5d66Smrg 4272ed6f5d66Smrg *) 4273fbc03982Smrg func_warning "'-dlopen' is ignored for non-libtool libraries and objects" 4274ed6f5d66Smrg continue 4275ed6f5d66Smrg ;; 4276ed6f5d66Smrg esac 4277ed6f5d66Smrg 4278ed6f5d66Smrg # Get the absolute pathname. 4279ed6f5d66Smrg absdir=`cd "$dir" && pwd` 4280fbc03982Smrg test -n "$absdir" && dir=$absdir 4281ed6f5d66Smrg 4282ed6f5d66Smrg # Now add the directory to shlibpath_var. 4283ed6f5d66Smrg if eval "test -z \"\$$shlibpath_var\""; then 4284ed6f5d66Smrg eval "$shlibpath_var=\"\$dir\"" 4285ed6f5d66Smrg else 4286ed6f5d66Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 4287ed6f5d66Smrg fi 4288ed6f5d66Smrg done 4289ed6f5d66Smrg 4290ed6f5d66Smrg # This variable tells wrapper scripts just to set shlibpath_var 4291ed6f5d66Smrg # rather than running their programs. 4292fbc03982Smrg libtool_execute_magic=$magic 4293ed6f5d66Smrg 4294ed6f5d66Smrg # Check if any of the arguments is a wrapper script. 4295ed6f5d66Smrg args= 4296ed6f5d66Smrg for file 4297ed6f5d66Smrg do 4298ed6f5d66Smrg case $file in 4299ed6f5d66Smrg -* | *.la | *.lo ) ;; 4300ed6f5d66Smrg *) 4301ed6f5d66Smrg # Do a test to see if this is really a libtool program. 4302ed6f5d66Smrg if func_ltwrapper_script_p "$file"; then 4303ed6f5d66Smrg func_source "$file" 4304ed6f5d66Smrg # Transform arg to wrapped name. 4305fbc03982Smrg file=$progdir/$program 4306ed6f5d66Smrg elif func_ltwrapper_executable_p "$file"; then 4307ed6f5d66Smrg func_ltwrapper_scriptname "$file" 4308ed6f5d66Smrg func_source "$func_ltwrapper_scriptname_result" 4309ed6f5d66Smrg # Transform arg to wrapped name. 4310fbc03982Smrg file=$progdir/$program 4311ed6f5d66Smrg fi 4312ed6f5d66Smrg ;; 4313ed6f5d66Smrg esac 4314ed6f5d66Smrg # Quote arguments (to preserve shell metacharacters). 4315ed6f5d66Smrg func_append_quoted args "$file" 4316ed6f5d66Smrg done 4317ed6f5d66Smrg 4318fbc03982Smrg if $opt_dry_run; then 4319fbc03982Smrg # Display what would be done. 4320fbc03982Smrg if test -n "$shlibpath_var"; then 4321fbc03982Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 4322fbc03982Smrg echo "export $shlibpath_var" 4323fbc03982Smrg fi 4324fbc03982Smrg $ECHO "$cmd$args" 4325fbc03982Smrg exit $EXIT_SUCCESS 4326fbc03982Smrg else 4327ed6f5d66Smrg if test -n "$shlibpath_var"; then 4328ed6f5d66Smrg # Export the shlibpath_var. 4329ed6f5d66Smrg eval "export $shlibpath_var" 4330ed6f5d66Smrg fi 4331ed6f5d66Smrg 4332ed6f5d66Smrg # Restore saved environment variables 4333ed6f5d66Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 4334ed6f5d66Smrg do 4335ed6f5d66Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 4336ed6f5d66Smrg $lt_var=\$save_$lt_var; export $lt_var 4337ed6f5d66Smrg else 4338ed6f5d66Smrg $lt_unset $lt_var 4339ed6f5d66Smrg fi" 4340ed6f5d66Smrg done 4341ed6f5d66Smrg 4342ed6f5d66Smrg # Now prepare to actually exec the command. 4343fbc03982Smrg exec_cmd=\$cmd$args 4344ed6f5d66Smrg fi 4345ed6f5d66Smrg} 4346ed6f5d66Smrg 4347fbc03982Smrgtest execute = "$opt_mode" && func_mode_execute ${1+"$@"} 4348ed6f5d66Smrg 4349ed6f5d66Smrg 4350ed6f5d66Smrg# func_mode_finish arg... 4351ed6f5d66Smrgfunc_mode_finish () 4352ed6f5d66Smrg{ 4353fbc03982Smrg $debug_cmd 4354fbc03982Smrg 4355ed6f5d66Smrg libs= 4356ed6f5d66Smrg libdirs= 4357ed6f5d66Smrg admincmds= 4358ed6f5d66Smrg 4359ed6f5d66Smrg for opt in "$nonopt" ${1+"$@"} 4360ed6f5d66Smrg do 4361ed6f5d66Smrg if test -d "$opt"; then 4362ed6f5d66Smrg func_append libdirs " $opt" 4363ed6f5d66Smrg 4364ed6f5d66Smrg elif test -f "$opt"; then 4365ed6f5d66Smrg if func_lalib_unsafe_p "$opt"; then 4366ed6f5d66Smrg func_append libs " $opt" 4367ed6f5d66Smrg else 4368fbc03982Smrg func_warning "'$opt' is not a valid libtool archive" 4369ed6f5d66Smrg fi 4370ed6f5d66Smrg 4371ed6f5d66Smrg else 4372fbc03982Smrg func_fatal_error "invalid argument '$opt'" 4373ed6f5d66Smrg fi 4374ed6f5d66Smrg done 4375ed6f5d66Smrg 4376ed6f5d66Smrg if test -n "$libs"; then 4377ed6f5d66Smrg if test -n "$lt_sysroot"; then 4378ed6f5d66Smrg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 4379ed6f5d66Smrg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 4380ed6f5d66Smrg else 4381ed6f5d66Smrg sysroot_cmd= 4382ed6f5d66Smrg fi 4383ed6f5d66Smrg 4384ed6f5d66Smrg # Remove sysroot references 4385ed6f5d66Smrg if $opt_dry_run; then 4386ed6f5d66Smrg for lib in $libs; do 4387fbc03982Smrg echo "removing references to $lt_sysroot and '=' prefixes from $lib" 4388ed6f5d66Smrg done 4389ed6f5d66Smrg else 4390ed6f5d66Smrg tmpdir=`func_mktempdir` 4391ed6f5d66Smrg for lib in $libs; do 4392fbc03982Smrg $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 4393ed6f5d66Smrg > $tmpdir/tmp-la 4394ed6f5d66Smrg mv -f $tmpdir/tmp-la $lib 4395ed6f5d66Smrg done 4396ed6f5d66Smrg ${RM}r "$tmpdir" 4397ed6f5d66Smrg fi 4398ed6f5d66Smrg fi 4399ed6f5d66Smrg 4400a3680546Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs" && $opt_finishing; then 4401ed6f5d66Smrg for libdir in $libdirs; do 4402ed6f5d66Smrg if test -n "$finish_cmds"; then 4403ed6f5d66Smrg # Do each command in the finish commands. 4404ed6f5d66Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 4405ed6f5d66Smrg'"$cmd"'"' 4406ed6f5d66Smrg fi 4407ed6f5d66Smrg if test -n "$finish_eval"; then 4408ed6f5d66Smrg # Do the single finish_eval. 4409ed6f5d66Smrg eval cmds=\"$finish_eval\" 4410ed6f5d66Smrg $opt_dry_run || eval "$cmds" || func_append admincmds " 4411ed6f5d66Smrg $cmds" 4412ed6f5d66Smrg fi 4413ed6f5d66Smrg done 4414ed6f5d66Smrg fi 4415ed6f5d66Smrg 4416ed6f5d66Smrg # Exit here if they wanted silent mode. 4417fbc03982Smrg $opt_quiet && exit $EXIT_SUCCESS 4418ed6f5d66Smrg 4419ed6f5d66Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4420ed6f5d66Smrg echo "----------------------------------------------------------------------" 4421ed6f5d66Smrg echo "Libraries have been installed in:" 4422ed6f5d66Smrg for libdir in $libdirs; do 4423ed6f5d66Smrg $ECHO " $libdir" 4424ed6f5d66Smrg done 4425a3680546Smrg if test "false" = "$opt_finishing"; then 4426a3680546Smrg echo 4427a3680546Smrg echo "NOTE: finish_cmds were not executed during testing, so you must" 4428a3680546Smrg echo "manually run ldconfig to add a given test directory, LIBDIR, to" 4429a3680546Smrg echo "the search path for generated executables." 4430a3680546Smrg fi 4431ed6f5d66Smrg echo 4432ed6f5d66Smrg echo "If you ever happen to want to link against installed libraries" 4433ed6f5d66Smrg echo "in a given directory, LIBDIR, you must either use libtool, and" 4434fbc03982Smrg echo "specify the full pathname of the library, or use the '-LLIBDIR'" 4435ed6f5d66Smrg echo "flag during linking and do at least one of the following:" 4436ed6f5d66Smrg if test -n "$shlibpath_var"; then 4437fbc03982Smrg echo " - add LIBDIR to the '$shlibpath_var' environment variable" 4438ed6f5d66Smrg echo " during execution" 4439ed6f5d66Smrg fi 4440ed6f5d66Smrg if test -n "$runpath_var"; then 4441fbc03982Smrg echo " - add LIBDIR to the '$runpath_var' environment variable" 4442ed6f5d66Smrg echo " during linking" 4443ed6f5d66Smrg fi 4444ed6f5d66Smrg if test -n "$hardcode_libdir_flag_spec"; then 4445ed6f5d66Smrg libdir=LIBDIR 4446ed6f5d66Smrg eval flag=\"$hardcode_libdir_flag_spec\" 4447ed6f5d66Smrg 4448fbc03982Smrg $ECHO " - use the '$flag' linker flag" 4449ed6f5d66Smrg fi 4450ed6f5d66Smrg if test -n "$admincmds"; then 4451ed6f5d66Smrg $ECHO " - have your system administrator run these commands:$admincmds" 4452ed6f5d66Smrg fi 4453ed6f5d66Smrg if test -f /etc/ld.so.conf; then 4454fbc03982Smrg echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" 4455ed6f5d66Smrg fi 4456ed6f5d66Smrg echo 4457ed6f5d66Smrg 4458ed6f5d66Smrg echo "See any operating system documentation about shared libraries for" 4459ed6f5d66Smrg case $host in 4460ed6f5d66Smrg solaris2.[6789]|solaris2.1[0-9]) 4461ed6f5d66Smrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 4462ed6f5d66Smrg echo "pages." 4463ed6f5d66Smrg ;; 4464ed6f5d66Smrg *) 4465ed6f5d66Smrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 4466ed6f5d66Smrg ;; 4467ed6f5d66Smrg esac 4468ed6f5d66Smrg echo "----------------------------------------------------------------------" 4469ed6f5d66Smrg fi 4470ed6f5d66Smrg exit $EXIT_SUCCESS 4471ed6f5d66Smrg} 4472ed6f5d66Smrg 4473fbc03982Smrgtest finish = "$opt_mode" && func_mode_finish ${1+"$@"} 4474ed6f5d66Smrg 4475ed6f5d66Smrg 4476ed6f5d66Smrg# func_mode_install arg... 4477ed6f5d66Smrgfunc_mode_install () 4478ed6f5d66Smrg{ 4479fbc03982Smrg $debug_cmd 4480fbc03982Smrg 4481ed6f5d66Smrg # There may be an optional sh(1) argument at the beginning of 4482ed6f5d66Smrg # install_prog (especially on Windows NT). 4483fbc03982Smrg if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || 4484ed6f5d66Smrg # Allow the use of GNU shtool's install command. 4485fbc03982Smrg case $nonopt in *shtool*) :;; *) false;; esac 4486fbc03982Smrg then 4487ed6f5d66Smrg # Aesthetically quote it. 44883d05230fSmrg func_quote_arg pretty "$nonopt" 44893d05230fSmrg install_prog="$func_quote_arg_result " 4490ed6f5d66Smrg arg=$1 4491ed6f5d66Smrg shift 4492ed6f5d66Smrg else 4493ed6f5d66Smrg install_prog= 4494ed6f5d66Smrg arg=$nonopt 4495ed6f5d66Smrg fi 4496ed6f5d66Smrg 4497ed6f5d66Smrg # The real first argument should be the name of the installation program. 4498ed6f5d66Smrg # Aesthetically quote it. 44993d05230fSmrg func_quote_arg pretty "$arg" 45003d05230fSmrg func_append install_prog "$func_quote_arg_result" 4501ed6f5d66Smrg install_shared_prog=$install_prog 4502ed6f5d66Smrg case " $install_prog " in 4503ed6f5d66Smrg *[\\\ /]cp\ *) install_cp=: ;; 4504ed6f5d66Smrg *) install_cp=false ;; 4505ed6f5d66Smrg esac 4506ed6f5d66Smrg 4507ed6f5d66Smrg # We need to accept at least all the BSD install flags. 4508ed6f5d66Smrg dest= 4509ed6f5d66Smrg files= 4510ed6f5d66Smrg opts= 4511ed6f5d66Smrg prev= 4512ed6f5d66Smrg install_type= 4513fbc03982Smrg isdir=false 4514ed6f5d66Smrg stripme= 4515ed6f5d66Smrg no_mode=: 4516ed6f5d66Smrg for arg 4517ed6f5d66Smrg do 4518ed6f5d66Smrg arg2= 4519ed6f5d66Smrg if test -n "$dest"; then 4520ed6f5d66Smrg func_append files " $dest" 4521ed6f5d66Smrg dest=$arg 4522ed6f5d66Smrg continue 4523ed6f5d66Smrg fi 4524ed6f5d66Smrg 4525ed6f5d66Smrg case $arg in 4526fbc03982Smrg -d) isdir=: ;; 4527ed6f5d66Smrg -f) 4528ed6f5d66Smrg if $install_cp; then :; else 4529ed6f5d66Smrg prev=$arg 4530ed6f5d66Smrg fi 4531ed6f5d66Smrg ;; 4532ed6f5d66Smrg -g | -m | -o) 4533ed6f5d66Smrg prev=$arg 4534ed6f5d66Smrg ;; 4535ed6f5d66Smrg -s) 4536ed6f5d66Smrg stripme=" -s" 4537ed6f5d66Smrg continue 4538ed6f5d66Smrg ;; 4539ed6f5d66Smrg -*) 4540ed6f5d66Smrg ;; 4541ed6f5d66Smrg *) 4542ed6f5d66Smrg # If the previous option needed an argument, then skip it. 4543ed6f5d66Smrg if test -n "$prev"; then 4544fbc03982Smrg if test X-m = "X$prev" && test -n "$install_override_mode"; then 4545ed6f5d66Smrg arg2=$install_override_mode 4546ed6f5d66Smrg no_mode=false 4547ed6f5d66Smrg fi 4548ed6f5d66Smrg prev= 4549ed6f5d66Smrg else 4550ed6f5d66Smrg dest=$arg 4551ed6f5d66Smrg continue 4552ed6f5d66Smrg fi 4553ed6f5d66Smrg ;; 4554ed6f5d66Smrg esac 4555ed6f5d66Smrg 4556ed6f5d66Smrg # Aesthetically quote the argument. 45573d05230fSmrg func_quote_arg pretty "$arg" 45583d05230fSmrg func_append install_prog " $func_quote_arg_result" 4559ed6f5d66Smrg if test -n "$arg2"; then 45603d05230fSmrg func_quote_arg pretty "$arg2" 4561ed6f5d66Smrg fi 45623d05230fSmrg func_append install_shared_prog " $func_quote_arg_result" 4563ed6f5d66Smrg done 4564ed6f5d66Smrg 4565ed6f5d66Smrg test -z "$install_prog" && \ 4566ed6f5d66Smrg func_fatal_help "you must specify an install program" 4567ed6f5d66Smrg 4568ed6f5d66Smrg test -n "$prev" && \ 4569fbc03982Smrg func_fatal_help "the '$prev' option requires an argument" 4570ed6f5d66Smrg 4571ed6f5d66Smrg if test -n "$install_override_mode" && $no_mode; then 4572ed6f5d66Smrg if $install_cp; then :; else 45733d05230fSmrg func_quote_arg pretty "$install_override_mode" 45743d05230fSmrg func_append install_shared_prog " -m $func_quote_arg_result" 4575ed6f5d66Smrg fi 4576ed6f5d66Smrg fi 4577ed6f5d66Smrg 4578ed6f5d66Smrg if test -z "$files"; then 4579ed6f5d66Smrg if test -z "$dest"; then 4580ed6f5d66Smrg func_fatal_help "no file or destination specified" 4581ed6f5d66Smrg else 4582ed6f5d66Smrg func_fatal_help "you must specify a destination" 4583ed6f5d66Smrg fi 4584ed6f5d66Smrg fi 4585ed6f5d66Smrg 4586ed6f5d66Smrg # Strip any trailing slash from the destination. 4587ed6f5d66Smrg func_stripname '' '/' "$dest" 4588ed6f5d66Smrg dest=$func_stripname_result 4589ed6f5d66Smrg 4590ed6f5d66Smrg # Check to see that the destination is a directory. 4591fbc03982Smrg test -d "$dest" && isdir=: 4592fbc03982Smrg if $isdir; then 4593fbc03982Smrg destdir=$dest 4594ed6f5d66Smrg destname= 4595ed6f5d66Smrg else 4596ed6f5d66Smrg func_dirname_and_basename "$dest" "" "." 4597fbc03982Smrg destdir=$func_dirname_result 4598fbc03982Smrg destname=$func_basename_result 4599ed6f5d66Smrg 4600ed6f5d66Smrg # Not a directory, so check to see that there is only one file specified. 4601ed6f5d66Smrg set dummy $files; shift 4602ed6f5d66Smrg test "$#" -gt 1 && \ 4603fbc03982Smrg func_fatal_help "'$dest' is not a directory" 4604ed6f5d66Smrg fi 4605ed6f5d66Smrg case $destdir in 4606ed6f5d66Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4607ed6f5d66Smrg *) 4608ed6f5d66Smrg for file in $files; do 4609ed6f5d66Smrg case $file in 4610ed6f5d66Smrg *.lo) ;; 4611ed6f5d66Smrg *) 4612fbc03982Smrg func_fatal_help "'$destdir' must be an absolute directory name" 4613ed6f5d66Smrg ;; 4614ed6f5d66Smrg esac 4615ed6f5d66Smrg done 4616ed6f5d66Smrg ;; 4617ed6f5d66Smrg esac 4618ed6f5d66Smrg 4619ed6f5d66Smrg # This variable tells wrapper scripts just to set variables rather 4620ed6f5d66Smrg # than running their programs. 4621fbc03982Smrg libtool_install_magic=$magic 4622ed6f5d66Smrg 4623ed6f5d66Smrg staticlibs= 4624ed6f5d66Smrg future_libdirs= 4625ed6f5d66Smrg current_libdirs= 4626ed6f5d66Smrg for file in $files; do 4627ed6f5d66Smrg 4628ed6f5d66Smrg # Do each installation. 4629ed6f5d66Smrg case $file in 4630ed6f5d66Smrg *.$libext) 4631ed6f5d66Smrg # Do the static libraries later. 4632ed6f5d66Smrg func_append staticlibs " $file" 4633ed6f5d66Smrg ;; 4634ed6f5d66Smrg 4635ed6f5d66Smrg *.la) 4636ed6f5d66Smrg func_resolve_sysroot "$file" 4637ed6f5d66Smrg file=$func_resolve_sysroot_result 4638ed6f5d66Smrg 4639ed6f5d66Smrg # Check to see that this really is a libtool archive. 4640ed6f5d66Smrg func_lalib_unsafe_p "$file" \ 4641fbc03982Smrg || func_fatal_help "'$file' is not a valid libtool archive" 4642ed6f5d66Smrg 4643ed6f5d66Smrg library_names= 4644ed6f5d66Smrg old_library= 4645ed6f5d66Smrg relink_command= 4646ed6f5d66Smrg func_source "$file" 4647ed6f5d66Smrg 4648ed6f5d66Smrg # Add the libdir to current_libdirs if it is the destination. 4649ed6f5d66Smrg if test "X$destdir" = "X$libdir"; then 4650ed6f5d66Smrg case "$current_libdirs " in 4651ed6f5d66Smrg *" $libdir "*) ;; 4652ed6f5d66Smrg *) func_append current_libdirs " $libdir" ;; 4653ed6f5d66Smrg esac 4654ed6f5d66Smrg else 4655ed6f5d66Smrg # Note the libdir as a future libdir. 4656ed6f5d66Smrg case "$future_libdirs " in 4657ed6f5d66Smrg *" $libdir "*) ;; 4658ed6f5d66Smrg *) func_append future_libdirs " $libdir" ;; 4659ed6f5d66Smrg esac 4660ed6f5d66Smrg fi 4661ed6f5d66Smrg 4662ed6f5d66Smrg func_dirname "$file" "/" "" 4663fbc03982Smrg dir=$func_dirname_result 4664ed6f5d66Smrg func_append dir "$objdir" 4665ed6f5d66Smrg 4666ed6f5d66Smrg if test -n "$relink_command"; then 4667a3680546Smrg # Strip any trailing slash from the destination. 4668a3680546Smrg func_stripname '' '/' "$libdir" 4669a3680546Smrg destlibdir=$func_stripname_result 4670a3680546Smrg 4671a3680546Smrg func_stripname '' '/' "$destdir" 4672a3680546Smrg s_destdir=$func_stripname_result 4673a3680546Smrg 4674ed6f5d66Smrg # Determine the prefix the user has applied to our future dir. 4675a3680546Smrg inst_prefix_dir=`$ECHO "X$s_destdir" | $Xsed -e "s%$destlibdir\$%%"` 4676ed6f5d66Smrg 4677ed6f5d66Smrg # Don't allow the user to place us outside of our expected 4678ed6f5d66Smrg # location b/c this prevents finding dependent libraries that 4679ed6f5d66Smrg # are installed to the same prefix. 4680ed6f5d66Smrg # At present, this check doesn't affect windows .dll's that 4681ed6f5d66Smrg # are installed into $libdir/../bin (currently, that works fine) 4682ed6f5d66Smrg # but it's something to keep an eye on. 4683ed6f5d66Smrg test "$inst_prefix_dir" = "$destdir" && \ 4684fbc03982Smrg func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" 4685ed6f5d66Smrg 4686ed6f5d66Smrg if test -n "$inst_prefix_dir"; then 4687ed6f5d66Smrg # Stick the inst_prefix_dir data into the link command. 4688ed6f5d66Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 4689ed6f5d66Smrg else 4690ed6f5d66Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 4691ed6f5d66Smrg fi 4692ed6f5d66Smrg 4693fbc03982Smrg func_warning "relinking '$file'" 4694ed6f5d66Smrg func_show_eval "$relink_command" \ 4695fbc03982Smrg 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' 4696ed6f5d66Smrg fi 4697ed6f5d66Smrg 4698ed6f5d66Smrg # See the names of the shared library. 4699ed6f5d66Smrg set dummy $library_names; shift 4700ed6f5d66Smrg if test -n "$1"; then 4701fbc03982Smrg realname=$1 4702ed6f5d66Smrg shift 4703ed6f5d66Smrg 4704fbc03982Smrg srcname=$realname 4705fbc03982Smrg test -n "$relink_command" && srcname=${realname}T 4706ed6f5d66Smrg 4707ed6f5d66Smrg # Install the shared library and build the symlinks. 4708ed6f5d66Smrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 4709ed6f5d66Smrg 'exit $?' 4710fbc03982Smrg tstripme=$stripme 4711ed6f5d66Smrg case $host_os in 4712a3680546Smrg cygwin* | mingw* | windows* | pw32* | cegcc*) 4713ed6f5d66Smrg case $realname in 4714ed6f5d66Smrg *.dll.a) 4715fbc03982Smrg tstripme= 4716fbc03982Smrg ;; 4717fbc03982Smrg esac 4718fbc03982Smrg ;; 4719fbc03982Smrg os2*) 4720fbc03982Smrg case $realname in 4721fbc03982Smrg *_dll.a) 4722fbc03982Smrg tstripme= 4723ed6f5d66Smrg ;; 4724ed6f5d66Smrg esac 4725ed6f5d66Smrg ;; 4726ed6f5d66Smrg esac 4727ed6f5d66Smrg if test -n "$tstripme" && test -n "$striplib"; then 4728ed6f5d66Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 4729ed6f5d66Smrg fi 4730ed6f5d66Smrg 4731ed6f5d66Smrg if test "$#" -gt 0; then 4732ed6f5d66Smrg # Delete the old symlinks, and create new ones. 4733fbc03982Smrg # Try 'ln -sf' first, because the 'ln' binary might depend on 4734ed6f5d66Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 4735ed6f5d66Smrg # so we also need to try rm && ln -s. 4736ed6f5d66Smrg for linkname 4737ed6f5d66Smrg do 4738ed6f5d66Smrg test "$linkname" != "$realname" \ 4739ed6f5d66Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 4740ed6f5d66Smrg done 4741ed6f5d66Smrg fi 4742ed6f5d66Smrg 4743ed6f5d66Smrg # Do each command in the postinstall commands. 4744fbc03982Smrg lib=$destdir/$realname 4745ed6f5d66Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 4746ed6f5d66Smrg fi 4747ed6f5d66Smrg 4748ed6f5d66Smrg # Install the pseudo-library for information purposes. 4749ed6f5d66Smrg func_basename "$file" 4750fbc03982Smrg name=$func_basename_result 4751fbc03982Smrg instname=$dir/${name}i 4752ed6f5d66Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 4753ed6f5d66Smrg 4754ed6f5d66Smrg # Maybe install the static library, too. 4755ed6f5d66Smrg test -n "$old_library" && func_append staticlibs " $dir/$old_library" 4756ed6f5d66Smrg ;; 4757ed6f5d66Smrg 4758ed6f5d66Smrg *.lo) 4759ed6f5d66Smrg # Install (i.e. copy) a libtool object. 4760ed6f5d66Smrg 4761ed6f5d66Smrg # Figure out destination file name, if it wasn't already specified. 4762ed6f5d66Smrg if test -n "$destname"; then 4763fbc03982Smrg destfile=$destdir/$destname 4764ed6f5d66Smrg else 4765ed6f5d66Smrg func_basename "$file" 4766fbc03982Smrg destfile=$func_basename_result 4767fbc03982Smrg destfile=$destdir/$destfile 4768ed6f5d66Smrg fi 4769ed6f5d66Smrg 4770ed6f5d66Smrg # Deduce the name of the destination old-style object file. 4771ed6f5d66Smrg case $destfile in 4772ed6f5d66Smrg *.lo) 4773ed6f5d66Smrg func_lo2o "$destfile" 4774ed6f5d66Smrg staticdest=$func_lo2o_result 4775ed6f5d66Smrg ;; 4776ed6f5d66Smrg *.$objext) 4777fbc03982Smrg staticdest=$destfile 4778ed6f5d66Smrg destfile= 4779ed6f5d66Smrg ;; 4780ed6f5d66Smrg *) 4781fbc03982Smrg func_fatal_help "cannot copy a libtool object to '$destfile'" 4782ed6f5d66Smrg ;; 4783ed6f5d66Smrg esac 4784ed6f5d66Smrg 4785ed6f5d66Smrg # Install the libtool object if requested. 4786ed6f5d66Smrg test -n "$destfile" && \ 4787ed6f5d66Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 4788ed6f5d66Smrg 4789ed6f5d66Smrg # Install the old object if enabled. 4790fbc03982Smrg if test yes = "$build_old_libs"; then 4791ed6f5d66Smrg # Deduce the name of the old-style object file. 4792ed6f5d66Smrg func_lo2o "$file" 4793ed6f5d66Smrg staticobj=$func_lo2o_result 4794ed6f5d66Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 4795ed6f5d66Smrg fi 4796ed6f5d66Smrg exit $EXIT_SUCCESS 4797ed6f5d66Smrg ;; 4798ed6f5d66Smrg 4799ed6f5d66Smrg *) 4800ed6f5d66Smrg # Figure out destination file name, if it wasn't already specified. 4801ed6f5d66Smrg if test -n "$destname"; then 4802fbc03982Smrg destfile=$destdir/$destname 4803ed6f5d66Smrg else 4804ed6f5d66Smrg func_basename "$file" 4805fbc03982Smrg destfile=$func_basename_result 4806fbc03982Smrg destfile=$destdir/$destfile 4807ed6f5d66Smrg fi 4808ed6f5d66Smrg 4809ed6f5d66Smrg # If the file is missing, and there is a .exe on the end, strip it 4810ed6f5d66Smrg # because it is most likely a libtool script we actually want to 4811ed6f5d66Smrg # install 4812fbc03982Smrg stripped_ext= 4813ed6f5d66Smrg case $file in 4814ed6f5d66Smrg *.exe) 4815ed6f5d66Smrg if test ! -f "$file"; then 4816ed6f5d66Smrg func_stripname '' '.exe' "$file" 4817ed6f5d66Smrg file=$func_stripname_result 4818fbc03982Smrg stripped_ext=.exe 4819ed6f5d66Smrg fi 4820ed6f5d66Smrg ;; 4821ed6f5d66Smrg esac 4822ed6f5d66Smrg 4823ed6f5d66Smrg # Do a test to see if this is really a libtool program. 4824ed6f5d66Smrg case $host in 4825a3680546Smrg *cygwin* | *mingw* | *windows*) 4826ed6f5d66Smrg if func_ltwrapper_executable_p "$file"; then 4827ed6f5d66Smrg func_ltwrapper_scriptname "$file" 4828ed6f5d66Smrg wrapper=$func_ltwrapper_scriptname_result 4829ed6f5d66Smrg else 4830ed6f5d66Smrg func_stripname '' '.exe' "$file" 4831ed6f5d66Smrg wrapper=$func_stripname_result 4832ed6f5d66Smrg fi 4833ed6f5d66Smrg ;; 4834ed6f5d66Smrg *) 4835ed6f5d66Smrg wrapper=$file 4836ed6f5d66Smrg ;; 4837ed6f5d66Smrg esac 4838ed6f5d66Smrg if func_ltwrapper_script_p "$wrapper"; then 4839ed6f5d66Smrg notinst_deplibs= 4840ed6f5d66Smrg relink_command= 4841ed6f5d66Smrg 4842ed6f5d66Smrg func_source "$wrapper" 4843ed6f5d66Smrg 4844ed6f5d66Smrg # Check the variables that should have been set. 4845ed6f5d66Smrg test -z "$generated_by_libtool_version" && \ 4846fbc03982Smrg func_fatal_error "invalid libtool wrapper script '$wrapper'" 4847ed6f5d66Smrg 4848fbc03982Smrg finalize=: 4849ed6f5d66Smrg for lib in $notinst_deplibs; do 4850ed6f5d66Smrg # Check to see that each library is installed. 4851ed6f5d66Smrg libdir= 4852ed6f5d66Smrg if test -f "$lib"; then 4853ed6f5d66Smrg func_source "$lib" 4854ed6f5d66Smrg fi 4855fbc03982Smrg libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` 4856ed6f5d66Smrg if test -n "$libdir" && test ! -f "$libfile"; then 4857fbc03982Smrg func_warning "'$lib' has not been installed in '$libdir'" 4858fbc03982Smrg finalize=false 4859ed6f5d66Smrg fi 4860ed6f5d66Smrg done 4861ed6f5d66Smrg 4862ed6f5d66Smrg relink_command= 4863ed6f5d66Smrg func_source "$wrapper" 4864ed6f5d66Smrg 4865ed6f5d66Smrg outputname= 4866fbc03982Smrg if test no = "$fast_install" && test -n "$relink_command"; then 4867ed6f5d66Smrg $opt_dry_run || { 4868fbc03982Smrg if $finalize; then 4869ed6f5d66Smrg tmpdir=`func_mktempdir` 4870ed6f5d66Smrg func_basename "$file$stripped_ext" 4871fbc03982Smrg file=$func_basename_result 4872fbc03982Smrg outputname=$tmpdir/$file 4873ed6f5d66Smrg # Replace the output file specification. 4874ed6f5d66Smrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 4875ed6f5d66Smrg 4876fbc03982Smrg $opt_quiet || { 48773d05230fSmrg func_quote_arg expand,pretty "$relink_command" 48783d05230fSmrg eval "func_echo $func_quote_arg_result" 4879ed6f5d66Smrg } 4880ed6f5d66Smrg if eval "$relink_command"; then : 4881ed6f5d66Smrg else 4882fbc03982Smrg func_error "error: relink '$file' with the above command before installing it" 4883ed6f5d66Smrg $opt_dry_run || ${RM}r "$tmpdir" 4884ed6f5d66Smrg continue 4885ed6f5d66Smrg fi 4886fbc03982Smrg file=$outputname 4887ed6f5d66Smrg else 4888fbc03982Smrg func_warning "cannot relink '$file'" 4889ed6f5d66Smrg fi 4890ed6f5d66Smrg } 4891ed6f5d66Smrg else 4892ed6f5d66Smrg # Install the binary that we compiled earlier. 4893ed6f5d66Smrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 4894ed6f5d66Smrg fi 4895ed6f5d66Smrg fi 4896ed6f5d66Smrg 4897ed6f5d66Smrg # remove .exe since cygwin /usr/bin/install will append another 4898ed6f5d66Smrg # one anyway 4899ed6f5d66Smrg case $install_prog,$host in 4900ed6f5d66Smrg */usr/bin/install*,*cygwin*) 4901ed6f5d66Smrg case $file:$destfile in 4902ed6f5d66Smrg *.exe:*.exe) 4903ed6f5d66Smrg # this is ok 4904ed6f5d66Smrg ;; 4905ed6f5d66Smrg *.exe:*) 4906ed6f5d66Smrg destfile=$destfile.exe 4907ed6f5d66Smrg ;; 4908ed6f5d66Smrg *:*.exe) 4909ed6f5d66Smrg func_stripname '' '.exe' "$destfile" 4910ed6f5d66Smrg destfile=$func_stripname_result 4911ed6f5d66Smrg ;; 4912ed6f5d66Smrg esac 4913ed6f5d66Smrg ;; 4914ed6f5d66Smrg esac 4915ed6f5d66Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 4916ed6f5d66Smrg $opt_dry_run || if test -n "$outputname"; then 4917ed6f5d66Smrg ${RM}r "$tmpdir" 4918ed6f5d66Smrg fi 4919ed6f5d66Smrg ;; 4920ed6f5d66Smrg esac 4921ed6f5d66Smrg done 4922ed6f5d66Smrg 4923ed6f5d66Smrg for file in $staticlibs; do 4924ed6f5d66Smrg func_basename "$file" 4925fbc03982Smrg name=$func_basename_result 4926ed6f5d66Smrg 4927ed6f5d66Smrg # Set up the ranlib parameters. 4928fbc03982Smrg oldlib=$destdir/$name 4929ed6f5d66Smrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 4930ed6f5d66Smrg tool_oldlib=$func_to_tool_file_result 4931ed6f5d66Smrg 4932ed6f5d66Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 4933ed6f5d66Smrg 4934ed6f5d66Smrg if test -n "$stripme" && test -n "$old_striplib"; then 4935ed6f5d66Smrg func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 4936ed6f5d66Smrg fi 4937ed6f5d66Smrg 4938ed6f5d66Smrg # Do each command in the postinstall commands. 4939ed6f5d66Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 4940ed6f5d66Smrg done 4941ed6f5d66Smrg 4942ed6f5d66Smrg test -n "$future_libdirs" && \ 4943fbc03982Smrg func_warning "remember to run '$progname --finish$future_libdirs'" 4944ed6f5d66Smrg 4945ed6f5d66Smrg if test -n "$current_libdirs"; then 4946ed6f5d66Smrg # Maybe just do a dry run. 4947ed6f5d66Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 4948fbc03982Smrg exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' 4949ed6f5d66Smrg else 4950ed6f5d66Smrg exit $EXIT_SUCCESS 4951ed6f5d66Smrg fi 4952ed6f5d66Smrg} 4953ed6f5d66Smrg 4954fbc03982Smrgtest install = "$opt_mode" && func_mode_install ${1+"$@"} 4955ed6f5d66Smrg 4956ed6f5d66Smrg 4957ed6f5d66Smrg# func_generate_dlsyms outputname originator pic_p 4958ed6f5d66Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 4959ed6f5d66Smrg# a dlpreopen symbol table. 4960ed6f5d66Smrgfunc_generate_dlsyms () 4961ed6f5d66Smrg{ 4962fbc03982Smrg $debug_cmd 4963fbc03982Smrg 4964fbc03982Smrg my_outputname=$1 4965fbc03982Smrg my_originator=$2 4966fbc03982Smrg my_pic_p=${3-false} 4967fbc03982Smrg my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` 4968ed6f5d66Smrg my_dlsyms= 4969ed6f5d66Smrg 4970fbc03982Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 4971ed6f5d66Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 4972fbc03982Smrg my_dlsyms=${my_outputname}S.c 4973ed6f5d66Smrg else 4974ed6f5d66Smrg func_error "not configured to extract global symbols from dlpreopened files" 4975ed6f5d66Smrg fi 4976ed6f5d66Smrg fi 4977ed6f5d66Smrg 4978ed6f5d66Smrg if test -n "$my_dlsyms"; then 4979ed6f5d66Smrg case $my_dlsyms in 4980ed6f5d66Smrg "") ;; 4981ed6f5d66Smrg *.c) 4982ed6f5d66Smrg # Discover the nlist of each of the dlfiles. 4983fbc03982Smrg nlist=$output_objdir/$my_outputname.nm 4984ed6f5d66Smrg 4985ed6f5d66Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 4986ed6f5d66Smrg 4987ed6f5d66Smrg # Parse the name list into a source file. 4988ed6f5d66Smrg func_verbose "creating $output_objdir/$my_dlsyms" 4989ed6f5d66Smrg 4990ed6f5d66Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 4991fbc03982Smrg/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ 4992fbc03982Smrg/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ 4993ed6f5d66Smrg 4994ed6f5d66Smrg#ifdef __cplusplus 4995ed6f5d66Smrgextern \"C\" { 4996ed6f5d66Smrg#endif 4997ed6f5d66Smrg 4998fbc03982Smrg#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 4999ed6f5d66Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 5000ed6f5d66Smrg#endif 5001ed6f5d66Smrg 5002ed6f5d66Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 5003fbc03982Smrg#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE 5004fbc03982Smrg/* DATA imports from DLLs on WIN32 can't be const, because runtime 5005ed6f5d66Smrg relocations are performed -- see ld's documentation on pseudo-relocs. */ 5006ed6f5d66Smrg# define LT_DLSYM_CONST 5007fbc03982Smrg#elif defined __osf__ 5008ed6f5d66Smrg/* This system does not cope well with relocations in const data. */ 5009ed6f5d66Smrg# define LT_DLSYM_CONST 5010ed6f5d66Smrg#else 5011ed6f5d66Smrg# define LT_DLSYM_CONST const 5012ed6f5d66Smrg#endif 5013ed6f5d66Smrg 5014fbc03982Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 5015fbc03982Smrg 5016ed6f5d66Smrg/* External symbol declarations for the compiler. */\ 5017ed6f5d66Smrg" 5018ed6f5d66Smrg 5019fbc03982Smrg if test yes = "$dlself"; then 5020fbc03982Smrg func_verbose "generating symbol list for '$output'" 5021ed6f5d66Smrg 5022ed6f5d66Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 5023ed6f5d66Smrg 5024ed6f5d66Smrg # Add our own program objects to the symbol list. 5025ed6f5d66Smrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 5026ed6f5d66Smrg for progfile in $progfiles; do 5027ed6f5d66Smrg func_to_tool_file "$progfile" func_convert_file_msys_to_w32 5028fbc03982Smrg func_verbose "extracting global C symbols from '$func_to_tool_file_result'" 5029ed6f5d66Smrg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 5030ed6f5d66Smrg done 5031ed6f5d66Smrg 5032ed6f5d66Smrg if test -n "$exclude_expsyms"; then 5033ed6f5d66Smrg $opt_dry_run || { 5034ed6f5d66Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 5035ed6f5d66Smrg eval '$MV "$nlist"T "$nlist"' 5036ed6f5d66Smrg } 5037ed6f5d66Smrg fi 5038ed6f5d66Smrg 5039ed6f5d66Smrg if test -n "$export_symbols_regex"; then 5040ed6f5d66Smrg $opt_dry_run || { 5041ed6f5d66Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 5042ed6f5d66Smrg eval '$MV "$nlist"T "$nlist"' 5043ed6f5d66Smrg } 5044ed6f5d66Smrg fi 5045ed6f5d66Smrg 5046ed6f5d66Smrg # Prepare the list of exported symbols 5047ed6f5d66Smrg if test -z "$export_symbols"; then 5048fbc03982Smrg export_symbols=$output_objdir/$outputname.exp 5049ed6f5d66Smrg $opt_dry_run || { 5050ed6f5d66Smrg $RM $export_symbols 5051fbc03982Smrg eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 5052ed6f5d66Smrg case $host in 5053a3680546Smrg *cygwin* | *mingw* | *windows* | *cegcc* ) 5054ed6f5d66Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 5055ed6f5d66Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 5056ed6f5d66Smrg ;; 5057ed6f5d66Smrg esac 5058ed6f5d66Smrg } 5059ed6f5d66Smrg else 5060ed6f5d66Smrg $opt_dry_run || { 5061fbc03982Smrg eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 5062ed6f5d66Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 5063ed6f5d66Smrg eval '$MV "$nlist"T "$nlist"' 5064ed6f5d66Smrg case $host in 5065a3680546Smrg *cygwin* | *mingw* | *windows* | *cegcc* ) 5066ed6f5d66Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 5067ed6f5d66Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 5068ed6f5d66Smrg ;; 5069ed6f5d66Smrg esac 5070ed6f5d66Smrg } 5071ed6f5d66Smrg fi 5072ed6f5d66Smrg fi 5073ed6f5d66Smrg 5074ed6f5d66Smrg for dlprefile in $dlprefiles; do 5075fbc03982Smrg func_verbose "extracting global C symbols from '$dlprefile'" 5076ed6f5d66Smrg func_basename "$dlprefile" 5077fbc03982Smrg name=$func_basename_result 5078ed6f5d66Smrg case $host in 5079a3680546Smrg *cygwin* | *mingw* | *windows* | *cegcc* ) 5080ed6f5d66Smrg # if an import library, we need to obtain dlname 5081ed6f5d66Smrg if func_win32_import_lib_p "$dlprefile"; then 5082ed6f5d66Smrg func_tr_sh "$dlprefile" 5083ed6f5d66Smrg eval "curr_lafile=\$libfile_$func_tr_sh_result" 5084fbc03982Smrg dlprefile_dlbasename= 5085ed6f5d66Smrg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 5086ed6f5d66Smrg # Use subshell, to avoid clobbering current variable values 5087ed6f5d66Smrg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 5088fbc03982Smrg if test -n "$dlprefile_dlname"; then 5089ed6f5d66Smrg func_basename "$dlprefile_dlname" 5090fbc03982Smrg dlprefile_dlbasename=$func_basename_result 5091ed6f5d66Smrg else 5092ed6f5d66Smrg # no lafile. user explicitly requested -dlpreopen <import library>. 5093ed6f5d66Smrg $sharedlib_from_linklib_cmd "$dlprefile" 5094ed6f5d66Smrg dlprefile_dlbasename=$sharedlib_from_linklib_result 5095ed6f5d66Smrg fi 5096ed6f5d66Smrg fi 5097ed6f5d66Smrg $opt_dry_run || { 5098fbc03982Smrg if test -n "$dlprefile_dlbasename"; then 5099ed6f5d66Smrg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 5100ed6f5d66Smrg else 5101ed6f5d66Smrg func_warning "Could not compute DLL name from $name" 5102ed6f5d66Smrg eval '$ECHO ": $name " >> "$nlist"' 5103ed6f5d66Smrg fi 5104ed6f5d66Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 5105a3680546Smrg case $host in 5106a3680546Smrg i[3456]86-*-mingw32*) 5107a3680546Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 5108a3680546Smrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 5109a3680546Smrg ;; 5110a3680546Smrg *) 5111a3680546Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 5112a3680546Smrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/__nm_//' >> '$nlist'" 5113a3680546Smrg ;; 5114a3680546Smrg esac 5115ed6f5d66Smrg } 5116ed6f5d66Smrg else # not an import lib 5117ed6f5d66Smrg $opt_dry_run || { 5118ed6f5d66Smrg eval '$ECHO ": $name " >> "$nlist"' 5119ed6f5d66Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 5120ed6f5d66Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 5121ed6f5d66Smrg } 5122ed6f5d66Smrg fi 5123ed6f5d66Smrg ;; 5124ed6f5d66Smrg *) 5125ed6f5d66Smrg $opt_dry_run || { 5126ed6f5d66Smrg eval '$ECHO ": $name " >> "$nlist"' 5127ed6f5d66Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 5128ed6f5d66Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 5129ed6f5d66Smrg } 5130ed6f5d66Smrg ;; 5131ed6f5d66Smrg esac 5132ed6f5d66Smrg done 5133ed6f5d66Smrg 5134ed6f5d66Smrg $opt_dry_run || { 5135ed6f5d66Smrg # Make sure we have at least an empty file. 5136ed6f5d66Smrg test -f "$nlist" || : > "$nlist" 5137ed6f5d66Smrg 5138ed6f5d66Smrg if test -n "$exclude_expsyms"; then 5139ed6f5d66Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 5140ed6f5d66Smrg $MV "$nlist"T "$nlist" 5141ed6f5d66Smrg fi 5142ed6f5d66Smrg 5143ed6f5d66Smrg # Try sorting and uniquifying the output. 5144ed6f5d66Smrg if $GREP -v "^: " < "$nlist" | 5145ed6f5d66Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 5146ed6f5d66Smrg sort -k 3 5147ed6f5d66Smrg else 5148ed6f5d66Smrg sort +2 5149ed6f5d66Smrg fi | 5150ed6f5d66Smrg uniq > "$nlist"S; then 5151ed6f5d66Smrg : 5152ed6f5d66Smrg else 5153ed6f5d66Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 5154ed6f5d66Smrg fi 5155ed6f5d66Smrg 5156ed6f5d66Smrg if test -f "$nlist"S; then 5157ed6f5d66Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 5158ed6f5d66Smrg else 5159ed6f5d66Smrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 5160ed6f5d66Smrg fi 5161ed6f5d66Smrg 5162fbc03982Smrg func_show_eval '$RM "${nlist}I"' 5163fbc03982Smrg if test -n "$global_symbol_to_import"; then 5164fbc03982Smrg eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' 5165fbc03982Smrg fi 5166fbc03982Smrg 5167ed6f5d66Smrg echo >> "$output_objdir/$my_dlsyms" "\ 5168ed6f5d66Smrg 5169ed6f5d66Smrg/* The mapping between symbol names and symbols. */ 5170ed6f5d66Smrgtypedef struct { 5171ed6f5d66Smrg const char *name; 5172ed6f5d66Smrg void *address; 5173ed6f5d66Smrg} lt_dlsymlist; 5174ed6f5d66Smrgextern LT_DLSYM_CONST lt_dlsymlist 5175fbc03982Smrglt_${my_prefix}_LTX_preloaded_symbols[];\ 5176fbc03982Smrg" 5177fbc03982Smrg 5178fbc03982Smrg if test -s "$nlist"I; then 5179fbc03982Smrg echo >> "$output_objdir/$my_dlsyms" "\ 5180fbc03982Smrgstatic void lt_syminit(void) 5181fbc03982Smrg{ 5182fbc03982Smrg LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; 5183fbc03982Smrg for (; symbol->name; ++symbol) 5184fbc03982Smrg {" 5185fbc03982Smrg $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" 5186fbc03982Smrg echo >> "$output_objdir/$my_dlsyms" "\ 5187fbc03982Smrg } 5188fbc03982Smrg}" 5189fbc03982Smrg fi 5190fbc03982Smrg echo >> "$output_objdir/$my_dlsyms" "\ 5191ed6f5d66SmrgLT_DLSYM_CONST lt_dlsymlist 5192ed6f5d66Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 5193fbc03982Smrg{ {\"$my_originator\", (void *) 0}," 5194fbc03982Smrg 5195fbc03982Smrg if test -s "$nlist"I; then 5196fbc03982Smrg echo >> "$output_objdir/$my_dlsyms" "\ 5197fbc03982Smrg {\"@INIT@\", (void *) <_syminit}," 5198fbc03982Smrg fi 5199ed6f5d66Smrg 5200ed6f5d66Smrg case $need_lib_prefix in 5201ed6f5d66Smrg no) 5202ed6f5d66Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 5203ed6f5d66Smrg ;; 5204ed6f5d66Smrg *) 5205ed6f5d66Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 5206ed6f5d66Smrg ;; 5207ed6f5d66Smrg esac 5208ed6f5d66Smrg echo >> "$output_objdir/$my_dlsyms" "\ 5209ed6f5d66Smrg {0, (void *) 0} 5210ed6f5d66Smrg}; 5211ed6f5d66Smrg 5212ed6f5d66Smrg/* This works around a problem in FreeBSD linker */ 5213ed6f5d66Smrg#ifdef FREEBSD_WORKAROUND 5214ed6f5d66Smrgstatic const void *lt_preloaded_setup() { 5215ed6f5d66Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 5216ed6f5d66Smrg} 5217ed6f5d66Smrg#endif 5218ed6f5d66Smrg 5219ed6f5d66Smrg#ifdef __cplusplus 5220ed6f5d66Smrg} 5221ed6f5d66Smrg#endif\ 5222ed6f5d66Smrg" 5223ed6f5d66Smrg } # !$opt_dry_run 5224ed6f5d66Smrg 5225ed6f5d66Smrg pic_flag_for_symtable= 5226ed6f5d66Smrg case "$compile_command " in 5227ed6f5d66Smrg *" -static "*) ;; 5228ed6f5d66Smrg *) 5229ed6f5d66Smrg case $host in 5230ed6f5d66Smrg # compiling the symbol table file with pic_flag works around 5231ed6f5d66Smrg # a FreeBSD bug that causes programs to crash when -lm is 5232ed6f5d66Smrg # linked before any other PIC object. But we must not use 5233ed6f5d66Smrg # pic_flag when linking with -static. The problem exists in 5234ed6f5d66Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 5235ed6f5d66Smrg *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 5236ed6f5d66Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 5237ed6f5d66Smrg *-*-hpux*) 5238ed6f5d66Smrg pic_flag_for_symtable=" $pic_flag" ;; 5239ed6f5d66Smrg *) 5240fbc03982Smrg $my_pic_p && pic_flag_for_symtable=" $pic_flag" 5241ed6f5d66Smrg ;; 5242ed6f5d66Smrg esac 5243ed6f5d66Smrg ;; 5244ed6f5d66Smrg esac 5245ed6f5d66Smrg symtab_cflags= 5246ed6f5d66Smrg for arg in $LTCFLAGS; do 5247ed6f5d66Smrg case $arg in 5248ed6f5d66Smrg -pie | -fpie | -fPIE) ;; 5249ed6f5d66Smrg *) func_append symtab_cflags " $arg" ;; 5250ed6f5d66Smrg esac 5251ed6f5d66Smrg done 5252ed6f5d66Smrg 5253ed6f5d66Smrg # Now compile the dynamic symbol file. 5254ed6f5d66Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 5255ed6f5d66Smrg 5256ed6f5d66Smrg # Clean up the generated files. 5257fbc03982Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' 5258ed6f5d66Smrg 5259ed6f5d66Smrg # Transform the symbol file into the correct name. 5260fbc03982Smrg symfileobj=$output_objdir/${my_outputname}S.$objext 5261ed6f5d66Smrg case $host in 5262a3680546Smrg *cygwin* | *mingw* | *windows* | *cegcc* ) 5263ed6f5d66Smrg if test -f "$output_objdir/$my_outputname.def"; then 5264ed6f5d66Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 5265ed6f5d66Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 5266ed6f5d66Smrg else 5267ed6f5d66Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5268ed6f5d66Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5269ed6f5d66Smrg fi 5270ed6f5d66Smrg ;; 5271ed6f5d66Smrg *) 5272ed6f5d66Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5273ed6f5d66Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5274ed6f5d66Smrg ;; 5275ed6f5d66Smrg esac 5276ed6f5d66Smrg ;; 5277ed6f5d66Smrg *) 5278fbc03982Smrg func_fatal_error "unknown suffix for '$my_dlsyms'" 5279ed6f5d66Smrg ;; 5280ed6f5d66Smrg esac 5281ed6f5d66Smrg else 5282ed6f5d66Smrg # We keep going just in case the user didn't refer to 5283ed6f5d66Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 5284ed6f5d66Smrg # really was required. 5285ed6f5d66Smrg 5286ed6f5d66Smrg # Nullify the symbol file. 5287ed6f5d66Smrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 5288ed6f5d66Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 5289ed6f5d66Smrg fi 5290ed6f5d66Smrg} 5291ed6f5d66Smrg 5292fbc03982Smrg# func_cygming_gnu_implib_p ARG 5293fbc03982Smrg# This predicate returns with zero status (TRUE) if 5294fbc03982Smrg# ARG is a GNU/binutils-style import library. Returns 5295fbc03982Smrg# with nonzero status (FALSE) otherwise. 5296fbc03982Smrgfunc_cygming_gnu_implib_p () 5297fbc03982Smrg{ 5298fbc03982Smrg $debug_cmd 5299fbc03982Smrg 5300fbc03982Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 5301fbc03982Smrg 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)$'` 5302fbc03982Smrg test -n "$func_cygming_gnu_implib_tmp" 5303fbc03982Smrg} 5304fbc03982Smrg 5305fbc03982Smrg# func_cygming_ms_implib_p ARG 5306fbc03982Smrg# This predicate returns with zero status (TRUE) if 5307fbc03982Smrg# ARG is an MS-style import library. Returns 5308fbc03982Smrg# with nonzero status (FALSE) otherwise. 5309fbc03982Smrgfunc_cygming_ms_implib_p () 5310fbc03982Smrg{ 5311fbc03982Smrg $debug_cmd 5312fbc03982Smrg 5313fbc03982Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 5314fbc03982Smrg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 5315fbc03982Smrg test -n "$func_cygming_ms_implib_tmp" 5316fbc03982Smrg} 5317fbc03982Smrg 5318ed6f5d66Smrg# func_win32_libid arg 5319ed6f5d66Smrg# return the library type of file 'arg' 5320ed6f5d66Smrg# 5321ed6f5d66Smrg# Need a lot of goo to handle *both* DLLs and import libs 5322ed6f5d66Smrg# Has to be a shell function in order to 'eat' the argument 5323ed6f5d66Smrg# that is supplied when $file_magic_command is called. 5324ed6f5d66Smrg# Despite the name, also deal with 64 bit binaries. 5325ed6f5d66Smrgfunc_win32_libid () 5326ed6f5d66Smrg{ 5327fbc03982Smrg $debug_cmd 5328fbc03982Smrg 5329fbc03982Smrg win32_libid_type=unknown 5330ed6f5d66Smrg win32_fileres=`file -L $1 2>/dev/null` 5331ed6f5d66Smrg case $win32_fileres in 5332ed6f5d66Smrg *ar\ archive\ import\ library*) # definitely import 5333ed6f5d66Smrg win32_libid_type="x86 archive import" 5334ed6f5d66Smrg ;; 5335ed6f5d66Smrg *ar\ archive*) # could be an import, or static 5336ed6f5d66Smrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 5337ed6f5d66Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 5338a3680546Smrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64|pe-aarch64)' >/dev/null; then 5339fbc03982Smrg case $nm_interface in 5340fbc03982Smrg "MS dumpbin") 5341fbc03982Smrg if func_cygming_ms_implib_p "$1" || 5342fbc03982Smrg func_cygming_gnu_implib_p "$1" 5343fbc03982Smrg then 5344fbc03982Smrg win32_nmres=import 5345fbc03982Smrg else 5346fbc03982Smrg win32_nmres= 5347fbc03982Smrg fi 5348fbc03982Smrg ;; 5349fbc03982Smrg *) 5350fbc03982Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 5351fbc03982Smrg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 5352fbc03982Smrg $SED -n -e ' 5353ed6f5d66Smrg 1,100{ 5354ed6f5d66Smrg / I /{ 5355fbc03982Smrg s|.*|import| 5356ed6f5d66Smrg p 5357ed6f5d66Smrg q 5358ed6f5d66Smrg } 5359ed6f5d66Smrg }'` 5360fbc03982Smrg ;; 5361fbc03982Smrg esac 5362ed6f5d66Smrg case $win32_nmres in 5363ed6f5d66Smrg import*) win32_libid_type="x86 archive import";; 5364ed6f5d66Smrg *) win32_libid_type="x86 archive static";; 5365ed6f5d66Smrg esac 5366ed6f5d66Smrg fi 5367ed6f5d66Smrg ;; 5368ed6f5d66Smrg *DLL*) 5369ed6f5d66Smrg win32_libid_type="x86 DLL" 5370ed6f5d66Smrg ;; 5371ed6f5d66Smrg *executable*) # but shell scripts are "executable" too... 5372ed6f5d66Smrg case $win32_fileres in 5373ed6f5d66Smrg *MS\ Windows\ PE\ Intel*) 5374ed6f5d66Smrg win32_libid_type="x86 DLL" 5375ed6f5d66Smrg ;; 5376ed6f5d66Smrg esac 5377ed6f5d66Smrg ;; 5378ed6f5d66Smrg esac 5379ed6f5d66Smrg $ECHO "$win32_libid_type" 5380ed6f5d66Smrg} 5381ed6f5d66Smrg 5382ed6f5d66Smrg# func_cygming_dll_for_implib ARG 5383ed6f5d66Smrg# 5384ed6f5d66Smrg# Platform-specific function to extract the 5385ed6f5d66Smrg# name of the DLL associated with the specified 5386ed6f5d66Smrg# import library ARG. 5387ed6f5d66Smrg# Invoked by eval'ing the libtool variable 5388ed6f5d66Smrg# $sharedlib_from_linklib_cmd 5389ed6f5d66Smrg# Result is available in the variable 5390ed6f5d66Smrg# $sharedlib_from_linklib_result 5391ed6f5d66Smrgfunc_cygming_dll_for_implib () 5392ed6f5d66Smrg{ 5393fbc03982Smrg $debug_cmd 5394fbc03982Smrg 5395ed6f5d66Smrg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 5396ed6f5d66Smrg} 5397ed6f5d66Smrg 5398ed6f5d66Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 5399ed6f5d66Smrg# 5400ed6f5d66Smrg# The is the core of a fallback implementation of a 5401ed6f5d66Smrg# platform-specific function to extract the name of the 5402ed6f5d66Smrg# DLL associated with the specified import library LIBNAME. 5403ed6f5d66Smrg# 5404ed6f5d66Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending 5405ed6f5d66Smrg# on the platform and compiler that created the implib. 5406ed6f5d66Smrg# 5407ed6f5d66Smrg# Echos the name of the DLL associated with the 5408ed6f5d66Smrg# specified import library. 5409ed6f5d66Smrgfunc_cygming_dll_for_implib_fallback_core () 5410ed6f5d66Smrg{ 5411fbc03982Smrg $debug_cmd 5412fbc03982Smrg 5413ed6f5d66Smrg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 5414ed6f5d66Smrg $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 5415ed6f5d66Smrg $SED '/^Contents of section '"$match_literal"':/{ 5416ed6f5d66Smrg # Place marker at beginning of archive member dllname section 5417ed6f5d66Smrg s/.*/====MARK====/ 5418ed6f5d66Smrg p 5419ed6f5d66Smrg d 5420ed6f5d66Smrg } 5421ed6f5d66Smrg # These lines can sometimes be longer than 43 characters, but 5422ed6f5d66Smrg # are always uninteresting 5423ed6f5d66Smrg /:[ ]*file format pe[i]\{,1\}-/d 5424ed6f5d66Smrg /^In archive [^:]*:/d 5425ed6f5d66Smrg # Ensure marker is printed 5426ed6f5d66Smrg /^====MARK====/p 5427ed6f5d66Smrg # Remove all lines with less than 43 characters 5428ed6f5d66Smrg /^.\{43\}/!d 5429ed6f5d66Smrg # From remaining lines, remove first 43 characters 5430ed6f5d66Smrg s/^.\{43\}//' | 5431ed6f5d66Smrg $SED -n ' 5432ed6f5d66Smrg # Join marker and all lines until next marker into a single line 5433ed6f5d66Smrg /^====MARK====/ b para 5434ed6f5d66Smrg H 5435ed6f5d66Smrg $ b para 5436ed6f5d66Smrg b 5437ed6f5d66Smrg :para 5438ed6f5d66Smrg x 5439ed6f5d66Smrg s/\n//g 5440ed6f5d66Smrg # Remove the marker 5441ed6f5d66Smrg s/^====MARK====// 5442ed6f5d66Smrg # Remove trailing dots and whitespace 5443ed6f5d66Smrg s/[\. \t]*$// 5444ed6f5d66Smrg # Print 5445ed6f5d66Smrg /./p' | 5446ed6f5d66Smrg # we now have a list, one entry per line, of the stringified 5447ed6f5d66Smrg # contents of the appropriate section of all members of the 5448fbc03982Smrg # archive that possess that section. Heuristic: eliminate 5449fbc03982Smrg # all those that have a first or second character that is 5450ed6f5d66Smrg # a '.' (that is, objdump's representation of an unprintable 5451ed6f5d66Smrg # character.) This should work for all archives with less than 5452ed6f5d66Smrg # 0x302f exports -- but will fail for DLLs whose name actually 5453ed6f5d66Smrg # begins with a literal '.' or a single character followed by 5454ed6f5d66Smrg # a '.'. 5455ed6f5d66Smrg # 5456ed6f5d66Smrg # Of those that remain, print the first one. 5457ed6f5d66Smrg $SED -e '/^\./d;/^.\./d;q' 5458ed6f5d66Smrg} 5459ed6f5d66Smrg 5460ed6f5d66Smrg# func_cygming_dll_for_implib_fallback ARG 5461ed6f5d66Smrg# Platform-specific function to extract the 5462ed6f5d66Smrg# name of the DLL associated with the specified 5463ed6f5d66Smrg# import library ARG. 5464ed6f5d66Smrg# 5465ed6f5d66Smrg# This fallback implementation is for use when $DLLTOOL 5466ed6f5d66Smrg# does not support the --identify-strict option. 5467ed6f5d66Smrg# Invoked by eval'ing the libtool variable 5468ed6f5d66Smrg# $sharedlib_from_linklib_cmd 5469ed6f5d66Smrg# Result is available in the variable 5470ed6f5d66Smrg# $sharedlib_from_linklib_result 5471ed6f5d66Smrgfunc_cygming_dll_for_implib_fallback () 5472ed6f5d66Smrg{ 5473fbc03982Smrg $debug_cmd 5474fbc03982Smrg 5475fbc03982Smrg if func_cygming_gnu_implib_p "$1"; then 5476ed6f5d66Smrg # binutils import library 5477ed6f5d66Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 5478fbc03982Smrg elif func_cygming_ms_implib_p "$1"; then 5479ed6f5d66Smrg # ms-generated import library 5480ed6f5d66Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 5481ed6f5d66Smrg else 5482ed6f5d66Smrg # unknown 5483fbc03982Smrg sharedlib_from_linklib_result= 5484ed6f5d66Smrg fi 5485ed6f5d66Smrg} 5486ed6f5d66Smrg 5487ed6f5d66Smrg 5488ed6f5d66Smrg# func_extract_an_archive dir oldlib 5489ed6f5d66Smrgfunc_extract_an_archive () 5490ed6f5d66Smrg{ 5491fbc03982Smrg $debug_cmd 5492fbc03982Smrg 5493fbc03982Smrg f_ex_an_ar_dir=$1; shift 5494fbc03982Smrg f_ex_an_ar_oldlib=$1 5495fbc03982Smrg if test yes = "$lock_old_archive_extraction"; then 5496ed6f5d66Smrg lockfile=$f_ex_an_ar_oldlib.lock 5497ed6f5d66Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 5498ed6f5d66Smrg func_echo "Waiting for $lockfile to be removed" 5499ed6f5d66Smrg sleep 2 5500ed6f5d66Smrg done 5501ed6f5d66Smrg fi 5502ed6f5d66Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 5503ed6f5d66Smrg 'stat=$?; rm -f "$lockfile"; exit $stat' 5504fbc03982Smrg if test yes = "$lock_old_archive_extraction"; then 5505ed6f5d66Smrg $opt_dry_run || rm -f "$lockfile" 5506ed6f5d66Smrg fi 5507ed6f5d66Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 5508ed6f5d66Smrg : 5509ed6f5d66Smrg else 5510ed6f5d66Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 5511ed6f5d66Smrg fi 5512ed6f5d66Smrg} 5513ed6f5d66Smrg 5514ed6f5d66Smrg 5515ed6f5d66Smrg# func_extract_archives gentop oldlib ... 5516ed6f5d66Smrgfunc_extract_archives () 5517ed6f5d66Smrg{ 5518fbc03982Smrg $debug_cmd 5519fbc03982Smrg 5520fbc03982Smrg my_gentop=$1; shift 5521ed6f5d66Smrg my_oldlibs=${1+"$@"} 5522fbc03982Smrg my_oldobjs= 5523fbc03982Smrg my_xlib= 5524fbc03982Smrg my_xabs= 5525fbc03982Smrg my_xdir= 5526ed6f5d66Smrg 5527ed6f5d66Smrg for my_xlib in $my_oldlibs; do 5528ed6f5d66Smrg # Extract the objects. 5529ed6f5d66Smrg case $my_xlib in 5530fbc03982Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; 5531ed6f5d66Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 5532ed6f5d66Smrg esac 5533ed6f5d66Smrg func_basename "$my_xlib" 5534fbc03982Smrg my_xlib=$func_basename_result 5535ed6f5d66Smrg my_xlib_u=$my_xlib 5536ed6f5d66Smrg while :; do 5537ed6f5d66Smrg case " $extracted_archives " in 5538ed6f5d66Smrg *" $my_xlib_u "*) 5539ed6f5d66Smrg func_arith $extracted_serial + 1 5540ed6f5d66Smrg extracted_serial=$func_arith_result 5541ed6f5d66Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 5542ed6f5d66Smrg *) break ;; 5543ed6f5d66Smrg esac 5544ed6f5d66Smrg done 5545ed6f5d66Smrg extracted_archives="$extracted_archives $my_xlib_u" 5546fbc03982Smrg my_xdir=$my_gentop/$my_xlib_u 5547ed6f5d66Smrg 5548ed6f5d66Smrg func_mkdir_p "$my_xdir" 5549ed6f5d66Smrg 5550ed6f5d66Smrg case $host in 5551ed6f5d66Smrg *-darwin*) 5552ed6f5d66Smrg func_verbose "Extracting $my_xabs" 5553ed6f5d66Smrg # Do not bother doing anything if just a dry run 5554ed6f5d66Smrg $opt_dry_run || { 5555ed6f5d66Smrg darwin_orig_dir=`pwd` 5556ed6f5d66Smrg cd $my_xdir || exit $? 5557ed6f5d66Smrg darwin_archive=$my_xabs 5558ed6f5d66Smrg darwin_curdir=`pwd` 5559fbc03982Smrg func_basename "$darwin_archive" 5560fbc03982Smrg darwin_base_archive=$func_basename_result 5561ed6f5d66Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 5562ed6f5d66Smrg if test -n "$darwin_arches"; then 5563ed6f5d66Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 5564ed6f5d66Smrg darwin_arch= 5565ed6f5d66Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 5566fbc03982Smrg for darwin_arch in $darwin_arches; do 5567fbc03982Smrg func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" 5568fbc03982Smrg $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" 5569fbc03982Smrg cd "unfat-$$/$darwin_base_archive-$darwin_arch" 5570fbc03982Smrg func_extract_an_archive "`pwd`" "$darwin_base_archive" 5571ed6f5d66Smrg cd "$darwin_curdir" 5572fbc03982Smrg $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" 5573ed6f5d66Smrg done # $darwin_arches 5574ed6f5d66Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 5575fbc03982Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` 5576ed6f5d66Smrg darwin_file= 5577ed6f5d66Smrg darwin_files= 5578ed6f5d66Smrg for darwin_file in $darwin_filelist; do 5579ed6f5d66Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 5580ed6f5d66Smrg $LIPO -create -output "$darwin_file" $darwin_files 5581ed6f5d66Smrg done # $darwin_filelist 5582ed6f5d66Smrg $RM -rf unfat-$$ 5583ed6f5d66Smrg cd "$darwin_orig_dir" 5584ed6f5d66Smrg else 5585ed6f5d66Smrg cd $darwin_orig_dir 5586ed6f5d66Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 5587ed6f5d66Smrg fi # $darwin_arches 5588ed6f5d66Smrg } # !$opt_dry_run 5589ed6f5d66Smrg ;; 5590ed6f5d66Smrg *) 5591ed6f5d66Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 5592ed6f5d66Smrg ;; 5593ed6f5d66Smrg esac 5594ed6f5d66Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 5595ed6f5d66Smrg done 5596ed6f5d66Smrg 5597fbc03982Smrg func_extract_archives_result=$my_oldobjs 5598ed6f5d66Smrg} 5599ed6f5d66Smrg 5600ed6f5d66Smrg 5601ed6f5d66Smrg# func_emit_wrapper [arg=no] 5602ed6f5d66Smrg# 5603ed6f5d66Smrg# Emit a libtool wrapper script on stdout. 5604ed6f5d66Smrg# Don't directly open a file because we may want to 5605a3680546Smrg# incorporate the script contents within a cygwin/mingw/windows 5606ed6f5d66Smrg# wrapper executable. Must ONLY be called from within 5607ed6f5d66Smrg# func_mode_link because it depends on a number of variables 5608ed6f5d66Smrg# set therein. 5609ed6f5d66Smrg# 5610ed6f5d66Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 5611ed6f5d66Smrg# variable will take. If 'yes', then the emitted script 5612fbc03982Smrg# will assume that the directory where it is stored is 5613a3680546Smrg# the $objdir directory. This is a cygwin/mingw/windows-specific 5614ed6f5d66Smrg# behavior. 5615ed6f5d66Smrgfunc_emit_wrapper () 5616ed6f5d66Smrg{ 5617ed6f5d66Smrg func_emit_wrapper_arg1=${1-no} 5618ed6f5d66Smrg 5619ed6f5d66Smrg $ECHO "\ 5620ed6f5d66Smrg#! $SHELL 5621ed6f5d66Smrg 5622ed6f5d66Smrg# $output - temporary wrapper script for $objdir/$outputname 5623fbc03982Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5624ed6f5d66Smrg# 5625ed6f5d66Smrg# The $output program cannot be directly executed until all the libtool 5626ed6f5d66Smrg# libraries that it depends on are installed. 5627ed6f5d66Smrg# 5628ed6f5d66Smrg# This wrapper script should never be moved out of the build directory. 5629ed6f5d66Smrg# If it is, it will not operate correctly. 5630ed6f5d66Smrg 5631ed6f5d66Smrg# Sed substitution that helps us do robust quoting. It backslashifies 5632ed6f5d66Smrg# metacharacters that are still active within double-quoted strings. 5633ed6f5d66Smrgsed_quote_subst='$sed_quote_subst' 5634ed6f5d66Smrg 5635ed6f5d66Smrg# Be Bourne compatible 5636ed6f5d66Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 5637ed6f5d66Smrg emulate sh 5638ed6f5d66Smrg NULLCMD=: 5639ed6f5d66Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 5640ed6f5d66Smrg # is contrary to our usage. Disable this feature. 5641ed6f5d66Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 5642ed6f5d66Smrg setopt NO_GLOB_SUBST 5643ed6f5d66Smrgelse 5644ed6f5d66Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 5645ed6f5d66Smrgfi 5646ed6f5d66SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 5647ed6f5d66SmrgDUALCASE=1; export DUALCASE # for MKS sh 5648ed6f5d66Smrg 5649ed6f5d66Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 5650ed6f5d66Smrg# if CDPATH is set. 5651ed6f5d66Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 5652ed6f5d66Smrg 5653ed6f5d66Smrgrelink_command=\"$relink_command\" 5654ed6f5d66Smrg 5655ed6f5d66Smrg# This environment variable determines our operation mode. 5656ed6f5d66Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 5657ed6f5d66Smrg # install mode needs the following variables: 5658ed6f5d66Smrg generated_by_libtool_version='$macro_version' 5659ed6f5d66Smrg notinst_deplibs='$notinst_deplibs' 5660ed6f5d66Smrgelse 5661ed6f5d66Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 5662ed6f5d66Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 5663ed6f5d66Smrg file=\"\$0\"" 5664ed6f5d66Smrg 56653d05230fSmrg func_quote_arg pretty "$ECHO" 56663d05230fSmrg qECHO=$func_quote_arg_result 5667ed6f5d66Smrg $ECHO "\ 5668ed6f5d66Smrg 5669ed6f5d66Smrg# A function that is used when there is no print builtin or printf. 5670ed6f5d66Smrgfunc_fallback_echo () 5671ed6f5d66Smrg{ 5672ed6f5d66Smrg eval 'cat <<_LTECHO_EOF 5673ed6f5d66Smrg\$1 5674ed6f5d66Smrg_LTECHO_EOF' 5675ed6f5d66Smrg} 56763d05230fSmrg ECHO=$qECHO 5677ed6f5d66Smrg fi 5678ed6f5d66Smrg 5679ed6f5d66Smrg# Very basic option parsing. These options are (a) specific to 5680ed6f5d66Smrg# the libtool wrapper, (b) are identical between the wrapper 5681fbc03982Smrg# /script/ and the wrapper /executable/ that is used only on 5682ed6f5d66Smrg# windows platforms, and (c) all begin with the string "--lt-" 5683fbc03982Smrg# (application programs are unlikely to have options that match 5684ed6f5d66Smrg# this pattern). 5685ed6f5d66Smrg# 5686ed6f5d66Smrg# There are only two supported options: --lt-debug and 5687ed6f5d66Smrg# --lt-dump-script. There is, deliberately, no --lt-help. 5688ed6f5d66Smrg# 5689ed6f5d66Smrg# The first argument to this parsing function should be the 5690ed6f5d66Smrg# script's $0 value, followed by "$@". 5691ed6f5d66Smrglt_option_debug= 5692ed6f5d66Smrgfunc_parse_lt_options () 5693ed6f5d66Smrg{ 5694ed6f5d66Smrg lt_script_arg0=\$0 5695ed6f5d66Smrg shift 5696ed6f5d66Smrg for lt_opt 5697ed6f5d66Smrg do 5698ed6f5d66Smrg case \"\$lt_opt\" in 5699ed6f5d66Smrg --lt-debug) lt_option_debug=1 ;; 5700ed6f5d66Smrg --lt-dump-script) 5701ed6f5d66Smrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 5702ed6f5d66Smrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 5703ed6f5d66Smrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 5704ed6f5d66Smrg cat \"\$lt_dump_D/\$lt_dump_F\" 5705ed6f5d66Smrg exit 0 5706ed6f5d66Smrg ;; 5707ed6f5d66Smrg --lt-*) 5708ed6f5d66Smrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 5709ed6f5d66Smrg exit 1 5710ed6f5d66Smrg ;; 5711ed6f5d66Smrg esac 5712ed6f5d66Smrg done 5713ed6f5d66Smrg 5714ed6f5d66Smrg # Print the debug banner immediately: 5715ed6f5d66Smrg if test -n \"\$lt_option_debug\"; then 5716fbc03982Smrg echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 5717ed6f5d66Smrg fi 5718ed6f5d66Smrg} 5719ed6f5d66Smrg 5720ed6f5d66Smrg# Used when --lt-debug. Prints its arguments to stdout 5721ed6f5d66Smrg# (redirection is the responsibility of the caller) 5722ed6f5d66Smrgfunc_lt_dump_args () 5723ed6f5d66Smrg{ 5724ed6f5d66Smrg lt_dump_args_N=1; 5725ed6f5d66Smrg for lt_arg 5726ed6f5d66Smrg do 5727fbc03982Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" 5728ed6f5d66Smrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 5729ed6f5d66Smrg done 5730ed6f5d66Smrg} 5731ed6f5d66Smrg 5732ed6f5d66Smrg# Core function for launching the target application 5733ed6f5d66Smrgfunc_exec_program_core () 5734ed6f5d66Smrg{ 5735ed6f5d66Smrg" 5736ed6f5d66Smrg case $host in 5737ed6f5d66Smrg # Backslashes separate directories on plain windows 5738a3680546Smrg *-*-mingw* | *-*-windows* | *-*-os2* | *-cegcc*) 5739ed6f5d66Smrg $ECHO "\ 5740ed6f5d66Smrg if test -n \"\$lt_option_debug\"; then 5741fbc03982Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 5742ed6f5d66Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 5743ed6f5d66Smrg fi 5744ed6f5d66Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 5745ed6f5d66Smrg" 5746ed6f5d66Smrg ;; 5747ed6f5d66Smrg 5748ed6f5d66Smrg *) 5749ed6f5d66Smrg $ECHO "\ 5750ed6f5d66Smrg if test -n \"\$lt_option_debug\"; then 5751fbc03982Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 5752ed6f5d66Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 5753ed6f5d66Smrg fi 5754ed6f5d66Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 5755ed6f5d66Smrg" 5756ed6f5d66Smrg ;; 5757ed6f5d66Smrg esac 5758ed6f5d66Smrg $ECHO "\ 5759ed6f5d66Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 5760ed6f5d66Smrg exit 1 5761ed6f5d66Smrg} 5762ed6f5d66Smrg 5763ed6f5d66Smrg# A function to encapsulate launching the target application 5764ed6f5d66Smrg# Strips options in the --lt-* namespace from \$@ and 5765ed6f5d66Smrg# launches target application with the remaining arguments. 5766ed6f5d66Smrgfunc_exec_program () 5767ed6f5d66Smrg{ 5768ed6f5d66Smrg case \" \$* \" in 5769ed6f5d66Smrg *\\ --lt-*) 5770ed6f5d66Smrg for lt_wr_arg 5771ed6f5d66Smrg do 5772ed6f5d66Smrg case \$lt_wr_arg in 5773ed6f5d66Smrg --lt-*) ;; 5774ed6f5d66Smrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 5775ed6f5d66Smrg esac 5776ed6f5d66Smrg shift 5777ed6f5d66Smrg done ;; 5778ed6f5d66Smrg esac 5779ed6f5d66Smrg func_exec_program_core \${1+\"\$@\"} 5780ed6f5d66Smrg} 5781ed6f5d66Smrg 5782ed6f5d66Smrg # Parse options 5783ed6f5d66Smrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 5784ed6f5d66Smrg 5785ed6f5d66Smrg # Find the directory that this script lives in. 5786ed6f5d66Smrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 5787ed6f5d66Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 5788ed6f5d66Smrg 5789ed6f5d66Smrg # Follow symbolic links until we get to the real thisdir. 5790ed6f5d66Smrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 5791ed6f5d66Smrg while test -n \"\$file\"; do 5792ed6f5d66Smrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 5793ed6f5d66Smrg 5794ed6f5d66Smrg # If there was a directory component, then change thisdir. 5795ed6f5d66Smrg if test \"x\$destdir\" != \"x\$file\"; then 5796ed6f5d66Smrg case \"\$destdir\" in 5797ed6f5d66Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 5798ed6f5d66Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 5799ed6f5d66Smrg esac 5800ed6f5d66Smrg fi 5801ed6f5d66Smrg 5802ed6f5d66Smrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 5803ed6f5d66Smrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 5804ed6f5d66Smrg done 5805ed6f5d66Smrg 5806a3680546Smrg # Usually 'no', except on cygwin/mingw/windows when embedded into 5807ed6f5d66Smrg # the cwrapper. 5808ed6f5d66Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 5809ed6f5d66Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 5810ed6f5d66Smrg # special case for '.' 5811ed6f5d66Smrg if test \"\$thisdir\" = \".\"; then 5812ed6f5d66Smrg thisdir=\`pwd\` 5813ed6f5d66Smrg fi 5814ed6f5d66Smrg # remove .libs from thisdir 5815ed6f5d66Smrg case \"\$thisdir\" in 5816ed6f5d66Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 5817ed6f5d66Smrg $objdir ) thisdir=. ;; 5818ed6f5d66Smrg esac 5819ed6f5d66Smrg fi 5820ed6f5d66Smrg 5821ed6f5d66Smrg # Try to get the absolute directory name. 5822ed6f5d66Smrg absdir=\`cd \"\$thisdir\" && pwd\` 5823ed6f5d66Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 5824ed6f5d66Smrg" 5825ed6f5d66Smrg 5826fbc03982Smrg if test yes = "$fast_install"; then 5827ed6f5d66Smrg $ECHO "\ 5828ed6f5d66Smrg program=lt-'$outputname'$exeext 5829ed6f5d66Smrg progdir=\"\$thisdir/$objdir\" 5830ed6f5d66Smrg 5831ed6f5d66Smrg if test ! -f \"\$progdir/\$program\" || 5832fbc03982Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ 5833ed6f5d66Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 5834ed6f5d66Smrg 5835ed6f5d66Smrg file=\"\$\$-\$program\" 5836ed6f5d66Smrg 5837ed6f5d66Smrg if test ! -d \"\$progdir\"; then 5838ed6f5d66Smrg $MKDIR \"\$progdir\" 5839ed6f5d66Smrg else 5840ed6f5d66Smrg $RM \"\$progdir/\$file\" 5841ed6f5d66Smrg fi" 5842ed6f5d66Smrg 5843ed6f5d66Smrg $ECHO "\ 5844ed6f5d66Smrg 5845ed6f5d66Smrg # relink executable if necessary 5846ed6f5d66Smrg if test -n \"\$relink_command\"; then 5847ed6f5d66Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 5848ed6f5d66Smrg else 5849fbc03982Smrg \$ECHO \"\$relink_command_output\" >&2 5850ed6f5d66Smrg $RM \"\$progdir/\$file\" 5851ed6f5d66Smrg exit 1 5852ed6f5d66Smrg fi 5853ed6f5d66Smrg fi 5854ed6f5d66Smrg 5855ed6f5d66Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 5856ed6f5d66Smrg { $RM \"\$progdir/\$program\"; 5857ed6f5d66Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 5858ed6f5d66Smrg $RM \"\$progdir/\$file\" 5859ed6f5d66Smrg fi" 5860ed6f5d66Smrg else 5861ed6f5d66Smrg $ECHO "\ 5862ed6f5d66Smrg program='$outputname' 5863ed6f5d66Smrg progdir=\"\$thisdir/$objdir\" 5864ed6f5d66Smrg" 5865ed6f5d66Smrg fi 5866ed6f5d66Smrg 5867ed6f5d66Smrg $ECHO "\ 5868ed6f5d66Smrg 5869ed6f5d66Smrg if test -f \"\$progdir/\$program\"; then" 5870ed6f5d66Smrg 5871ed6f5d66Smrg # fixup the dll searchpath if we need to. 5872ed6f5d66Smrg # 5873ed6f5d66Smrg # Fix the DLL searchpath if we need to. Do this before prepending 5874ed6f5d66Smrg # to shlibpath, because on Windows, both are PATH and uninstalled 5875ed6f5d66Smrg # libraries must come first. 5876ed6f5d66Smrg if test -n "$dllsearchpath"; then 5877ed6f5d66Smrg $ECHO "\ 5878ed6f5d66Smrg # Add the dll search path components to the executable PATH 5879ed6f5d66Smrg PATH=$dllsearchpath:\$PATH 5880ed6f5d66Smrg" 5881ed6f5d66Smrg fi 5882ed6f5d66Smrg 5883ed6f5d66Smrg # Export our shlibpath_var if we have one. 5884fbc03982Smrg if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5885ed6f5d66Smrg $ECHO "\ 5886ed6f5d66Smrg # Add our own library path to $shlibpath_var 5887ed6f5d66Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 5888ed6f5d66Smrg 5889ed6f5d66Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 5890ed6f5d66Smrg # The second colon is a workaround for a bug in BeOS R4 sed 5891ed6f5d66Smrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 5892ed6f5d66Smrg 5893ed6f5d66Smrg export $shlibpath_var 5894ed6f5d66Smrg" 5895ed6f5d66Smrg fi 5896ed6f5d66Smrg 5897ed6f5d66Smrg $ECHO "\ 5898ed6f5d66Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 5899ed6f5d66Smrg # Run the actual program with our arguments. 5900ed6f5d66Smrg func_exec_program \${1+\"\$@\"} 5901ed6f5d66Smrg fi 5902ed6f5d66Smrg else 5903ed6f5d66Smrg # The program doesn't exist. 5904fbc03982Smrg \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 5905ed6f5d66Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 5906ed6f5d66Smrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 5907ed6f5d66Smrg exit 1 5908ed6f5d66Smrg fi 5909ed6f5d66Smrgfi\ 5910ed6f5d66Smrg" 5911ed6f5d66Smrg} 5912ed6f5d66Smrg 5913ed6f5d66Smrg 5914ed6f5d66Smrg# func_emit_cwrapperexe_src 5915ed6f5d66Smrg# emit the source code for a wrapper executable on stdout 5916ed6f5d66Smrg# Must ONLY be called from within func_mode_link because 5917ed6f5d66Smrg# it depends on a number of variable set therein. 5918ed6f5d66Smrgfunc_emit_cwrapperexe_src () 5919ed6f5d66Smrg{ 5920ed6f5d66Smrg cat <<EOF 5921ed6f5d66Smrg 5922ed6f5d66Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 5923fbc03982Smrg Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5924ed6f5d66Smrg 5925ed6f5d66Smrg The $output program cannot be directly executed until all the libtool 5926ed6f5d66Smrg libraries that it depends on are installed. 5927ed6f5d66Smrg 5928ed6f5d66Smrg This wrapper executable should never be moved out of the build directory. 5929ed6f5d66Smrg If it is, it will not operate correctly. 5930ed6f5d66Smrg*/ 5931ed6f5d66SmrgEOF 5932ed6f5d66Smrg cat <<"EOF" 5933ed6f5d66Smrg#ifdef _MSC_VER 5934ed6f5d66Smrg# define _CRT_SECURE_NO_DEPRECATE 1 5935ed6f5d66Smrg#endif 5936ed6f5d66Smrg#include <stdio.h> 5937ed6f5d66Smrg#include <stdlib.h> 5938a3680546Smrg#if defined _WIN32 && !defined __GNUC__ 5939ed6f5d66Smrg# include <direct.h> 5940ed6f5d66Smrg# include <process.h> 5941ed6f5d66Smrg# include <io.h> 5942ed6f5d66Smrg#else 5943ed6f5d66Smrg# include <unistd.h> 5944ed6f5d66Smrg# include <stdint.h> 5945ed6f5d66Smrg# ifdef __CYGWIN__ 5946ed6f5d66Smrg# include <io.h> 5947ed6f5d66Smrg# endif 5948ed6f5d66Smrg#endif 5949ed6f5d66Smrg#include <malloc.h> 5950ed6f5d66Smrg#include <stdarg.h> 5951ed6f5d66Smrg#include <assert.h> 5952ed6f5d66Smrg#include <string.h> 5953ed6f5d66Smrg#include <ctype.h> 5954ed6f5d66Smrg#include <errno.h> 5955ed6f5d66Smrg#include <fcntl.h> 5956ed6f5d66Smrg#include <sys/stat.h> 5957ed6f5d66Smrg 5958fbc03982Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 5959fbc03982Smrg 5960ed6f5d66Smrg/* declarations of non-ANSI functions */ 5961fbc03982Smrg#if defined __MINGW32__ 5962ed6f5d66Smrg# ifdef __STRICT_ANSI__ 5963a3680546Smrg_CRTIMP int __cdecl _putenv (const char *); 5964ed6f5d66Smrg# endif 5965fbc03982Smrg#elif defined __CYGWIN__ 5966ed6f5d66Smrg# ifdef __STRICT_ANSI__ 5967ed6f5d66Smrgchar *realpath (const char *, char *); 5968ed6f5d66Smrgint putenv (char *); 5969ed6f5d66Smrgint setenv (const char *, const char *, int); 5970ed6f5d66Smrg# endif 5971fbc03982Smrg/* #elif defined other_platform || defined ... */ 5972ed6f5d66Smrg#endif 5973ed6f5d66Smrg 5974ed6f5d66Smrg/* portability defines, excluding path handling macros */ 5975fbc03982Smrg#if defined _MSC_VER 5976ed6f5d66Smrg# define setmode _setmode 5977ed6f5d66Smrg# define stat _stat 5978ed6f5d66Smrg# define chmod _chmod 5979ed6f5d66Smrg# define getcwd _getcwd 5980ed6f5d66Smrg# define putenv _putenv 5981ed6f5d66Smrg# define S_IXUSR _S_IEXEC 5982fbc03982Smrg#elif defined __MINGW32__ 5983ed6f5d66Smrg# define setmode _setmode 5984ed6f5d66Smrg# define stat _stat 5985ed6f5d66Smrg# define chmod _chmod 5986ed6f5d66Smrg# define getcwd _getcwd 5987ed6f5d66Smrg# define putenv _putenv 5988fbc03982Smrg#elif defined __CYGWIN__ 5989ed6f5d66Smrg# define HAVE_SETENV 5990ed6f5d66Smrg# define FOPEN_WB "wb" 5991fbc03982Smrg/* #elif defined other platforms ... */ 5992ed6f5d66Smrg#endif 5993ed6f5d66Smrg 5994fbc03982Smrg#if defined PATH_MAX 5995ed6f5d66Smrg# define LT_PATHMAX PATH_MAX 5996fbc03982Smrg#elif defined MAXPATHLEN 5997ed6f5d66Smrg# define LT_PATHMAX MAXPATHLEN 5998ed6f5d66Smrg#else 5999ed6f5d66Smrg# define LT_PATHMAX 1024 6000ed6f5d66Smrg#endif 6001ed6f5d66Smrg 6002ed6f5d66Smrg#ifndef S_IXOTH 6003ed6f5d66Smrg# define S_IXOTH 0 6004ed6f5d66Smrg#endif 6005ed6f5d66Smrg#ifndef S_IXGRP 6006ed6f5d66Smrg# define S_IXGRP 0 6007ed6f5d66Smrg#endif 6008ed6f5d66Smrg 6009ed6f5d66Smrg/* path handling portability macros */ 6010ed6f5d66Smrg#ifndef DIR_SEPARATOR 6011ed6f5d66Smrg# define DIR_SEPARATOR '/' 6012ed6f5d66Smrg# define PATH_SEPARATOR ':' 6013ed6f5d66Smrg#endif 6014ed6f5d66Smrg 6015fbc03982Smrg#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ 6016fbc03982Smrg defined __OS2__ 6017ed6f5d66Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 6018ed6f5d66Smrg# define FOPEN_WB "wb" 6019ed6f5d66Smrg# ifndef DIR_SEPARATOR_2 6020ed6f5d66Smrg# define DIR_SEPARATOR_2 '\\' 6021ed6f5d66Smrg# endif 6022ed6f5d66Smrg# ifndef PATH_SEPARATOR_2 6023ed6f5d66Smrg# define PATH_SEPARATOR_2 ';' 6024ed6f5d66Smrg# endif 6025ed6f5d66Smrg#endif 6026ed6f5d66Smrg 6027ed6f5d66Smrg#ifndef DIR_SEPARATOR_2 6028ed6f5d66Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 6029ed6f5d66Smrg#else /* DIR_SEPARATOR_2 */ 6030ed6f5d66Smrg# define IS_DIR_SEPARATOR(ch) \ 6031ed6f5d66Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 6032ed6f5d66Smrg#endif /* DIR_SEPARATOR_2 */ 6033ed6f5d66Smrg 6034ed6f5d66Smrg#ifndef PATH_SEPARATOR_2 6035ed6f5d66Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 6036ed6f5d66Smrg#else /* PATH_SEPARATOR_2 */ 6037ed6f5d66Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 6038ed6f5d66Smrg#endif /* PATH_SEPARATOR_2 */ 6039ed6f5d66Smrg 6040ed6f5d66Smrg#ifndef FOPEN_WB 6041ed6f5d66Smrg# define FOPEN_WB "w" 6042ed6f5d66Smrg#endif 6043ed6f5d66Smrg#ifndef _O_BINARY 6044ed6f5d66Smrg# define _O_BINARY 0 6045ed6f5d66Smrg#endif 6046ed6f5d66Smrg 6047ed6f5d66Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 6048ed6f5d66Smrg#define XFREE(stale) do { \ 6049fbc03982Smrg if (stale) { free (stale); stale = 0; } \ 6050ed6f5d66Smrg} while (0) 6051ed6f5d66Smrg 6052fbc03982Smrg#if defined LT_DEBUGWRAPPER 6053ed6f5d66Smrgstatic int lt_debug = 1; 6054ed6f5d66Smrg#else 6055ed6f5d66Smrgstatic int lt_debug = 0; 6056ed6f5d66Smrg#endif 6057ed6f5d66Smrg 6058ed6f5d66Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 6059ed6f5d66Smrg 6060ed6f5d66Smrgvoid *xmalloc (size_t num); 6061ed6f5d66Smrgchar *xstrdup (const char *string); 6062ed6f5d66Smrgconst char *base_name (const char *name); 6063ed6f5d66Smrgchar *find_executable (const char *wrapper); 6064ed6f5d66Smrgchar *chase_symlinks (const char *pathspec); 6065ed6f5d66Smrgint make_executable (const char *path); 6066ed6f5d66Smrgint check_executable (const char *path); 6067ed6f5d66Smrgchar *strendzap (char *str, const char *pat); 6068ed6f5d66Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 6069ed6f5d66Smrgvoid lt_fatal (const char *file, int line, const char *message, ...); 6070ed6f5d66Smrgstatic const char *nonnull (const char *s); 6071ed6f5d66Smrgstatic const char *nonempty (const char *s); 6072ed6f5d66Smrgvoid lt_setenv (const char *name, const char *value); 6073ed6f5d66Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 6074ed6f5d66Smrgvoid lt_update_exe_path (const char *name, const char *value); 6075ed6f5d66Smrgvoid lt_update_lib_path (const char *name, const char *value); 6076ed6f5d66Smrgchar **prepare_spawn (char **argv); 6077ed6f5d66Smrgvoid lt_dump_script (FILE *f); 6078ed6f5d66SmrgEOF 6079ed6f5d66Smrg 6080ed6f5d66Smrg cat <<EOF 6081fbc03982Smrg#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) 6082fbc03982Smrg# define externally_visible volatile 6083fbc03982Smrg#else 6084fbc03982Smrg# define externally_visible __attribute__((externally_visible)) volatile 6085fbc03982Smrg#endif 6086fbc03982Smrgexternally_visible const char * MAGIC_EXE = "$magic_exe"; 6087ed6f5d66Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 6088ed6f5d66SmrgEOF 6089ed6f5d66Smrg 6090fbc03982Smrg if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 6091ed6f5d66Smrg func_to_host_path "$temp_rpath" 6092ed6f5d66Smrg cat <<EOF 6093ed6f5d66Smrgconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 6094ed6f5d66SmrgEOF 6095ed6f5d66Smrg else 6096ed6f5d66Smrg cat <<"EOF" 6097ed6f5d66Smrgconst char * LIB_PATH_VALUE = ""; 6098ed6f5d66SmrgEOF 6099ed6f5d66Smrg fi 6100ed6f5d66Smrg 6101ed6f5d66Smrg if test -n "$dllsearchpath"; then 6102ed6f5d66Smrg func_to_host_path "$dllsearchpath:" 6103ed6f5d66Smrg cat <<EOF 6104ed6f5d66Smrgconst char * EXE_PATH_VARNAME = "PATH"; 6105ed6f5d66Smrgconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 6106ed6f5d66SmrgEOF 6107ed6f5d66Smrg else 6108ed6f5d66Smrg cat <<"EOF" 6109ed6f5d66Smrgconst char * EXE_PATH_VARNAME = ""; 6110ed6f5d66Smrgconst char * EXE_PATH_VALUE = ""; 6111ed6f5d66SmrgEOF 6112ed6f5d66Smrg fi 6113ed6f5d66Smrg 6114fbc03982Smrg if test yes = "$fast_install"; then 6115ed6f5d66Smrg cat <<EOF 6116ed6f5d66Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 6117ed6f5d66SmrgEOF 6118ed6f5d66Smrg else 6119ed6f5d66Smrg cat <<EOF 6120ed6f5d66Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 6121ed6f5d66SmrgEOF 6122ed6f5d66Smrg fi 6123ed6f5d66Smrg 6124ed6f5d66Smrg 6125ed6f5d66Smrg cat <<"EOF" 6126ed6f5d66Smrg 6127ed6f5d66Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 6128ed6f5d66Smrg 6129ed6f5d66Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 6130ed6f5d66Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 6131ed6f5d66Smrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 6132ed6f5d66Smrg 6133ed6f5d66Smrgint 6134ed6f5d66Smrgmain (int argc, char *argv[]) 6135ed6f5d66Smrg{ 6136ed6f5d66Smrg char **newargz; 6137ed6f5d66Smrg int newargc; 6138ed6f5d66Smrg char *tmp_pathspec; 6139ed6f5d66Smrg char *actual_cwrapper_path; 6140ed6f5d66Smrg char *actual_cwrapper_name; 6141ed6f5d66Smrg char *target_name; 6142ed6f5d66Smrg char *lt_argv_zero; 6143fbc03982Smrg int rval = 127; 6144ed6f5d66Smrg 6145ed6f5d66Smrg int i; 6146ed6f5d66Smrg 6147ed6f5d66Smrg program_name = (char *) xstrdup (base_name (argv[0])); 6148fbc03982Smrg newargz = XMALLOC (char *, (size_t) argc + 1); 6149ed6f5d66Smrg 6150ed6f5d66Smrg /* very simple arg parsing; don't want to rely on getopt 6151ed6f5d66Smrg * also, copy all non cwrapper options to newargz, except 6152ed6f5d66Smrg * argz[0], which is handled differently 6153ed6f5d66Smrg */ 6154ed6f5d66Smrg newargc=0; 6155ed6f5d66Smrg for (i = 1; i < argc; i++) 6156ed6f5d66Smrg { 6157fbc03982Smrg if (STREQ (argv[i], dumpscript_opt)) 6158ed6f5d66Smrg { 6159ed6f5d66SmrgEOF 6160fbc03982Smrg case $host in 6161a3680546Smrg *mingw* | *windows* | *cygwin* ) 6162ed6f5d66Smrg # make stdout use "unix" line endings 6163ed6f5d66Smrg echo " setmode(1,_O_BINARY);" 6164ed6f5d66Smrg ;; 6165ed6f5d66Smrg esac 6166ed6f5d66Smrg 6167ed6f5d66Smrg cat <<"EOF" 6168ed6f5d66Smrg lt_dump_script (stdout); 6169ed6f5d66Smrg return 0; 6170ed6f5d66Smrg } 6171fbc03982Smrg if (STREQ (argv[i], debug_opt)) 6172ed6f5d66Smrg { 6173ed6f5d66Smrg lt_debug = 1; 6174ed6f5d66Smrg continue; 6175ed6f5d66Smrg } 6176fbc03982Smrg if (STREQ (argv[i], ltwrapper_option_prefix)) 6177ed6f5d66Smrg { 6178ed6f5d66Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 6179ed6f5d66Smrg namespace, but it is not one of the ones we know about and 6180a3680546Smrg have already dealt with, above (including dump-script), then 6181ed6f5d66Smrg report an error. Otherwise, targets might begin to believe 6182ed6f5d66Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 6183ed6f5d66Smrg namespace. The first time any user complains about this, we'll 6184ed6f5d66Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 6185ed6f5d66Smrg or a configure.ac-settable value. 6186ed6f5d66Smrg */ 6187ed6f5d66Smrg lt_fatal (__FILE__, __LINE__, 6188ed6f5d66Smrg "unrecognized %s option: '%s'", 6189ed6f5d66Smrg ltwrapper_option_prefix, argv[i]); 6190ed6f5d66Smrg } 6191ed6f5d66Smrg /* otherwise ... */ 6192ed6f5d66Smrg newargz[++newargc] = xstrdup (argv[i]); 6193ed6f5d66Smrg } 6194ed6f5d66Smrg newargz[++newargc] = NULL; 6195ed6f5d66Smrg 6196ed6f5d66SmrgEOF 6197ed6f5d66Smrg cat <<EOF 6198ed6f5d66Smrg /* The GNU banner must be the first non-error debug message */ 6199fbc03982Smrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); 6200ed6f5d66SmrgEOF 6201ed6f5d66Smrg cat <<"EOF" 6202ed6f5d66Smrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 6203ed6f5d66Smrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 6204ed6f5d66Smrg 6205ed6f5d66Smrg tmp_pathspec = find_executable (argv[0]); 6206ed6f5d66Smrg if (tmp_pathspec == NULL) 6207ed6f5d66Smrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 6208ed6f5d66Smrg lt_debugprintf (__FILE__, __LINE__, 6209ed6f5d66Smrg "(main) found exe (before symlink chase) at: %s\n", 6210ed6f5d66Smrg tmp_pathspec); 6211ed6f5d66Smrg 6212ed6f5d66Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 6213ed6f5d66Smrg lt_debugprintf (__FILE__, __LINE__, 6214ed6f5d66Smrg "(main) found exe (after symlink chase) at: %s\n", 6215ed6f5d66Smrg actual_cwrapper_path); 6216ed6f5d66Smrg XFREE (tmp_pathspec); 6217ed6f5d66Smrg 6218ed6f5d66Smrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 6219ed6f5d66Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 6220ed6f5d66Smrg 6221ed6f5d66Smrg /* wrapper name transforms */ 6222ed6f5d66Smrg strendzap (actual_cwrapper_name, ".exe"); 6223ed6f5d66Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 6224ed6f5d66Smrg XFREE (actual_cwrapper_name); 6225ed6f5d66Smrg actual_cwrapper_name = tmp_pathspec; 6226ed6f5d66Smrg tmp_pathspec = 0; 6227ed6f5d66Smrg 6228ed6f5d66Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 6229ed6f5d66Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 6230ed6f5d66Smrg strendzap (target_name, ".exe"); 6231ed6f5d66Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 6232ed6f5d66Smrg XFREE (target_name); 6233ed6f5d66Smrg target_name = tmp_pathspec; 6234ed6f5d66Smrg tmp_pathspec = 0; 6235ed6f5d66Smrg 6236ed6f5d66Smrg lt_debugprintf (__FILE__, __LINE__, 6237ed6f5d66Smrg "(main) libtool target name: %s\n", 6238ed6f5d66Smrg target_name); 6239ed6f5d66SmrgEOF 6240ed6f5d66Smrg 6241ed6f5d66Smrg cat <<EOF 6242ed6f5d66Smrg newargz[0] = 6243ed6f5d66Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 6244ed6f5d66Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 6245ed6f5d66Smrg strcpy (newargz[0], actual_cwrapper_path); 6246ed6f5d66Smrg strcat (newargz[0], "$objdir"); 6247ed6f5d66Smrg strcat (newargz[0], "/"); 6248ed6f5d66SmrgEOF 6249ed6f5d66Smrg 6250ed6f5d66Smrg cat <<"EOF" 6251ed6f5d66Smrg /* stop here, and copy so we don't have to do this twice */ 6252ed6f5d66Smrg tmp_pathspec = xstrdup (newargz[0]); 6253ed6f5d66Smrg 6254ed6f5d66Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 6255ed6f5d66Smrg strcat (newargz[0], actual_cwrapper_name); 6256ed6f5d66Smrg 6257ed6f5d66Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 6258ed6f5d66Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 6259ed6f5d66Smrg XFREE (tmp_pathspec); 6260ed6f5d66Smrg tmp_pathspec = NULL; 6261ed6f5d66SmrgEOF 6262ed6f5d66Smrg 6263ed6f5d66Smrg case $host_os in 6264a3680546Smrg mingw* | windows*) 6265ed6f5d66Smrg cat <<"EOF" 6266ed6f5d66Smrg { 6267ed6f5d66Smrg char* p; 6268ed6f5d66Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 6269ed6f5d66Smrg { 6270ed6f5d66Smrg *p = '/'; 6271ed6f5d66Smrg } 6272ed6f5d66Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 6273ed6f5d66Smrg { 6274ed6f5d66Smrg *p = '/'; 6275ed6f5d66Smrg } 6276ed6f5d66Smrg } 6277ed6f5d66SmrgEOF 6278ed6f5d66Smrg ;; 6279ed6f5d66Smrg esac 6280ed6f5d66Smrg 6281ed6f5d66Smrg cat <<"EOF" 6282ed6f5d66Smrg XFREE (target_name); 6283ed6f5d66Smrg XFREE (actual_cwrapper_path); 6284ed6f5d66Smrg XFREE (actual_cwrapper_name); 6285ed6f5d66Smrg 6286ed6f5d66Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 6287ed6f5d66Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 6288ed6f5d66Smrg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 6289ed6f5d66Smrg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 6290ed6f5d66Smrg because on Windows, both *_VARNAMEs are PATH but uninstalled 6291ed6f5d66Smrg libraries must come first. */ 6292ed6f5d66Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 6293ed6f5d66Smrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 6294ed6f5d66Smrg 6295ed6f5d66Smrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 6296ed6f5d66Smrg nonnull (lt_argv_zero)); 6297ed6f5d66Smrg for (i = 0; i < newargc; i++) 6298ed6f5d66Smrg { 6299ed6f5d66Smrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 6300ed6f5d66Smrg i, nonnull (newargz[i])); 6301ed6f5d66Smrg } 6302ed6f5d66Smrg 6303ed6f5d66SmrgEOF 6304ed6f5d66Smrg 6305ed6f5d66Smrg case $host_os in 6306a3680546Smrg mingw* | windows*) 6307ed6f5d66Smrg cat <<"EOF" 6308ed6f5d66Smrg /* execv doesn't actually work on mingw as expected on unix */ 6309ed6f5d66Smrg newargz = prepare_spawn (newargz); 6310fbc03982Smrg rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 6311ed6f5d66Smrg if (rval == -1) 6312ed6f5d66Smrg { 6313ed6f5d66Smrg /* failed to start process */ 6314ed6f5d66Smrg lt_debugprintf (__FILE__, __LINE__, 6315ed6f5d66Smrg "(main) failed to launch target \"%s\": %s\n", 6316ed6f5d66Smrg lt_argv_zero, nonnull (strerror (errno))); 6317ed6f5d66Smrg return 127; 6318ed6f5d66Smrg } 6319ed6f5d66Smrg return rval; 6320ed6f5d66SmrgEOF 6321ed6f5d66Smrg ;; 6322ed6f5d66Smrg *) 6323ed6f5d66Smrg cat <<"EOF" 6324ed6f5d66Smrg execv (lt_argv_zero, newargz); 6325ed6f5d66Smrg return rval; /* =127, but avoids unused variable warning */ 6326ed6f5d66SmrgEOF 6327ed6f5d66Smrg ;; 6328ed6f5d66Smrg esac 6329ed6f5d66Smrg 6330ed6f5d66Smrg cat <<"EOF" 6331ed6f5d66Smrg} 6332ed6f5d66Smrg 6333ed6f5d66Smrgvoid * 6334ed6f5d66Smrgxmalloc (size_t num) 6335ed6f5d66Smrg{ 6336ed6f5d66Smrg void *p = (void *) malloc (num); 6337ed6f5d66Smrg if (!p) 6338ed6f5d66Smrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 6339ed6f5d66Smrg 6340ed6f5d66Smrg return p; 6341ed6f5d66Smrg} 6342ed6f5d66Smrg 6343ed6f5d66Smrgchar * 6344ed6f5d66Smrgxstrdup (const char *string) 6345ed6f5d66Smrg{ 6346ed6f5d66Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 6347ed6f5d66Smrg string) : NULL; 6348ed6f5d66Smrg} 6349ed6f5d66Smrg 6350ed6f5d66Smrgconst char * 6351ed6f5d66Smrgbase_name (const char *name) 6352ed6f5d66Smrg{ 6353ed6f5d66Smrg const char *base; 6354ed6f5d66Smrg 6355fbc03982Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 6356ed6f5d66Smrg /* Skip over the disk name in MSDOS pathnames. */ 6357ed6f5d66Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 6358ed6f5d66Smrg name += 2; 6359ed6f5d66Smrg#endif 6360ed6f5d66Smrg 6361ed6f5d66Smrg for (base = name; *name; name++) 6362ed6f5d66Smrg if (IS_DIR_SEPARATOR (*name)) 6363ed6f5d66Smrg base = name + 1; 6364ed6f5d66Smrg return base; 6365ed6f5d66Smrg} 6366ed6f5d66Smrg 6367ed6f5d66Smrgint 6368ed6f5d66Smrgcheck_executable (const char *path) 6369ed6f5d66Smrg{ 6370ed6f5d66Smrg struct stat st; 6371ed6f5d66Smrg 6372ed6f5d66Smrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 6373ed6f5d66Smrg nonempty (path)); 6374ed6f5d66Smrg if ((!path) || (!*path)) 6375ed6f5d66Smrg return 0; 6376ed6f5d66Smrg 6377ed6f5d66Smrg if ((stat (path, &st) >= 0) 6378ed6f5d66Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 6379ed6f5d66Smrg return 1; 6380ed6f5d66Smrg else 6381ed6f5d66Smrg return 0; 6382ed6f5d66Smrg} 6383ed6f5d66Smrg 6384ed6f5d66Smrgint 6385ed6f5d66Smrgmake_executable (const char *path) 6386ed6f5d66Smrg{ 6387ed6f5d66Smrg int rval = 0; 6388ed6f5d66Smrg struct stat st; 6389ed6f5d66Smrg 6390ed6f5d66Smrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 6391ed6f5d66Smrg nonempty (path)); 6392ed6f5d66Smrg if ((!path) || (!*path)) 6393ed6f5d66Smrg return 0; 6394ed6f5d66Smrg 6395ed6f5d66Smrg if (stat (path, &st) >= 0) 6396ed6f5d66Smrg { 6397ed6f5d66Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 6398ed6f5d66Smrg } 6399ed6f5d66Smrg return rval; 6400ed6f5d66Smrg} 6401ed6f5d66Smrg 6402ed6f5d66Smrg/* Searches for the full path of the wrapper. Returns 6403ed6f5d66Smrg newly allocated full path name if found, NULL otherwise 6404ed6f5d66Smrg Does not chase symlinks, even on platforms that support them. 6405ed6f5d66Smrg*/ 6406ed6f5d66Smrgchar * 6407ed6f5d66Smrgfind_executable (const char *wrapper) 6408ed6f5d66Smrg{ 6409ed6f5d66Smrg int has_slash = 0; 6410ed6f5d66Smrg const char *p; 6411ed6f5d66Smrg const char *p_next; 6412ed6f5d66Smrg /* static buffer for getcwd */ 6413ed6f5d66Smrg char tmp[LT_PATHMAX + 1]; 6414fbc03982Smrg size_t tmp_len; 6415ed6f5d66Smrg char *concat_name; 6416ed6f5d66Smrg 6417ed6f5d66Smrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 6418ed6f5d66Smrg nonempty (wrapper)); 6419ed6f5d66Smrg 6420ed6f5d66Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 6421ed6f5d66Smrg return NULL; 6422ed6f5d66Smrg 6423ed6f5d66Smrg /* Absolute path? */ 6424fbc03982Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 6425ed6f5d66Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 6426ed6f5d66Smrg { 6427ed6f5d66Smrg concat_name = xstrdup (wrapper); 6428ed6f5d66Smrg if (check_executable (concat_name)) 6429ed6f5d66Smrg return concat_name; 6430ed6f5d66Smrg XFREE (concat_name); 6431ed6f5d66Smrg } 6432ed6f5d66Smrg else 6433ed6f5d66Smrg { 6434ed6f5d66Smrg#endif 6435ed6f5d66Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 6436ed6f5d66Smrg { 6437ed6f5d66Smrg concat_name = xstrdup (wrapper); 6438ed6f5d66Smrg if (check_executable (concat_name)) 6439ed6f5d66Smrg return concat_name; 6440ed6f5d66Smrg XFREE (concat_name); 6441ed6f5d66Smrg } 6442fbc03982Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 6443ed6f5d66Smrg } 6444ed6f5d66Smrg#endif 6445ed6f5d66Smrg 6446ed6f5d66Smrg for (p = wrapper; *p; p++) 6447ed6f5d66Smrg if (*p == '/') 6448ed6f5d66Smrg { 6449ed6f5d66Smrg has_slash = 1; 6450ed6f5d66Smrg break; 6451ed6f5d66Smrg } 6452ed6f5d66Smrg if (!has_slash) 6453ed6f5d66Smrg { 6454ed6f5d66Smrg /* no slashes; search PATH */ 6455ed6f5d66Smrg const char *path = getenv ("PATH"); 6456ed6f5d66Smrg if (path != NULL) 6457ed6f5d66Smrg { 6458ed6f5d66Smrg for (p = path; *p; p = p_next) 6459ed6f5d66Smrg { 6460ed6f5d66Smrg const char *q; 6461ed6f5d66Smrg size_t p_len; 6462ed6f5d66Smrg for (q = p; *q; q++) 6463ed6f5d66Smrg if (IS_PATH_SEPARATOR (*q)) 6464ed6f5d66Smrg break; 6465fbc03982Smrg p_len = (size_t) (q - p); 6466ed6f5d66Smrg p_next = (*q == '\0' ? q : q + 1); 6467ed6f5d66Smrg if (p_len == 0) 6468ed6f5d66Smrg { 6469ed6f5d66Smrg /* empty path: current directory */ 6470ed6f5d66Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 6471ed6f5d66Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6472ed6f5d66Smrg nonnull (strerror (errno))); 6473ed6f5d66Smrg tmp_len = strlen (tmp); 6474ed6f5d66Smrg concat_name = 6475ed6f5d66Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6476ed6f5d66Smrg memcpy (concat_name, tmp, tmp_len); 6477ed6f5d66Smrg concat_name[tmp_len] = '/'; 6478ed6f5d66Smrg strcpy (concat_name + tmp_len + 1, wrapper); 6479ed6f5d66Smrg } 6480ed6f5d66Smrg else 6481ed6f5d66Smrg { 6482ed6f5d66Smrg concat_name = 6483ed6f5d66Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 6484ed6f5d66Smrg memcpy (concat_name, p, p_len); 6485ed6f5d66Smrg concat_name[p_len] = '/'; 6486ed6f5d66Smrg strcpy (concat_name + p_len + 1, wrapper); 6487ed6f5d66Smrg } 6488ed6f5d66Smrg if (check_executable (concat_name)) 6489ed6f5d66Smrg return concat_name; 6490ed6f5d66Smrg XFREE (concat_name); 6491ed6f5d66Smrg } 6492ed6f5d66Smrg } 6493ed6f5d66Smrg /* not found in PATH; assume curdir */ 6494ed6f5d66Smrg } 6495ed6f5d66Smrg /* Relative path | not found in path: prepend cwd */ 6496ed6f5d66Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 6497ed6f5d66Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6498ed6f5d66Smrg nonnull (strerror (errno))); 6499ed6f5d66Smrg tmp_len = strlen (tmp); 6500ed6f5d66Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6501ed6f5d66Smrg memcpy (concat_name, tmp, tmp_len); 6502ed6f5d66Smrg concat_name[tmp_len] = '/'; 6503ed6f5d66Smrg strcpy (concat_name + tmp_len + 1, wrapper); 6504ed6f5d66Smrg 6505ed6f5d66Smrg if (check_executable (concat_name)) 6506ed6f5d66Smrg return concat_name; 6507ed6f5d66Smrg XFREE (concat_name); 6508ed6f5d66Smrg return NULL; 6509ed6f5d66Smrg} 6510ed6f5d66Smrg 6511ed6f5d66Smrgchar * 6512ed6f5d66Smrgchase_symlinks (const char *pathspec) 6513ed6f5d66Smrg{ 6514ed6f5d66Smrg#ifndef S_ISLNK 6515ed6f5d66Smrg return xstrdup (pathspec); 6516ed6f5d66Smrg#else 6517ed6f5d66Smrg char buf[LT_PATHMAX]; 6518ed6f5d66Smrg struct stat s; 6519ed6f5d66Smrg char *tmp_pathspec = xstrdup (pathspec); 6520ed6f5d66Smrg char *p; 6521ed6f5d66Smrg int has_symlinks = 0; 6522ed6f5d66Smrg while (strlen (tmp_pathspec) && !has_symlinks) 6523ed6f5d66Smrg { 6524ed6f5d66Smrg lt_debugprintf (__FILE__, __LINE__, 6525ed6f5d66Smrg "checking path component for symlinks: %s\n", 6526ed6f5d66Smrg tmp_pathspec); 6527ed6f5d66Smrg if (lstat (tmp_pathspec, &s) == 0) 6528ed6f5d66Smrg { 6529ed6f5d66Smrg if (S_ISLNK (s.st_mode) != 0) 6530ed6f5d66Smrg { 6531ed6f5d66Smrg has_symlinks = 1; 6532ed6f5d66Smrg break; 6533ed6f5d66Smrg } 6534ed6f5d66Smrg 6535ed6f5d66Smrg /* search backwards for last DIR_SEPARATOR */ 6536ed6f5d66Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 6537ed6f5d66Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6538ed6f5d66Smrg p--; 6539ed6f5d66Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6540ed6f5d66Smrg { 6541ed6f5d66Smrg /* no more DIR_SEPARATORS left */ 6542ed6f5d66Smrg break; 6543ed6f5d66Smrg } 6544ed6f5d66Smrg *p = '\0'; 6545ed6f5d66Smrg } 6546ed6f5d66Smrg else 6547ed6f5d66Smrg { 6548ed6f5d66Smrg lt_fatal (__FILE__, __LINE__, 6549ed6f5d66Smrg "error accessing file \"%s\": %s", 6550ed6f5d66Smrg tmp_pathspec, nonnull (strerror (errno))); 6551ed6f5d66Smrg } 6552ed6f5d66Smrg } 6553ed6f5d66Smrg XFREE (tmp_pathspec); 6554ed6f5d66Smrg 6555ed6f5d66Smrg if (!has_symlinks) 6556ed6f5d66Smrg { 6557ed6f5d66Smrg return xstrdup (pathspec); 6558ed6f5d66Smrg } 6559ed6f5d66Smrg 6560ed6f5d66Smrg tmp_pathspec = realpath (pathspec, buf); 6561ed6f5d66Smrg if (tmp_pathspec == 0) 6562ed6f5d66Smrg { 6563ed6f5d66Smrg lt_fatal (__FILE__, __LINE__, 6564ed6f5d66Smrg "could not follow symlinks for %s", pathspec); 6565ed6f5d66Smrg } 6566ed6f5d66Smrg return xstrdup (tmp_pathspec); 6567ed6f5d66Smrg#endif 6568ed6f5d66Smrg} 6569ed6f5d66Smrg 6570ed6f5d66Smrgchar * 6571ed6f5d66Smrgstrendzap (char *str, const char *pat) 6572ed6f5d66Smrg{ 6573ed6f5d66Smrg size_t len, patlen; 6574ed6f5d66Smrg 6575ed6f5d66Smrg assert (str != NULL); 6576ed6f5d66Smrg assert (pat != NULL); 6577ed6f5d66Smrg 6578ed6f5d66Smrg len = strlen (str); 6579ed6f5d66Smrg patlen = strlen (pat); 6580ed6f5d66Smrg 6581ed6f5d66Smrg if (patlen <= len) 6582ed6f5d66Smrg { 6583ed6f5d66Smrg str += len - patlen; 6584fbc03982Smrg if (STREQ (str, pat)) 6585ed6f5d66Smrg *str = '\0'; 6586ed6f5d66Smrg } 6587ed6f5d66Smrg return str; 6588ed6f5d66Smrg} 6589ed6f5d66Smrg 6590ed6f5d66Smrgvoid 6591ed6f5d66Smrglt_debugprintf (const char *file, int line, const char *fmt, ...) 6592ed6f5d66Smrg{ 6593ed6f5d66Smrg va_list args; 6594ed6f5d66Smrg if (lt_debug) 6595ed6f5d66Smrg { 6596ed6f5d66Smrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 6597ed6f5d66Smrg va_start (args, fmt); 6598ed6f5d66Smrg (void) vfprintf (stderr, fmt, args); 6599ed6f5d66Smrg va_end (args); 6600ed6f5d66Smrg } 6601ed6f5d66Smrg} 6602ed6f5d66Smrg 6603ed6f5d66Smrgstatic void 6604ed6f5d66Smrglt_error_core (int exit_status, const char *file, 6605ed6f5d66Smrg int line, const char *mode, 6606ed6f5d66Smrg const char *message, va_list ap) 6607ed6f5d66Smrg{ 6608ed6f5d66Smrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 6609ed6f5d66Smrg vfprintf (stderr, message, ap); 6610ed6f5d66Smrg fprintf (stderr, ".\n"); 6611ed6f5d66Smrg 6612ed6f5d66Smrg if (exit_status >= 0) 6613ed6f5d66Smrg exit (exit_status); 6614ed6f5d66Smrg} 6615ed6f5d66Smrg 6616ed6f5d66Smrgvoid 6617ed6f5d66Smrglt_fatal (const char *file, int line, const char *message, ...) 6618ed6f5d66Smrg{ 6619ed6f5d66Smrg va_list ap; 6620ed6f5d66Smrg va_start (ap, message); 6621ed6f5d66Smrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 6622ed6f5d66Smrg va_end (ap); 6623ed6f5d66Smrg} 6624ed6f5d66Smrg 6625ed6f5d66Smrgstatic const char * 6626ed6f5d66Smrgnonnull (const char *s) 6627ed6f5d66Smrg{ 6628ed6f5d66Smrg return s ? s : "(null)"; 6629ed6f5d66Smrg} 6630ed6f5d66Smrg 6631ed6f5d66Smrgstatic const char * 6632ed6f5d66Smrgnonempty (const char *s) 6633ed6f5d66Smrg{ 6634ed6f5d66Smrg return (s && !*s) ? "(empty)" : nonnull (s); 6635ed6f5d66Smrg} 6636ed6f5d66Smrg 6637ed6f5d66Smrgvoid 6638ed6f5d66Smrglt_setenv (const char *name, const char *value) 6639ed6f5d66Smrg{ 6640ed6f5d66Smrg lt_debugprintf (__FILE__, __LINE__, 6641ed6f5d66Smrg "(lt_setenv) setting '%s' to '%s'\n", 6642ed6f5d66Smrg nonnull (name), nonnull (value)); 6643ed6f5d66Smrg { 6644ed6f5d66Smrg#ifdef HAVE_SETENV 6645ed6f5d66Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 6646ed6f5d66Smrg char *str = xstrdup (value); 6647ed6f5d66Smrg setenv (name, str, 1); 6648ed6f5d66Smrg#else 6649fbc03982Smrg size_t len = strlen (name) + 1 + strlen (value) + 1; 6650ed6f5d66Smrg char *str = XMALLOC (char, len); 6651ed6f5d66Smrg sprintf (str, "%s=%s", name, value); 6652ed6f5d66Smrg if (putenv (str) != EXIT_SUCCESS) 6653ed6f5d66Smrg { 6654ed6f5d66Smrg XFREE (str); 6655ed6f5d66Smrg } 6656ed6f5d66Smrg#endif 6657ed6f5d66Smrg } 6658ed6f5d66Smrg} 6659ed6f5d66Smrg 6660ed6f5d66Smrgchar * 6661ed6f5d66Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 6662ed6f5d66Smrg{ 6663ed6f5d66Smrg char *new_value; 6664ed6f5d66Smrg if (orig_value && *orig_value) 6665ed6f5d66Smrg { 6666fbc03982Smrg size_t orig_value_len = strlen (orig_value); 6667fbc03982Smrg size_t add_len = strlen (add); 6668ed6f5d66Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 6669ed6f5d66Smrg if (to_end) 6670ed6f5d66Smrg { 6671ed6f5d66Smrg strcpy (new_value, orig_value); 6672ed6f5d66Smrg strcpy (new_value + orig_value_len, add); 6673ed6f5d66Smrg } 6674ed6f5d66Smrg else 6675ed6f5d66Smrg { 6676ed6f5d66Smrg strcpy (new_value, add); 6677ed6f5d66Smrg strcpy (new_value + add_len, orig_value); 6678ed6f5d66Smrg } 6679ed6f5d66Smrg } 6680ed6f5d66Smrg else 6681ed6f5d66Smrg { 6682ed6f5d66Smrg new_value = xstrdup (add); 6683ed6f5d66Smrg } 6684ed6f5d66Smrg return new_value; 6685ed6f5d66Smrg} 6686ed6f5d66Smrg 6687ed6f5d66Smrgvoid 6688ed6f5d66Smrglt_update_exe_path (const char *name, const char *value) 6689ed6f5d66Smrg{ 6690ed6f5d66Smrg lt_debugprintf (__FILE__, __LINE__, 6691ed6f5d66Smrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 6692ed6f5d66Smrg nonnull (name), nonnull (value)); 6693ed6f5d66Smrg 6694ed6f5d66Smrg if (name && *name && value && *value) 6695ed6f5d66Smrg { 6696ed6f5d66Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 6697ed6f5d66Smrg /* some systems can't cope with a ':'-terminated path #' */ 6698fbc03982Smrg size_t len = strlen (new_value); 6699fbc03982Smrg while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 6700ed6f5d66Smrg { 6701fbc03982Smrg new_value[--len] = '\0'; 6702ed6f5d66Smrg } 6703ed6f5d66Smrg lt_setenv (name, new_value); 6704ed6f5d66Smrg XFREE (new_value); 6705ed6f5d66Smrg } 6706ed6f5d66Smrg} 6707ed6f5d66Smrg 6708ed6f5d66Smrgvoid 6709ed6f5d66Smrglt_update_lib_path (const char *name, const char *value) 6710ed6f5d66Smrg{ 6711ed6f5d66Smrg lt_debugprintf (__FILE__, __LINE__, 6712ed6f5d66Smrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 6713ed6f5d66Smrg nonnull (name), nonnull (value)); 6714ed6f5d66Smrg 6715ed6f5d66Smrg if (name && *name && value && *value) 6716ed6f5d66Smrg { 6717ed6f5d66Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 6718ed6f5d66Smrg lt_setenv (name, new_value); 6719ed6f5d66Smrg XFREE (new_value); 6720ed6f5d66Smrg } 6721ed6f5d66Smrg} 6722ed6f5d66Smrg 6723ed6f5d66SmrgEOF 6724ed6f5d66Smrg case $host_os in 6725a3680546Smrg mingw* | windows*) 6726ed6f5d66Smrg cat <<"EOF" 6727ed6f5d66Smrg 6728ed6f5d66Smrg/* Prepares an argument vector before calling spawn(). 6729ed6f5d66Smrg Note that spawn() does not by itself call the command interpreter 6730ed6f5d66Smrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 6731ed6f5d66Smrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 6732ed6f5d66Smrg GetVersionEx(&v); 6733ed6f5d66Smrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 6734ed6f5d66Smrg }) ? "cmd.exe" : "command.com"). 6735ed6f5d66Smrg Instead it simply concatenates the arguments, separated by ' ', and calls 6736ed6f5d66Smrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 6737ed6f5d66Smrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 6738ed6f5d66Smrg special way: 6739ed6f5d66Smrg - Space and tab are interpreted as delimiters. They are not treated as 6740ed6f5d66Smrg delimiters if they are surrounded by double quotes: "...". 6741ed6f5d66Smrg - Unescaped double quotes are removed from the input. Their only effect is 6742ed6f5d66Smrg that within double quotes, space and tab are treated like normal 6743ed6f5d66Smrg characters. 6744ed6f5d66Smrg - Backslashes not followed by double quotes are not special. 6745ed6f5d66Smrg - But 2*n+1 backslashes followed by a double quote become 6746ed6f5d66Smrg n backslashes followed by a double quote (n >= 0): 6747ed6f5d66Smrg \" -> " 6748ed6f5d66Smrg \\\" -> \" 6749ed6f5d66Smrg \\\\\" -> \\" 6750ed6f5d66Smrg */ 6751ed6f5d66Smrg#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" 6752ed6f5d66Smrg#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" 6753ed6f5d66Smrgchar ** 6754ed6f5d66Smrgprepare_spawn (char **argv) 6755ed6f5d66Smrg{ 6756ed6f5d66Smrg size_t argc; 6757ed6f5d66Smrg char **new_argv; 6758ed6f5d66Smrg size_t i; 6759ed6f5d66Smrg 6760ed6f5d66Smrg /* Count number of arguments. */ 6761ed6f5d66Smrg for (argc = 0; argv[argc] != NULL; argc++) 6762ed6f5d66Smrg ; 6763ed6f5d66Smrg 6764ed6f5d66Smrg /* Allocate new argument vector. */ 6765ed6f5d66Smrg new_argv = XMALLOC (char *, argc + 1); 6766ed6f5d66Smrg 6767ed6f5d66Smrg /* Put quoted arguments into the new argument vector. */ 6768ed6f5d66Smrg for (i = 0; i < argc; i++) 6769ed6f5d66Smrg { 6770ed6f5d66Smrg const char *string = argv[i]; 6771ed6f5d66Smrg 6772ed6f5d66Smrg if (string[0] == '\0') 6773ed6f5d66Smrg new_argv[i] = xstrdup ("\"\""); 6774ed6f5d66Smrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 6775ed6f5d66Smrg { 6776ed6f5d66Smrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 6777ed6f5d66Smrg size_t length; 6778ed6f5d66Smrg unsigned int backslashes; 6779ed6f5d66Smrg const char *s; 6780ed6f5d66Smrg char *quoted_string; 6781ed6f5d66Smrg char *p; 6782ed6f5d66Smrg 6783ed6f5d66Smrg length = 0; 6784ed6f5d66Smrg backslashes = 0; 6785ed6f5d66Smrg if (quote_around) 6786ed6f5d66Smrg length++; 6787ed6f5d66Smrg for (s = string; *s != '\0'; s++) 6788ed6f5d66Smrg { 6789ed6f5d66Smrg char c = *s; 6790ed6f5d66Smrg if (c == '"') 6791ed6f5d66Smrg length += backslashes + 1; 6792ed6f5d66Smrg length++; 6793ed6f5d66Smrg if (c == '\\') 6794ed6f5d66Smrg backslashes++; 6795ed6f5d66Smrg else 6796ed6f5d66Smrg backslashes = 0; 6797ed6f5d66Smrg } 6798ed6f5d66Smrg if (quote_around) 6799ed6f5d66Smrg length += backslashes + 1; 6800ed6f5d66Smrg 6801ed6f5d66Smrg quoted_string = XMALLOC (char, length + 1); 6802ed6f5d66Smrg 6803ed6f5d66Smrg p = quoted_string; 6804ed6f5d66Smrg backslashes = 0; 6805ed6f5d66Smrg if (quote_around) 6806ed6f5d66Smrg *p++ = '"'; 6807ed6f5d66Smrg for (s = string; *s != '\0'; s++) 6808ed6f5d66Smrg { 6809ed6f5d66Smrg char c = *s; 6810ed6f5d66Smrg if (c == '"') 6811ed6f5d66Smrg { 6812ed6f5d66Smrg unsigned int j; 6813ed6f5d66Smrg for (j = backslashes + 1; j > 0; j--) 6814ed6f5d66Smrg *p++ = '\\'; 6815ed6f5d66Smrg } 6816ed6f5d66Smrg *p++ = c; 6817ed6f5d66Smrg if (c == '\\') 6818ed6f5d66Smrg backslashes++; 6819ed6f5d66Smrg else 6820ed6f5d66Smrg backslashes = 0; 6821ed6f5d66Smrg } 6822ed6f5d66Smrg if (quote_around) 6823ed6f5d66Smrg { 6824ed6f5d66Smrg unsigned int j; 6825ed6f5d66Smrg for (j = backslashes; j > 0; j--) 6826ed6f5d66Smrg *p++ = '\\'; 6827ed6f5d66Smrg *p++ = '"'; 6828ed6f5d66Smrg } 6829ed6f5d66Smrg *p = '\0'; 6830ed6f5d66Smrg 6831ed6f5d66Smrg new_argv[i] = quoted_string; 6832ed6f5d66Smrg } 6833ed6f5d66Smrg else 6834ed6f5d66Smrg new_argv[i] = (char *) string; 6835ed6f5d66Smrg } 6836ed6f5d66Smrg new_argv[argc] = NULL; 6837ed6f5d66Smrg 6838ed6f5d66Smrg return new_argv; 6839ed6f5d66Smrg} 6840ed6f5d66SmrgEOF 6841ed6f5d66Smrg ;; 6842ed6f5d66Smrg esac 6843ed6f5d66Smrg 6844ed6f5d66Smrg cat <<"EOF" 6845ed6f5d66Smrgvoid lt_dump_script (FILE* f) 6846ed6f5d66Smrg{ 6847ed6f5d66SmrgEOF 6848ed6f5d66Smrg func_emit_wrapper yes | 6849ed6f5d66Smrg $SED -n -e ' 6850ed6f5d66Smrgs/^\(.\{79\}\)\(..*\)/\1\ 6851ed6f5d66Smrg\2/ 6852ed6f5d66Smrgh 6853ed6f5d66Smrgs/\([\\"]\)/\\\1/g 6854ed6f5d66Smrgs/$/\\n/ 6855ed6f5d66Smrgs/\([^\n]*\).*/ fputs ("\1", f);/p 6856ed6f5d66Smrgg 6857ed6f5d66SmrgD' 6858ed6f5d66Smrg cat <<"EOF" 6859ed6f5d66Smrg} 6860ed6f5d66SmrgEOF 6861ed6f5d66Smrg} 6862ed6f5d66Smrg# end: func_emit_cwrapperexe_src 6863ed6f5d66Smrg 6864ed6f5d66Smrg# func_win32_import_lib_p ARG 6865ed6f5d66Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd 6866ed6f5d66Smrgfunc_win32_import_lib_p () 6867ed6f5d66Smrg{ 6868fbc03982Smrg $debug_cmd 6869fbc03982Smrg 6870ed6f5d66Smrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 6871ed6f5d66Smrg *import*) : ;; 6872ed6f5d66Smrg *) false ;; 6873ed6f5d66Smrg esac 6874ed6f5d66Smrg} 6875ed6f5d66Smrg 6876fbc03982Smrg# func_suncc_cstd_abi 6877fbc03982Smrg# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! 6878fbc03982Smrg# Several compiler flags select an ABI that is incompatible with the 6879fbc03982Smrg# Cstd library. Avoid specifying it if any are in CXXFLAGS. 6880fbc03982Smrgfunc_suncc_cstd_abi () 6881fbc03982Smrg{ 6882fbc03982Smrg $debug_cmd 6883fbc03982Smrg 6884fbc03982Smrg case " $compile_command " in 6885fbc03982Smrg *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) 6886fbc03982Smrg suncc_use_cstd_abi=no 6887fbc03982Smrg ;; 6888fbc03982Smrg *) 6889fbc03982Smrg suncc_use_cstd_abi=yes 6890fbc03982Smrg ;; 6891fbc03982Smrg esac 6892fbc03982Smrg} 6893fbc03982Smrg 6894ed6f5d66Smrg# func_mode_link arg... 6895ed6f5d66Smrgfunc_mode_link () 6896ed6f5d66Smrg{ 6897fbc03982Smrg $debug_cmd 6898fbc03982Smrg 6899ed6f5d66Smrg case $host in 6900a3680546Smrg *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-cegcc*) 6901ed6f5d66Smrg # It is impossible to link a dll without this setting, and 6902ed6f5d66Smrg # we shouldn't force the makefile maintainer to figure out 6903fbc03982Smrg # what system we are compiling for in order to pass an extra 6904ed6f5d66Smrg # flag for every libtool invocation. 6905ed6f5d66Smrg # allow_undefined=no 6906ed6f5d66Smrg 6907ed6f5d66Smrg # FIXME: Unfortunately, there are problems with the above when trying 6908fbc03982Smrg # to make a dll that has undefined symbols, in which case not 6909ed6f5d66Smrg # even a static library is built. For now, we need to specify 6910ed6f5d66Smrg # -no-undefined on the libtool link line when we can be certain 6911ed6f5d66Smrg # that all symbols are satisfied, otherwise we get a static library. 6912ed6f5d66Smrg allow_undefined=yes 6913ed6f5d66Smrg ;; 6914ed6f5d66Smrg *) 6915ed6f5d66Smrg allow_undefined=yes 6916ed6f5d66Smrg ;; 6917ed6f5d66Smrg esac 6918ed6f5d66Smrg libtool_args=$nonopt 6919ed6f5d66Smrg base_compile="$nonopt $@" 6920ed6f5d66Smrg compile_command=$nonopt 6921ed6f5d66Smrg finalize_command=$nonopt 6922ed6f5d66Smrg 6923ed6f5d66Smrg compile_rpath= 6924a3680546Smrg compile_rpath_tail= 6925ed6f5d66Smrg finalize_rpath= 6926ed6f5d66Smrg compile_shlibpath= 6927ed6f5d66Smrg finalize_shlibpath= 6928ed6f5d66Smrg convenience= 6929ed6f5d66Smrg old_convenience= 6930ed6f5d66Smrg deplibs= 6931ed6f5d66Smrg old_deplibs= 6932ed6f5d66Smrg compiler_flags= 6933ed6f5d66Smrg linker_flags= 6934ed6f5d66Smrg dllsearchpath= 6935ed6f5d66Smrg lib_search_path=`pwd` 6936ed6f5d66Smrg inst_prefix_dir= 6937ed6f5d66Smrg new_inherited_linker_flags= 6938ed6f5d66Smrg 6939ed6f5d66Smrg avoid_version=no 6940ed6f5d66Smrg bindir= 6941ed6f5d66Smrg dlfiles= 6942ed6f5d66Smrg dlprefiles= 6943ed6f5d66Smrg dlself=no 6944ed6f5d66Smrg export_dynamic=no 6945ed6f5d66Smrg export_symbols= 6946ed6f5d66Smrg export_symbols_regex= 6947ed6f5d66Smrg generated= 6948ed6f5d66Smrg libobjs= 6949ed6f5d66Smrg ltlibs= 6950ed6f5d66Smrg module=no 6951ed6f5d66Smrg no_install=no 6952ed6f5d66Smrg objs= 6953fbc03982Smrg os2dllname= 6954ed6f5d66Smrg non_pic_objects= 6955ed6f5d66Smrg precious_files_regex= 6956ed6f5d66Smrg prefer_static_libs=no 6957fbc03982Smrg preload=false 6958ed6f5d66Smrg prev= 6959ed6f5d66Smrg prevarg= 6960ed6f5d66Smrg release= 6961ed6f5d66Smrg rpath= 6962ed6f5d66Smrg xrpath= 6963ed6f5d66Smrg perm_rpath= 6964ed6f5d66Smrg temp_rpath= 6965a3680546Smrg temp_rpath_tail= 6966ed6f5d66Smrg thread_safe=no 6967ed6f5d66Smrg vinfo= 6968ed6f5d66Smrg vinfo_number=no 6969ed6f5d66Smrg weak_libs= 6970a3680546Smrg rpath_arg= 6971fbc03982Smrg single_module=$wl-single_module 6972ed6f5d66Smrg func_infer_tag $base_compile 6973ed6f5d66Smrg 6974ed6f5d66Smrg # We need to know -static, to get the right output filenames. 6975ed6f5d66Smrg for arg 6976ed6f5d66Smrg do 6977ed6f5d66Smrg case $arg in 6978ed6f5d66Smrg -shared) 6979fbc03982Smrg test yes != "$build_libtool_libs" \ 6980fbc03982Smrg && func_fatal_configuration "cannot build a shared library" 6981ed6f5d66Smrg build_old_libs=no 6982ed6f5d66Smrg break 6983ed6f5d66Smrg ;; 6984ed6f5d66Smrg -all-static | -static | -static-libtool-libs) 6985ed6f5d66Smrg case $arg in 6986ed6f5d66Smrg -all-static) 6987fbc03982Smrg if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then 6988ed6f5d66Smrg func_warning "complete static linking is impossible in this configuration" 6989ed6f5d66Smrg fi 6990ed6f5d66Smrg if test -n "$link_static_flag"; then 6991ed6f5d66Smrg dlopen_self=$dlopen_self_static 6992ed6f5d66Smrg fi 6993ed6f5d66Smrg prefer_static_libs=yes 6994ed6f5d66Smrg ;; 6995ed6f5d66Smrg -static) 6996ed6f5d66Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 6997ed6f5d66Smrg dlopen_self=$dlopen_self_static 6998ed6f5d66Smrg fi 6999ed6f5d66Smrg prefer_static_libs=built 7000ed6f5d66Smrg ;; 7001ed6f5d66Smrg -static-libtool-libs) 7002ed6f5d66Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 7003ed6f5d66Smrg dlopen_self=$dlopen_self_static 7004ed6f5d66Smrg fi 7005ed6f5d66Smrg prefer_static_libs=yes 7006ed6f5d66Smrg ;; 7007ed6f5d66Smrg esac 7008ed6f5d66Smrg build_libtool_libs=no 7009ed6f5d66Smrg build_old_libs=yes 7010ed6f5d66Smrg break 7011ed6f5d66Smrg ;; 7012ed6f5d66Smrg esac 7013ed6f5d66Smrg done 7014ed6f5d66Smrg 7015ed6f5d66Smrg # See if our shared archives depend on static archives. 7016ed6f5d66Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 7017ed6f5d66Smrg 7018ed6f5d66Smrg # Go through the arguments, transforming them on the way. 7019ed6f5d66Smrg while test "$#" -gt 0; do 7020fbc03982Smrg arg=$1 7021ed6f5d66Smrg shift 70223d05230fSmrg func_quote_arg pretty,unquoted "$arg" 70233d05230fSmrg qarg=$func_quote_arg_unquoted_result 70243d05230fSmrg func_append libtool_args " $func_quote_arg_result" 7025ed6f5d66Smrg 7026ed6f5d66Smrg # If the previous option needs an argument, assign it. 7027ed6f5d66Smrg if test -n "$prev"; then 7028ed6f5d66Smrg case $prev in 7029ed6f5d66Smrg output) 7030ed6f5d66Smrg func_append compile_command " @OUTPUT@" 7031ed6f5d66Smrg func_append finalize_command " @OUTPUT@" 7032ed6f5d66Smrg ;; 7033ed6f5d66Smrg esac 7034ed6f5d66Smrg 7035ed6f5d66Smrg case $prev in 7036ed6f5d66Smrg bindir) 7037fbc03982Smrg bindir=$arg 7038ed6f5d66Smrg prev= 7039ed6f5d66Smrg continue 7040ed6f5d66Smrg ;; 7041ed6f5d66Smrg dlfiles|dlprefiles) 7042fbc03982Smrg $preload || { 7043ed6f5d66Smrg # Add the symbol object into the linking commands. 7044ed6f5d66Smrg func_append compile_command " @SYMFILE@" 7045ed6f5d66Smrg func_append finalize_command " @SYMFILE@" 7046fbc03982Smrg preload=: 7047fbc03982Smrg } 7048ed6f5d66Smrg case $arg in 7049ed6f5d66Smrg *.la | *.lo) ;; # We handle these cases below. 7050ed6f5d66Smrg force) 7051fbc03982Smrg if test no = "$dlself"; then 7052ed6f5d66Smrg dlself=needless 7053ed6f5d66Smrg export_dynamic=yes 7054ed6f5d66Smrg fi 7055ed6f5d66Smrg prev= 7056ed6f5d66Smrg continue 7057ed6f5d66Smrg ;; 7058ed6f5d66Smrg self) 7059fbc03982Smrg if test dlprefiles = "$prev"; then 7060ed6f5d66Smrg dlself=yes 7061fbc03982Smrg elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then 7062ed6f5d66Smrg dlself=yes 7063ed6f5d66Smrg else 7064ed6f5d66Smrg dlself=needless 7065ed6f5d66Smrg export_dynamic=yes 7066ed6f5d66Smrg fi 7067ed6f5d66Smrg prev= 7068ed6f5d66Smrg continue 7069ed6f5d66Smrg ;; 7070ed6f5d66Smrg *) 7071fbc03982Smrg if test dlfiles = "$prev"; then 7072ed6f5d66Smrg func_append dlfiles " $arg" 7073ed6f5d66Smrg else 7074ed6f5d66Smrg func_append dlprefiles " $arg" 7075ed6f5d66Smrg fi 7076ed6f5d66Smrg prev= 7077ed6f5d66Smrg continue 7078ed6f5d66Smrg ;; 7079ed6f5d66Smrg esac 7080ed6f5d66Smrg ;; 7081ed6f5d66Smrg expsyms) 7082fbc03982Smrg export_symbols=$arg 7083ed6f5d66Smrg test -f "$arg" \ 7084fbc03982Smrg || func_fatal_error "symbol file '$arg' does not exist" 7085ed6f5d66Smrg prev= 7086ed6f5d66Smrg continue 7087ed6f5d66Smrg ;; 7088ed6f5d66Smrg expsyms_regex) 7089fbc03982Smrg export_symbols_regex=$arg 7090ed6f5d66Smrg prev= 7091ed6f5d66Smrg continue 7092ed6f5d66Smrg ;; 7093ed6f5d66Smrg framework) 7094ed6f5d66Smrg case $host in 7095ed6f5d66Smrg *-*-darwin*) 7096ed6f5d66Smrg case "$deplibs " in 7097ed6f5d66Smrg *" $qarg.ltframework "*) ;; 7098ed6f5d66Smrg *) func_append deplibs " $qarg.ltframework" # this is fixed later 7099ed6f5d66Smrg ;; 7100ed6f5d66Smrg esac 7101ed6f5d66Smrg ;; 7102ed6f5d66Smrg esac 7103ed6f5d66Smrg prev= 7104ed6f5d66Smrg continue 7105ed6f5d66Smrg ;; 7106ed6f5d66Smrg inst_prefix) 7107fbc03982Smrg inst_prefix_dir=$arg 7108fbc03982Smrg prev= 7109fbc03982Smrg continue 7110fbc03982Smrg ;; 7111fbc03982Smrg mllvm) 7112fbc03982Smrg # Clang does not use LLVM to link, so we can simply discard any 7113fbc03982Smrg # '-mllvm $arg' options when doing the link step. 7114ed6f5d66Smrg prev= 7115ed6f5d66Smrg continue 7116ed6f5d66Smrg ;; 7117ed6f5d66Smrg objectlist) 7118ed6f5d66Smrg if test -f "$arg"; then 7119ed6f5d66Smrg save_arg=$arg 7120ed6f5d66Smrg moreargs= 7121ed6f5d66Smrg for fil in `cat "$save_arg"` 7122ed6f5d66Smrg do 7123ed6f5d66Smrg# func_append moreargs " $fil" 7124ed6f5d66Smrg arg=$fil 7125ed6f5d66Smrg # A libtool-controlled object. 7126ed6f5d66Smrg 7127ed6f5d66Smrg # Check to see that this really is a libtool object. 7128ed6f5d66Smrg if func_lalib_unsafe_p "$arg"; then 7129ed6f5d66Smrg pic_object= 7130ed6f5d66Smrg non_pic_object= 7131ed6f5d66Smrg 7132ed6f5d66Smrg # Read the .lo file 7133ed6f5d66Smrg func_source "$arg" 7134ed6f5d66Smrg 7135ed6f5d66Smrg if test -z "$pic_object" || 7136ed6f5d66Smrg test -z "$non_pic_object" || 7137fbc03982Smrg test none = "$pic_object" && 7138fbc03982Smrg test none = "$non_pic_object"; then 7139fbc03982Smrg func_fatal_error "cannot find name of object for '$arg'" 7140ed6f5d66Smrg fi 7141ed6f5d66Smrg 7142ed6f5d66Smrg # Extract subdirectory from the argument. 7143ed6f5d66Smrg func_dirname "$arg" "/" "" 7144fbc03982Smrg xdir=$func_dirname_result 7145ed6f5d66Smrg 7146fbc03982Smrg if test none != "$pic_object"; then 7147ed6f5d66Smrg # Prepend the subdirectory the object is found in. 7148fbc03982Smrg pic_object=$xdir$pic_object 7149ed6f5d66Smrg 7150fbc03982Smrg if test dlfiles = "$prev"; then 7151fbc03982Smrg if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 7152ed6f5d66Smrg func_append dlfiles " $pic_object" 7153ed6f5d66Smrg prev= 7154ed6f5d66Smrg continue 7155ed6f5d66Smrg else 7156ed6f5d66Smrg # If libtool objects are unsupported, then we need to preload. 7157ed6f5d66Smrg prev=dlprefiles 7158ed6f5d66Smrg fi 7159ed6f5d66Smrg fi 7160ed6f5d66Smrg 7161ed6f5d66Smrg # CHECK ME: I think I busted this. -Ossama 7162fbc03982Smrg if test dlprefiles = "$prev"; then 7163ed6f5d66Smrg # Preload the old-style object. 7164ed6f5d66Smrg func_append dlprefiles " $pic_object" 7165ed6f5d66Smrg prev= 7166ed6f5d66Smrg fi 7167ed6f5d66Smrg 7168ed6f5d66Smrg # A PIC object. 7169ed6f5d66Smrg func_append libobjs " $pic_object" 7170fbc03982Smrg arg=$pic_object 7171ed6f5d66Smrg fi 7172ed6f5d66Smrg 7173ed6f5d66Smrg # Non-PIC object. 7174fbc03982Smrg if test none != "$non_pic_object"; then 7175ed6f5d66Smrg # Prepend the subdirectory the object is found in. 7176fbc03982Smrg non_pic_object=$xdir$non_pic_object 7177ed6f5d66Smrg 7178ed6f5d66Smrg # A standard non-PIC object 7179ed6f5d66Smrg func_append non_pic_objects " $non_pic_object" 7180fbc03982Smrg if test -z "$pic_object" || test none = "$pic_object"; then 7181fbc03982Smrg arg=$non_pic_object 7182ed6f5d66Smrg fi 7183ed6f5d66Smrg else 7184ed6f5d66Smrg # If the PIC object exists, use it instead. 7185ed6f5d66Smrg # $xdir was prepended to $pic_object above. 7186fbc03982Smrg non_pic_object=$pic_object 7187ed6f5d66Smrg func_append non_pic_objects " $non_pic_object" 7188ed6f5d66Smrg fi 7189ed6f5d66Smrg else 7190ed6f5d66Smrg # Only an error if not doing a dry-run. 7191ed6f5d66Smrg if $opt_dry_run; then 7192ed6f5d66Smrg # Extract subdirectory from the argument. 7193ed6f5d66Smrg func_dirname "$arg" "/" "" 7194fbc03982Smrg xdir=$func_dirname_result 7195ed6f5d66Smrg 7196ed6f5d66Smrg func_lo2o "$arg" 7197ed6f5d66Smrg pic_object=$xdir$objdir/$func_lo2o_result 7198ed6f5d66Smrg non_pic_object=$xdir$func_lo2o_result 7199ed6f5d66Smrg func_append libobjs " $pic_object" 7200ed6f5d66Smrg func_append non_pic_objects " $non_pic_object" 7201ed6f5d66Smrg else 7202fbc03982Smrg func_fatal_error "'$arg' is not a valid libtool object" 7203ed6f5d66Smrg fi 7204ed6f5d66Smrg fi 7205ed6f5d66Smrg done 7206ed6f5d66Smrg else 7207fbc03982Smrg func_fatal_error "link input file '$arg' does not exist" 7208ed6f5d66Smrg fi 7209ed6f5d66Smrg arg=$save_arg 7210ed6f5d66Smrg prev= 7211ed6f5d66Smrg continue 7212ed6f5d66Smrg ;; 7213fbc03982Smrg os2dllname) 7214fbc03982Smrg os2dllname=$arg 7215fbc03982Smrg prev= 7216fbc03982Smrg continue 7217fbc03982Smrg ;; 7218ed6f5d66Smrg precious_regex) 7219fbc03982Smrg precious_files_regex=$arg 7220ed6f5d66Smrg prev= 7221ed6f5d66Smrg continue 7222ed6f5d66Smrg ;; 7223ed6f5d66Smrg release) 7224fbc03982Smrg release=-$arg 7225ed6f5d66Smrg prev= 7226ed6f5d66Smrg continue 7227ed6f5d66Smrg ;; 7228ed6f5d66Smrg rpath | xrpath) 7229ed6f5d66Smrg # We need an absolute path. 7230ed6f5d66Smrg case $arg in 7231ed6f5d66Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 7232ed6f5d66Smrg *) 7233a3680546Smrg func_fatal_error "argument to -rpath is not absolute: $arg" 7234ed6f5d66Smrg ;; 7235ed6f5d66Smrg esac 7236fbc03982Smrg if test rpath = "$prev"; then 7237ed6f5d66Smrg case "$rpath " in 7238ed6f5d66Smrg *" $arg "*) ;; 7239ed6f5d66Smrg *) func_append rpath " $arg" ;; 7240ed6f5d66Smrg esac 7241ed6f5d66Smrg else 7242ed6f5d66Smrg case "$xrpath " in 7243ed6f5d66Smrg *" $arg "*) ;; 7244ed6f5d66Smrg *) func_append xrpath " $arg" ;; 7245ed6f5d66Smrg esac 7246ed6f5d66Smrg fi 7247ed6f5d66Smrg prev= 7248ed6f5d66Smrg continue 7249ed6f5d66Smrg ;; 7250ed6f5d66Smrg shrext) 7251fbc03982Smrg shrext_cmds=$arg 7252ed6f5d66Smrg prev= 7253ed6f5d66Smrg continue 7254ed6f5d66Smrg ;; 7255ed6f5d66Smrg weak) 7256ed6f5d66Smrg func_append weak_libs " $arg" 7257ed6f5d66Smrg prev= 7258ed6f5d66Smrg continue 7259ed6f5d66Smrg ;; 72603d05230fSmrg xassembler) 72613d05230fSmrg func_append compiler_flags " -Xassembler $qarg" 72623d05230fSmrg prev= 72633d05230fSmrg func_append compile_command " -Xassembler $qarg" 72643d05230fSmrg func_append finalize_command " -Xassembler $qarg" 72653d05230fSmrg continue 72663d05230fSmrg ;; 7267ed6f5d66Smrg xcclinker) 7268ed6f5d66Smrg func_append linker_flags " $qarg" 7269ed6f5d66Smrg func_append compiler_flags " $qarg" 7270ed6f5d66Smrg prev= 7271ed6f5d66Smrg func_append compile_command " $qarg" 7272ed6f5d66Smrg func_append finalize_command " $qarg" 7273ed6f5d66Smrg continue 7274ed6f5d66Smrg ;; 7275ed6f5d66Smrg xcompiler) 7276ed6f5d66Smrg func_append compiler_flags " $qarg" 7277ed6f5d66Smrg prev= 7278ed6f5d66Smrg func_append compile_command " $qarg" 7279ed6f5d66Smrg func_append finalize_command " $qarg" 7280ed6f5d66Smrg continue 7281ed6f5d66Smrg ;; 7282ed6f5d66Smrg xlinker) 7283ed6f5d66Smrg func_append linker_flags " $qarg" 7284ed6f5d66Smrg func_append compiler_flags " $wl$qarg" 7285ed6f5d66Smrg prev= 7286ed6f5d66Smrg func_append compile_command " $wl$qarg" 7287ed6f5d66Smrg func_append finalize_command " $wl$qarg" 7288ed6f5d66Smrg continue 7289ed6f5d66Smrg ;; 7290ed6f5d66Smrg *) 7291ed6f5d66Smrg eval "$prev=\"\$arg\"" 7292ed6f5d66Smrg prev= 7293ed6f5d66Smrg continue 7294ed6f5d66Smrg ;; 7295ed6f5d66Smrg esac 7296ed6f5d66Smrg fi # test -n "$prev" 7297ed6f5d66Smrg 7298fbc03982Smrg prevarg=$arg 7299ed6f5d66Smrg 7300ed6f5d66Smrg case $arg in 7301ed6f5d66Smrg -all-static) 7302ed6f5d66Smrg if test -n "$link_static_flag"; then 7303ed6f5d66Smrg # See comment for -static flag below, for more details. 7304ed6f5d66Smrg func_append compile_command " $link_static_flag" 7305ed6f5d66Smrg func_append finalize_command " $link_static_flag" 7306ed6f5d66Smrg fi 7307ed6f5d66Smrg continue 7308ed6f5d66Smrg ;; 7309ed6f5d66Smrg 7310ed6f5d66Smrg -allow-undefined) 7311ed6f5d66Smrg # FIXME: remove this flag sometime in the future. 7312fbc03982Smrg func_fatal_error "'-allow-undefined' must not be used because it is the default" 7313ed6f5d66Smrg ;; 7314ed6f5d66Smrg 7315ed6f5d66Smrg -avoid-version) 7316ed6f5d66Smrg avoid_version=yes 7317ed6f5d66Smrg continue 7318ed6f5d66Smrg ;; 7319ed6f5d66Smrg 7320ed6f5d66Smrg -bindir) 7321ed6f5d66Smrg prev=bindir 7322ed6f5d66Smrg continue 7323ed6f5d66Smrg ;; 7324ed6f5d66Smrg 7325ed6f5d66Smrg -dlopen) 7326ed6f5d66Smrg prev=dlfiles 7327ed6f5d66Smrg continue 7328ed6f5d66Smrg ;; 7329ed6f5d66Smrg 7330ed6f5d66Smrg -dlpreopen) 7331ed6f5d66Smrg prev=dlprefiles 7332ed6f5d66Smrg continue 7333ed6f5d66Smrg ;; 7334ed6f5d66Smrg 7335ed6f5d66Smrg -export-dynamic) 7336ed6f5d66Smrg export_dynamic=yes 7337ed6f5d66Smrg continue 7338ed6f5d66Smrg ;; 7339ed6f5d66Smrg 7340ed6f5d66Smrg -export-symbols | -export-symbols-regex) 7341ed6f5d66Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 7342ed6f5d66Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 7343ed6f5d66Smrg fi 7344fbc03982Smrg if test X-export-symbols = "X$arg"; then 7345ed6f5d66Smrg prev=expsyms 7346ed6f5d66Smrg else 7347ed6f5d66Smrg prev=expsyms_regex 7348ed6f5d66Smrg fi 7349ed6f5d66Smrg continue 7350ed6f5d66Smrg ;; 7351ed6f5d66Smrg 7352ed6f5d66Smrg -framework) 7353ed6f5d66Smrg prev=framework 7354ed6f5d66Smrg continue 7355ed6f5d66Smrg ;; 7356ed6f5d66Smrg 7357ed6f5d66Smrg -inst-prefix-dir) 7358ed6f5d66Smrg prev=inst_prefix 7359ed6f5d66Smrg continue 7360ed6f5d66Smrg ;; 7361ed6f5d66Smrg 7362ed6f5d66Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 7363ed6f5d66Smrg # so, if we see these flags be careful not to treat them like -L 7364ed6f5d66Smrg -L[A-Z][A-Z]*:*) 7365ed6f5d66Smrg case $with_gcc/$host in 7366ed6f5d66Smrg no/*-*-irix* | /*-*-irix*) 7367ed6f5d66Smrg func_append compile_command " $arg" 7368ed6f5d66Smrg func_append finalize_command " $arg" 7369ed6f5d66Smrg ;; 7370ed6f5d66Smrg esac 7371ed6f5d66Smrg continue 7372ed6f5d66Smrg ;; 7373ed6f5d66Smrg 7374ed6f5d66Smrg -L*) 7375ed6f5d66Smrg func_stripname "-L" '' "$arg" 7376ed6f5d66Smrg if test -z "$func_stripname_result"; then 7377ed6f5d66Smrg if test "$#" -gt 0; then 7378fbc03982Smrg func_fatal_error "require no space between '-L' and '$1'" 7379ed6f5d66Smrg else 7380fbc03982Smrg func_fatal_error "need path for '-L' option" 7381ed6f5d66Smrg fi 7382ed6f5d66Smrg fi 7383ed6f5d66Smrg func_resolve_sysroot "$func_stripname_result" 7384ed6f5d66Smrg dir=$func_resolve_sysroot_result 7385ed6f5d66Smrg # We need an absolute path. 7386ed6f5d66Smrg case $dir in 7387ed6f5d66Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 7388ed6f5d66Smrg *) 7389ed6f5d66Smrg absdir=`cd "$dir" && pwd` 7390ed6f5d66Smrg test -z "$absdir" && \ 7391fbc03982Smrg func_fatal_error "cannot determine absolute directory name of '$dir'" 7392fbc03982Smrg dir=$absdir 7393ed6f5d66Smrg ;; 7394ed6f5d66Smrg esac 7395ed6f5d66Smrg case "$deplibs " in 7396ed6f5d66Smrg *" -L$dir "* | *" $arg "*) 7397ed6f5d66Smrg # Will only happen for absolute or sysroot arguments 7398ed6f5d66Smrg ;; 7399ed6f5d66Smrg *) 7400ed6f5d66Smrg # Preserve sysroot, but never include relative directories 7401ed6f5d66Smrg case $dir in 7402ed6f5d66Smrg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 7403ed6f5d66Smrg *) func_append deplibs " -L$dir" ;; 7404ed6f5d66Smrg esac 7405ed6f5d66Smrg func_append lib_search_path " $dir" 7406ed6f5d66Smrg ;; 7407ed6f5d66Smrg esac 7408ed6f5d66Smrg case $host in 7409a3680546Smrg *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-cegcc*) 7410ed6f5d66Smrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 7411ed6f5d66Smrg case :$dllsearchpath: in 7412ed6f5d66Smrg *":$dir:"*) ;; 7413ed6f5d66Smrg ::) dllsearchpath=$dir;; 7414ed6f5d66Smrg *) func_append dllsearchpath ":$dir";; 7415ed6f5d66Smrg esac 7416ed6f5d66Smrg case :$dllsearchpath: in 7417ed6f5d66Smrg *":$testbindir:"*) ;; 7418ed6f5d66Smrg ::) dllsearchpath=$testbindir;; 7419ed6f5d66Smrg *) func_append dllsearchpath ":$testbindir";; 7420ed6f5d66Smrg esac 7421ed6f5d66Smrg ;; 7422ed6f5d66Smrg esac 7423ed6f5d66Smrg continue 7424ed6f5d66Smrg ;; 7425ed6f5d66Smrg 7426ed6f5d66Smrg -l*) 7427fbc03982Smrg if test X-lc = "X$arg" || test X-lm = "X$arg"; then 7428ed6f5d66Smrg case $host in 7429a3680546Smrg *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 7430ed6f5d66Smrg # These systems don't actually have a C or math library (as such) 7431ed6f5d66Smrg continue 7432ed6f5d66Smrg ;; 7433ed6f5d66Smrg *-*-os2*) 7434ed6f5d66Smrg # These systems don't actually have a C library (as such) 7435fbc03982Smrg test X-lc = "X$arg" && continue 7436ed6f5d66Smrg ;; 7437a3680546Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) 7438ed6f5d66Smrg # Do not include libc due to us having libc/libc_r. 7439fbc03982Smrg test X-lc = "X$arg" && continue 7440ed6f5d66Smrg ;; 7441ed6f5d66Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7442ed6f5d66Smrg # Rhapsody C and math libraries are in the System framework 7443ed6f5d66Smrg func_append deplibs " System.ltframework" 7444ed6f5d66Smrg continue 7445ed6f5d66Smrg ;; 7446ed6f5d66Smrg *-*-sco3.2v5* | *-*-sco5v6*) 7447ed6f5d66Smrg # Causes problems with __ctype 7448fbc03982Smrg test X-lc = "X$arg" && continue 7449ed6f5d66Smrg ;; 7450ed6f5d66Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7451ed6f5d66Smrg # Compiler inserts libc in the correct place for threads to work 7452fbc03982Smrg test X-lc = "X$arg" && continue 7453ed6f5d66Smrg ;; 7454ed6f5d66Smrg esac 7455fbc03982Smrg elif test X-lc_r = "X$arg"; then 7456ed6f5d66Smrg case $host in 7457a3680546Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) 7458ed6f5d66Smrg # Do not include libc_r directly, use -pthread flag. 7459ed6f5d66Smrg continue 7460ed6f5d66Smrg ;; 7461ed6f5d66Smrg esac 7462ed6f5d66Smrg fi 7463ed6f5d66Smrg func_append deplibs " $arg" 7464ed6f5d66Smrg continue 7465ed6f5d66Smrg ;; 7466ed6f5d66Smrg 7467fbc03982Smrg -mllvm) 7468fbc03982Smrg prev=mllvm 7469fbc03982Smrg continue 7470fbc03982Smrg ;; 7471fbc03982Smrg 7472ed6f5d66Smrg -module) 7473ed6f5d66Smrg module=yes 7474ed6f5d66Smrg continue 7475ed6f5d66Smrg ;; 7476ed6f5d66Smrg 7477ed6f5d66Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 7478ed6f5d66Smrg # classes, name mangling, and exception handling. 7479ed6f5d66Smrg # Darwin uses the -arch flag to determine output architecture. 7480a3680546Smrg # -q <option> for IBM XL C/C++ compiler. 7481a3680546Smrg -model|-arch|-isysroot|--sysroot|-q) 7482ed6f5d66Smrg func_append compiler_flags " $arg" 7483ed6f5d66Smrg func_append compile_command " $arg" 7484ed6f5d66Smrg func_append finalize_command " $arg" 7485ed6f5d66Smrg prev=xcompiler 7486ed6f5d66Smrg continue 7487ed6f5d66Smrg ;; 74883d05230fSmrg # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199. 74893d05230fSmrg -pthread) 74903d05230fSmrg case $host in 74913d05230fSmrg *solaris2*) ;; 74923d05230fSmrg *) 74933d05230fSmrg case "$new_inherited_linker_flags " in 74943d05230fSmrg *" $arg "*) ;; 74953d05230fSmrg * ) func_append new_inherited_linker_flags " $arg" ;; 74963d05230fSmrg esac 74973d05230fSmrg ;; 74983d05230fSmrg esac 74993d05230fSmrg continue 75003d05230fSmrg ;; 75013d05230fSmrg -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \ 7502a3680546Smrg |-threads|-fopenmp|-fopenmp=*|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 7503ed6f5d66Smrg func_append compiler_flags " $arg" 7504ed6f5d66Smrg func_append compile_command " $arg" 7505ed6f5d66Smrg func_append finalize_command " $arg" 7506ed6f5d66Smrg case "$new_inherited_linker_flags " in 7507ed6f5d66Smrg *" $arg "*) ;; 7508ed6f5d66Smrg * ) func_append new_inherited_linker_flags " $arg" ;; 7509ed6f5d66Smrg esac 7510ed6f5d66Smrg continue 7511ed6f5d66Smrg ;; 7512ed6f5d66Smrg 7513ed6f5d66Smrg -multi_module) 7514fbc03982Smrg single_module=$wl-multi_module 7515ed6f5d66Smrg continue 7516ed6f5d66Smrg ;; 7517ed6f5d66Smrg 7518ed6f5d66Smrg -no-fast-install) 7519ed6f5d66Smrg fast_install=no 7520ed6f5d66Smrg continue 7521ed6f5d66Smrg ;; 7522ed6f5d66Smrg 7523ed6f5d66Smrg -no-install) 7524ed6f5d66Smrg case $host in 7525a3680546Smrg *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 7526ed6f5d66Smrg # The PATH hackery in wrapper scripts is required on Windows 7527ed6f5d66Smrg # and Darwin in order for the loader to find any dlls it needs. 7528fbc03982Smrg func_warning "'-no-install' is ignored for $host" 7529fbc03982Smrg func_warning "assuming '-no-fast-install' instead" 7530ed6f5d66Smrg fast_install=no 7531ed6f5d66Smrg ;; 7532ed6f5d66Smrg *) no_install=yes ;; 7533ed6f5d66Smrg esac 7534ed6f5d66Smrg continue 7535ed6f5d66Smrg ;; 7536ed6f5d66Smrg 7537ed6f5d66Smrg -no-undefined) 7538ed6f5d66Smrg allow_undefined=no 7539ed6f5d66Smrg continue 7540ed6f5d66Smrg ;; 7541ed6f5d66Smrg 7542ed6f5d66Smrg -objectlist) 7543ed6f5d66Smrg prev=objectlist 7544ed6f5d66Smrg continue 7545ed6f5d66Smrg ;; 7546ed6f5d66Smrg 7547fbc03982Smrg -os2dllname) 7548fbc03982Smrg prev=os2dllname 7549fbc03982Smrg continue 7550fbc03982Smrg ;; 7551fbc03982Smrg 7552ed6f5d66Smrg -o) prev=output ;; 7553ed6f5d66Smrg 7554ed6f5d66Smrg -precious-files-regex) 7555ed6f5d66Smrg prev=precious_regex 7556ed6f5d66Smrg continue 7557ed6f5d66Smrg ;; 7558ed6f5d66Smrg 7559ed6f5d66Smrg -release) 7560ed6f5d66Smrg prev=release 7561ed6f5d66Smrg continue 7562ed6f5d66Smrg ;; 7563ed6f5d66Smrg 7564ed6f5d66Smrg -rpath) 7565ed6f5d66Smrg prev=rpath 7566ed6f5d66Smrg continue 7567ed6f5d66Smrg ;; 7568ed6f5d66Smrg 7569ed6f5d66Smrg -R) 7570ed6f5d66Smrg prev=xrpath 7571ed6f5d66Smrg continue 7572ed6f5d66Smrg ;; 7573ed6f5d66Smrg 7574ed6f5d66Smrg -R*) 7575ed6f5d66Smrg func_stripname '-R' '' "$arg" 7576ed6f5d66Smrg dir=$func_stripname_result 7577ed6f5d66Smrg # We need an absolute path. 7578ed6f5d66Smrg case $dir in 7579ed6f5d66Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 7580ed6f5d66Smrg =*) 7581ed6f5d66Smrg func_stripname '=' '' "$dir" 7582ed6f5d66Smrg dir=$lt_sysroot$func_stripname_result 7583ed6f5d66Smrg ;; 7584ed6f5d66Smrg *) 7585a3680546Smrg func_fatal_error "argument ($arg) to '-R' is not an absolute path: $dir" 7586ed6f5d66Smrg ;; 7587ed6f5d66Smrg esac 7588ed6f5d66Smrg case "$xrpath " in 7589ed6f5d66Smrg *" $dir "*) ;; 7590ed6f5d66Smrg *) func_append xrpath " $dir" ;; 7591ed6f5d66Smrg esac 7592ed6f5d66Smrg continue 7593ed6f5d66Smrg ;; 7594ed6f5d66Smrg 7595ed6f5d66Smrg -shared) 7596ed6f5d66Smrg # The effects of -shared are defined in a previous loop. 7597ed6f5d66Smrg continue 7598ed6f5d66Smrg ;; 7599ed6f5d66Smrg 7600ed6f5d66Smrg -shrext) 7601ed6f5d66Smrg prev=shrext 7602ed6f5d66Smrg continue 7603ed6f5d66Smrg ;; 7604ed6f5d66Smrg 7605ed6f5d66Smrg -static | -static-libtool-libs) 7606ed6f5d66Smrg # The effects of -static are defined in a previous loop. 7607ed6f5d66Smrg # We used to do the same as -all-static on platforms that 7608ed6f5d66Smrg # didn't have a PIC flag, but the assumption that the effects 7609ed6f5d66Smrg # would be equivalent was wrong. It would break on at least 7610ed6f5d66Smrg # Digital Unix and AIX. 7611ed6f5d66Smrg continue 7612ed6f5d66Smrg ;; 7613ed6f5d66Smrg 7614ed6f5d66Smrg -thread-safe) 7615ed6f5d66Smrg thread_safe=yes 7616ed6f5d66Smrg continue 7617ed6f5d66Smrg ;; 7618ed6f5d66Smrg 7619ed6f5d66Smrg -version-info) 7620ed6f5d66Smrg prev=vinfo 7621ed6f5d66Smrg continue 7622ed6f5d66Smrg ;; 7623ed6f5d66Smrg 7624ed6f5d66Smrg -version-number) 7625ed6f5d66Smrg prev=vinfo 7626ed6f5d66Smrg vinfo_number=yes 7627ed6f5d66Smrg continue 7628ed6f5d66Smrg ;; 7629ed6f5d66Smrg 7630ed6f5d66Smrg -weak) 7631ed6f5d66Smrg prev=weak 7632ed6f5d66Smrg continue 7633ed6f5d66Smrg ;; 7634ed6f5d66Smrg 7635ed6f5d66Smrg -Wc,*) 7636ed6f5d66Smrg func_stripname '-Wc,' '' "$arg" 7637ed6f5d66Smrg args=$func_stripname_result 7638ed6f5d66Smrg arg= 7639fbc03982Smrg save_ifs=$IFS; IFS=, 7640ed6f5d66Smrg for flag in $args; do 7641fbc03982Smrg IFS=$save_ifs 76423d05230fSmrg func_quote_arg pretty "$flag" 76433d05230fSmrg func_append arg " $func_quote_arg_result" 76443d05230fSmrg func_append compiler_flags " $func_quote_arg_result" 7645ed6f5d66Smrg done 7646fbc03982Smrg IFS=$save_ifs 7647ed6f5d66Smrg func_stripname ' ' '' "$arg" 7648ed6f5d66Smrg arg=$func_stripname_result 7649ed6f5d66Smrg ;; 7650ed6f5d66Smrg 7651ed6f5d66Smrg -Wl,*) 7652ed6f5d66Smrg func_stripname '-Wl,' '' "$arg" 7653ed6f5d66Smrg args=$func_stripname_result 7654ed6f5d66Smrg arg= 7655fbc03982Smrg save_ifs=$IFS; IFS=, 7656ed6f5d66Smrg for flag in $args; do 7657fbc03982Smrg IFS=$save_ifs 76583d05230fSmrg func_quote_arg pretty "$flag" 76593d05230fSmrg func_append arg " $wl$func_quote_arg_result" 76603d05230fSmrg func_append compiler_flags " $wl$func_quote_arg_result" 76613d05230fSmrg func_append linker_flags " $func_quote_arg_result" 7662ed6f5d66Smrg done 7663fbc03982Smrg IFS=$save_ifs 7664ed6f5d66Smrg func_stripname ' ' '' "$arg" 7665ed6f5d66Smrg arg=$func_stripname_result 7666ed6f5d66Smrg ;; 7667ed6f5d66Smrg 76683d05230fSmrg -Xassembler) 76693d05230fSmrg prev=xassembler 76703d05230fSmrg continue 76713d05230fSmrg ;; 76723d05230fSmrg 7673ed6f5d66Smrg -Xcompiler) 7674ed6f5d66Smrg prev=xcompiler 7675ed6f5d66Smrg continue 7676ed6f5d66Smrg ;; 7677ed6f5d66Smrg 7678ed6f5d66Smrg -Xlinker) 7679ed6f5d66Smrg prev=xlinker 7680ed6f5d66Smrg continue 7681ed6f5d66Smrg ;; 7682ed6f5d66Smrg 7683ed6f5d66Smrg -XCClinker) 7684ed6f5d66Smrg prev=xcclinker 7685ed6f5d66Smrg continue 7686ed6f5d66Smrg ;; 7687ed6f5d66Smrg 7688ed6f5d66Smrg # -msg_* for osf cc 7689ed6f5d66Smrg -msg_*) 76903d05230fSmrg func_quote_arg pretty "$arg" 76913d05230fSmrg arg=$func_quote_arg_result 7692ed6f5d66Smrg ;; 7693ed6f5d66Smrg 7694ed6f5d66Smrg # Flags to be passed through unchanged, with rationale: 7695ed6f5d66Smrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 7696ed6f5d66Smrg # -r[0-9][0-9]* specify processor for the SGI compiler 7697ed6f5d66Smrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 7698ed6f5d66Smrg # +DA*, +DD* enable 64-bit mode for the HP compiler 7699ed6f5d66Smrg # -q* compiler args for the IBM compiler 7700ed6f5d66Smrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 7701ed6f5d66Smrg # -F/path path to uninstalled frameworks, gcc on darwin 7702ed6f5d66Smrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 7703fbc03982Smrg # -fstack-protector* stack protector flags for GCC 7704ed6f5d66Smrg # @file GCC response files 7705ed6f5d66Smrg # -tp=* Portland pgcc target processor selection 7706ed6f5d66Smrg # --sysroot=* for sysroot support 7707fbc03982Smrg # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 7708fbc03982Smrg # -specs=* GCC specs files 7709fbc03982Smrg # -stdlib=* select c++ std lib with clang 7710a3680546Smrg # -fdiagnostics-color* simply affects output 7711a3680546Smrg # -frecord-gcc-switches used to verify flags were respected 7712fbc03982Smrg # -fsanitize=* Clang/GCC memory and address sanitizer 7713a3680546Smrg # -fno-sanitize* Clang/GCC memory and address sanitizer 7714a3680546Smrg # -shared-libsan Link with shared sanitizer runtimes (Clang) 7715a3680546Smrg # -static-libsan Link with static sanitizer runtimes (Clang) 7716a3680546Smrg # -no-canonical-prefixes Do not expand any symbolic links 7717fbc03982Smrg # -fuse-ld=* Linker select flags for GCC 7718a3680546Smrg # -static-* direct GCC to link specific libraries statically 7719a3680546Smrg # -fcilkplus Cilk Plus language extension features for C/C++ 7720a3680546Smrg # -rtlib=* select c runtime lib with clang 7721a3680546Smrg # --unwindlib=* select unwinder library with clang 7722a3680546Smrg # -f{file|debug|macro|profile}-prefix-map=* needed for lto linking 77233d05230fSmrg # -Wa,* Pass flags directly to the assembler 7724a3680546Smrg # -Werror, -Werror=* Report (specified) warnings as errors 7725ed6f5d66Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 7726ed6f5d66Smrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 7727a3680546Smrg -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-no-canonical-prefixes| \ 7728a3680546Smrg -stdlib=*|-rtlib=*|--unwindlib=*| \ 7729a3680546Smrg -specs=*|-fsanitize=*|-fno-sanitize*|-shared-libsan|-static-libsan| \ 7730a3680546Smrg -ffile-prefix-map=*|-fdebug-prefix-map=*|-fmacro-prefix-map=*|-fprofile-prefix-map=*| \ 7731a3680546Smrg -fdiagnostics-color*|-frecord-gcc-switches| \ 7732a3680546Smrg -fuse-ld=*|-static-*|-fcilkplus|-Wa,*|-Werror|-Werror=*) 77333d05230fSmrg func_quote_arg pretty "$arg" 77343d05230fSmrg arg=$func_quote_arg_result 7735ed6f5d66Smrg func_append compile_command " $arg" 7736ed6f5d66Smrg func_append finalize_command " $arg" 7737ed6f5d66Smrg func_append compiler_flags " $arg" 7738ed6f5d66Smrg continue 7739ed6f5d66Smrg ;; 7740ed6f5d66Smrg 7741fbc03982Smrg -Z*) 7742fbc03982Smrg if test os2 = "`expr $host : '.*\(os2\)'`"; then 7743fbc03982Smrg # OS/2 uses -Zxxx to specify OS/2-specific options 7744fbc03982Smrg compiler_flags="$compiler_flags $arg" 7745fbc03982Smrg func_append compile_command " $arg" 7746fbc03982Smrg func_append finalize_command " $arg" 7747fbc03982Smrg case $arg in 7748fbc03982Smrg -Zlinker | -Zstack) 7749fbc03982Smrg prev=xcompiler 7750fbc03982Smrg ;; 7751fbc03982Smrg esac 7752fbc03982Smrg continue 7753fbc03982Smrg else 7754fbc03982Smrg # Otherwise treat like 'Some other compiler flag' below 77553d05230fSmrg func_quote_arg pretty "$arg" 77563d05230fSmrg arg=$func_quote_arg_result 7757fbc03982Smrg fi 7758fbc03982Smrg ;; 7759fbc03982Smrg 7760ed6f5d66Smrg # Some other compiler flag. 7761ed6f5d66Smrg -* | +*) 77623d05230fSmrg func_quote_arg pretty "$arg" 77633d05230fSmrg arg=$func_quote_arg_result 7764ed6f5d66Smrg ;; 7765ed6f5d66Smrg 7766ed6f5d66Smrg *.$objext) 7767ed6f5d66Smrg # A standard object. 7768ed6f5d66Smrg func_append objs " $arg" 7769ed6f5d66Smrg ;; 7770ed6f5d66Smrg 7771ed6f5d66Smrg *.lo) 7772ed6f5d66Smrg # A libtool-controlled object. 7773ed6f5d66Smrg 7774ed6f5d66Smrg # Check to see that this really is a libtool object. 7775ed6f5d66Smrg if func_lalib_unsafe_p "$arg"; then 7776ed6f5d66Smrg pic_object= 7777ed6f5d66Smrg non_pic_object= 7778ed6f5d66Smrg 7779ed6f5d66Smrg # Read the .lo file 7780ed6f5d66Smrg func_source "$arg" 7781ed6f5d66Smrg 7782ed6f5d66Smrg if test -z "$pic_object" || 7783ed6f5d66Smrg test -z "$non_pic_object" || 7784fbc03982Smrg test none = "$pic_object" && 7785fbc03982Smrg test none = "$non_pic_object"; then 7786fbc03982Smrg func_fatal_error "cannot find name of object for '$arg'" 7787ed6f5d66Smrg fi 7788ed6f5d66Smrg 7789ed6f5d66Smrg # Extract subdirectory from the argument. 7790ed6f5d66Smrg func_dirname "$arg" "/" "" 7791fbc03982Smrg xdir=$func_dirname_result 7792ed6f5d66Smrg 7793fbc03982Smrg test none = "$pic_object" || { 7794ed6f5d66Smrg # Prepend the subdirectory the object is found in. 7795fbc03982Smrg pic_object=$xdir$pic_object 7796ed6f5d66Smrg 7797fbc03982Smrg if test dlfiles = "$prev"; then 7798fbc03982Smrg if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 7799ed6f5d66Smrg func_append dlfiles " $pic_object" 7800ed6f5d66Smrg prev= 7801ed6f5d66Smrg continue 7802ed6f5d66Smrg else 7803ed6f5d66Smrg # If libtool objects are unsupported, then we need to preload. 7804ed6f5d66Smrg prev=dlprefiles 7805ed6f5d66Smrg fi 7806ed6f5d66Smrg fi 7807ed6f5d66Smrg 7808ed6f5d66Smrg # CHECK ME: I think I busted this. -Ossama 7809fbc03982Smrg if test dlprefiles = "$prev"; then 7810ed6f5d66Smrg # Preload the old-style object. 7811ed6f5d66Smrg func_append dlprefiles " $pic_object" 7812ed6f5d66Smrg prev= 7813ed6f5d66Smrg fi 7814ed6f5d66Smrg 7815ed6f5d66Smrg # A PIC object. 7816ed6f5d66Smrg func_append libobjs " $pic_object" 7817fbc03982Smrg arg=$pic_object 7818fbc03982Smrg } 7819ed6f5d66Smrg 7820ed6f5d66Smrg # Non-PIC object. 7821fbc03982Smrg if test none != "$non_pic_object"; then 7822ed6f5d66Smrg # Prepend the subdirectory the object is found in. 7823fbc03982Smrg non_pic_object=$xdir$non_pic_object 7824ed6f5d66Smrg 7825ed6f5d66Smrg # A standard non-PIC object 7826ed6f5d66Smrg func_append non_pic_objects " $non_pic_object" 7827fbc03982Smrg if test -z "$pic_object" || test none = "$pic_object"; then 7828fbc03982Smrg arg=$non_pic_object 7829ed6f5d66Smrg fi 7830ed6f5d66Smrg else 7831ed6f5d66Smrg # If the PIC object exists, use it instead. 7832ed6f5d66Smrg # $xdir was prepended to $pic_object above. 7833fbc03982Smrg non_pic_object=$pic_object 7834ed6f5d66Smrg func_append non_pic_objects " $non_pic_object" 7835ed6f5d66Smrg fi 7836ed6f5d66Smrg else 7837ed6f5d66Smrg # Only an error if not doing a dry-run. 7838ed6f5d66Smrg if $opt_dry_run; then 7839ed6f5d66Smrg # Extract subdirectory from the argument. 7840ed6f5d66Smrg func_dirname "$arg" "/" "" 7841fbc03982Smrg xdir=$func_dirname_result 7842ed6f5d66Smrg 7843ed6f5d66Smrg func_lo2o "$arg" 7844ed6f5d66Smrg pic_object=$xdir$objdir/$func_lo2o_result 7845ed6f5d66Smrg non_pic_object=$xdir$func_lo2o_result 7846ed6f5d66Smrg func_append libobjs " $pic_object" 7847ed6f5d66Smrg func_append non_pic_objects " $non_pic_object" 7848ed6f5d66Smrg else 7849fbc03982Smrg func_fatal_error "'$arg' is not a valid libtool object" 7850ed6f5d66Smrg fi 7851ed6f5d66Smrg fi 7852ed6f5d66Smrg ;; 7853ed6f5d66Smrg 7854ed6f5d66Smrg *.$libext) 7855ed6f5d66Smrg # An archive. 7856ed6f5d66Smrg func_append deplibs " $arg" 7857ed6f5d66Smrg func_append old_deplibs " $arg" 7858ed6f5d66Smrg continue 7859ed6f5d66Smrg ;; 7860ed6f5d66Smrg 7861ed6f5d66Smrg *.la) 7862ed6f5d66Smrg # A libtool-controlled library. 7863ed6f5d66Smrg 7864ed6f5d66Smrg func_resolve_sysroot "$arg" 7865fbc03982Smrg if test dlfiles = "$prev"; then 7866ed6f5d66Smrg # This library was specified with -dlopen. 7867ed6f5d66Smrg func_append dlfiles " $func_resolve_sysroot_result" 7868ed6f5d66Smrg prev= 7869fbc03982Smrg elif test dlprefiles = "$prev"; then 7870ed6f5d66Smrg # The library was specified with -dlpreopen. 7871ed6f5d66Smrg func_append dlprefiles " $func_resolve_sysroot_result" 7872ed6f5d66Smrg prev= 7873ed6f5d66Smrg else 7874ed6f5d66Smrg func_append deplibs " $func_resolve_sysroot_result" 7875ed6f5d66Smrg fi 7876ed6f5d66Smrg continue 7877ed6f5d66Smrg ;; 7878ed6f5d66Smrg 7879ed6f5d66Smrg # Some other compiler argument. 7880ed6f5d66Smrg *) 7881ed6f5d66Smrg # Unknown arguments in both finalize_command and compile_command need 7882ed6f5d66Smrg # to be aesthetically quoted because they are evaled later. 78833d05230fSmrg func_quote_arg pretty "$arg" 78843d05230fSmrg arg=$func_quote_arg_result 7885ed6f5d66Smrg ;; 7886ed6f5d66Smrg esac # arg 7887ed6f5d66Smrg 7888ed6f5d66Smrg # Now actually substitute the argument into the commands. 7889ed6f5d66Smrg if test -n "$arg"; then 7890a3680546Smrg if test -n "$rpath_arg"; then 7891a3680546Smrg func_append finalize_rpath " ${arg##*,}" 7892a3680546Smrg unset rpath_arg 7893a3680546Smrg else 7894a3680546Smrg case $arg in 7895a3680546Smrg -Wl,-rpath,*) 7896a3680546Smrg func_append finalize_rpath " ${arg##*,}";; 7897a3680546Smrg -Wl,-rpath) 7898a3680546Smrg rpath_arg=1;; 7899a3680546Smrg *) 7900a3680546Smrg func_append compile_command " $arg" 7901a3680546Smrg func_append finalize_command " $arg" 7902a3680546Smrg esac 7903a3680546Smrg fi 7904ed6f5d66Smrg fi 7905ed6f5d66Smrg done # argument parsing loop 7906ed6f5d66Smrg 7907ed6f5d66Smrg test -n "$prev" && \ 7908fbc03982Smrg func_fatal_help "the '$prevarg' option requires an argument" 7909ed6f5d66Smrg 7910fbc03982Smrg if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then 7911ed6f5d66Smrg eval arg=\"$export_dynamic_flag_spec\" 7912ed6f5d66Smrg func_append compile_command " $arg" 7913ed6f5d66Smrg func_append finalize_command " $arg" 7914ed6f5d66Smrg fi 7915ed6f5d66Smrg 7916ed6f5d66Smrg oldlibs= 7917ed6f5d66Smrg # calculate the name of the file, without its directory 7918ed6f5d66Smrg func_basename "$output" 7919fbc03982Smrg outputname=$func_basename_result 7920fbc03982Smrg libobjs_save=$libobjs 7921ed6f5d66Smrg 7922ed6f5d66Smrg if test -n "$shlibpath_var"; then 7923ed6f5d66Smrg # get the directories listed in $shlibpath_var 7924fbc03982Smrg eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` 7925ed6f5d66Smrg else 7926ed6f5d66Smrg shlib_search_path= 7927ed6f5d66Smrg fi 7928ed6f5d66Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 7929ed6f5d66Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 7930ed6f5d66Smrg 7931fbc03982Smrg # Definition is injected by LT_CONFIG during libtool generation. 7932fbc03982Smrg func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" 7933fbc03982Smrg 7934ed6f5d66Smrg func_dirname "$output" "/" "" 7935fbc03982Smrg output_objdir=$func_dirname_result$objdir 7936ed6f5d66Smrg func_to_tool_file "$output_objdir/" 7937ed6f5d66Smrg tool_output_objdir=$func_to_tool_file_result 7938ed6f5d66Smrg # Create the object directory. 7939ed6f5d66Smrg func_mkdir_p "$output_objdir" 7940ed6f5d66Smrg 7941ed6f5d66Smrg # Determine the type of output 7942ed6f5d66Smrg case $output in 7943ed6f5d66Smrg "") 7944ed6f5d66Smrg func_fatal_help "you must specify an output file" 7945ed6f5d66Smrg ;; 7946ed6f5d66Smrg *.$libext) linkmode=oldlib ;; 7947ed6f5d66Smrg *.lo | *.$objext) linkmode=obj ;; 7948ed6f5d66Smrg *.la) linkmode=lib ;; 7949ed6f5d66Smrg *) linkmode=prog ;; # Anything else should be a program. 7950ed6f5d66Smrg esac 7951ed6f5d66Smrg 7952ed6f5d66Smrg specialdeplibs= 7953ed6f5d66Smrg 7954ed6f5d66Smrg libs= 7955ed6f5d66Smrg # Find all interdependent deplibs by searching for libraries 7956ed6f5d66Smrg # that are linked more than once (e.g. -la -lb -la) 7957ed6f5d66Smrg for deplib in $deplibs; do 7958fbc03982Smrg if $opt_preserve_dup_deps; then 7959ed6f5d66Smrg case "$libs " in 7960ed6f5d66Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 7961ed6f5d66Smrg esac 7962ed6f5d66Smrg fi 7963ed6f5d66Smrg func_append libs " $deplib" 7964ed6f5d66Smrg done 7965ed6f5d66Smrg 7966fbc03982Smrg if test lib = "$linkmode"; then 7967ed6f5d66Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 7968ed6f5d66Smrg 7969ed6f5d66Smrg # Compute libraries that are listed more than once in $predeps 7970ed6f5d66Smrg # $postdeps and mark them as special (i.e., whose duplicates are 7971ed6f5d66Smrg # not to be eliminated). 7972ed6f5d66Smrg pre_post_deps= 7973ed6f5d66Smrg if $opt_duplicate_compiler_generated_deps; then 7974ed6f5d66Smrg for pre_post_dep in $predeps $postdeps; do 7975ed6f5d66Smrg case "$pre_post_deps " in 7976ed6f5d66Smrg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 7977ed6f5d66Smrg esac 7978ed6f5d66Smrg func_append pre_post_deps " $pre_post_dep" 7979ed6f5d66Smrg done 7980ed6f5d66Smrg fi 7981ed6f5d66Smrg pre_post_deps= 7982ed6f5d66Smrg fi 7983ed6f5d66Smrg 7984ed6f5d66Smrg deplibs= 7985ed6f5d66Smrg newdependency_libs= 7986ed6f5d66Smrg newlib_search_path= 7987ed6f5d66Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 7988ed6f5d66Smrg notinst_deplibs= # not-installed libtool libraries 7989ed6f5d66Smrg notinst_path= # paths that contain not-installed libtool libraries 7990ed6f5d66Smrg 7991ed6f5d66Smrg case $linkmode in 7992ed6f5d66Smrg lib) 7993ed6f5d66Smrg passes="conv dlpreopen link" 7994ed6f5d66Smrg for file in $dlfiles $dlprefiles; do 7995ed6f5d66Smrg case $file in 7996ed6f5d66Smrg *.la) ;; 7997ed6f5d66Smrg *) 7998fbc03982Smrg func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" 7999ed6f5d66Smrg ;; 8000ed6f5d66Smrg esac 8001ed6f5d66Smrg done 8002ed6f5d66Smrg ;; 8003ed6f5d66Smrg prog) 8004ed6f5d66Smrg compile_deplibs= 8005ed6f5d66Smrg finalize_deplibs= 8006fbc03982Smrg alldeplibs=false 8007ed6f5d66Smrg newdlfiles= 8008ed6f5d66Smrg newdlprefiles= 8009ed6f5d66Smrg passes="conv scan dlopen dlpreopen link" 8010ed6f5d66Smrg ;; 8011ed6f5d66Smrg *) passes="conv" 8012ed6f5d66Smrg ;; 8013ed6f5d66Smrg esac 8014ed6f5d66Smrg 8015ed6f5d66Smrg for pass in $passes; do 8016ed6f5d66Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 8017ed6f5d66Smrg # so that -L comes before libs that need it for instance... 8018fbc03982Smrg if test lib,link = "$linkmode,$pass"; then 8019ed6f5d66Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 8020ed6f5d66Smrg ## order, and fix it there properly 8021ed6f5d66Smrg tmp_deplibs= 8022ed6f5d66Smrg for deplib in $deplibs; do 8023ed6f5d66Smrg tmp_deplibs="$deplib $tmp_deplibs" 8024ed6f5d66Smrg done 8025fbc03982Smrg deplibs=$tmp_deplibs 8026ed6f5d66Smrg fi 8027ed6f5d66Smrg 8028fbc03982Smrg if test lib,link = "$linkmode,$pass" || 8029fbc03982Smrg test prog,scan = "$linkmode,$pass"; then 8030fbc03982Smrg libs=$deplibs 8031ed6f5d66Smrg deplibs= 8032ed6f5d66Smrg fi 8033fbc03982Smrg if test prog = "$linkmode"; then 8034ed6f5d66Smrg case $pass in 8035fbc03982Smrg dlopen) libs=$dlfiles ;; 8036fbc03982Smrg dlpreopen) libs=$dlprefiles ;; 8037fbc03982Smrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 8038ed6f5d66Smrg esac 8039ed6f5d66Smrg fi 8040fbc03982Smrg if test lib,dlpreopen = "$linkmode,$pass"; then 8041ed6f5d66Smrg # Collect and forward deplibs of preopened libtool libs 8042ed6f5d66Smrg for lib in $dlprefiles; do 8043ed6f5d66Smrg # Ignore non-libtool-libs 8044ed6f5d66Smrg dependency_libs= 8045ed6f5d66Smrg func_resolve_sysroot "$lib" 8046ed6f5d66Smrg case $lib in 8047ed6f5d66Smrg *.la) func_source "$func_resolve_sysroot_result" ;; 8048ed6f5d66Smrg esac 8049ed6f5d66Smrg 8050ed6f5d66Smrg # Collect preopened libtool deplibs, except any this library 8051ed6f5d66Smrg # has declared as weak libs 8052ed6f5d66Smrg for deplib in $dependency_libs; do 8053ed6f5d66Smrg func_basename "$deplib" 8054ed6f5d66Smrg deplib_base=$func_basename_result 8055ed6f5d66Smrg case " $weak_libs " in 8056ed6f5d66Smrg *" $deplib_base "*) ;; 8057ed6f5d66Smrg *) func_append deplibs " $deplib" ;; 8058ed6f5d66Smrg esac 8059ed6f5d66Smrg done 8060ed6f5d66Smrg done 8061fbc03982Smrg libs=$dlprefiles 8062ed6f5d66Smrg fi 8063fbc03982Smrg if test dlopen = "$pass"; then 8064ed6f5d66Smrg # Collect dlpreopened libraries 8065fbc03982Smrg save_deplibs=$deplibs 8066ed6f5d66Smrg deplibs= 8067ed6f5d66Smrg fi 8068ed6f5d66Smrg 8069ed6f5d66Smrg for deplib in $libs; do 8070ed6f5d66Smrg lib= 8071fbc03982Smrg found=false 8072ed6f5d66Smrg case $deplib in 8073ed6f5d66Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 8074a3680546Smrg |-threads|-fopenmp|-fopenmp=*|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 8075fbc03982Smrg if test prog,link = "$linkmode,$pass"; then 8076ed6f5d66Smrg compile_deplibs="$deplib $compile_deplibs" 8077ed6f5d66Smrg finalize_deplibs="$deplib $finalize_deplibs" 8078ed6f5d66Smrg else 8079ed6f5d66Smrg func_append compiler_flags " $deplib" 8080fbc03982Smrg if test lib = "$linkmode"; then 8081ed6f5d66Smrg case "$new_inherited_linker_flags " in 8082ed6f5d66Smrg *" $deplib "*) ;; 8083ed6f5d66Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 8084ed6f5d66Smrg esac 8085ed6f5d66Smrg fi 8086ed6f5d66Smrg fi 8087ed6f5d66Smrg continue 8088ed6f5d66Smrg ;; 8089ed6f5d66Smrg -l*) 8090fbc03982Smrg if test lib != "$linkmode" && test prog != "$linkmode"; then 8091fbc03982Smrg func_warning "'-l' is ignored for archives/objects" 8092ed6f5d66Smrg continue 8093ed6f5d66Smrg fi 8094ed6f5d66Smrg func_stripname '-l' '' "$deplib" 8095ed6f5d66Smrg name=$func_stripname_result 8096fbc03982Smrg if test lib = "$linkmode"; then 8097ed6f5d66Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 8098ed6f5d66Smrg else 8099ed6f5d66Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 8100ed6f5d66Smrg fi 8101ed6f5d66Smrg for searchdir in $searchdirs; do 8102ed6f5d66Smrg for search_ext in .la $std_shrext .so .a; do 8103ed6f5d66Smrg # Search the libtool library 8104fbc03982Smrg lib=$searchdir/lib$name$search_ext 8105ed6f5d66Smrg if test -f "$lib"; then 8106fbc03982Smrg if test .la = "$search_ext"; then 8107fbc03982Smrg found=: 8108ed6f5d66Smrg else 8109fbc03982Smrg found=false 8110ed6f5d66Smrg fi 8111ed6f5d66Smrg break 2 8112ed6f5d66Smrg fi 8113ed6f5d66Smrg done 8114ed6f5d66Smrg done 8115fbc03982Smrg if $found; then 8116fbc03982Smrg # deplib is a libtool library 8117ed6f5d66Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 8118ed6f5d66Smrg # We need to do some special things here, and not later. 8119fbc03982Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 8120ed6f5d66Smrg case " $predeps $postdeps " in 8121ed6f5d66Smrg *" $deplib "*) 8122ed6f5d66Smrg if func_lalib_p "$lib"; then 8123ed6f5d66Smrg library_names= 8124ed6f5d66Smrg old_library= 8125ed6f5d66Smrg func_source "$lib" 8126ed6f5d66Smrg for l in $old_library $library_names; do 8127fbc03982Smrg ll=$l 8128ed6f5d66Smrg done 8129fbc03982Smrg if test "X$ll" = "X$old_library"; then # only static version available 8130fbc03982Smrg found=false 8131ed6f5d66Smrg func_dirname "$lib" "" "." 8132fbc03982Smrg ladir=$func_dirname_result 8133ed6f5d66Smrg lib=$ladir/$old_library 8134fbc03982Smrg if test prog,link = "$linkmode,$pass"; then 8135ed6f5d66Smrg compile_deplibs="$deplib $compile_deplibs" 8136ed6f5d66Smrg finalize_deplibs="$deplib $finalize_deplibs" 8137ed6f5d66Smrg else 8138ed6f5d66Smrg deplibs="$deplib $deplibs" 8139fbc03982Smrg test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 8140ed6f5d66Smrg fi 8141ed6f5d66Smrg continue 8142ed6f5d66Smrg fi 8143ed6f5d66Smrg fi 8144ed6f5d66Smrg ;; 8145ed6f5d66Smrg *) ;; 8146ed6f5d66Smrg esac 8147ed6f5d66Smrg fi 8148fbc03982Smrg else 8149fbc03982Smrg # deplib doesn't seem to be a libtool library 8150fbc03982Smrg if test prog,link = "$linkmode,$pass"; then 8151fbc03982Smrg compile_deplibs="$deplib $compile_deplibs" 8152fbc03982Smrg finalize_deplibs="$deplib $finalize_deplibs" 8153fbc03982Smrg else 8154fbc03982Smrg deplibs="$deplib $deplibs" 8155fbc03982Smrg test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 8156fbc03982Smrg fi 8157fbc03982Smrg continue 8158ed6f5d66Smrg fi 8159ed6f5d66Smrg ;; # -l 8160ed6f5d66Smrg *.ltframework) 8161fbc03982Smrg if test prog,link = "$linkmode,$pass"; then 8162ed6f5d66Smrg compile_deplibs="$deplib $compile_deplibs" 8163ed6f5d66Smrg finalize_deplibs="$deplib $finalize_deplibs" 8164ed6f5d66Smrg else 8165ed6f5d66Smrg deplibs="$deplib $deplibs" 8166fbc03982Smrg if test lib = "$linkmode"; then 8167ed6f5d66Smrg case "$new_inherited_linker_flags " in 8168ed6f5d66Smrg *" $deplib "*) ;; 8169ed6f5d66Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 8170ed6f5d66Smrg esac 8171ed6f5d66Smrg fi 8172ed6f5d66Smrg fi 8173ed6f5d66Smrg continue 8174ed6f5d66Smrg ;; 8175ed6f5d66Smrg -L*) 8176ed6f5d66Smrg case $linkmode in 8177ed6f5d66Smrg lib) 8178ed6f5d66Smrg deplibs="$deplib $deplibs" 8179fbc03982Smrg test conv = "$pass" && continue 8180ed6f5d66Smrg newdependency_libs="$deplib $newdependency_libs" 8181ed6f5d66Smrg func_stripname '-L' '' "$deplib" 8182ed6f5d66Smrg func_resolve_sysroot "$func_stripname_result" 8183ed6f5d66Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 8184ed6f5d66Smrg ;; 8185ed6f5d66Smrg prog) 8186fbc03982Smrg if test conv = "$pass"; then 8187ed6f5d66Smrg deplibs="$deplib $deplibs" 8188ed6f5d66Smrg continue 8189ed6f5d66Smrg fi 8190fbc03982Smrg if test scan = "$pass"; then 8191ed6f5d66Smrg deplibs="$deplib $deplibs" 8192ed6f5d66Smrg else 8193ed6f5d66Smrg compile_deplibs="$deplib $compile_deplibs" 8194ed6f5d66Smrg finalize_deplibs="$deplib $finalize_deplibs" 8195ed6f5d66Smrg fi 8196ed6f5d66Smrg func_stripname '-L' '' "$deplib" 8197ed6f5d66Smrg func_resolve_sysroot "$func_stripname_result" 8198ed6f5d66Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 8199ed6f5d66Smrg ;; 8200ed6f5d66Smrg *) 8201fbc03982Smrg func_warning "'-L' is ignored for archives/objects" 8202ed6f5d66Smrg ;; 8203ed6f5d66Smrg esac # linkmode 8204ed6f5d66Smrg continue 8205ed6f5d66Smrg ;; # -L 8206ed6f5d66Smrg -R*) 8207fbc03982Smrg if test link = "$pass"; then 8208ed6f5d66Smrg func_stripname '-R' '' "$deplib" 8209ed6f5d66Smrg func_resolve_sysroot "$func_stripname_result" 8210ed6f5d66Smrg dir=$func_resolve_sysroot_result 8211ed6f5d66Smrg # Make sure the xrpath contains only unique directories. 8212ed6f5d66Smrg case "$xrpath " in 8213ed6f5d66Smrg *" $dir "*) ;; 8214ed6f5d66Smrg *) func_append xrpath " $dir" ;; 8215ed6f5d66Smrg esac 8216ed6f5d66Smrg fi 8217ed6f5d66Smrg deplibs="$deplib $deplibs" 8218ed6f5d66Smrg continue 8219ed6f5d66Smrg ;; 8220ed6f5d66Smrg *.la) 8221ed6f5d66Smrg func_resolve_sysroot "$deplib" 8222ed6f5d66Smrg lib=$func_resolve_sysroot_result 8223ed6f5d66Smrg ;; 8224ed6f5d66Smrg *.$libext) 8225fbc03982Smrg if test conv = "$pass"; then 8226ed6f5d66Smrg deplibs="$deplib $deplibs" 8227ed6f5d66Smrg continue 8228ed6f5d66Smrg fi 8229ed6f5d66Smrg case $linkmode in 8230ed6f5d66Smrg lib) 8231ed6f5d66Smrg # Linking convenience modules into shared libraries is allowed, 8232ed6f5d66Smrg # but linking other static libraries is non-portable. 8233ed6f5d66Smrg case " $dlpreconveniencelibs " in 8234ed6f5d66Smrg *" $deplib "*) ;; 8235ed6f5d66Smrg *) 8236fbc03982Smrg valid_a_lib=false 8237ed6f5d66Smrg case $deplibs_check_method in 8238ed6f5d66Smrg match_pattern*) 8239ed6f5d66Smrg set dummy $deplibs_check_method; shift 8240ed6f5d66Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 8241ed6f5d66Smrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 8242ed6f5d66Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 8243fbc03982Smrg valid_a_lib=: 8244ed6f5d66Smrg fi 8245ed6f5d66Smrg ;; 8246ed6f5d66Smrg pass_all) 8247fbc03982Smrg valid_a_lib=: 8248ed6f5d66Smrg ;; 8249ed6f5d66Smrg esac 8250fbc03982Smrg if $valid_a_lib; then 8251a3680546Smrg func_warning "Linking the shared library $output against the static library $deplib is not portable!" 8252fbc03982Smrg deplibs="$deplib $deplibs" 8253fbc03982Smrg else 8254a3680546Smrg func_warning "Trying to link with static lib archive $deplib." 8255a3680546Smrg func_warning "I have the capability to make that library automatically link in when" 8256a3680546Smrg func_warning "you link to this library. But I can only do this if you have a" 8257a3680546Smrg func_warning "shared version of the library, which you do not appear to have" 8258a3680546Smrg func_warning "because the file extensions .$libext of this argument makes me believe" 8259a3680546Smrg func_warning "that it is just a static archive that I should not use here." 8260ed6f5d66Smrg fi 8261ed6f5d66Smrg ;; 8262ed6f5d66Smrg esac 8263ed6f5d66Smrg continue 8264ed6f5d66Smrg ;; 8265ed6f5d66Smrg prog) 8266fbc03982Smrg if test link != "$pass"; then 8267ed6f5d66Smrg deplibs="$deplib $deplibs" 8268ed6f5d66Smrg else 8269ed6f5d66Smrg compile_deplibs="$deplib $compile_deplibs" 8270ed6f5d66Smrg finalize_deplibs="$deplib $finalize_deplibs" 8271ed6f5d66Smrg fi 8272ed6f5d66Smrg continue 8273ed6f5d66Smrg ;; 8274ed6f5d66Smrg esac # linkmode 8275ed6f5d66Smrg ;; # *.$libext 8276ed6f5d66Smrg *.lo | *.$objext) 8277fbc03982Smrg if test conv = "$pass"; then 8278ed6f5d66Smrg deplibs="$deplib $deplibs" 8279fbc03982Smrg elif test prog = "$linkmode"; then 8280fbc03982Smrg if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then 8281ed6f5d66Smrg # If there is no dlopen support or we're linking statically, 8282ed6f5d66Smrg # we need to preload. 8283ed6f5d66Smrg func_append newdlprefiles " $deplib" 8284ed6f5d66Smrg compile_deplibs="$deplib $compile_deplibs" 8285ed6f5d66Smrg finalize_deplibs="$deplib $finalize_deplibs" 8286ed6f5d66Smrg else 8287ed6f5d66Smrg func_append newdlfiles " $deplib" 8288ed6f5d66Smrg fi 8289ed6f5d66Smrg fi 8290ed6f5d66Smrg continue 8291ed6f5d66Smrg ;; 8292ed6f5d66Smrg %DEPLIBS%) 8293fbc03982Smrg alldeplibs=: 8294ed6f5d66Smrg continue 8295ed6f5d66Smrg ;; 8296ed6f5d66Smrg esac # case $deplib 8297ed6f5d66Smrg 8298fbc03982Smrg $found || test -f "$lib" \ 8299fbc03982Smrg || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" 8300ed6f5d66Smrg 8301ed6f5d66Smrg # Check to see that this really is a libtool archive. 8302ed6f5d66Smrg func_lalib_unsafe_p "$lib" \ 8303fbc03982Smrg || func_fatal_error "'$lib' is not a valid libtool archive" 8304ed6f5d66Smrg 8305ed6f5d66Smrg func_dirname "$lib" "" "." 8306fbc03982Smrg ladir=$func_dirname_result 8307ed6f5d66Smrg 8308ed6f5d66Smrg dlname= 8309ed6f5d66Smrg dlopen= 8310ed6f5d66Smrg dlpreopen= 8311ed6f5d66Smrg libdir= 8312ed6f5d66Smrg library_names= 8313ed6f5d66Smrg old_library= 8314ed6f5d66Smrg inherited_linker_flags= 8315ed6f5d66Smrg # If the library was installed with an old release of libtool, 8316ed6f5d66Smrg # it will not redefine variables installed, or shouldnotlink 8317ed6f5d66Smrg installed=yes 8318ed6f5d66Smrg shouldnotlink=no 8319ed6f5d66Smrg avoidtemprpath= 8320ed6f5d66Smrg 8321ed6f5d66Smrg 8322ed6f5d66Smrg # Read the .la file 8323ed6f5d66Smrg func_source "$lib" 8324ed6f5d66Smrg 8325ed6f5d66Smrg # Convert "-framework foo" to "foo.ltframework" 8326ed6f5d66Smrg if test -n "$inherited_linker_flags"; then 8327ed6f5d66Smrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 8328ed6f5d66Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 8329ed6f5d66Smrg case " $new_inherited_linker_flags " in 8330ed6f5d66Smrg *" $tmp_inherited_linker_flag "*) ;; 8331ed6f5d66Smrg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 8332ed6f5d66Smrg esac 8333ed6f5d66Smrg done 8334ed6f5d66Smrg fi 8335ed6f5d66Smrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8336fbc03982Smrg if test lib,link = "$linkmode,$pass" || 8337fbc03982Smrg test prog,scan = "$linkmode,$pass" || 8338fbc03982Smrg { test prog != "$linkmode" && test lib != "$linkmode"; }; then 8339ed6f5d66Smrg test -n "$dlopen" && func_append dlfiles " $dlopen" 8340ed6f5d66Smrg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 8341ed6f5d66Smrg fi 8342ed6f5d66Smrg 8343fbc03982Smrg if test conv = "$pass"; then 8344ed6f5d66Smrg # Only check for convenience libraries 8345ed6f5d66Smrg deplibs="$lib $deplibs" 8346ed6f5d66Smrg if test -z "$libdir"; then 8347ed6f5d66Smrg if test -z "$old_library"; then 8348fbc03982Smrg func_fatal_error "cannot find name of link library for '$lib'" 8349ed6f5d66Smrg fi 8350ed6f5d66Smrg # It is a libtool convenience library, so add in its objects. 8351ed6f5d66Smrg func_append convenience " $ladir/$objdir/$old_library" 8352ed6f5d66Smrg func_append old_convenience " $ladir/$objdir/$old_library" 8353fbc03982Smrg elif test prog != "$linkmode" && test lib != "$linkmode"; then 8354fbc03982Smrg func_fatal_error "'$lib' is not a convenience library" 8355ed6f5d66Smrg fi 8356fbc03982Smrg tmp_libs= 8357fbc03982Smrg for deplib in $dependency_libs; do 8358fbc03982Smrg deplibs="$deplib $deplibs" 8359fbc03982Smrg if $opt_preserve_dup_deps; then 8360fbc03982Smrg case "$tmp_libs " in 8361fbc03982Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 8362fbc03982Smrg esac 8363fbc03982Smrg fi 8364fbc03982Smrg func_append tmp_libs " $deplib" 8365fbc03982Smrg done 8366ed6f5d66Smrg continue 8367ed6f5d66Smrg fi # $pass = conv 8368ed6f5d66Smrg 8369ed6f5d66Smrg 8370ed6f5d66Smrg # Get the name of the library we link against. 8371ed6f5d66Smrg linklib= 8372ed6f5d66Smrg if test -n "$old_library" && 8373fbc03982Smrg { test yes = "$prefer_static_libs" || 8374fbc03982Smrg test built,no = "$prefer_static_libs,$installed"; }; then 8375ed6f5d66Smrg linklib=$old_library 8376ed6f5d66Smrg else 8377ed6f5d66Smrg for l in $old_library $library_names; do 8378fbc03982Smrg linklib=$l 8379ed6f5d66Smrg done 8380ed6f5d66Smrg fi 8381ed6f5d66Smrg if test -z "$linklib"; then 8382fbc03982Smrg func_fatal_error "cannot find name of link library for '$lib'" 8383ed6f5d66Smrg fi 8384ed6f5d66Smrg 8385ed6f5d66Smrg # This library was specified with -dlopen. 8386fbc03982Smrg if test dlopen = "$pass"; then 8387fbc03982Smrg test -z "$libdir" \ 8388fbc03982Smrg && func_fatal_error "cannot -dlopen a convenience library: '$lib'" 8389ed6f5d66Smrg if test -z "$dlname" || 8390fbc03982Smrg test yes != "$dlopen_support" || 8391fbc03982Smrg test no = "$build_libtool_libs" 8392fbc03982Smrg then 8393ed6f5d66Smrg # If there is no dlname, no dlopen support or we're linking 8394ed6f5d66Smrg # statically, we need to preload. We also need to preload any 8395ed6f5d66Smrg # dependent libraries so libltdl's deplib preloader doesn't 8396ed6f5d66Smrg # bomb out in the load deplibs phase. 8397ed6f5d66Smrg func_append dlprefiles " $lib $dependency_libs" 8398ed6f5d66Smrg else 8399ed6f5d66Smrg func_append newdlfiles " $lib" 8400ed6f5d66Smrg fi 8401ed6f5d66Smrg continue 8402ed6f5d66Smrg fi # $pass = dlopen 8403ed6f5d66Smrg 8404ed6f5d66Smrg # We need an absolute path. 8405ed6f5d66Smrg case $ladir in 8406fbc03982Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; 8407ed6f5d66Smrg *) 8408ed6f5d66Smrg abs_ladir=`cd "$ladir" && pwd` 8409ed6f5d66Smrg if test -z "$abs_ladir"; then 8410fbc03982Smrg func_warning "cannot determine absolute directory name of '$ladir'" 8411ed6f5d66Smrg func_warning "passing it literally to the linker, although it might fail" 8412fbc03982Smrg abs_ladir=$ladir 8413ed6f5d66Smrg fi 8414ed6f5d66Smrg ;; 8415ed6f5d66Smrg esac 8416ed6f5d66Smrg func_basename "$lib" 8417fbc03982Smrg laname=$func_basename_result 8418ed6f5d66Smrg 8419ed6f5d66Smrg # Find the relevant object directory and library name. 8420fbc03982Smrg if test yes = "$installed"; then 8421ed6f5d66Smrg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 8422fbc03982Smrg func_warning "library '$lib' was moved." 8423fbc03982Smrg dir=$ladir 8424fbc03982Smrg absdir=$abs_ladir 8425fbc03982Smrg libdir=$abs_ladir 8426ed6f5d66Smrg else 8427fbc03982Smrg dir=$lt_sysroot$libdir 8428fbc03982Smrg absdir=$lt_sysroot$libdir 8429ed6f5d66Smrg fi 8430fbc03982Smrg test yes = "$hardcode_automatic" && avoidtemprpath=yes 8431ed6f5d66Smrg else 8432ed6f5d66Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 8433fbc03982Smrg dir=$ladir 8434fbc03982Smrg absdir=$abs_ladir 8435ed6f5d66Smrg # Remove this search path later 8436ed6f5d66Smrg func_append notinst_path " $abs_ladir" 8437ed6f5d66Smrg else 8438fbc03982Smrg dir=$ladir/$objdir 8439fbc03982Smrg absdir=$abs_ladir/$objdir 8440ed6f5d66Smrg # Remove this search path later 8441ed6f5d66Smrg func_append notinst_path " $abs_ladir" 8442ed6f5d66Smrg fi 8443ed6f5d66Smrg fi # $installed = yes 8444ed6f5d66Smrg func_stripname 'lib' '.la' "$laname" 8445ed6f5d66Smrg name=$func_stripname_result 8446ed6f5d66Smrg 8447ed6f5d66Smrg # This library was specified with -dlpreopen. 8448fbc03982Smrg if test dlpreopen = "$pass"; then 8449fbc03982Smrg if test -z "$libdir" && test prog = "$linkmode"; then 8450fbc03982Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" 8451ed6f5d66Smrg fi 8452fbc03982Smrg case $host in 8453ed6f5d66Smrg # special handling for platforms with PE-DLLs. 8454a3680546Smrg *cygwin* | *mingw* | *windows* | *cegcc* ) 8455ed6f5d66Smrg # Linker will automatically link against shared library if both 8456ed6f5d66Smrg # static and shared are present. Therefore, ensure we extract 8457ed6f5d66Smrg # symbols from the import library if a shared library is present 8458ed6f5d66Smrg # (otherwise, the dlopen module name will be incorrect). We do 8459ed6f5d66Smrg # this by putting the import library name into $newdlprefiles. 8460ed6f5d66Smrg # We recover the dlopen module name by 'saving' the la file 8461ed6f5d66Smrg # name in a special purpose variable, and (later) extracting the 8462ed6f5d66Smrg # dlname from the la file. 8463ed6f5d66Smrg if test -n "$dlname"; then 8464ed6f5d66Smrg func_tr_sh "$dir/$linklib" 8465ed6f5d66Smrg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 8466ed6f5d66Smrg func_append newdlprefiles " $dir/$linklib" 8467ed6f5d66Smrg else 8468ed6f5d66Smrg func_append newdlprefiles " $dir/$old_library" 8469ed6f5d66Smrg # Keep a list of preopened convenience libraries to check 8470ed6f5d66Smrg # that they are being used correctly in the link pass. 8471ed6f5d66Smrg test -z "$libdir" && \ 8472ed6f5d66Smrg func_append dlpreconveniencelibs " $dir/$old_library" 8473ed6f5d66Smrg fi 8474ed6f5d66Smrg ;; 8475ed6f5d66Smrg * ) 8476ed6f5d66Smrg # Prefer using a static library (so that no silly _DYNAMIC symbols 8477ed6f5d66Smrg # are required to link). 8478ed6f5d66Smrg if test -n "$old_library"; then 8479ed6f5d66Smrg func_append newdlprefiles " $dir/$old_library" 8480ed6f5d66Smrg # Keep a list of preopened convenience libraries to check 8481ed6f5d66Smrg # that they are being used correctly in the link pass. 8482ed6f5d66Smrg test -z "$libdir" && \ 8483ed6f5d66Smrg func_append dlpreconveniencelibs " $dir/$old_library" 8484ed6f5d66Smrg # Otherwise, use the dlname, so that lt_dlopen finds it. 8485ed6f5d66Smrg elif test -n "$dlname"; then 8486ed6f5d66Smrg func_append newdlprefiles " $dir/$dlname" 8487ed6f5d66Smrg else 8488ed6f5d66Smrg func_append newdlprefiles " $dir/$linklib" 8489ed6f5d66Smrg fi 8490ed6f5d66Smrg ;; 8491ed6f5d66Smrg esac 8492ed6f5d66Smrg fi # $pass = dlpreopen 8493ed6f5d66Smrg 8494ed6f5d66Smrg if test -z "$libdir"; then 8495ed6f5d66Smrg # Link the convenience library 8496fbc03982Smrg if test lib = "$linkmode"; then 8497ed6f5d66Smrg deplibs="$dir/$old_library $deplibs" 8498fbc03982Smrg elif test prog,link = "$linkmode,$pass"; then 8499ed6f5d66Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 8500ed6f5d66Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 8501ed6f5d66Smrg else 8502ed6f5d66Smrg deplibs="$lib $deplibs" # used for prog,scan pass 8503ed6f5d66Smrg fi 8504ed6f5d66Smrg continue 8505ed6f5d66Smrg fi 8506ed6f5d66Smrg 8507ed6f5d66Smrg 8508fbc03982Smrg if test prog = "$linkmode" && test link != "$pass"; then 8509ed6f5d66Smrg func_append newlib_search_path " $ladir" 8510ed6f5d66Smrg deplibs="$lib $deplibs" 8511ed6f5d66Smrg 8512fbc03982Smrg linkalldeplibs=false 8513fbc03982Smrg if test no != "$link_all_deplibs" || test -z "$library_names" || 8514fbc03982Smrg test no = "$build_libtool_libs"; then 8515fbc03982Smrg linkalldeplibs=: 8516ed6f5d66Smrg fi 8517ed6f5d66Smrg 8518ed6f5d66Smrg tmp_libs= 8519ed6f5d66Smrg for deplib in $dependency_libs; do 8520ed6f5d66Smrg case $deplib in 8521ed6f5d66Smrg -L*) func_stripname '-L' '' "$deplib" 8522ed6f5d66Smrg func_resolve_sysroot "$func_stripname_result" 8523ed6f5d66Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 8524ed6f5d66Smrg ;; 8525ed6f5d66Smrg esac 8526ed6f5d66Smrg # Need to link against all dependency_libs? 8527fbc03982Smrg if $linkalldeplibs; then 8528ed6f5d66Smrg deplibs="$deplib $deplibs" 8529ed6f5d66Smrg else 8530ed6f5d66Smrg # Need to hardcode shared library paths 8531ed6f5d66Smrg # or/and link against static libraries 8532ed6f5d66Smrg newdependency_libs="$deplib $newdependency_libs" 8533ed6f5d66Smrg fi 8534fbc03982Smrg if $opt_preserve_dup_deps; then 8535ed6f5d66Smrg case "$tmp_libs " in 8536ed6f5d66Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 8537ed6f5d66Smrg esac 8538ed6f5d66Smrg fi 8539ed6f5d66Smrg func_append tmp_libs " $deplib" 8540ed6f5d66Smrg done # for deplib 8541ed6f5d66Smrg continue 8542ed6f5d66Smrg fi # $linkmode = prog... 8543ed6f5d66Smrg 8544fbc03982Smrg if test prog,link = "$linkmode,$pass"; then 8545ed6f5d66Smrg if test -n "$library_names" && 8546fbc03982Smrg { { test no = "$prefer_static_libs" || 8547fbc03982Smrg test built,yes = "$prefer_static_libs,$installed"; } || 8548ed6f5d66Smrg test -z "$old_library"; }; then 8549ed6f5d66Smrg # We need to hardcode the library path 8550fbc03982Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then 8551ed6f5d66Smrg # Make sure the rpath contains only unique directories. 8552fbc03982Smrg case $temp_rpath: in 8553ed6f5d66Smrg *"$absdir:"*) ;; 8554a3680546Smrg *) case $absdir in 8555a3680546Smrg "$progdir/"*) func_append temp_rpath "$absdir:" ;; 8556a3680546Smrg *) func_append temp_rpath_tail "$absdir:" ;; 8557a3680546Smrg esac 8558ed6f5d66Smrg esac 8559ed6f5d66Smrg fi 8560ed6f5d66Smrg 8561ed6f5d66Smrg # Hardcode the library path. 8562ed6f5d66Smrg # Skip directories that are in the system default run-time 8563ed6f5d66Smrg # search path. 8564ed6f5d66Smrg case " $sys_lib_dlsearch_path " in 8565ed6f5d66Smrg *" $absdir "*) ;; 8566ed6f5d66Smrg *) 8567a3680546Smrg case "$compile_rpath$compile_rpath_tail " in 8568ed6f5d66Smrg *" $absdir "*) ;; 8569a3680546Smrg *) case $absdir in 8570a3680546Smrg "$progdir/"*) func_append compile_rpath " $absdir" ;; 8571a3680546Smrg *) func_append compile_rpath_tail " $absdir" ;; 8572a3680546Smrg esac 8573ed6f5d66Smrg esac 8574ed6f5d66Smrg ;; 8575ed6f5d66Smrg esac 8576ed6f5d66Smrg case " $sys_lib_dlsearch_path " in 8577ed6f5d66Smrg *" $libdir "*) ;; 8578ed6f5d66Smrg *) 8579ed6f5d66Smrg case "$finalize_rpath " in 8580ed6f5d66Smrg *" $libdir "*) ;; 8581ed6f5d66Smrg *) func_append finalize_rpath " $libdir" ;; 8582ed6f5d66Smrg esac 8583ed6f5d66Smrg ;; 8584ed6f5d66Smrg esac 8585ed6f5d66Smrg fi # $linkmode,$pass = prog,link... 8586ed6f5d66Smrg 8587fbc03982Smrg if $alldeplibs && 8588fbc03982Smrg { test pass_all = "$deplibs_check_method" || 8589fbc03982Smrg { test yes = "$build_libtool_libs" && 8590ed6f5d66Smrg test -n "$library_names"; }; }; then 8591ed6f5d66Smrg # We only need to search for static libraries 8592ed6f5d66Smrg continue 8593ed6f5d66Smrg fi 8594ed6f5d66Smrg fi 8595ed6f5d66Smrg 8596ed6f5d66Smrg link_static=no # Whether the deplib will be linked statically 8597ed6f5d66Smrg use_static_libs=$prefer_static_libs 8598fbc03982Smrg if test built = "$use_static_libs" && test yes = "$installed"; then 8599ed6f5d66Smrg use_static_libs=no 8600ed6f5d66Smrg fi 8601ed6f5d66Smrg if test -n "$library_names" && 8602fbc03982Smrg { test no = "$use_static_libs" || test -z "$old_library"; }; then 8603a3680546Smrg case $host_os in 8604a3680546Smrg cygwin* | mingw* | windows* | cegcc* | os2*) 8605ed6f5d66Smrg # No point in relinking DLLs because paths are not encoded 8606ed6f5d66Smrg func_append notinst_deplibs " $lib" 8607ed6f5d66Smrg need_relink=no 8608ed6f5d66Smrg ;; 8609ed6f5d66Smrg *) 8610fbc03982Smrg if test no = "$installed"; then 8611ed6f5d66Smrg func_append notinst_deplibs " $lib" 8612ed6f5d66Smrg need_relink=yes 8613ed6f5d66Smrg fi 8614ed6f5d66Smrg ;; 8615ed6f5d66Smrg esac 8616ed6f5d66Smrg # This is a shared library 8617ed6f5d66Smrg 8618ed6f5d66Smrg # Warn about portability, can't link against -module's on some 8619ed6f5d66Smrg # systems (darwin). Don't bleat about dlopened modules though! 8620fbc03982Smrg dlopenmodule= 8621ed6f5d66Smrg for dlpremoduletest in $dlprefiles; do 8622ed6f5d66Smrg if test "X$dlpremoduletest" = "X$lib"; then 8623fbc03982Smrg dlopenmodule=$dlpremoduletest 8624ed6f5d66Smrg break 8625ed6f5d66Smrg fi 8626ed6f5d66Smrg done 8627fbc03982Smrg if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then 8628ed6f5d66Smrg echo 8629fbc03982Smrg if test prog = "$linkmode"; then 8630a3680546Smrg func_warning "Linking the executable $output against the loadable module" 8631ed6f5d66Smrg else 8632a3680546Smrg func_warning "Linking the shared library $output against the loadable module" 8633ed6f5d66Smrg fi 8634a3680546Smrg func_warning "$linklib is not portable!" 8635ed6f5d66Smrg fi 8636fbc03982Smrg if test lib = "$linkmode" && 8637fbc03982Smrg test yes = "$hardcode_into_libs"; then 8638ed6f5d66Smrg # Hardcode the library path. 8639ed6f5d66Smrg # Skip directories that are in the system default run-time 8640ed6f5d66Smrg # search path. 8641ed6f5d66Smrg case " $sys_lib_dlsearch_path " in 8642ed6f5d66Smrg *" $absdir "*) ;; 8643ed6f5d66Smrg *) 8644a3680546Smrg case "$compile_rpath$compile_rpath_tail " in 8645ed6f5d66Smrg *" $absdir "*) ;; 8646a3680546Smrg *) case $absdir in 8647a3680546Smrg "$progdir/"*) func_append compile_rpath " $absdir" ;; 8648a3680546Smrg *) func_append compile_rpath_tail " $absdir" ;; 8649a3680546Smrg esac 8650ed6f5d66Smrg esac 8651ed6f5d66Smrg ;; 8652ed6f5d66Smrg esac 8653ed6f5d66Smrg case " $sys_lib_dlsearch_path " in 8654ed6f5d66Smrg *" $libdir "*) ;; 8655ed6f5d66Smrg *) 8656ed6f5d66Smrg case "$finalize_rpath " in 8657ed6f5d66Smrg *" $libdir "*) ;; 8658ed6f5d66Smrg *) func_append finalize_rpath " $libdir" ;; 8659ed6f5d66Smrg esac 8660ed6f5d66Smrg ;; 8661ed6f5d66Smrg esac 8662ed6f5d66Smrg fi 8663ed6f5d66Smrg 8664ed6f5d66Smrg if test -n "$old_archive_from_expsyms_cmds"; then 8665ed6f5d66Smrg # figure out the soname 8666ed6f5d66Smrg set dummy $library_names 8667ed6f5d66Smrg shift 8668fbc03982Smrg realname=$1 8669ed6f5d66Smrg shift 8670ed6f5d66Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 8671ed6f5d66Smrg # use dlname if we got it. it's perfectly good, no? 8672ed6f5d66Smrg if test -n "$dlname"; then 8673fbc03982Smrg soname=$dlname 8674ed6f5d66Smrg elif test -n "$soname_spec"; then 8675ed6f5d66Smrg # bleh windows 8676a3680546Smrg case $host_os in 8677a3680546Smrg cygwin* | mingw* | windows* | cegcc* | os2*) 8678ed6f5d66Smrg func_arith $current - $age 8679ed6f5d66Smrg major=$func_arith_result 8680fbc03982Smrg versuffix=-$major 8681ed6f5d66Smrg ;; 8682ed6f5d66Smrg esac 8683ed6f5d66Smrg eval soname=\"$soname_spec\" 8684ed6f5d66Smrg else 8685fbc03982Smrg soname=$realname 8686ed6f5d66Smrg fi 8687ed6f5d66Smrg 8688ed6f5d66Smrg # Make a new name for the extract_expsyms_cmds to use 8689fbc03982Smrg soroot=$soname 8690ed6f5d66Smrg func_basename "$soroot" 8691fbc03982Smrg soname=$func_basename_result 8692ed6f5d66Smrg func_stripname 'lib' '.dll' "$soname" 8693ed6f5d66Smrg newlib=libimp-$func_stripname_result.a 8694ed6f5d66Smrg 8695ed6f5d66Smrg # If the library has no export list, then create one now 8696ed6f5d66Smrg if test -f "$output_objdir/$soname-def"; then : 8697ed6f5d66Smrg else 8698fbc03982Smrg func_verbose "extracting exported symbol list from '$soname'" 8699ed6f5d66Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 8700ed6f5d66Smrg fi 8701ed6f5d66Smrg 8702ed6f5d66Smrg # Create $newlib 8703ed6f5d66Smrg if test -f "$output_objdir/$newlib"; then :; else 8704fbc03982Smrg func_verbose "generating import library for '$soname'" 8705ed6f5d66Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 8706ed6f5d66Smrg fi 8707ed6f5d66Smrg # make sure the library variables are pointing to the new library 8708ed6f5d66Smrg dir=$output_objdir 8709ed6f5d66Smrg linklib=$newlib 8710ed6f5d66Smrg fi # test -n "$old_archive_from_expsyms_cmds" 8711ed6f5d66Smrg 8712fbc03982Smrg if test prog = "$linkmode" || test relink != "$opt_mode"; then 8713ed6f5d66Smrg add_shlibpath= 8714ed6f5d66Smrg add_dir= 8715ed6f5d66Smrg add= 8716ed6f5d66Smrg lib_linked=yes 8717ed6f5d66Smrg case $hardcode_action in 8718ed6f5d66Smrg immediate | unsupported) 8719fbc03982Smrg if test no = "$hardcode_direct"; then 8720fbc03982Smrg add=$dir/$linklib 8721ed6f5d66Smrg case $host in 8722fbc03982Smrg *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; 8723fbc03982Smrg *-*-sysv4*uw2*) add_dir=-L$dir ;; 8724a3680546Smrg *-*-emscripten*) add_dir=-L$dir ;; 8725ed6f5d66Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 8726fbc03982Smrg *-*-unixware7*) add_dir=-L$dir ;; 8727ed6f5d66Smrg *-*-darwin* ) 8728fbc03982Smrg # if the lib is a (non-dlopened) module then we cannot 8729ed6f5d66Smrg # link against it, someone is ignoring the earlier warnings 8730ed6f5d66Smrg if /usr/bin/file -L $add 2> /dev/null | 8731fbc03982Smrg $GREP ": [^:]* bundle" >/dev/null; then 8732ed6f5d66Smrg if test "X$dlopenmodule" != "X$lib"; then 8733a3680546Smrg func_warning "lib $linklib is a module, not a shared library" 8734fbc03982Smrg if test -z "$old_library"; then 8735a3680546Smrg func_warning "And there doesn't seem to be a static archive available" 8736a3680546Smrg func_warning "The link will probably fail, sorry" 8737ed6f5d66Smrg else 8738fbc03982Smrg add=$dir/$old_library 8739ed6f5d66Smrg fi 8740ed6f5d66Smrg elif test -n "$old_library"; then 8741fbc03982Smrg add=$dir/$old_library 8742ed6f5d66Smrg fi 8743ed6f5d66Smrg fi 8744ed6f5d66Smrg esac 8745fbc03982Smrg elif test no = "$hardcode_minus_L"; then 8746ed6f5d66Smrg case $host in 8747fbc03982Smrg *-*-sunos*) add_shlibpath=$dir ;; 8748ed6f5d66Smrg esac 8749fbc03982Smrg add_dir=-L$dir 8750fbc03982Smrg add=-l$name 8751fbc03982Smrg elif test no = "$hardcode_shlibpath_var"; then 8752fbc03982Smrg add_shlibpath=$dir 8753fbc03982Smrg add=-l$name 8754ed6f5d66Smrg else 8755ed6f5d66Smrg lib_linked=no 8756ed6f5d66Smrg fi 8757ed6f5d66Smrg ;; 8758ed6f5d66Smrg relink) 8759fbc03982Smrg if test yes = "$hardcode_direct" && 8760fbc03982Smrg test no = "$hardcode_direct_absolute"; then 8761fbc03982Smrg add=$dir/$linklib 8762fbc03982Smrg elif test yes = "$hardcode_minus_L"; then 8763fbc03982Smrg add_dir=-L$absdir 8764ed6f5d66Smrg # Try looking first in the location we're being installed to. 8765ed6f5d66Smrg if test -n "$inst_prefix_dir"; then 8766ed6f5d66Smrg case $libdir in 8767ed6f5d66Smrg [\\/]*) 8768ed6f5d66Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 8769ed6f5d66Smrg ;; 8770ed6f5d66Smrg esac 8771ed6f5d66Smrg fi 8772fbc03982Smrg add=-l$name 8773fbc03982Smrg elif test yes = "$hardcode_shlibpath_var"; then 8774fbc03982Smrg add_shlibpath=$dir 8775fbc03982Smrg add=-l$name 8776ed6f5d66Smrg else 8777ed6f5d66Smrg lib_linked=no 8778ed6f5d66Smrg fi 8779ed6f5d66Smrg ;; 8780ed6f5d66Smrg *) lib_linked=no ;; 8781ed6f5d66Smrg esac 8782ed6f5d66Smrg 8783fbc03982Smrg if test yes != "$lib_linked"; then 8784ed6f5d66Smrg func_fatal_configuration "unsupported hardcode properties" 8785ed6f5d66Smrg fi 8786ed6f5d66Smrg 8787ed6f5d66Smrg if test -n "$add_shlibpath"; then 8788ed6f5d66Smrg case :$compile_shlibpath: in 8789ed6f5d66Smrg *":$add_shlibpath:"*) ;; 8790ed6f5d66Smrg *) func_append compile_shlibpath "$add_shlibpath:" ;; 8791ed6f5d66Smrg esac 8792ed6f5d66Smrg fi 8793fbc03982Smrg if test prog = "$linkmode"; then 8794ed6f5d66Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 8795ed6f5d66Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 8796ed6f5d66Smrg else 8797ed6f5d66Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 8798ed6f5d66Smrg test -n "$add" && deplibs="$add $deplibs" 8799fbc03982Smrg if test yes != "$hardcode_direct" && 8800fbc03982Smrg test yes != "$hardcode_minus_L" && 8801fbc03982Smrg test yes = "$hardcode_shlibpath_var"; then 8802ed6f5d66Smrg case :$finalize_shlibpath: in 8803ed6f5d66Smrg *":$libdir:"*) ;; 8804ed6f5d66Smrg *) func_append finalize_shlibpath "$libdir:" ;; 8805ed6f5d66Smrg esac 8806ed6f5d66Smrg fi 8807ed6f5d66Smrg fi 8808ed6f5d66Smrg fi 8809ed6f5d66Smrg 8810fbc03982Smrg if test prog = "$linkmode" || test relink = "$opt_mode"; then 8811ed6f5d66Smrg add_shlibpath= 8812ed6f5d66Smrg add_dir= 8813ed6f5d66Smrg add= 8814ed6f5d66Smrg # Finalize command for both is simple: just hardcode it. 8815fbc03982Smrg if test yes = "$hardcode_direct" && 8816fbc03982Smrg test no = "$hardcode_direct_absolute"; then 8817fbc03982Smrg add=$libdir/$linklib 8818fbc03982Smrg elif test yes = "$hardcode_minus_L"; then 8819a3680546Smrg add_dir=-L$lt_sysroot$libdir 8820fbc03982Smrg add=-l$name 8821fbc03982Smrg elif test yes = "$hardcode_shlibpath_var"; then 8822ed6f5d66Smrg case :$finalize_shlibpath: in 8823ed6f5d66Smrg *":$libdir:"*) ;; 8824ed6f5d66Smrg *) func_append finalize_shlibpath "$libdir:" ;; 8825ed6f5d66Smrg esac 8826fbc03982Smrg add=-l$name 8827fbc03982Smrg elif test yes = "$hardcode_automatic"; then 8828ed6f5d66Smrg if test -n "$inst_prefix_dir" && 8829fbc03982Smrg test -f "$inst_prefix_dir$libdir/$linklib"; then 8830fbc03982Smrg add=$inst_prefix_dir$libdir/$linklib 8831ed6f5d66Smrg else 8832fbc03982Smrg add=$libdir/$linklib 8833ed6f5d66Smrg fi 8834ed6f5d66Smrg else 8835ed6f5d66Smrg # We cannot seem to hardcode it, guess we'll fake it. 8836a3680546Smrg add_dir=-L$lt_sysroot$libdir 8837ed6f5d66Smrg # Try looking first in the location we're being installed to. 8838ed6f5d66Smrg if test -n "$inst_prefix_dir"; then 8839ed6f5d66Smrg case $libdir in 8840ed6f5d66Smrg [\\/]*) 8841ed6f5d66Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 8842ed6f5d66Smrg ;; 8843ed6f5d66Smrg esac 8844ed6f5d66Smrg fi 8845fbc03982Smrg add=-l$name 8846ed6f5d66Smrg fi 8847ed6f5d66Smrg 8848fbc03982Smrg if test prog = "$linkmode"; then 8849ed6f5d66Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 8850ed6f5d66Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 8851ed6f5d66Smrg else 8852ed6f5d66Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 8853ed6f5d66Smrg test -n "$add" && deplibs="$add $deplibs" 8854ed6f5d66Smrg fi 8855ed6f5d66Smrg fi 8856fbc03982Smrg elif test prog = "$linkmode"; then 8857ed6f5d66Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 8858ed6f5d66Smrg # is not unsupported. This is valid on all known static and 8859ed6f5d66Smrg # shared platforms. 8860fbc03982Smrg if test unsupported != "$hardcode_direct"; then 8861fbc03982Smrg test -n "$old_library" && linklib=$old_library 8862ed6f5d66Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 8863ed6f5d66Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 8864ed6f5d66Smrg else 8865ed6f5d66Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 8866ed6f5d66Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 8867ed6f5d66Smrg fi 8868fbc03982Smrg elif test yes = "$build_libtool_libs"; then 8869ed6f5d66Smrg # Not a shared library 8870fbc03982Smrg if test pass_all != "$deplibs_check_method"; then 8871ed6f5d66Smrg # We're trying link a shared library against a static one 8872ed6f5d66Smrg # but the system doesn't support it. 8873ed6f5d66Smrg 8874ed6f5d66Smrg # Just print a warning and add the library to dependency_libs so 8875ed6f5d66Smrg # that the program can be linked against the static library. 8876a3680546Smrg func_warning "This system cannot link to static lib archive $lib." 8877a3680546Smrg func_warning "I have the capability to make that library automatically link in when" 8878a3680546Smrg func_warning "you link to this library. But I can only do this if you have a" 8879a3680546Smrg func_warning "shared version of the library, which you do not appear to have." 8880fbc03982Smrg if test yes = "$module"; then 8881a3680546Smrg func_warning "But as you try to build a module library, libtool will still create " 8882a3680546Smrg func_warning "a static module, that should work as long as the dlopening application" 8883a3680546Smrg func_warning "is linked with the -dlopen flag to resolve symbols at runtime." 8884ed6f5d66Smrg if test -z "$global_symbol_pipe"; then 8885a3680546Smrg func_warning "However, this would only work if libtool was able to extract symbol" 8886a3680546Smrg func_warning "lists from a program, using 'nm' or equivalent, but libtool could" 8887a3680546Smrg func_warning "not find such a program. So, this module is probably useless." 8888a3680546Smrg func_warning "'nm' from GNU binutils and a full rebuild may help." 8889ed6f5d66Smrg fi 8890fbc03982Smrg if test no = "$build_old_libs"; then 8891ed6f5d66Smrg build_libtool_libs=module 8892ed6f5d66Smrg build_old_libs=yes 8893ed6f5d66Smrg else 8894ed6f5d66Smrg build_libtool_libs=no 8895ed6f5d66Smrg fi 8896ed6f5d66Smrg fi 8897ed6f5d66Smrg else 8898ed6f5d66Smrg deplibs="$dir/$old_library $deplibs" 8899ed6f5d66Smrg link_static=yes 8900ed6f5d66Smrg fi 8901ed6f5d66Smrg fi # link shared/static library? 8902ed6f5d66Smrg 8903fbc03982Smrg if test lib = "$linkmode"; then 8904ed6f5d66Smrg if test -n "$dependency_libs" && 8905fbc03982Smrg { test yes != "$hardcode_into_libs" || 8906fbc03982Smrg test yes = "$build_old_libs" || 8907fbc03982Smrg test yes = "$link_static"; }; then 8908ed6f5d66Smrg # Extract -R from dependency_libs 8909ed6f5d66Smrg temp_deplibs= 8910ed6f5d66Smrg for libdir in $dependency_libs; do 8911ed6f5d66Smrg case $libdir in 8912ed6f5d66Smrg -R*) func_stripname '-R' '' "$libdir" 8913ed6f5d66Smrg temp_xrpath=$func_stripname_result 8914ed6f5d66Smrg case " $xrpath " in 8915ed6f5d66Smrg *" $temp_xrpath "*) ;; 8916ed6f5d66Smrg *) func_append xrpath " $temp_xrpath";; 8917ed6f5d66Smrg esac;; 8918ed6f5d66Smrg *) func_append temp_deplibs " $libdir";; 8919ed6f5d66Smrg esac 8920ed6f5d66Smrg done 8921fbc03982Smrg dependency_libs=$temp_deplibs 8922ed6f5d66Smrg fi 8923ed6f5d66Smrg 8924ed6f5d66Smrg func_append newlib_search_path " $absdir" 8925ed6f5d66Smrg # Link against this library 8926fbc03982Smrg test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 8927ed6f5d66Smrg # ... and its dependency_libs 8928ed6f5d66Smrg tmp_libs= 8929ed6f5d66Smrg for deplib in $dependency_libs; do 8930ed6f5d66Smrg newdependency_libs="$deplib $newdependency_libs" 8931ed6f5d66Smrg case $deplib in 8932ed6f5d66Smrg -L*) func_stripname '-L' '' "$deplib" 8933ed6f5d66Smrg func_resolve_sysroot "$func_stripname_result";; 8934ed6f5d66Smrg *) func_resolve_sysroot "$deplib" ;; 8935ed6f5d66Smrg esac 8936fbc03982Smrg if $opt_preserve_dup_deps; then 8937ed6f5d66Smrg case "$tmp_libs " in 8938ed6f5d66Smrg *" $func_resolve_sysroot_result "*) 8939ed6f5d66Smrg func_append specialdeplibs " $func_resolve_sysroot_result" ;; 8940ed6f5d66Smrg esac 8941ed6f5d66Smrg fi 8942ed6f5d66Smrg func_append tmp_libs " $func_resolve_sysroot_result" 8943ed6f5d66Smrg done 8944ed6f5d66Smrg 8945fbc03982Smrg if test no != "$link_all_deplibs"; then 8946ed6f5d66Smrg # Add the search paths of all dependency libraries 8947ed6f5d66Smrg for deplib in $dependency_libs; do 8948ed6f5d66Smrg path= 8949ed6f5d66Smrg case $deplib in 8950fbc03982Smrg -L*) path=$deplib ;; 8951ed6f5d66Smrg *.la) 8952ed6f5d66Smrg func_resolve_sysroot "$deplib" 8953ed6f5d66Smrg deplib=$func_resolve_sysroot_result 8954ed6f5d66Smrg func_dirname "$deplib" "" "." 8955ed6f5d66Smrg dir=$func_dirname_result 8956ed6f5d66Smrg # We need an absolute path. 8957ed6f5d66Smrg case $dir in 8958fbc03982Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; 8959ed6f5d66Smrg *) 8960ed6f5d66Smrg absdir=`cd "$dir" && pwd` 8961ed6f5d66Smrg if test -z "$absdir"; then 8962fbc03982Smrg func_warning "cannot determine absolute directory name of '$dir'" 8963fbc03982Smrg absdir=$dir 8964ed6f5d66Smrg fi 8965ed6f5d66Smrg ;; 8966ed6f5d66Smrg esac 8967ed6f5d66Smrg if $GREP "^installed=no" $deplib > /dev/null; then 8968ed6f5d66Smrg case $host in 8969ed6f5d66Smrg *-*-darwin*) 8970ed6f5d66Smrg depdepl= 8971fbc03982Smrg eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 8972fbc03982Smrg if test -n "$deplibrary_names"; then 8973fbc03982Smrg for tmp in $deplibrary_names; do 8974ed6f5d66Smrg depdepl=$tmp 8975ed6f5d66Smrg done 8976fbc03982Smrg if test -f "$absdir/$objdir/$depdepl"; then 8977fbc03982Smrg depdepl=$absdir/$objdir/$depdepl 8978fbc03982Smrg darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8979ed6f5d66Smrg if test -z "$darwin_install_name"; then 8980fbc03982Smrg darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8981ed6f5d66Smrg fi 8982fbc03982Smrg func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" 8983fbc03982Smrg func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" 8984ed6f5d66Smrg path= 8985ed6f5d66Smrg fi 8986ed6f5d66Smrg fi 8987ed6f5d66Smrg ;; 8988ed6f5d66Smrg *) 8989fbc03982Smrg path=-L$absdir/$objdir 8990ed6f5d66Smrg ;; 8991ed6f5d66Smrg esac 8992ed6f5d66Smrg else 8993fbc03982Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 8994ed6f5d66Smrg test -z "$libdir" && \ 8995fbc03982Smrg func_fatal_error "'$deplib' is not a valid libtool archive" 8996ed6f5d66Smrg test "$absdir" != "$libdir" && \ 8997fbc03982Smrg func_warning "'$deplib' seems to be moved" 8998ed6f5d66Smrg 8999fbc03982Smrg path=-L$absdir 9000ed6f5d66Smrg fi 9001ed6f5d66Smrg ;; 9002ed6f5d66Smrg esac 9003ed6f5d66Smrg case " $deplibs " in 9004ed6f5d66Smrg *" $path "*) ;; 9005ed6f5d66Smrg *) deplibs="$path $deplibs" ;; 9006ed6f5d66Smrg esac 9007ed6f5d66Smrg done 9008ed6f5d66Smrg fi # link_all_deplibs != no 9009ed6f5d66Smrg fi # linkmode = lib 9010ed6f5d66Smrg done # for deplib in $libs 9011a3680546Smrg 9012a3680546Smrg func_append temp_rpath "$temp_rpath_tail" 9013a3680546Smrg func_append compile_rpath "$compile_rpath_tail" 9014a3680546Smrg 9015fbc03982Smrg if test link = "$pass"; then 9016fbc03982Smrg if test prog = "$linkmode"; then 9017ed6f5d66Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 9018ed6f5d66Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 9019ed6f5d66Smrg else 9020ed6f5d66Smrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9021ed6f5d66Smrg fi 9022ed6f5d66Smrg fi 9023fbc03982Smrg dependency_libs=$newdependency_libs 9024fbc03982Smrg if test dlpreopen = "$pass"; then 9025ed6f5d66Smrg # Link the dlpreopened libraries before other libraries 9026ed6f5d66Smrg for deplib in $save_deplibs; do 9027ed6f5d66Smrg deplibs="$deplib $deplibs" 9028ed6f5d66Smrg done 9029ed6f5d66Smrg fi 9030fbc03982Smrg if test dlopen != "$pass"; then 9031fbc03982Smrg test conv = "$pass" || { 9032ed6f5d66Smrg # Make sure lib_search_path contains only unique directories. 9033ed6f5d66Smrg lib_search_path= 9034ed6f5d66Smrg for dir in $newlib_search_path; do 9035ed6f5d66Smrg case "$lib_search_path " in 9036ed6f5d66Smrg *" $dir "*) ;; 9037ed6f5d66Smrg *) func_append lib_search_path " $dir" ;; 9038ed6f5d66Smrg esac 9039ed6f5d66Smrg done 9040ed6f5d66Smrg newlib_search_path= 9041fbc03982Smrg } 9042ed6f5d66Smrg 9043fbc03982Smrg if test prog,link = "$linkmode,$pass"; then 9044ed6f5d66Smrg vars="compile_deplibs finalize_deplibs" 9045fbc03982Smrg else 9046fbc03982Smrg vars=deplibs 9047ed6f5d66Smrg fi 9048ed6f5d66Smrg for var in $vars dependency_libs; do 9049ed6f5d66Smrg # Add libraries to $var in reverse order 9050ed6f5d66Smrg eval tmp_libs=\"\$$var\" 9051ed6f5d66Smrg new_libs= 9052a3680546Smrg # FIXME: Pedantically, this is the right thing to do, so 9053a3680546Smrg # that some nasty dependency loop isn't accidentally 9054a3680546Smrg # broken: new_libs="$deplib $new_libs" 9055ed6f5d66Smrg for deplib in $tmp_libs; do 9056a3680546Smrg if $opt_preserve_dup_deps; then 9057a3680546Smrg new_libs="$deplib $new_libs" 9058a3680546Smrg else 9059a3680546Smrg # Pragmatically, this seems to cause very few problems in 9060a3680546Smrg # practice: 9061a3680546Smrg case $deplib in 9062a3680546Smrg -L*) new_libs="$deplib $new_libs" ;; 9063a3680546Smrg -R*) ;; 9064ed6f5d66Smrg *) 9065a3680546Smrg # And here is the reason: when a library appears more 9066a3680546Smrg # than once as an explicit dependence of a library, or 9067a3680546Smrg # is implicitly linked in more than once by the 9068a3680546Smrg # compiler, it is considered special, and multiple 9069a3680546Smrg # occurrences thereof are not removed. Compare this 9070a3680546Smrg # with having the same library being listed as a 9071a3680546Smrg # dependency of multiple other libraries: in this case, 9072a3680546Smrg # we know (pedantically, we assume) the library does not 9073a3680546Smrg # need to be listed more than once, so we keep only the 9074a3680546Smrg # last copy. This is not always right, but it is rare 9075a3680546Smrg # enough that we require users that really mean to play 9076a3680546Smrg # such unportable linking tricks to link the library 9077a3680546Smrg # using -Wl,-lname, so that libtool does not consider it 9078a3680546Smrg # for duplicate removal. And if not possible for portability 9079a3680546Smrg # reasons, then --preserve-dup-deps should be used. 9080a3680546Smrg case " $specialdeplibs " in 9081a3680546Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 9082a3680546Smrg *) 9083a3680546Smrg case " $new_libs " in 9084a3680546Smrg *" $deplib "*) ;; 9085a3680546Smrg *) new_libs="$deplib $new_libs" ;; 9086a3680546Smrg esac 9087a3680546Smrg ;; 9088a3680546Smrg esac 9089a3680546Smrg ;; 9090ed6f5d66Smrg esac 9091a3680546Smrg fi 9092ed6f5d66Smrg done 9093ed6f5d66Smrg tmp_libs= 9094ed6f5d66Smrg for deplib in $new_libs; do 9095ed6f5d66Smrg case $deplib in 9096ed6f5d66Smrg -L*) 9097ed6f5d66Smrg case " $tmp_libs " in 9098ed6f5d66Smrg *" $deplib "*) ;; 9099ed6f5d66Smrg *) func_append tmp_libs " $deplib" ;; 9100ed6f5d66Smrg esac 9101ed6f5d66Smrg ;; 9102ed6f5d66Smrg *) func_append tmp_libs " $deplib" ;; 9103ed6f5d66Smrg esac 9104ed6f5d66Smrg done 9105ed6f5d66Smrg eval $var=\"$tmp_libs\" 9106ed6f5d66Smrg done # for var 9107ed6f5d66Smrg fi 9108fbc03982Smrg 9109fbc03982Smrg # Add Sun CC postdeps if required: 9110fbc03982Smrg test CXX = "$tagname" && { 9111fbc03982Smrg case $host_os in 9112fbc03982Smrg linux*) 91133d05230fSmrg case `$CC -V 2>&1 | $SED 5q` in 9114fbc03982Smrg *Sun\ C*) # Sun C++ 5.9 9115fbc03982Smrg func_suncc_cstd_abi 9116fbc03982Smrg 9117fbc03982Smrg if test no != "$suncc_use_cstd_abi"; then 9118fbc03982Smrg func_append postdeps ' -library=Cstd -library=Crun' 9119fbc03982Smrg fi 9120fbc03982Smrg ;; 9121fbc03982Smrg esac 9122fbc03982Smrg ;; 9123fbc03982Smrg 9124fbc03982Smrg solaris*) 9125fbc03982Smrg func_cc_basename "$CC" 9126fbc03982Smrg case $func_cc_basename_result in 9127fbc03982Smrg CC* | sunCC*) 9128fbc03982Smrg func_suncc_cstd_abi 9129fbc03982Smrg 9130fbc03982Smrg if test no != "$suncc_use_cstd_abi"; then 9131fbc03982Smrg func_append postdeps ' -library=Cstd -library=Crun' 9132fbc03982Smrg fi 9133fbc03982Smrg ;; 9134fbc03982Smrg esac 9135fbc03982Smrg ;; 9136fbc03982Smrg esac 9137fbc03982Smrg } 9138fbc03982Smrg 9139ed6f5d66Smrg # Last step: remove runtime libs from dependency_libs 9140ed6f5d66Smrg # (they stay in deplibs) 9141ed6f5d66Smrg tmp_libs= 9142fbc03982Smrg for i in $dependency_libs; do 9143ed6f5d66Smrg case " $predeps $postdeps $compiler_lib_search_path " in 9144ed6f5d66Smrg *" $i "*) 9145fbc03982Smrg i= 9146ed6f5d66Smrg ;; 9147ed6f5d66Smrg esac 9148fbc03982Smrg if test -n "$i"; then 9149ed6f5d66Smrg func_append tmp_libs " $i" 9150ed6f5d66Smrg fi 9151ed6f5d66Smrg done 9152ed6f5d66Smrg dependency_libs=$tmp_libs 9153ed6f5d66Smrg done # for pass 9154fbc03982Smrg if test prog = "$linkmode"; then 9155fbc03982Smrg dlfiles=$newdlfiles 9156ed6f5d66Smrg fi 9157fbc03982Smrg if test prog = "$linkmode" || test lib = "$linkmode"; then 9158fbc03982Smrg dlprefiles=$newdlprefiles 9159ed6f5d66Smrg fi 9160ed6f5d66Smrg 9161ed6f5d66Smrg case $linkmode in 9162ed6f5d66Smrg oldlib) 9163fbc03982Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 9164fbc03982Smrg func_warning "'-dlopen' is ignored for archives" 9165ed6f5d66Smrg fi 9166ed6f5d66Smrg 9167ed6f5d66Smrg case " $deplibs" in 9168ed6f5d66Smrg *\ -l* | *\ -L*) 9169fbc03982Smrg func_warning "'-l' and '-L' are ignored for archives" ;; 9170ed6f5d66Smrg esac 9171ed6f5d66Smrg 9172ed6f5d66Smrg test -n "$rpath" && \ 9173fbc03982Smrg func_warning "'-rpath' is ignored for archives" 9174ed6f5d66Smrg 9175ed6f5d66Smrg test -n "$xrpath" && \ 9176fbc03982Smrg func_warning "'-R' is ignored for archives" 9177ed6f5d66Smrg 9178ed6f5d66Smrg test -n "$vinfo" && \ 9179fbc03982Smrg func_warning "'-version-info/-version-number' is ignored for archives" 9180ed6f5d66Smrg 9181ed6f5d66Smrg test -n "$release" && \ 9182fbc03982Smrg func_warning "'-release' is ignored for archives" 9183ed6f5d66Smrg 9184ed6f5d66Smrg test -n "$export_symbols$export_symbols_regex" && \ 9185fbc03982Smrg func_warning "'-export-symbols' is ignored for archives" 9186ed6f5d66Smrg 9187ed6f5d66Smrg # Now set the variables for building old libraries. 9188ed6f5d66Smrg build_libtool_libs=no 9189fbc03982Smrg oldlibs=$output 9190ed6f5d66Smrg func_append objs "$old_deplibs" 9191ed6f5d66Smrg ;; 9192ed6f5d66Smrg 9193ed6f5d66Smrg lib) 9194fbc03982Smrg # Make sure we only generate libraries of the form 'libNAME.la'. 9195ed6f5d66Smrg case $outputname in 9196ed6f5d66Smrg lib*) 9197ed6f5d66Smrg func_stripname 'lib' '.la' "$outputname" 9198ed6f5d66Smrg name=$func_stripname_result 9199ed6f5d66Smrg eval shared_ext=\"$shrext_cmds\" 9200ed6f5d66Smrg eval libname=\"$libname_spec\" 9201ed6f5d66Smrg ;; 9202ed6f5d66Smrg *) 9203fbc03982Smrg test no = "$module" \ 9204fbc03982Smrg && func_fatal_help "libtool library '$output' must begin with 'lib'" 9205ed6f5d66Smrg 9206fbc03982Smrg if test no != "$need_lib_prefix"; then 9207ed6f5d66Smrg # Add the "lib" prefix for modules if required 9208ed6f5d66Smrg func_stripname '' '.la' "$outputname" 9209ed6f5d66Smrg name=$func_stripname_result 9210ed6f5d66Smrg eval shared_ext=\"$shrext_cmds\" 9211ed6f5d66Smrg eval libname=\"$libname_spec\" 9212ed6f5d66Smrg else 9213ed6f5d66Smrg func_stripname '' '.la' "$outputname" 9214ed6f5d66Smrg libname=$func_stripname_result 9215ed6f5d66Smrg fi 9216ed6f5d66Smrg ;; 9217ed6f5d66Smrg esac 9218ed6f5d66Smrg 9219ed6f5d66Smrg if test -n "$objs"; then 9220fbc03982Smrg if test pass_all != "$deplibs_check_method"; then 9221fbc03982Smrg func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" 9222ed6f5d66Smrg else 9223a3680546Smrg func_warning "Linking the shared library $output against the non-libtool objects $objs is not portable!" 9224ed6f5d66Smrg func_append libobjs " $objs" 9225ed6f5d66Smrg fi 9226ed6f5d66Smrg fi 9227ed6f5d66Smrg 9228fbc03982Smrg test no = "$dlself" \ 9229fbc03982Smrg || func_warning "'-dlopen self' is ignored for libtool libraries" 9230ed6f5d66Smrg 9231ed6f5d66Smrg set dummy $rpath 9232ed6f5d66Smrg shift 9233fbc03982Smrg test 1 -lt "$#" \ 9234fbc03982Smrg && func_warning "ignoring multiple '-rpath's for a libtool library" 9235ed6f5d66Smrg 9236fbc03982Smrg install_libdir=$1 9237ed6f5d66Smrg 9238ed6f5d66Smrg oldlibs= 9239ed6f5d66Smrg if test -z "$rpath"; then 9240fbc03982Smrg if test yes = "$build_libtool_libs"; then 9241ed6f5d66Smrg # Building a libtool convenience library. 9242fbc03982Smrg # Some compilers have problems with a '.al' extension so 9243ed6f5d66Smrg # convenience libraries should have the same extension an 9244ed6f5d66Smrg # archive normally would. 9245ed6f5d66Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 9246ed6f5d66Smrg build_libtool_libs=convenience 9247ed6f5d66Smrg build_old_libs=yes 9248ed6f5d66Smrg fi 9249ed6f5d66Smrg 9250ed6f5d66Smrg test -n "$vinfo" && \ 9251fbc03982Smrg func_warning "'-version-info/-version-number' is ignored for convenience libraries" 9252ed6f5d66Smrg 9253ed6f5d66Smrg test -n "$release" && \ 9254fbc03982Smrg func_warning "'-release' is ignored for convenience libraries" 9255ed6f5d66Smrg else 9256ed6f5d66Smrg 9257ed6f5d66Smrg # Parse the version information argument. 9258fbc03982Smrg save_ifs=$IFS; IFS=: 9259ed6f5d66Smrg set dummy $vinfo 0 0 0 9260ed6f5d66Smrg shift 9261fbc03982Smrg IFS=$save_ifs 9262ed6f5d66Smrg 9263ed6f5d66Smrg test -n "$7" && \ 9264fbc03982Smrg func_fatal_help "too many parameters to '-version-info'" 9265ed6f5d66Smrg 9266ed6f5d66Smrg # convert absolute version numbers to libtool ages 9267ed6f5d66Smrg # this retains compatibility with .la files and attempts 9268ed6f5d66Smrg # to make the code below a bit more comprehensible 9269ed6f5d66Smrg 9270ed6f5d66Smrg case $vinfo_number in 9271ed6f5d66Smrg yes) 9272fbc03982Smrg number_major=$1 9273fbc03982Smrg number_minor=$2 9274fbc03982Smrg number_revision=$3 9275ed6f5d66Smrg # 9276ed6f5d66Smrg # There are really only two kinds -- those that 9277ed6f5d66Smrg # use the current revision as the major version 9278ed6f5d66Smrg # and those that subtract age and use age as 9279ed6f5d66Smrg # a minor version. But, then there is irix 9280fbc03982Smrg # that has an extra 1 added just for fun 9281ed6f5d66Smrg # 9282ed6f5d66Smrg case $version_type in 9283ed6f5d66Smrg # correct linux to gnu/linux during the next big refactor 9284a3680546Smrg darwin|freebsd-elf|linux|midnightbsd-elf|osf|qnx|windows|none) 9285ed6f5d66Smrg func_arith $number_major + $number_minor 9286ed6f5d66Smrg current=$func_arith_result 9287fbc03982Smrg age=$number_minor 9288fbc03982Smrg revision=$number_revision 9289ed6f5d66Smrg ;; 9290a3680546Smrg freebsd-aout|sco|sunos) 9291fbc03982Smrg current=$number_major 9292fbc03982Smrg revision=$number_minor 9293fbc03982Smrg age=0 9294ed6f5d66Smrg ;; 9295ed6f5d66Smrg irix|nonstopux) 9296ed6f5d66Smrg func_arith $number_major + $number_minor 9297ed6f5d66Smrg current=$func_arith_result 9298fbc03982Smrg age=$number_minor 9299fbc03982Smrg revision=$number_minor 9300ed6f5d66Smrg lt_irix_increment=no 9301ed6f5d66Smrg ;; 9302a3680546Smrg *) 9303a3680546Smrg func_fatal_configuration "$modename: unknown library version type '$version_type'" 9304a3680546Smrg ;; 9305ed6f5d66Smrg esac 9306ed6f5d66Smrg ;; 9307ed6f5d66Smrg no) 9308fbc03982Smrg current=$1 9309fbc03982Smrg revision=$2 9310fbc03982Smrg age=$3 9311ed6f5d66Smrg ;; 9312ed6f5d66Smrg esac 9313ed6f5d66Smrg 9314ed6f5d66Smrg # Check that each of the things are valid numbers. 9315ed6f5d66Smrg case $current in 9316ed6f5d66Smrg 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]) ;; 9317ed6f5d66Smrg *) 9318fbc03982Smrg func_error "CURRENT '$current' must be a nonnegative integer" 9319fbc03982Smrg func_fatal_error "'$vinfo' is not valid version information" 9320ed6f5d66Smrg ;; 9321ed6f5d66Smrg esac 9322ed6f5d66Smrg 9323ed6f5d66Smrg case $revision in 9324ed6f5d66Smrg 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]) ;; 9325ed6f5d66Smrg *) 9326fbc03982Smrg func_error "REVISION '$revision' must be a nonnegative integer" 9327fbc03982Smrg func_fatal_error "'$vinfo' is not valid version information" 9328ed6f5d66Smrg ;; 9329ed6f5d66Smrg esac 9330ed6f5d66Smrg 9331ed6f5d66Smrg case $age in 9332ed6f5d66Smrg 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]) ;; 9333ed6f5d66Smrg *) 9334fbc03982Smrg func_error "AGE '$age' must be a nonnegative integer" 9335fbc03982Smrg func_fatal_error "'$vinfo' is not valid version information" 9336ed6f5d66Smrg ;; 9337ed6f5d66Smrg esac 9338ed6f5d66Smrg 9339ed6f5d66Smrg if test "$age" -gt "$current"; then 9340fbc03982Smrg func_error "AGE '$age' is greater than the current interface number '$current'" 9341fbc03982Smrg func_fatal_error "'$vinfo' is not valid version information" 9342ed6f5d66Smrg fi 9343ed6f5d66Smrg 9344ed6f5d66Smrg # Calculate the version variables. 9345ed6f5d66Smrg major= 9346ed6f5d66Smrg versuffix= 9347ed6f5d66Smrg verstring= 9348ed6f5d66Smrg case $version_type in 9349ed6f5d66Smrg none) ;; 9350ed6f5d66Smrg 9351ed6f5d66Smrg darwin) 9352ed6f5d66Smrg # Like Linux, but with the current version available in 9353ed6f5d66Smrg # verstring for coding it into the library header 9354ed6f5d66Smrg func_arith $current - $age 9355ed6f5d66Smrg major=.$func_arith_result 9356fbc03982Smrg versuffix=$major.$age.$revision 9357ed6f5d66Smrg # Darwin ld doesn't like 0 for these options... 9358ed6f5d66Smrg func_arith $current + 1 9359ed6f5d66Smrg minor_current=$func_arith_result 9360fbc03982Smrg xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 9361ed6f5d66Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 9362fbc03982Smrg # On Darwin other compilers 9363fbc03982Smrg case $CC in 9364fbc03982Smrg nagfor*) 9365fbc03982Smrg verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 9366fbc03982Smrg ;; 9367fbc03982Smrg *) 9368fbc03982Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 9369fbc03982Smrg ;; 9370fbc03982Smrg esac 9371ed6f5d66Smrg ;; 9372ed6f5d66Smrg 9373ed6f5d66Smrg freebsd-aout) 9374fbc03982Smrg major=.$current 9375fbc03982Smrg versuffix=.$current.$revision 9376ed6f5d66Smrg ;; 9377ed6f5d66Smrg 93783d05230fSmrg freebsd-elf | midnightbsd-elf) 9379fbc03982Smrg func_arith $current - $age 9380fbc03982Smrg major=.$func_arith_result 9381fbc03982Smrg versuffix=$major.$age.$revision 9382ed6f5d66Smrg ;; 9383ed6f5d66Smrg 9384ed6f5d66Smrg irix | nonstopux) 9385fbc03982Smrg if test no = "$lt_irix_increment"; then 9386ed6f5d66Smrg func_arith $current - $age 9387ed6f5d66Smrg else 9388ed6f5d66Smrg func_arith $current - $age + 1 9389ed6f5d66Smrg fi 9390ed6f5d66Smrg major=$func_arith_result 9391ed6f5d66Smrg 9392ed6f5d66Smrg case $version_type in 9393ed6f5d66Smrg nonstopux) verstring_prefix=nonstopux ;; 9394ed6f5d66Smrg *) verstring_prefix=sgi ;; 9395ed6f5d66Smrg esac 9396fbc03982Smrg verstring=$verstring_prefix$major.$revision 9397ed6f5d66Smrg 9398ed6f5d66Smrg # Add in all the interfaces that we are compatible with. 9399ed6f5d66Smrg loop=$revision 9400fbc03982Smrg while test 0 -ne "$loop"; do 9401ed6f5d66Smrg func_arith $revision - $loop 9402ed6f5d66Smrg iface=$func_arith_result 9403ed6f5d66Smrg func_arith $loop - 1 9404ed6f5d66Smrg loop=$func_arith_result 9405fbc03982Smrg verstring=$verstring_prefix$major.$iface:$verstring 9406ed6f5d66Smrg done 9407ed6f5d66Smrg 9408fbc03982Smrg # Before this point, $major must not contain '.'. 9409ed6f5d66Smrg major=.$major 9410fbc03982Smrg versuffix=$major.$revision 9411ed6f5d66Smrg ;; 9412ed6f5d66Smrg 9413ed6f5d66Smrg linux) # correct to gnu/linux during the next big refactor 9414ed6f5d66Smrg func_arith $current - $age 9415ed6f5d66Smrg major=.$func_arith_result 9416fbc03982Smrg versuffix=$major.$age.$revision 9417ed6f5d66Smrg ;; 9418ed6f5d66Smrg 9419ed6f5d66Smrg osf) 9420ed6f5d66Smrg func_arith $current - $age 9421ed6f5d66Smrg major=.$func_arith_result 9422fbc03982Smrg versuffix=.$current.$age.$revision 9423fbc03982Smrg verstring=$current.$age.$revision 9424ed6f5d66Smrg 9425ed6f5d66Smrg # Add in all the interfaces that we are compatible with. 9426ed6f5d66Smrg loop=$age 9427fbc03982Smrg while test 0 -ne "$loop"; do 9428ed6f5d66Smrg func_arith $current - $loop 9429ed6f5d66Smrg iface=$func_arith_result 9430ed6f5d66Smrg func_arith $loop - 1 9431ed6f5d66Smrg loop=$func_arith_result 9432fbc03982Smrg verstring=$verstring:$iface.0 9433ed6f5d66Smrg done 9434ed6f5d66Smrg 9435ed6f5d66Smrg # Make executables depend on our current version. 9436fbc03982Smrg func_append verstring ":$current.0" 9437ed6f5d66Smrg ;; 9438ed6f5d66Smrg 9439ed6f5d66Smrg qnx) 9440a3680546Smrg func_arith $current - $age 9441a3680546Smrg major=.$func_arith_result 9442a3680546Smrg versuffix=$major.$age.$revision 9443fbc03982Smrg ;; 9444fbc03982Smrg 9445fbc03982Smrg sco) 9446fbc03982Smrg major=.$current 9447fbc03982Smrg versuffix=.$current 9448ed6f5d66Smrg ;; 9449ed6f5d66Smrg 9450ed6f5d66Smrg sunos) 9451fbc03982Smrg major=.$current 9452fbc03982Smrg versuffix=.$current.$revision 9453ed6f5d66Smrg ;; 9454ed6f5d66Smrg 9455ed6f5d66Smrg windows) 9456ed6f5d66Smrg # Use '-' rather than '.', since we only want one 9457fbc03982Smrg # extension on DOS 8.3 file systems. 9458ed6f5d66Smrg func_arith $current - $age 9459ed6f5d66Smrg major=$func_arith_result 9460fbc03982Smrg versuffix=-$major 9461ed6f5d66Smrg ;; 9462ed6f5d66Smrg 9463ed6f5d66Smrg *) 9464fbc03982Smrg func_fatal_configuration "unknown library version type '$version_type'" 9465ed6f5d66Smrg ;; 9466ed6f5d66Smrg esac 9467ed6f5d66Smrg 9468ed6f5d66Smrg # Clear the version info if we defaulted, and they specified a release. 9469ed6f5d66Smrg if test -z "$vinfo" && test -n "$release"; then 9470ed6f5d66Smrg major= 9471ed6f5d66Smrg case $version_type in 9472ed6f5d66Smrg darwin) 9473ed6f5d66Smrg # we can't check for "0.0" in archive_cmds due to quoting 9474ed6f5d66Smrg # problems, so we reset it completely 9475ed6f5d66Smrg verstring= 9476ed6f5d66Smrg ;; 9477ed6f5d66Smrg *) 9478fbc03982Smrg verstring=0.0 9479ed6f5d66Smrg ;; 9480ed6f5d66Smrg esac 9481fbc03982Smrg if test no = "$need_version"; then 9482ed6f5d66Smrg versuffix= 9483ed6f5d66Smrg else 9484fbc03982Smrg versuffix=.0.0 9485ed6f5d66Smrg fi 9486ed6f5d66Smrg fi 9487ed6f5d66Smrg 9488ed6f5d66Smrg # Remove version info from name if versioning should be avoided 9489fbc03982Smrg if test yes,no = "$avoid_version,$need_version"; then 9490ed6f5d66Smrg major= 9491ed6f5d66Smrg versuffix= 9492fbc03982Smrg verstring= 9493ed6f5d66Smrg fi 9494ed6f5d66Smrg 9495ed6f5d66Smrg # Check to see if the archive will have undefined symbols. 9496fbc03982Smrg if test yes = "$allow_undefined"; then 9497fbc03982Smrg if test unsupported = "$allow_undefined_flag"; then 9498fbc03982Smrg if test yes = "$build_old_libs"; then 9499fbc03982Smrg func_warning "undefined symbols not allowed in $host shared libraries; building static only" 9500fbc03982Smrg build_libtool_libs=no 9501fbc03982Smrg else 9502fbc03982Smrg func_fatal_error "can't build $host shared library unless -no-undefined is specified" 9503fbc03982Smrg fi 9504ed6f5d66Smrg fi 9505ed6f5d66Smrg else 9506ed6f5d66Smrg # Don't allow undefined symbols. 9507fbc03982Smrg allow_undefined_flag=$no_undefined_flag 9508ed6f5d66Smrg fi 9509ed6f5d66Smrg 9510ed6f5d66Smrg fi 9511ed6f5d66Smrg 9512fbc03982Smrg func_generate_dlsyms "$libname" "$libname" : 9513ed6f5d66Smrg func_append libobjs " $symfileobj" 9514fbc03982Smrg test " " = "$libobjs" && libobjs= 9515ed6f5d66Smrg 9516fbc03982Smrg if test relink != "$opt_mode"; then 9517ed6f5d66Smrg # Remove our outputs, but don't remove object files since they 9518ed6f5d66Smrg # may have been created when compiling PIC objects. 9519ed6f5d66Smrg removelist= 9520ed6f5d66Smrg tempremovelist=`$ECHO "$output_objdir/*"` 9521ed6f5d66Smrg for p in $tempremovelist; do 9522ed6f5d66Smrg case $p in 9523ed6f5d66Smrg *.$objext | *.gcno) 9524ed6f5d66Smrg ;; 9525fbc03982Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) 9526fbc03982Smrg if test -n "$precious_files_regex"; then 9527ed6f5d66Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 9528ed6f5d66Smrg then 9529ed6f5d66Smrg continue 9530ed6f5d66Smrg fi 9531ed6f5d66Smrg fi 9532ed6f5d66Smrg func_append removelist " $p" 9533ed6f5d66Smrg ;; 9534ed6f5d66Smrg *) ;; 9535ed6f5d66Smrg esac 9536ed6f5d66Smrg done 9537ed6f5d66Smrg test -n "$removelist" && \ 9538ed6f5d66Smrg func_show_eval "${RM}r \$removelist" 9539ed6f5d66Smrg fi 9540ed6f5d66Smrg 9541ed6f5d66Smrg # Now set the variables for building old libraries. 9542fbc03982Smrg if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then 9543ed6f5d66Smrg func_append oldlibs " $output_objdir/$libname.$libext" 9544ed6f5d66Smrg 9545ed6f5d66Smrg # Transform .lo files to .o files. 9546fbc03982Smrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` 9547ed6f5d66Smrg fi 9548ed6f5d66Smrg 9549ed6f5d66Smrg # Eliminate all temporary directories. 9550ed6f5d66Smrg #for path in $notinst_path; do 9551ed6f5d66Smrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 9552ed6f5d66Smrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 9553ed6f5d66Smrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 9554ed6f5d66Smrg #done 9555ed6f5d66Smrg 9556ed6f5d66Smrg if test -n "$xrpath"; then 9557ed6f5d66Smrg # If the user specified any rpath flags, then add them. 9558ed6f5d66Smrg temp_xrpath= 9559ed6f5d66Smrg for libdir in $xrpath; do 9560ed6f5d66Smrg func_replace_sysroot "$libdir" 9561ed6f5d66Smrg func_append temp_xrpath " -R$func_replace_sysroot_result" 9562ed6f5d66Smrg case "$finalize_rpath " in 9563ed6f5d66Smrg *" $libdir "*) ;; 9564ed6f5d66Smrg *) func_append finalize_rpath " $libdir" ;; 9565ed6f5d66Smrg esac 9566ed6f5d66Smrg done 9567fbc03982Smrg if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then 9568ed6f5d66Smrg dependency_libs="$temp_xrpath $dependency_libs" 9569ed6f5d66Smrg fi 9570ed6f5d66Smrg fi 9571ed6f5d66Smrg 9572ed6f5d66Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 9573fbc03982Smrg old_dlfiles=$dlfiles 9574ed6f5d66Smrg dlfiles= 9575ed6f5d66Smrg for lib in $old_dlfiles; do 9576ed6f5d66Smrg case " $dlprefiles $dlfiles " in 9577ed6f5d66Smrg *" $lib "*) ;; 9578ed6f5d66Smrg *) func_append dlfiles " $lib" ;; 9579ed6f5d66Smrg esac 9580ed6f5d66Smrg done 9581ed6f5d66Smrg 9582ed6f5d66Smrg # Make sure dlprefiles contains only unique files 9583fbc03982Smrg old_dlprefiles=$dlprefiles 9584ed6f5d66Smrg dlprefiles= 9585ed6f5d66Smrg for lib in $old_dlprefiles; do 9586ed6f5d66Smrg case "$dlprefiles " in 9587ed6f5d66Smrg *" $lib "*) ;; 9588ed6f5d66Smrg *) func_append dlprefiles " $lib" ;; 9589ed6f5d66Smrg esac 9590ed6f5d66Smrg done 9591ed6f5d66Smrg 9592fbc03982Smrg if test yes = "$build_libtool_libs"; then 9593ed6f5d66Smrg if test -n "$rpath"; then 9594ed6f5d66Smrg case $host in 9595a3680546Smrg *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 9596ed6f5d66Smrg # these systems don't actually have a c library (as such)! 9597ed6f5d66Smrg ;; 9598ed6f5d66Smrg *-*-rhapsody* | *-*-darwin1.[012]) 9599ed6f5d66Smrg # Rhapsody C library is in the System framework 9600ed6f5d66Smrg func_append deplibs " System.ltframework" 9601ed6f5d66Smrg ;; 9602ed6f5d66Smrg *-*-netbsd*) 9603ed6f5d66Smrg # Don't link with libc until the a.out ld.so is fixed. 9604ed6f5d66Smrg ;; 96053d05230fSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) 9606ed6f5d66Smrg # Do not include libc due to us having libc/libc_r. 9607ed6f5d66Smrg ;; 9608ed6f5d66Smrg *-*-sco3.2v5* | *-*-sco5v6*) 9609ed6f5d66Smrg # Causes problems with __ctype 9610ed6f5d66Smrg ;; 9611ed6f5d66Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 9612ed6f5d66Smrg # Compiler inserts libc in the correct place for threads to work 9613ed6f5d66Smrg ;; 9614ed6f5d66Smrg *) 9615ed6f5d66Smrg # Add libc to deplibs on all other systems if necessary. 9616fbc03982Smrg if test yes = "$build_libtool_need_lc"; then 9617ed6f5d66Smrg func_append deplibs " -lc" 9618ed6f5d66Smrg fi 9619ed6f5d66Smrg ;; 9620ed6f5d66Smrg esac 9621ed6f5d66Smrg fi 9622ed6f5d66Smrg 9623ed6f5d66Smrg # Transform deplibs into only deplibs that can be linked in shared. 9624ed6f5d66Smrg name_save=$name 9625ed6f5d66Smrg libname_save=$libname 9626ed6f5d66Smrg release_save=$release 9627ed6f5d66Smrg versuffix_save=$versuffix 9628ed6f5d66Smrg major_save=$major 9629ed6f5d66Smrg # I'm not sure if I'm treating the release correctly. I think 9630ed6f5d66Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 9631ed6f5d66Smrg # add it in twice. Is that correct? 9632fbc03982Smrg release= 9633fbc03982Smrg versuffix= 9634fbc03982Smrg major= 9635ed6f5d66Smrg newdeplibs= 9636ed6f5d66Smrg droppeddeps=no 9637ed6f5d66Smrg case $deplibs_check_method in 9638ed6f5d66Smrg pass_all) 9639ed6f5d66Smrg # Don't check for shared/static. Everything works. 9640ed6f5d66Smrg # This might be a little naive. We might want to check 9641ed6f5d66Smrg # whether the library exists or not. But this is on 9642ed6f5d66Smrg # osf3 & osf4 and I'm not really sure... Just 9643ed6f5d66Smrg # implementing what was already the behavior. 9644ed6f5d66Smrg newdeplibs=$deplibs 9645ed6f5d66Smrg ;; 9646ed6f5d66Smrg file_magic*) 9647ed6f5d66Smrg set dummy $deplibs_check_method; shift 9648ed6f5d66Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9649ed6f5d66Smrg for a_deplib in $deplibs; do 9650ed6f5d66Smrg case $a_deplib in 9651ed6f5d66Smrg -l*) 9652ed6f5d66Smrg func_stripname -l '' "$a_deplib" 9653ed6f5d66Smrg name=$func_stripname_result 9654fbc03982Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9655ed6f5d66Smrg case " $predeps $postdeps " in 9656ed6f5d66Smrg *" $a_deplib "*) 9657ed6f5d66Smrg func_append newdeplibs " $a_deplib" 9658fbc03982Smrg a_deplib= 9659ed6f5d66Smrg ;; 9660ed6f5d66Smrg esac 9661ed6f5d66Smrg fi 9662fbc03982Smrg if test -n "$a_deplib"; then 9663ed6f5d66Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 9664ed6f5d66Smrg if test -n "$file_magic_glob"; then 9665ed6f5d66Smrg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 9666ed6f5d66Smrg else 9667ed6f5d66Smrg libnameglob=$libname 9668ed6f5d66Smrg fi 9669fbc03982Smrg test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` 9670ed6f5d66Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9671fbc03982Smrg if test yes = "$want_nocaseglob"; then 9672ed6f5d66Smrg shopt -s nocaseglob 9673ed6f5d66Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9674ed6f5d66Smrg $nocaseglob 9675ed6f5d66Smrg else 9676ed6f5d66Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9677ed6f5d66Smrg fi 9678ed6f5d66Smrg for potent_lib in $potential_libs; do 9679ed6f5d66Smrg # Follow soft links. 9680ed6f5d66Smrg if ls -lLd "$potent_lib" 2>/dev/null | 9681ed6f5d66Smrg $GREP " -> " >/dev/null; then 9682ed6f5d66Smrg continue 9683ed6f5d66Smrg fi 9684ed6f5d66Smrg # The statement above tries to avoid entering an 9685ed6f5d66Smrg # endless loop below, in case of cyclic links. 9686ed6f5d66Smrg # We might still enter an endless loop, since a link 9687ed6f5d66Smrg # loop can be closed while we follow links, 9688ed6f5d66Smrg # but so what? 9689fbc03982Smrg potlib=$potent_lib 9690ed6f5d66Smrg while test -h "$potlib" 2>/dev/null; do 9691fbc03982Smrg potliblink=`ls -ld $potlib | $SED 's/.* -> //'` 9692ed6f5d66Smrg case $potliblink in 9693fbc03982Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; 9694fbc03982Smrg *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; 9695ed6f5d66Smrg esac 9696ed6f5d66Smrg done 9697ed6f5d66Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 9698ed6f5d66Smrg $SED -e 10q | 9699ed6f5d66Smrg $EGREP "$file_magic_regex" > /dev/null; then 9700ed6f5d66Smrg func_append newdeplibs " $a_deplib" 9701fbc03982Smrg a_deplib= 9702ed6f5d66Smrg break 2 9703ed6f5d66Smrg fi 9704ed6f5d66Smrg done 9705ed6f5d66Smrg done 9706ed6f5d66Smrg fi 9707fbc03982Smrg if test -n "$a_deplib"; then 9708ed6f5d66Smrg droppeddeps=yes 9709a3680546Smrg func_warning "Linker path does not have real file for library $a_deplib." 9710a3680546Smrg func_warning "I have the capability to make that library automatically link in when" 9711a3680546Smrg func_warning "you link to this library. But I can only do this if you have a" 9712a3680546Smrg func_warning "shared version of the library, which you do not appear to have" 9713a3680546Smrg func_warning "because I did check the linker path looking for a file starting" 9714fbc03982Smrg if test -z "$potlib"; then 9715a3680546Smrg func_warning "with $libname but no candidates were found. (...for file magic test)" 9716ed6f5d66Smrg else 9717a3680546Smrg func_warning "with $libname and none of the candidates passed a file format test" 9718a3680546Smrg func_warning "using a file magic. Last file checked: $potlib" 9719ed6f5d66Smrg fi 9720ed6f5d66Smrg fi 9721ed6f5d66Smrg ;; 9722ed6f5d66Smrg *) 9723ed6f5d66Smrg # Add a -L argument. 9724ed6f5d66Smrg func_append newdeplibs " $a_deplib" 9725ed6f5d66Smrg ;; 9726ed6f5d66Smrg esac 9727ed6f5d66Smrg done # Gone through all deplibs. 9728ed6f5d66Smrg ;; 9729ed6f5d66Smrg match_pattern*) 9730ed6f5d66Smrg set dummy $deplibs_check_method; shift 9731ed6f5d66Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9732ed6f5d66Smrg for a_deplib in $deplibs; do 9733ed6f5d66Smrg case $a_deplib in 9734ed6f5d66Smrg -l*) 9735ed6f5d66Smrg func_stripname -l '' "$a_deplib" 9736ed6f5d66Smrg name=$func_stripname_result 9737fbc03982Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9738ed6f5d66Smrg case " $predeps $postdeps " in 9739ed6f5d66Smrg *" $a_deplib "*) 9740ed6f5d66Smrg func_append newdeplibs " $a_deplib" 9741fbc03982Smrg a_deplib= 9742ed6f5d66Smrg ;; 9743ed6f5d66Smrg esac 9744ed6f5d66Smrg fi 9745fbc03982Smrg if test -n "$a_deplib"; then 9746ed6f5d66Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 9747ed6f5d66Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9748ed6f5d66Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 9749ed6f5d66Smrg for potent_lib in $potential_libs; do 9750fbc03982Smrg potlib=$potent_lib # see symlink-check above in file_magic test 9751ed6f5d66Smrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 9752ed6f5d66Smrg $EGREP "$match_pattern_regex" > /dev/null; then 9753ed6f5d66Smrg func_append newdeplibs " $a_deplib" 9754fbc03982Smrg a_deplib= 9755ed6f5d66Smrg break 2 9756ed6f5d66Smrg fi 9757ed6f5d66Smrg done 9758ed6f5d66Smrg done 9759ed6f5d66Smrg fi 9760fbc03982Smrg if test -n "$a_deplib"; then 9761ed6f5d66Smrg droppeddeps=yes 9762a3680546Smrg func_warning "Linker path does not have real file for library $a_deplib." 9763a3680546Smrg func_warning "I have the capability to make that library automatically link in when" 9764a3680546Smrg func_warning "you link to this library. But I can only do this if you have a" 9765a3680546Smrg func_warning "shared version of the library, which you do not appear to have" 9766a3680546Smrg func_warning "because I did check the linker path looking for a file starting" 9767fbc03982Smrg if test -z "$potlib"; then 9768a3680546Smrg func_warning "with $libname but no candidates were found. (...for regex pattern test)" 9769ed6f5d66Smrg else 9770a3680546Smrg func_warning "with $libname and none of the candidates passed a file format test" 9771a3680546Smrg func_warning "using a regex pattern. Last file checked: $potlib" 9772ed6f5d66Smrg fi 9773ed6f5d66Smrg fi 9774ed6f5d66Smrg ;; 9775ed6f5d66Smrg *) 9776ed6f5d66Smrg # Add a -L argument. 9777ed6f5d66Smrg func_append newdeplibs " $a_deplib" 9778ed6f5d66Smrg ;; 9779ed6f5d66Smrg esac 9780ed6f5d66Smrg done # Gone through all deplibs. 9781ed6f5d66Smrg ;; 9782ed6f5d66Smrg none | unknown | *) 9783fbc03982Smrg newdeplibs= 9784ed6f5d66Smrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 9785fbc03982Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9786fbc03982Smrg for i in $predeps $postdeps; do 9787ed6f5d66Smrg # can't use Xsed below, because $i might contain '/' 9788fbc03982Smrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` 9789ed6f5d66Smrg done 9790ed6f5d66Smrg fi 9791ed6f5d66Smrg case $tmp_deplibs in 9792ed6f5d66Smrg *[!\ \ ]*) 9793ed6f5d66Smrg echo 9794fbc03982Smrg if test none = "$deplibs_check_method"; then 9795a3680546Smrg func_warning "Inter-library dependencies are not supported in this platform." 9796ed6f5d66Smrg else 9797a3680546Smrg func_warning "Inter-library dependencies are not known to be supported." 9798ed6f5d66Smrg fi 9799a3680546Smrg func_warning "All declared inter-library dependencies are being dropped." 9800ed6f5d66Smrg droppeddeps=yes 9801ed6f5d66Smrg ;; 9802ed6f5d66Smrg esac 9803ed6f5d66Smrg ;; 9804ed6f5d66Smrg esac 9805ed6f5d66Smrg versuffix=$versuffix_save 9806ed6f5d66Smrg major=$major_save 9807ed6f5d66Smrg release=$release_save 9808ed6f5d66Smrg libname=$libname_save 9809ed6f5d66Smrg name=$name_save 9810ed6f5d66Smrg 9811ed6f5d66Smrg case $host in 9812ed6f5d66Smrg *-*-rhapsody* | *-*-darwin1.[012]) 9813ed6f5d66Smrg # On Rhapsody replace the C library with the System framework 9814ed6f5d66Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 9815ed6f5d66Smrg ;; 9816ed6f5d66Smrg esac 9817ed6f5d66Smrg 9818fbc03982Smrg if test yes = "$droppeddeps"; then 9819fbc03982Smrg if test yes = "$module"; then 9820a3680546Smrg func_warning "libtool could not satisfy all declared inter-library" 9821a3680546Smrg func_warning "dependencies of module $libname. Therefore, libtool will create" 9822a3680546Smrg func_warning "a static module, that should work as long as the dlopening" 9823a3680546Smrg func_warning "application is linked with the -dlopen flag." 9824ed6f5d66Smrg if test -z "$global_symbol_pipe"; then 9825a3680546Smrg func_warning "However, this would only work if libtool was able to extract symbol" 9826a3680546Smrg func_warning "lists from a program, using 'nm' or equivalent, but libtool could" 9827a3680546Smrg func_warning "not find such a program. So, this module is probably useless." 9828a3680546Smrg func_warning "'nm' from GNU binutils and a full rebuild may help." 9829ed6f5d66Smrg fi 9830fbc03982Smrg if test no = "$build_old_libs"; then 9831fbc03982Smrg oldlibs=$output_objdir/$libname.$libext 9832ed6f5d66Smrg build_libtool_libs=module 9833ed6f5d66Smrg build_old_libs=yes 9834ed6f5d66Smrg else 9835ed6f5d66Smrg build_libtool_libs=no 9836ed6f5d66Smrg fi 9837ed6f5d66Smrg else 9838ed6f5d66Smrg echo "*** The inter-library dependencies that have been dropped here will be" 9839ed6f5d66Smrg echo "*** automatically added whenever a program is linked with this library" 9840ed6f5d66Smrg echo "*** or is declared to -dlopen it." 9841ed6f5d66Smrg 9842fbc03982Smrg if test no = "$allow_undefined"; then 9843ed6f5d66Smrg echo 9844ed6f5d66Smrg echo "*** Since this library must not contain undefined symbols," 9845ed6f5d66Smrg echo "*** because either the platform does not support them or" 9846ed6f5d66Smrg echo "*** it was explicitly requested with -no-undefined," 9847ed6f5d66Smrg echo "*** libtool will only create a static version of it." 9848fbc03982Smrg if test no = "$build_old_libs"; then 9849fbc03982Smrg oldlibs=$output_objdir/$libname.$libext 9850ed6f5d66Smrg build_libtool_libs=module 9851ed6f5d66Smrg build_old_libs=yes 9852ed6f5d66Smrg else 9853ed6f5d66Smrg build_libtool_libs=no 9854ed6f5d66Smrg fi 9855ed6f5d66Smrg fi 9856ed6f5d66Smrg fi 9857ed6f5d66Smrg fi 9858ed6f5d66Smrg # Done checking deplibs! 9859ed6f5d66Smrg deplibs=$newdeplibs 9860ed6f5d66Smrg fi 9861ed6f5d66Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 9862ed6f5d66Smrg case $host in 9863ed6f5d66Smrg *-*-darwin*) 9864ed6f5d66Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9865ed6f5d66Smrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9866ed6f5d66Smrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9867ed6f5d66Smrg ;; 9868ed6f5d66Smrg esac 9869ed6f5d66Smrg 9870ed6f5d66Smrg # move library search paths that coincide with paths to not yet 9871ed6f5d66Smrg # installed libraries to the beginning of the library search list 9872ed6f5d66Smrg new_libs= 9873ed6f5d66Smrg for path in $notinst_path; do 9874ed6f5d66Smrg case " $new_libs " in 9875ed6f5d66Smrg *" -L$path/$objdir "*) ;; 9876ed6f5d66Smrg *) 9877ed6f5d66Smrg case " $deplibs " in 9878ed6f5d66Smrg *" -L$path/$objdir "*) 9879ed6f5d66Smrg func_append new_libs " -L$path/$objdir" ;; 9880ed6f5d66Smrg esac 9881ed6f5d66Smrg ;; 9882ed6f5d66Smrg esac 9883ed6f5d66Smrg done 9884ed6f5d66Smrg for deplib in $deplibs; do 9885ed6f5d66Smrg case $deplib in 9886ed6f5d66Smrg -L*) 9887ed6f5d66Smrg case " $new_libs " in 9888ed6f5d66Smrg *" $deplib "*) ;; 9889ed6f5d66Smrg *) func_append new_libs " $deplib" ;; 9890ed6f5d66Smrg esac 9891ed6f5d66Smrg ;; 9892ed6f5d66Smrg *) func_append new_libs " $deplib" ;; 9893ed6f5d66Smrg esac 9894ed6f5d66Smrg done 9895fbc03982Smrg deplibs=$new_libs 9896ed6f5d66Smrg 9897ed6f5d66Smrg # All the library-specific variables (install_libdir is set above). 9898ed6f5d66Smrg library_names= 9899ed6f5d66Smrg old_library= 9900ed6f5d66Smrg dlname= 9901ed6f5d66Smrg 9902ed6f5d66Smrg # Test again, we may have decided not to build it any more 9903fbc03982Smrg if test yes = "$build_libtool_libs"; then 9904fbc03982Smrg # Remove $wl instances when linking with ld. 9905ed6f5d66Smrg # FIXME: should test the right _cmds variable. 9906ed6f5d66Smrg case $archive_cmds in 9907ed6f5d66Smrg *\$LD\ *) wl= ;; 9908ed6f5d66Smrg esac 9909fbc03982Smrg if test yes = "$hardcode_into_libs"; then 9910ed6f5d66Smrg # Hardcode the library paths 9911ed6f5d66Smrg hardcode_libdirs= 9912ed6f5d66Smrg dep_rpath= 9913fbc03982Smrg rpath=$finalize_rpath 9914fbc03982Smrg test relink = "$opt_mode" || rpath=$compile_rpath$rpath 9915ed6f5d66Smrg for libdir in $rpath; do 9916ed6f5d66Smrg if test -n "$hardcode_libdir_flag_spec"; then 9917ed6f5d66Smrg if test -n "$hardcode_libdir_separator"; then 9918ed6f5d66Smrg func_replace_sysroot "$libdir" 9919ed6f5d66Smrg libdir=$func_replace_sysroot_result 9920ed6f5d66Smrg if test -z "$hardcode_libdirs"; then 9921fbc03982Smrg hardcode_libdirs=$libdir 9922ed6f5d66Smrg else 9923ed6f5d66Smrg # Just accumulate the unique libdirs. 9924ed6f5d66Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 9925ed6f5d66Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 9926ed6f5d66Smrg ;; 9927ed6f5d66Smrg *) 9928ed6f5d66Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 9929ed6f5d66Smrg ;; 9930ed6f5d66Smrg esac 9931ed6f5d66Smrg fi 9932ed6f5d66Smrg else 9933ed6f5d66Smrg eval flag=\"$hardcode_libdir_flag_spec\" 9934ed6f5d66Smrg func_append dep_rpath " $flag" 9935ed6f5d66Smrg fi 9936ed6f5d66Smrg elif test -n "$runpath_var"; then 9937ed6f5d66Smrg case "$perm_rpath " in 9938ed6f5d66Smrg *" $libdir "*) ;; 9939ed6f5d66Smrg *) func_append perm_rpath " $libdir" ;; 9940ed6f5d66Smrg esac 9941ed6f5d66Smrg fi 9942ed6f5d66Smrg done 9943ed6f5d66Smrg # Substitute the hardcoded libdirs into the rpath. 9944ed6f5d66Smrg if test -n "$hardcode_libdir_separator" && 9945ed6f5d66Smrg test -n "$hardcode_libdirs"; then 9946fbc03982Smrg libdir=$hardcode_libdirs 9947ed6f5d66Smrg eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 9948ed6f5d66Smrg fi 9949ed6f5d66Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 9950ed6f5d66Smrg # We should set the runpath_var. 9951ed6f5d66Smrg rpath= 9952ed6f5d66Smrg for dir in $perm_rpath; do 9953ed6f5d66Smrg func_append rpath "$dir:" 9954ed6f5d66Smrg done 9955ed6f5d66Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 9956ed6f5d66Smrg fi 9957ed6f5d66Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 9958ed6f5d66Smrg fi 9959ed6f5d66Smrg 9960fbc03982Smrg shlibpath=$finalize_shlibpath 9961fbc03982Smrg test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath 9962ed6f5d66Smrg if test -n "$shlibpath"; then 9963ed6f5d66Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 9964ed6f5d66Smrg fi 9965ed6f5d66Smrg 9966ed6f5d66Smrg # Get the real and link names of the library. 9967ed6f5d66Smrg eval shared_ext=\"$shrext_cmds\" 9968ed6f5d66Smrg eval library_names=\"$library_names_spec\" 9969ed6f5d66Smrg set dummy $library_names 9970ed6f5d66Smrg shift 9971fbc03982Smrg realname=$1 9972ed6f5d66Smrg shift 9973ed6f5d66Smrg 9974ed6f5d66Smrg if test -n "$soname_spec"; then 9975ed6f5d66Smrg eval soname=\"$soname_spec\" 9976ed6f5d66Smrg else 9977fbc03982Smrg soname=$realname 9978ed6f5d66Smrg fi 9979ed6f5d66Smrg if test -z "$dlname"; then 9980ed6f5d66Smrg dlname=$soname 9981ed6f5d66Smrg fi 9982ed6f5d66Smrg 9983fbc03982Smrg lib=$output_objdir/$realname 9984ed6f5d66Smrg linknames= 9985ed6f5d66Smrg for link 9986ed6f5d66Smrg do 9987ed6f5d66Smrg func_append linknames " $link" 9988ed6f5d66Smrg done 9989ed6f5d66Smrg 9990ed6f5d66Smrg # Use standard objects if they are pic 9991ed6f5d66Smrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 9992ed6f5d66Smrg test "X$libobjs" = "X " && libobjs= 9993ed6f5d66Smrg 9994ed6f5d66Smrg delfiles= 9995ed6f5d66Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 9996ed6f5d66Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 9997fbc03982Smrg export_symbols=$output_objdir/$libname.uexp 9998ed6f5d66Smrg func_append delfiles " $export_symbols" 9999ed6f5d66Smrg fi 10000ed6f5d66Smrg 10001ed6f5d66Smrg orig_export_symbols= 10002ed6f5d66Smrg case $host_os in 10003a3680546Smrg cygwin* | mingw* | windows* | cegcc*) 10004ed6f5d66Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 10005ed6f5d66Smrg # exporting using user supplied symfile 10006fbc03982Smrg func_dll_def_p "$export_symbols" || { 10007ed6f5d66Smrg # and it's NOT already a .def file. Must figure out 10008ed6f5d66Smrg # which of the given symbols are data symbols and tag 10009ed6f5d66Smrg # them as such. So, trigger use of export_symbols_cmds. 10010ed6f5d66Smrg # export_symbols gets reassigned inside the "prepare 10011ed6f5d66Smrg # the list of exported symbols" if statement, so the 10012ed6f5d66Smrg # include_expsyms logic still works. 10013fbc03982Smrg orig_export_symbols=$export_symbols 10014ed6f5d66Smrg export_symbols= 10015ed6f5d66Smrg always_export_symbols=yes 10016fbc03982Smrg } 10017ed6f5d66Smrg fi 10018ed6f5d66Smrg ;; 10019ed6f5d66Smrg esac 10020ed6f5d66Smrg 10021ed6f5d66Smrg # Prepare the list of exported symbols 10022ed6f5d66Smrg if test -z "$export_symbols"; then 10023fbc03982Smrg if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then 10024fbc03982Smrg func_verbose "generating symbol list for '$libname.la'" 10025fbc03982Smrg export_symbols=$output_objdir/$libname.exp 10026ed6f5d66Smrg $opt_dry_run || $RM $export_symbols 10027ed6f5d66Smrg cmds=$export_symbols_cmds 10028fbc03982Smrg save_ifs=$IFS; IFS='~' 10029ed6f5d66Smrg for cmd1 in $cmds; do 10030fbc03982Smrg IFS=$save_ifs 10031ed6f5d66Smrg # Take the normal branch if the nm_file_list_spec branch 10032ed6f5d66Smrg # doesn't work or if tool conversion is not needed. 10033ed6f5d66Smrg case $nm_file_list_spec~$to_tool_file_cmd in 10034ed6f5d66Smrg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 10035ed6f5d66Smrg try_normal_branch=yes 10036ed6f5d66Smrg eval cmd=\"$cmd1\" 10037ed6f5d66Smrg func_len " $cmd" 10038ed6f5d66Smrg len=$func_len_result 10039ed6f5d66Smrg ;; 10040ed6f5d66Smrg *) 10041ed6f5d66Smrg try_normal_branch=no 10042ed6f5d66Smrg ;; 10043ed6f5d66Smrg esac 10044fbc03982Smrg if test yes = "$try_normal_branch" \ 10045ed6f5d66Smrg && { test "$len" -lt "$max_cmd_len" \ 10046ed6f5d66Smrg || test "$max_cmd_len" -le -1; } 10047ed6f5d66Smrg then 10048ed6f5d66Smrg func_show_eval "$cmd" 'exit $?' 10049ed6f5d66Smrg skipped_export=false 10050ed6f5d66Smrg elif test -n "$nm_file_list_spec"; then 10051ed6f5d66Smrg func_basename "$output" 10052ed6f5d66Smrg output_la=$func_basename_result 10053ed6f5d66Smrg save_libobjs=$libobjs 10054ed6f5d66Smrg save_output=$output 10055fbc03982Smrg output=$output_objdir/$output_la.nm 10056ed6f5d66Smrg func_to_tool_file "$output" 10057ed6f5d66Smrg libobjs=$nm_file_list_spec$func_to_tool_file_result 10058ed6f5d66Smrg func_append delfiles " $output" 10059ed6f5d66Smrg func_verbose "creating $NM input file list: $output" 10060ed6f5d66Smrg for obj in $save_libobjs; do 10061ed6f5d66Smrg func_to_tool_file "$obj" 10062ed6f5d66Smrg $ECHO "$func_to_tool_file_result" 10063ed6f5d66Smrg done > "$output" 10064ed6f5d66Smrg eval cmd=\"$cmd1\" 10065ed6f5d66Smrg func_show_eval "$cmd" 'exit $?' 10066ed6f5d66Smrg output=$save_output 10067ed6f5d66Smrg libobjs=$save_libobjs 10068ed6f5d66Smrg skipped_export=false 10069ed6f5d66Smrg else 10070ed6f5d66Smrg # The command line is too long to execute in one step. 10071ed6f5d66Smrg func_verbose "using reloadable object file for export list..." 10072ed6f5d66Smrg skipped_export=: 10073ed6f5d66Smrg # Break out early, otherwise skipped_export may be 10074ed6f5d66Smrg # set to false by a later but shorter cmd. 10075ed6f5d66Smrg break 10076ed6f5d66Smrg fi 10077ed6f5d66Smrg done 10078fbc03982Smrg IFS=$save_ifs 10079fbc03982Smrg if test -n "$export_symbols_regex" && test : != "$skipped_export"; then 10080ed6f5d66Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 10081ed6f5d66Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 10082ed6f5d66Smrg fi 10083ed6f5d66Smrg fi 10084ed6f5d66Smrg fi 10085ed6f5d66Smrg 10086ed6f5d66Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 10087fbc03982Smrg tmp_export_symbols=$export_symbols 10088fbc03982Smrg test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 10089ed6f5d66Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 10090ed6f5d66Smrg fi 10091ed6f5d66Smrg 10092fbc03982Smrg if test : != "$skipped_export" && test -n "$orig_export_symbols"; then 10093ed6f5d66Smrg # The given exports_symbols file has to be filtered, so filter it. 10094fbc03982Smrg func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 10095ed6f5d66Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 10096fbc03982Smrg # 's' commands, which not all seds can handle. GNU sed should be fine 10097ed6f5d66Smrg # though. Also, the filter scales superlinearly with the number of 10098ed6f5d66Smrg # global variables. join(1) would be nice here, but unfortunately 10099ed6f5d66Smrg # isn't a blessed tool. 10100ed6f5d66Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 10101ed6f5d66Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 10102ed6f5d66Smrg export_symbols=$output_objdir/$libname.def 10103ed6f5d66Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 10104ed6f5d66Smrg fi 10105ed6f5d66Smrg 10106ed6f5d66Smrg tmp_deplibs= 10107ed6f5d66Smrg for test_deplib in $deplibs; do 10108ed6f5d66Smrg case " $convenience " in 10109ed6f5d66Smrg *" $test_deplib "*) ;; 10110ed6f5d66Smrg *) 10111ed6f5d66Smrg func_append tmp_deplibs " $test_deplib" 10112ed6f5d66Smrg ;; 10113ed6f5d66Smrg esac 10114ed6f5d66Smrg done 10115fbc03982Smrg deplibs=$tmp_deplibs 10116ed6f5d66Smrg 10117ed6f5d66Smrg if test -n "$convenience"; then 10118ed6f5d66Smrg if test -n "$whole_archive_flag_spec" && 10119fbc03982Smrg test yes = "$compiler_needs_object" && 10120ed6f5d66Smrg test -z "$libobjs"; then 10121ed6f5d66Smrg # extract the archives, so we have objects to list. 10122ed6f5d66Smrg # TODO: could optimize this to just extract one archive. 10123ed6f5d66Smrg whole_archive_flag_spec= 10124ed6f5d66Smrg fi 10125ed6f5d66Smrg if test -n "$whole_archive_flag_spec"; then 10126ed6f5d66Smrg save_libobjs=$libobjs 10127ed6f5d66Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 10128ed6f5d66Smrg test "X$libobjs" = "X " && libobjs= 10129ed6f5d66Smrg else 10130fbc03982Smrg gentop=$output_objdir/${outputname}x 10131ed6f5d66Smrg func_append generated " $gentop" 10132ed6f5d66Smrg 10133ed6f5d66Smrg func_extract_archives $gentop $convenience 10134ed6f5d66Smrg func_append libobjs " $func_extract_archives_result" 10135ed6f5d66Smrg test "X$libobjs" = "X " && libobjs= 10136ed6f5d66Smrg fi 10137ed6f5d66Smrg fi 10138ed6f5d66Smrg 10139fbc03982Smrg if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then 10140ed6f5d66Smrg eval flag=\"$thread_safe_flag_spec\" 10141ed6f5d66Smrg func_append linker_flags " $flag" 10142ed6f5d66Smrg fi 10143ed6f5d66Smrg 10144ed6f5d66Smrg # Make a backup of the uninstalled library when relinking 10145fbc03982Smrg if test relink = "$opt_mode"; then 10146ed6f5d66Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 10147ed6f5d66Smrg fi 10148ed6f5d66Smrg 10149ed6f5d66Smrg # Do each of the archive commands. 10150fbc03982Smrg if test yes = "$module" && test -n "$module_cmds"; then 10151ed6f5d66Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 10152ed6f5d66Smrg eval test_cmds=\"$module_expsym_cmds\" 10153ed6f5d66Smrg cmds=$module_expsym_cmds 10154ed6f5d66Smrg else 10155ed6f5d66Smrg eval test_cmds=\"$module_cmds\" 10156ed6f5d66Smrg cmds=$module_cmds 10157ed6f5d66Smrg fi 10158ed6f5d66Smrg else 10159ed6f5d66Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 10160ed6f5d66Smrg eval test_cmds=\"$archive_expsym_cmds\" 10161ed6f5d66Smrg cmds=$archive_expsym_cmds 10162ed6f5d66Smrg else 10163ed6f5d66Smrg eval test_cmds=\"$archive_cmds\" 10164ed6f5d66Smrg cmds=$archive_cmds 10165ed6f5d66Smrg fi 10166ed6f5d66Smrg fi 10167ed6f5d66Smrg 10168fbc03982Smrg if test : != "$skipped_export" && 10169ed6f5d66Smrg func_len " $test_cmds" && 10170ed6f5d66Smrg len=$func_len_result && 10171ed6f5d66Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 10172ed6f5d66Smrg : 10173ed6f5d66Smrg else 10174ed6f5d66Smrg # The command line is too long to link in one step, link piecewise 10175ed6f5d66Smrg # or, if using GNU ld and skipped_export is not :, use a linker 10176ed6f5d66Smrg # script. 10177ed6f5d66Smrg 10178ed6f5d66Smrg # Save the value of $output and $libobjs because we want to 10179ed6f5d66Smrg # use them later. If we have whole_archive_flag_spec, we 10180ed6f5d66Smrg # want to use save_libobjs as it was before 10181ed6f5d66Smrg # whole_archive_flag_spec was expanded, because we can't 10182ed6f5d66Smrg # assume the linker understands whole_archive_flag_spec. 10183ed6f5d66Smrg # This may have to be revisited, in case too many 10184ed6f5d66Smrg # convenience libraries get linked in and end up exceeding 10185ed6f5d66Smrg # the spec. 10186ed6f5d66Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 10187ed6f5d66Smrg save_libobjs=$libobjs 10188ed6f5d66Smrg fi 10189ed6f5d66Smrg save_output=$output 10190ed6f5d66Smrg func_basename "$output" 10191ed6f5d66Smrg output_la=$func_basename_result 10192ed6f5d66Smrg 10193ed6f5d66Smrg # Clear the reloadable object creation command queue and 10194ed6f5d66Smrg # initialize k to one. 10195ed6f5d66Smrg test_cmds= 10196ed6f5d66Smrg concat_cmds= 10197ed6f5d66Smrg objlist= 10198ed6f5d66Smrg last_robj= 10199ed6f5d66Smrg k=1 10200ed6f5d66Smrg 10201a3680546Smrg if test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then 10202fbc03982Smrg output=$output_objdir/$output_la.lnk 10203ed6f5d66Smrg func_verbose "creating linker input file list: $output" 10204ed6f5d66Smrg : > $output 10205ed6f5d66Smrg set x $save_libobjs 10206ed6f5d66Smrg shift 10207ed6f5d66Smrg firstobj= 10208fbc03982Smrg if test yes = "$compiler_needs_object"; then 10209ed6f5d66Smrg firstobj="$1 " 10210ed6f5d66Smrg shift 10211ed6f5d66Smrg fi 10212ed6f5d66Smrg for obj 10213ed6f5d66Smrg do 10214ed6f5d66Smrg func_to_tool_file "$obj" 10215ed6f5d66Smrg $ECHO "$func_to_tool_file_result" >> $output 10216ed6f5d66Smrg done 10217ed6f5d66Smrg func_append delfiles " $output" 10218ed6f5d66Smrg func_to_tool_file "$output" 10219ed6f5d66Smrg output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 10220a3680546Smrg elif test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then 10221a3680546Smrg output=$output_objdir/$output_la.lnkscript 10222a3680546Smrg func_verbose "creating GNU ld script: $output" 10223a3680546Smrg echo 'INPUT (' > $output 10224a3680546Smrg for obj in $save_libobjs 10225a3680546Smrg do 10226a3680546Smrg func_to_tool_file "$obj" 10227a3680546Smrg $ECHO "$func_to_tool_file_result" >> $output 10228a3680546Smrg done 10229a3680546Smrg echo ')' >> $output 10230a3680546Smrg func_append delfiles " $output" 10231a3680546Smrg func_to_tool_file "$output" 10232a3680546Smrg output=$func_to_tool_file_result 10233ed6f5d66Smrg else 10234ed6f5d66Smrg if test -n "$save_libobjs"; then 10235ed6f5d66Smrg func_verbose "creating reloadable object files..." 10236fbc03982Smrg output=$output_objdir/$output_la-$k.$objext 10237ed6f5d66Smrg eval test_cmds=\"$reload_cmds\" 10238ed6f5d66Smrg func_len " $test_cmds" 10239ed6f5d66Smrg len0=$func_len_result 10240ed6f5d66Smrg len=$len0 10241ed6f5d66Smrg 10242ed6f5d66Smrg # Loop over the list of objects to be linked. 10243ed6f5d66Smrg for obj in $save_libobjs 10244ed6f5d66Smrg do 10245ed6f5d66Smrg func_len " $obj" 10246ed6f5d66Smrg func_arith $len + $func_len_result 10247ed6f5d66Smrg len=$func_arith_result 10248fbc03982Smrg if test -z "$objlist" || 10249ed6f5d66Smrg test "$len" -lt "$max_cmd_len"; then 10250ed6f5d66Smrg func_append objlist " $obj" 10251ed6f5d66Smrg else 10252ed6f5d66Smrg # The command $test_cmds is almost too long, add a 10253ed6f5d66Smrg # command to the queue. 10254fbc03982Smrg if test 1 -eq "$k"; then 10255ed6f5d66Smrg # The first file doesn't have a previous command to add. 10256ed6f5d66Smrg reload_objs=$objlist 10257ed6f5d66Smrg eval concat_cmds=\"$reload_cmds\" 10258ed6f5d66Smrg else 10259ed6f5d66Smrg # All subsequent reloadable object files will link in 10260ed6f5d66Smrg # the last one created. 10261ed6f5d66Smrg reload_objs="$objlist $last_robj" 10262ed6f5d66Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 10263ed6f5d66Smrg fi 10264fbc03982Smrg last_robj=$output_objdir/$output_la-$k.$objext 10265ed6f5d66Smrg func_arith $k + 1 10266ed6f5d66Smrg k=$func_arith_result 10267fbc03982Smrg output=$output_objdir/$output_la-$k.$objext 10268ed6f5d66Smrg objlist=" $obj" 10269ed6f5d66Smrg func_len " $last_robj" 10270ed6f5d66Smrg func_arith $len0 + $func_len_result 10271ed6f5d66Smrg len=$func_arith_result 10272ed6f5d66Smrg fi 10273ed6f5d66Smrg done 10274ed6f5d66Smrg # Handle the remaining objects by creating one last 10275ed6f5d66Smrg # reloadable object file. All subsequent reloadable object 10276ed6f5d66Smrg # files will link in the last one created. 10277ed6f5d66Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 10278ed6f5d66Smrg reload_objs="$objlist $last_robj" 10279fbc03982Smrg eval concat_cmds=\"\$concat_cmds$reload_cmds\" 10280ed6f5d66Smrg if test -n "$last_robj"; then 10281fbc03982Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 10282ed6f5d66Smrg fi 10283ed6f5d66Smrg func_append delfiles " $output" 10284ed6f5d66Smrg 10285ed6f5d66Smrg else 10286ed6f5d66Smrg output= 10287ed6f5d66Smrg fi 10288ed6f5d66Smrg 10289fbc03982Smrg ${skipped_export-false} && { 10290fbc03982Smrg func_verbose "generating symbol list for '$libname.la'" 10291fbc03982Smrg export_symbols=$output_objdir/$libname.exp 10292ed6f5d66Smrg $opt_dry_run || $RM $export_symbols 10293ed6f5d66Smrg libobjs=$output 10294ed6f5d66Smrg # Append the command to create the export file. 10295ed6f5d66Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 10296ed6f5d66Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 10297ed6f5d66Smrg if test -n "$last_robj"; then 10298ed6f5d66Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 10299ed6f5d66Smrg fi 10300fbc03982Smrg } 10301ed6f5d66Smrg 10302ed6f5d66Smrg test -n "$save_libobjs" && 10303ed6f5d66Smrg func_verbose "creating a temporary reloadable object file: $output" 10304ed6f5d66Smrg 10305ed6f5d66Smrg # Loop through the commands generated above and execute them. 10306fbc03982Smrg save_ifs=$IFS; IFS='~' 10307ed6f5d66Smrg for cmd in $concat_cmds; do 10308fbc03982Smrg IFS=$save_ifs 10309fbc03982Smrg $opt_quiet || { 103103d05230fSmrg func_quote_arg expand,pretty "$cmd" 103113d05230fSmrg eval "func_echo $func_quote_arg_result" 10312ed6f5d66Smrg } 10313ed6f5d66Smrg $opt_dry_run || eval "$cmd" || { 10314ed6f5d66Smrg lt_exit=$? 10315ed6f5d66Smrg 10316ed6f5d66Smrg # Restore the uninstalled library and exit 10317fbc03982Smrg if test relink = "$opt_mode"; then 10318ed6f5d66Smrg ( cd "$output_objdir" && \ 10319ed6f5d66Smrg $RM "${realname}T" && \ 10320ed6f5d66Smrg $MV "${realname}U" "$realname" ) 10321ed6f5d66Smrg fi 10322ed6f5d66Smrg 10323ed6f5d66Smrg exit $lt_exit 10324ed6f5d66Smrg } 10325ed6f5d66Smrg done 10326fbc03982Smrg IFS=$save_ifs 10327ed6f5d66Smrg 10328ed6f5d66Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 10329ed6f5d66Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 10330ed6f5d66Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 10331ed6f5d66Smrg fi 10332ed6f5d66Smrg fi 10333ed6f5d66Smrg 10334fbc03982Smrg ${skipped_export-false} && { 10335ed6f5d66Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 10336fbc03982Smrg tmp_export_symbols=$export_symbols 10337fbc03982Smrg test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 10338ed6f5d66Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 10339ed6f5d66Smrg fi 10340ed6f5d66Smrg 10341ed6f5d66Smrg if test -n "$orig_export_symbols"; then 10342ed6f5d66Smrg # The given exports_symbols file has to be filtered, so filter it. 10343fbc03982Smrg func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 10344ed6f5d66Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 10345fbc03982Smrg # 's' commands, which not all seds can handle. GNU sed should be fine 10346ed6f5d66Smrg # though. Also, the filter scales superlinearly with the number of 10347ed6f5d66Smrg # global variables. join(1) would be nice here, but unfortunately 10348ed6f5d66Smrg # isn't a blessed tool. 10349ed6f5d66Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 10350ed6f5d66Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 10351ed6f5d66Smrg export_symbols=$output_objdir/$libname.def 10352ed6f5d66Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 10353ed6f5d66Smrg fi 10354fbc03982Smrg } 10355ed6f5d66Smrg 10356ed6f5d66Smrg libobjs=$output 10357ed6f5d66Smrg # Restore the value of output. 10358ed6f5d66Smrg output=$save_output 10359ed6f5d66Smrg 10360ed6f5d66Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 10361ed6f5d66Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 10362ed6f5d66Smrg test "X$libobjs" = "X " && libobjs= 10363ed6f5d66Smrg fi 10364ed6f5d66Smrg # Expand the library linking commands again to reset the 10365ed6f5d66Smrg # value of $libobjs for piecewise linking. 10366ed6f5d66Smrg 10367ed6f5d66Smrg # Do each of the archive commands. 10368fbc03982Smrg if test yes = "$module" && test -n "$module_cmds"; then 10369ed6f5d66Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 10370ed6f5d66Smrg cmds=$module_expsym_cmds 10371ed6f5d66Smrg else 10372ed6f5d66Smrg cmds=$module_cmds 10373ed6f5d66Smrg fi 10374ed6f5d66Smrg else 10375ed6f5d66Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 10376ed6f5d66Smrg cmds=$archive_expsym_cmds 10377ed6f5d66Smrg else 10378ed6f5d66Smrg cmds=$archive_cmds 10379ed6f5d66Smrg fi 10380ed6f5d66Smrg fi 10381ed6f5d66Smrg fi 10382ed6f5d66Smrg 10383ed6f5d66Smrg if test -n "$delfiles"; then 10384ed6f5d66Smrg # Append the command to remove temporary files to $cmds. 10385ed6f5d66Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 10386ed6f5d66Smrg fi 10387ed6f5d66Smrg 10388ed6f5d66Smrg # Add any objects from preloaded convenience libraries 10389ed6f5d66Smrg if test -n "$dlprefiles"; then 10390fbc03982Smrg gentop=$output_objdir/${outputname}x 10391ed6f5d66Smrg func_append generated " $gentop" 10392ed6f5d66Smrg 10393ed6f5d66Smrg func_extract_archives $gentop $dlprefiles 10394ed6f5d66Smrg func_append libobjs " $func_extract_archives_result" 10395ed6f5d66Smrg test "X$libobjs" = "X " && libobjs= 10396ed6f5d66Smrg fi 10397ed6f5d66Smrg 10398fbc03982Smrg save_ifs=$IFS; IFS='~' 10399ed6f5d66Smrg for cmd in $cmds; do 10400fbc03982Smrg IFS=$sp$nl 10401ed6f5d66Smrg eval cmd=\"$cmd\" 10402fbc03982Smrg IFS=$save_ifs 10403fbc03982Smrg $opt_quiet || { 104043d05230fSmrg func_quote_arg expand,pretty "$cmd" 104053d05230fSmrg eval "func_echo $func_quote_arg_result" 10406ed6f5d66Smrg } 10407ed6f5d66Smrg $opt_dry_run || eval "$cmd" || { 10408ed6f5d66Smrg lt_exit=$? 10409ed6f5d66Smrg 10410ed6f5d66Smrg # Restore the uninstalled library and exit 10411fbc03982Smrg if test relink = "$opt_mode"; then 10412ed6f5d66Smrg ( cd "$output_objdir" && \ 10413ed6f5d66Smrg $RM "${realname}T" && \ 10414ed6f5d66Smrg $MV "${realname}U" "$realname" ) 10415ed6f5d66Smrg fi 10416ed6f5d66Smrg 10417ed6f5d66Smrg exit $lt_exit 10418ed6f5d66Smrg } 10419ed6f5d66Smrg done 10420fbc03982Smrg IFS=$save_ifs 10421ed6f5d66Smrg 10422ed6f5d66Smrg # Restore the uninstalled library and exit 10423fbc03982Smrg if test relink = "$opt_mode"; then 10424ed6f5d66Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 10425ed6f5d66Smrg 10426ed6f5d66Smrg if test -n "$convenience"; then 10427ed6f5d66Smrg if test -z "$whole_archive_flag_spec"; then 10428ed6f5d66Smrg func_show_eval '${RM}r "$gentop"' 10429ed6f5d66Smrg fi 10430ed6f5d66Smrg fi 10431ed6f5d66Smrg 10432ed6f5d66Smrg exit $EXIT_SUCCESS 10433ed6f5d66Smrg fi 10434ed6f5d66Smrg 10435ed6f5d66Smrg # Create links to the real library. 10436ed6f5d66Smrg for linkname in $linknames; do 10437ed6f5d66Smrg if test "$realname" != "$linkname"; then 10438ed6f5d66Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 10439ed6f5d66Smrg fi 10440ed6f5d66Smrg done 10441ed6f5d66Smrg 10442ed6f5d66Smrg # If -module or -export-dynamic was specified, set the dlname. 10443fbc03982Smrg if test yes = "$module" || test yes = "$export_dynamic"; then 10444ed6f5d66Smrg # On all known operating systems, these are identical. 10445fbc03982Smrg dlname=$soname 10446ed6f5d66Smrg fi 10447ed6f5d66Smrg fi 10448ed6f5d66Smrg ;; 10449ed6f5d66Smrg 10450ed6f5d66Smrg obj) 10451fbc03982Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 10452fbc03982Smrg func_warning "'-dlopen' is ignored for objects" 10453ed6f5d66Smrg fi 10454ed6f5d66Smrg 10455ed6f5d66Smrg case " $deplibs" in 10456ed6f5d66Smrg *\ -l* | *\ -L*) 10457fbc03982Smrg func_warning "'-l' and '-L' are ignored for objects" ;; 10458ed6f5d66Smrg esac 10459ed6f5d66Smrg 10460ed6f5d66Smrg test -n "$rpath" && \ 10461fbc03982Smrg func_warning "'-rpath' is ignored for objects" 10462ed6f5d66Smrg 10463ed6f5d66Smrg test -n "$xrpath" && \ 10464fbc03982Smrg func_warning "'-R' is ignored for objects" 10465ed6f5d66Smrg 10466ed6f5d66Smrg test -n "$vinfo" && \ 10467fbc03982Smrg func_warning "'-version-info' is ignored for objects" 10468ed6f5d66Smrg 10469ed6f5d66Smrg test -n "$release" && \ 10470fbc03982Smrg func_warning "'-release' is ignored for objects" 10471ed6f5d66Smrg 10472ed6f5d66Smrg case $output in 10473ed6f5d66Smrg *.lo) 10474ed6f5d66Smrg test -n "$objs$old_deplibs" && \ 10475fbc03982Smrg func_fatal_error "cannot build library object '$output' from non-libtool objects" 10476ed6f5d66Smrg 10477ed6f5d66Smrg libobj=$output 10478ed6f5d66Smrg func_lo2o "$libobj" 10479ed6f5d66Smrg obj=$func_lo2o_result 10480ed6f5d66Smrg ;; 10481ed6f5d66Smrg *) 10482ed6f5d66Smrg libobj= 10483fbc03982Smrg obj=$output 10484ed6f5d66Smrg ;; 10485ed6f5d66Smrg esac 10486ed6f5d66Smrg 10487ed6f5d66Smrg # Delete the old objects. 10488ed6f5d66Smrg $opt_dry_run || $RM $obj $libobj 10489ed6f5d66Smrg 10490ed6f5d66Smrg # Objects from convenience libraries. This assumes 10491ed6f5d66Smrg # single-version convenience libraries. Whenever we create 10492ed6f5d66Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 10493ed6f5d66Smrg # the extraction. 10494ed6f5d66Smrg reload_conv_objs= 10495ed6f5d66Smrg gentop= 10496fbc03982Smrg # if reload_cmds runs $LD directly, get rid of -Wl from 10497fbc03982Smrg # whole_archive_flag_spec and hope we can get by with turning comma 10498fbc03982Smrg # into space. 10499fbc03982Smrg case $reload_cmds in 10500fbc03982Smrg *\$LD[\ \$]*) wl= ;; 10501fbc03982Smrg esac 10502ed6f5d66Smrg if test -n "$convenience"; then 10503ed6f5d66Smrg if test -n "$whole_archive_flag_spec"; then 10504ed6f5d66Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 10505fbc03982Smrg test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 10506fbc03982Smrg reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags 10507ed6f5d66Smrg else 10508fbc03982Smrg gentop=$output_objdir/${obj}x 10509ed6f5d66Smrg func_append generated " $gentop" 10510ed6f5d66Smrg 10511ed6f5d66Smrg func_extract_archives $gentop $convenience 10512ed6f5d66Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 10513ed6f5d66Smrg fi 10514ed6f5d66Smrg fi 10515ed6f5d66Smrg 10516ed6f5d66Smrg # If we're not building shared, we need to use non_pic_objs 10517fbc03982Smrg test yes = "$build_libtool_libs" || libobjs=$non_pic_objects 10518ed6f5d66Smrg 10519ed6f5d66Smrg # Create the old-style object. 10520fbc03982Smrg reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs 10521ed6f5d66Smrg 10522fbc03982Smrg output=$obj 10523ed6f5d66Smrg func_execute_cmds "$reload_cmds" 'exit $?' 10524ed6f5d66Smrg 10525ed6f5d66Smrg # Exit if we aren't doing a library object file. 10526ed6f5d66Smrg if test -z "$libobj"; then 10527ed6f5d66Smrg if test -n "$gentop"; then 10528ed6f5d66Smrg func_show_eval '${RM}r "$gentop"' 10529ed6f5d66Smrg fi 10530ed6f5d66Smrg 10531ed6f5d66Smrg exit $EXIT_SUCCESS 10532ed6f5d66Smrg fi 10533ed6f5d66Smrg 10534fbc03982Smrg test yes = "$build_libtool_libs" || { 10535ed6f5d66Smrg if test -n "$gentop"; then 10536ed6f5d66Smrg func_show_eval '${RM}r "$gentop"' 10537ed6f5d66Smrg fi 10538ed6f5d66Smrg 10539ed6f5d66Smrg # Create an invalid libtool object if no PIC, so that we don't 10540ed6f5d66Smrg # accidentally link it into a program. 10541ed6f5d66Smrg # $show "echo timestamp > $libobj" 10542ed6f5d66Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 10543ed6f5d66Smrg exit $EXIT_SUCCESS 10544fbc03982Smrg } 10545ed6f5d66Smrg 10546fbc03982Smrg if test -n "$pic_flag" || test default != "$pic_mode"; then 10547ed6f5d66Smrg # Only do commands if we really have different PIC objects. 10548ed6f5d66Smrg reload_objs="$libobjs $reload_conv_objs" 10549fbc03982Smrg output=$libobj 10550ed6f5d66Smrg func_execute_cmds "$reload_cmds" 'exit $?' 10551ed6f5d66Smrg fi 10552ed6f5d66Smrg 10553ed6f5d66Smrg if test -n "$gentop"; then 10554ed6f5d66Smrg func_show_eval '${RM}r "$gentop"' 10555ed6f5d66Smrg fi 10556ed6f5d66Smrg 10557ed6f5d66Smrg exit $EXIT_SUCCESS 10558ed6f5d66Smrg ;; 10559ed6f5d66Smrg 10560ed6f5d66Smrg prog) 10561ed6f5d66Smrg case $host in 10562ed6f5d66Smrg *cygwin*) func_stripname '' '.exe' "$output" 10563ed6f5d66Smrg output=$func_stripname_result.exe;; 10564ed6f5d66Smrg esac 10565ed6f5d66Smrg test -n "$vinfo" && \ 10566fbc03982Smrg func_warning "'-version-info' is ignored for programs" 10567ed6f5d66Smrg 10568ed6f5d66Smrg test -n "$release" && \ 10569fbc03982Smrg func_warning "'-release' is ignored for programs" 10570ed6f5d66Smrg 10571fbc03982Smrg $preload \ 10572fbc03982Smrg && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ 10573fbc03982Smrg && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." 10574ed6f5d66Smrg 10575ed6f5d66Smrg case $host in 10576ed6f5d66Smrg *-*-rhapsody* | *-*-darwin1.[012]) 10577ed6f5d66Smrg # On Rhapsody replace the C library is the System framework 10578ed6f5d66Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 10579ed6f5d66Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 10580ed6f5d66Smrg ;; 10581ed6f5d66Smrg esac 10582ed6f5d66Smrg 10583ed6f5d66Smrg case $host in 10584ed6f5d66Smrg *-*-darwin*) 10585ed6f5d66Smrg # Don't allow lazy linking, it breaks C++ global constructors 10586ed6f5d66Smrg # But is supposedly fixed on 10.4 or later (yay!). 10587fbc03982Smrg if test CXX = "$tagname"; then 10588ed6f5d66Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10589ed6f5d66Smrg 10.[0123]) 10590fbc03982Smrg func_append compile_command " $wl-bind_at_load" 10591fbc03982Smrg func_append finalize_command " $wl-bind_at_load" 10592ed6f5d66Smrg ;; 10593ed6f5d66Smrg esac 10594ed6f5d66Smrg fi 10595ed6f5d66Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 10596ed6f5d66Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10597ed6f5d66Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10598ed6f5d66Smrg ;; 10599ed6f5d66Smrg esac 10600ed6f5d66Smrg 10601ed6f5d66Smrg 10602ed6f5d66Smrg # move library search paths that coincide with paths to not yet 10603ed6f5d66Smrg # installed libraries to the beginning of the library search list 10604ed6f5d66Smrg new_libs= 10605ed6f5d66Smrg for path in $notinst_path; do 10606ed6f5d66Smrg case " $new_libs " in 10607ed6f5d66Smrg *" -L$path/$objdir "*) ;; 10608ed6f5d66Smrg *) 10609ed6f5d66Smrg case " $compile_deplibs " in 10610ed6f5d66Smrg *" -L$path/$objdir "*) 10611ed6f5d66Smrg func_append new_libs " -L$path/$objdir" ;; 10612ed6f5d66Smrg esac 10613ed6f5d66Smrg ;; 10614ed6f5d66Smrg esac 10615ed6f5d66Smrg done 10616ed6f5d66Smrg for deplib in $compile_deplibs; do 10617ed6f5d66Smrg case $deplib in 10618ed6f5d66Smrg -L*) 10619ed6f5d66Smrg case " $new_libs " in 10620ed6f5d66Smrg *" $deplib "*) ;; 10621ed6f5d66Smrg *) func_append new_libs " $deplib" ;; 10622ed6f5d66Smrg esac 10623ed6f5d66Smrg ;; 10624ed6f5d66Smrg *) func_append new_libs " $deplib" ;; 10625ed6f5d66Smrg esac 10626ed6f5d66Smrg done 10627fbc03982Smrg compile_deplibs=$new_libs 10628ed6f5d66Smrg 10629ed6f5d66Smrg 10630ed6f5d66Smrg func_append compile_command " $compile_deplibs" 10631ed6f5d66Smrg func_append finalize_command " $finalize_deplibs" 10632ed6f5d66Smrg 10633ed6f5d66Smrg if test -n "$rpath$xrpath"; then 10634ed6f5d66Smrg # If the user specified any rpath flags, then add them. 10635ed6f5d66Smrg for libdir in $rpath $xrpath; do 10636ed6f5d66Smrg # This is the magic to use -rpath. 10637ed6f5d66Smrg case "$finalize_rpath " in 10638ed6f5d66Smrg *" $libdir "*) ;; 10639ed6f5d66Smrg *) func_append finalize_rpath " $libdir" ;; 10640ed6f5d66Smrg esac 10641ed6f5d66Smrg done 10642ed6f5d66Smrg fi 10643ed6f5d66Smrg 10644ed6f5d66Smrg # Now hardcode the library paths 10645ed6f5d66Smrg rpath= 10646ed6f5d66Smrg hardcode_libdirs= 10647ed6f5d66Smrg for libdir in $compile_rpath $finalize_rpath; do 10648ed6f5d66Smrg if test -n "$hardcode_libdir_flag_spec"; then 10649ed6f5d66Smrg if test -n "$hardcode_libdir_separator"; then 10650ed6f5d66Smrg if test -z "$hardcode_libdirs"; then 10651fbc03982Smrg hardcode_libdirs=$libdir 10652ed6f5d66Smrg else 10653ed6f5d66Smrg # Just accumulate the unique libdirs. 10654ed6f5d66Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10655ed6f5d66Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10656ed6f5d66Smrg ;; 10657ed6f5d66Smrg *) 10658ed6f5d66Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10659ed6f5d66Smrg ;; 10660ed6f5d66Smrg esac 10661ed6f5d66Smrg fi 10662ed6f5d66Smrg else 10663ed6f5d66Smrg eval flag=\"$hardcode_libdir_flag_spec\" 10664ed6f5d66Smrg func_append rpath " $flag" 10665ed6f5d66Smrg fi 10666ed6f5d66Smrg elif test -n "$runpath_var"; then 10667ed6f5d66Smrg case "$perm_rpath " in 10668ed6f5d66Smrg *" $libdir "*) ;; 10669ed6f5d66Smrg *) func_append perm_rpath " $libdir" ;; 10670ed6f5d66Smrg esac 10671ed6f5d66Smrg fi 10672ed6f5d66Smrg case $host in 10673a3680546Smrg *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-cegcc*) 10674fbc03982Smrg testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` 10675ed6f5d66Smrg case :$dllsearchpath: in 10676ed6f5d66Smrg *":$libdir:"*) ;; 10677ed6f5d66Smrg ::) dllsearchpath=$libdir;; 10678ed6f5d66Smrg *) func_append dllsearchpath ":$libdir";; 10679ed6f5d66Smrg esac 10680ed6f5d66Smrg case :$dllsearchpath: in 10681ed6f5d66Smrg *":$testbindir:"*) ;; 10682ed6f5d66Smrg ::) dllsearchpath=$testbindir;; 10683ed6f5d66Smrg *) func_append dllsearchpath ":$testbindir";; 10684ed6f5d66Smrg esac 10685ed6f5d66Smrg ;; 10686ed6f5d66Smrg esac 10687ed6f5d66Smrg done 10688ed6f5d66Smrg # Substitute the hardcoded libdirs into the rpath. 10689ed6f5d66Smrg if test -n "$hardcode_libdir_separator" && 10690ed6f5d66Smrg test -n "$hardcode_libdirs"; then 10691fbc03982Smrg libdir=$hardcode_libdirs 10692ed6f5d66Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 10693ed6f5d66Smrg fi 10694fbc03982Smrg compile_rpath=$rpath 10695ed6f5d66Smrg 10696ed6f5d66Smrg rpath= 10697ed6f5d66Smrg hardcode_libdirs= 10698ed6f5d66Smrg for libdir in $finalize_rpath; do 10699ed6f5d66Smrg if test -n "$hardcode_libdir_flag_spec"; then 10700ed6f5d66Smrg if test -n "$hardcode_libdir_separator"; then 10701ed6f5d66Smrg if test -z "$hardcode_libdirs"; then 10702fbc03982Smrg hardcode_libdirs=$libdir 10703ed6f5d66Smrg else 10704ed6f5d66Smrg # Just accumulate the unique libdirs. 10705ed6f5d66Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10706ed6f5d66Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10707ed6f5d66Smrg ;; 10708ed6f5d66Smrg *) 10709ed6f5d66Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10710ed6f5d66Smrg ;; 10711ed6f5d66Smrg esac 10712ed6f5d66Smrg fi 10713ed6f5d66Smrg else 10714ed6f5d66Smrg eval flag=\"$hardcode_libdir_flag_spec\" 10715ed6f5d66Smrg func_append rpath " $flag" 10716ed6f5d66Smrg fi 10717ed6f5d66Smrg elif test -n "$runpath_var"; then 10718ed6f5d66Smrg case "$finalize_perm_rpath " in 10719ed6f5d66Smrg *" $libdir "*) ;; 10720ed6f5d66Smrg *) func_append finalize_perm_rpath " $libdir" ;; 10721ed6f5d66Smrg esac 10722ed6f5d66Smrg fi 10723ed6f5d66Smrg done 10724ed6f5d66Smrg # Substitute the hardcoded libdirs into the rpath. 10725ed6f5d66Smrg if test -n "$hardcode_libdir_separator" && 10726ed6f5d66Smrg test -n "$hardcode_libdirs"; then 10727fbc03982Smrg libdir=$hardcode_libdirs 10728ed6f5d66Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 10729ed6f5d66Smrg fi 10730fbc03982Smrg finalize_rpath=$rpath 10731ed6f5d66Smrg 10732fbc03982Smrg if test -n "$libobjs" && test yes = "$build_old_libs"; then 10733ed6f5d66Smrg # Transform all the library objects into standard objects. 10734ed6f5d66Smrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10735ed6f5d66Smrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10736ed6f5d66Smrg fi 10737ed6f5d66Smrg 10738fbc03982Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" false 10739ed6f5d66Smrg 10740ed6f5d66Smrg # template prelinking step 10741ed6f5d66Smrg if test -n "$prelink_cmds"; then 10742ed6f5d66Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 10743ed6f5d66Smrg fi 10744ed6f5d66Smrg 10745fbc03982Smrg wrappers_required=: 10746ed6f5d66Smrg case $host in 10747ed6f5d66Smrg *cegcc* | *mingw32ce*) 10748ed6f5d66Smrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 10749fbc03982Smrg wrappers_required=false 10750ed6f5d66Smrg ;; 10751a3680546Smrg *cygwin* | *mingw* | *windows* ) 10752fbc03982Smrg test yes = "$build_libtool_libs" || wrappers_required=false 10753ed6f5d66Smrg ;; 10754ed6f5d66Smrg *) 10755fbc03982Smrg if test no = "$need_relink" || test yes != "$build_libtool_libs"; then 10756fbc03982Smrg wrappers_required=false 10757ed6f5d66Smrg fi 10758ed6f5d66Smrg ;; 10759ed6f5d66Smrg esac 10760fbc03982Smrg $wrappers_required || { 10761ed6f5d66Smrg # Replace the output file specification. 10762ed6f5d66Smrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10763fbc03982Smrg link_command=$compile_command$compile_rpath 10764ed6f5d66Smrg 10765ed6f5d66Smrg # We have no uninstalled library dependencies, so finalize right now. 10766ed6f5d66Smrg exit_status=0 10767ed6f5d66Smrg func_show_eval "$link_command" 'exit_status=$?' 10768ed6f5d66Smrg 10769ed6f5d66Smrg if test -n "$postlink_cmds"; then 10770ed6f5d66Smrg func_to_tool_file "$output" 10771ed6f5d66Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10772ed6f5d66Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 10773ed6f5d66Smrg fi 10774ed6f5d66Smrg 10775ed6f5d66Smrg # Delete the generated files. 10776fbc03982Smrg if test -f "$output_objdir/${outputname}S.$objext"; then 10777fbc03982Smrg func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' 10778ed6f5d66Smrg fi 10779ed6f5d66Smrg 10780ed6f5d66Smrg exit $exit_status 10781fbc03982Smrg } 10782ed6f5d66Smrg 10783ed6f5d66Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 10784ed6f5d66Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 10785ed6f5d66Smrg fi 10786ed6f5d66Smrg if test -n "$finalize_shlibpath"; then 10787ed6f5d66Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 10788ed6f5d66Smrg fi 10789ed6f5d66Smrg 10790ed6f5d66Smrg compile_var= 10791ed6f5d66Smrg finalize_var= 10792ed6f5d66Smrg if test -n "$runpath_var"; then 10793ed6f5d66Smrg if test -n "$perm_rpath"; then 10794ed6f5d66Smrg # We should set the runpath_var. 10795ed6f5d66Smrg rpath= 10796ed6f5d66Smrg for dir in $perm_rpath; do 10797ed6f5d66Smrg func_append rpath "$dir:" 10798ed6f5d66Smrg done 10799ed6f5d66Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 10800ed6f5d66Smrg fi 10801ed6f5d66Smrg if test -n "$finalize_perm_rpath"; then 10802ed6f5d66Smrg # We should set the runpath_var. 10803ed6f5d66Smrg rpath= 10804ed6f5d66Smrg for dir in $finalize_perm_rpath; do 10805ed6f5d66Smrg func_append rpath "$dir:" 10806ed6f5d66Smrg done 10807ed6f5d66Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 10808ed6f5d66Smrg fi 10809ed6f5d66Smrg fi 10810ed6f5d66Smrg 10811fbc03982Smrg if test yes = "$no_install"; then 10812ed6f5d66Smrg # We don't need to create a wrapper script. 10813fbc03982Smrg link_command=$compile_var$compile_command$compile_rpath 10814ed6f5d66Smrg # Replace the output file specification. 10815ed6f5d66Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10816ed6f5d66Smrg # Delete the old output file. 10817ed6f5d66Smrg $opt_dry_run || $RM $output 10818ed6f5d66Smrg # Link the executable and exit 10819ed6f5d66Smrg func_show_eval "$link_command" 'exit $?' 10820ed6f5d66Smrg 10821ed6f5d66Smrg if test -n "$postlink_cmds"; then 10822ed6f5d66Smrg func_to_tool_file "$output" 10823ed6f5d66Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10824ed6f5d66Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 10825ed6f5d66Smrg fi 10826ed6f5d66Smrg 10827ed6f5d66Smrg exit $EXIT_SUCCESS 10828ed6f5d66Smrg fi 10829ed6f5d66Smrg 10830fbc03982Smrg case $hardcode_action,$fast_install in 10831fbc03982Smrg relink,*) 10832fbc03982Smrg # Fast installation is not supported 10833fbc03982Smrg link_command=$compile_var$compile_command$compile_rpath 10834fbc03982Smrg relink_command=$finalize_var$finalize_command$finalize_rpath 10835ed6f5d66Smrg 10836fbc03982Smrg func_warning "this platform does not like uninstalled shared libraries" 10837fbc03982Smrg func_warning "'$output' will be relinked during installation" 10838fbc03982Smrg ;; 10839fbc03982Smrg *,yes) 10840fbc03982Smrg link_command=$finalize_var$compile_command$finalize_rpath 10841fbc03982Smrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 10842fbc03982Smrg ;; 10843fbc03982Smrg *,no) 10844fbc03982Smrg link_command=$compile_var$compile_command$compile_rpath 10845fbc03982Smrg relink_command=$finalize_var$finalize_command$finalize_rpath 10846fbc03982Smrg ;; 10847fbc03982Smrg *,needless) 10848fbc03982Smrg link_command=$finalize_var$compile_command$finalize_rpath 10849fbc03982Smrg relink_command= 10850fbc03982Smrg ;; 10851fbc03982Smrg esac 10852ed6f5d66Smrg 10853ed6f5d66Smrg # Replace the output file specification. 10854ed6f5d66Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 10855ed6f5d66Smrg 10856ed6f5d66Smrg # Delete the old output files. 10857ed6f5d66Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 10858ed6f5d66Smrg 10859ed6f5d66Smrg func_show_eval "$link_command" 'exit $?' 10860ed6f5d66Smrg 10861ed6f5d66Smrg if test -n "$postlink_cmds"; then 10862ed6f5d66Smrg func_to_tool_file "$output_objdir/$outputname" 10863ed6f5d66Smrg 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'` 10864ed6f5d66Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 10865ed6f5d66Smrg fi 10866ed6f5d66Smrg 10867ed6f5d66Smrg # Now create the wrapper script. 10868ed6f5d66Smrg func_verbose "creating $output" 10869ed6f5d66Smrg 10870ed6f5d66Smrg # Quote the relink command for shipping. 10871ed6f5d66Smrg if test -n "$relink_command"; then 10872ed6f5d66Smrg # Preserve any variables that may affect compiler behavior 10873ed6f5d66Smrg for var in $variables_saved_for_relink; do 10874ed6f5d66Smrg if eval test -z \"\${$var+set}\"; then 10875ed6f5d66Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 10876ed6f5d66Smrg elif eval var_value=\$$var; test -z "$var_value"; then 10877ed6f5d66Smrg relink_command="$var=; export $var; $relink_command" 10878ed6f5d66Smrg else 108793d05230fSmrg func_quote_arg pretty "$var_value" 108803d05230fSmrg relink_command="$var=$func_quote_arg_result; export $var; $relink_command" 10881ed6f5d66Smrg fi 10882ed6f5d66Smrg done 108833d05230fSmrg func_quote eval cd "`pwd`" 108843d05230fSmrg func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)" 108853d05230fSmrg relink_command=$func_quote_arg_unquoted_result 10886ed6f5d66Smrg fi 10887ed6f5d66Smrg 10888ed6f5d66Smrg # Only actually do things if not in dry run mode. 10889ed6f5d66Smrg $opt_dry_run || { 10890ed6f5d66Smrg # win32 will think the script is a binary if it has 10891ed6f5d66Smrg # a .exe suffix, so we strip it off here. 10892ed6f5d66Smrg case $output in 10893ed6f5d66Smrg *.exe) func_stripname '' '.exe' "$output" 10894ed6f5d66Smrg output=$func_stripname_result ;; 10895ed6f5d66Smrg esac 10896ed6f5d66Smrg # test for cygwin because mv fails w/o .exe extensions 10897ed6f5d66Smrg case $host in 10898ed6f5d66Smrg *cygwin*) 10899ed6f5d66Smrg exeext=.exe 10900ed6f5d66Smrg func_stripname '' '.exe' "$outputname" 10901ed6f5d66Smrg outputname=$func_stripname_result ;; 10902ed6f5d66Smrg *) exeext= ;; 10903ed6f5d66Smrg esac 10904ed6f5d66Smrg case $host in 10905a3680546Smrg *cygwin* | *mingw* | windows* ) 10906ed6f5d66Smrg func_dirname_and_basename "$output" "" "." 10907ed6f5d66Smrg output_name=$func_basename_result 10908ed6f5d66Smrg output_path=$func_dirname_result 10909fbc03982Smrg cwrappersource=$output_path/$objdir/lt-$output_name.c 10910fbc03982Smrg cwrapper=$output_path/$output_name.exe 10911ed6f5d66Smrg $RM $cwrappersource $cwrapper 10912ed6f5d66Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 10913ed6f5d66Smrg 10914ed6f5d66Smrg func_emit_cwrapperexe_src > $cwrappersource 10915ed6f5d66Smrg 10916ed6f5d66Smrg # The wrapper executable is built using the $host compiler, 10917ed6f5d66Smrg # because it contains $host paths and files. If cross- 10918ed6f5d66Smrg # compiling, it, like the target executable, must be 10919ed6f5d66Smrg # executed on the $host or under an emulation environment. 10920ed6f5d66Smrg $opt_dry_run || { 10921ed6f5d66Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 10922ed6f5d66Smrg $STRIP $cwrapper 10923ed6f5d66Smrg } 10924ed6f5d66Smrg 10925ed6f5d66Smrg # Now, create the wrapper script for func_source use: 10926ed6f5d66Smrg func_ltwrapper_scriptname $cwrapper 10927ed6f5d66Smrg $RM $func_ltwrapper_scriptname_result 10928ed6f5d66Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 10929ed6f5d66Smrg $opt_dry_run || { 10930ed6f5d66Smrg # note: this script will not be executed, so do not chmod. 10931fbc03982Smrg if test "x$build" = "x$host"; then 10932ed6f5d66Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 10933ed6f5d66Smrg else 10934ed6f5d66Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 10935ed6f5d66Smrg fi 10936ed6f5d66Smrg } 10937ed6f5d66Smrg ;; 10938ed6f5d66Smrg * ) 10939ed6f5d66Smrg $RM $output 10940ed6f5d66Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 10941ed6f5d66Smrg 10942ed6f5d66Smrg func_emit_wrapper no > $output 10943ed6f5d66Smrg chmod +x $output 10944ed6f5d66Smrg ;; 10945ed6f5d66Smrg esac 10946ed6f5d66Smrg } 10947ed6f5d66Smrg exit $EXIT_SUCCESS 10948ed6f5d66Smrg ;; 10949ed6f5d66Smrg esac 10950ed6f5d66Smrg 10951ed6f5d66Smrg # See if we need to build an old-fashioned archive. 10952ed6f5d66Smrg for oldlib in $oldlibs; do 10953ed6f5d66Smrg 10954fbc03982Smrg case $build_libtool_libs in 10955fbc03982Smrg convenience) 10956fbc03982Smrg oldobjs="$libobjs_save $symfileobj" 10957fbc03982Smrg addlibs=$convenience 10958ed6f5d66Smrg build_libtool_libs=no 10959fbc03982Smrg ;; 10960fbc03982Smrg module) 10961fbc03982Smrg oldobjs=$libobjs_save 10962fbc03982Smrg addlibs=$old_convenience 10963fbc03982Smrg build_libtool_libs=no 10964fbc03982Smrg ;; 10965fbc03982Smrg *) 10966ed6f5d66Smrg oldobjs="$old_deplibs $non_pic_objects" 10967fbc03982Smrg $preload && test -f "$symfileobj" \ 10968fbc03982Smrg && func_append oldobjs " $symfileobj" 10969fbc03982Smrg addlibs=$old_convenience 10970fbc03982Smrg ;; 10971fbc03982Smrg esac 10972ed6f5d66Smrg 10973ed6f5d66Smrg if test -n "$addlibs"; then 10974fbc03982Smrg gentop=$output_objdir/${outputname}x 10975ed6f5d66Smrg func_append generated " $gentop" 10976ed6f5d66Smrg 10977ed6f5d66Smrg func_extract_archives $gentop $addlibs 10978ed6f5d66Smrg func_append oldobjs " $func_extract_archives_result" 10979ed6f5d66Smrg fi 10980ed6f5d66Smrg 10981ed6f5d66Smrg # Do each command in the archive commands. 10982fbc03982Smrg if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then 10983ed6f5d66Smrg cmds=$old_archive_from_new_cmds 10984ed6f5d66Smrg else 10985ed6f5d66Smrg 10986ed6f5d66Smrg # Add any objects from preloaded convenience libraries 10987ed6f5d66Smrg if test -n "$dlprefiles"; then 10988fbc03982Smrg gentop=$output_objdir/${outputname}x 10989ed6f5d66Smrg func_append generated " $gentop" 10990ed6f5d66Smrg 10991ed6f5d66Smrg func_extract_archives $gentop $dlprefiles 10992ed6f5d66Smrg func_append oldobjs " $func_extract_archives_result" 10993ed6f5d66Smrg fi 10994ed6f5d66Smrg 10995ed6f5d66Smrg # POSIX demands no paths to be encoded in archives. We have 10996ed6f5d66Smrg # to avoid creating archives with duplicate basenames if we 10997ed6f5d66Smrg # might have to extract them afterwards, e.g., when creating a 10998ed6f5d66Smrg # static archive out of a convenience library, or when linking 10999ed6f5d66Smrg # the entirety of a libtool archive into another (currently 11000ed6f5d66Smrg # not supported by libtool). 11001ed6f5d66Smrg if (for obj in $oldobjs 11002ed6f5d66Smrg do 11003ed6f5d66Smrg func_basename "$obj" 11004ed6f5d66Smrg $ECHO "$func_basename_result" 11005ed6f5d66Smrg done | sort | sort -uc >/dev/null 2>&1); then 11006ed6f5d66Smrg : 11007ed6f5d66Smrg else 11008ed6f5d66Smrg echo "copying selected object files to avoid basename conflicts..." 11009fbc03982Smrg gentop=$output_objdir/${outputname}x 11010ed6f5d66Smrg func_append generated " $gentop" 11011ed6f5d66Smrg func_mkdir_p "$gentop" 11012ed6f5d66Smrg save_oldobjs=$oldobjs 11013ed6f5d66Smrg oldobjs= 11014ed6f5d66Smrg counter=1 11015ed6f5d66Smrg for obj in $save_oldobjs 11016ed6f5d66Smrg do 11017ed6f5d66Smrg func_basename "$obj" 11018fbc03982Smrg objbase=$func_basename_result 11019ed6f5d66Smrg case " $oldobjs " in 11020ed6f5d66Smrg " ") oldobjs=$obj ;; 11021ed6f5d66Smrg *[\ /]"$objbase "*) 11022ed6f5d66Smrg while :; do 11023ed6f5d66Smrg # Make sure we don't pick an alternate name that also 11024ed6f5d66Smrg # overlaps. 11025ed6f5d66Smrg newobj=lt$counter-$objbase 11026ed6f5d66Smrg func_arith $counter + 1 11027ed6f5d66Smrg counter=$func_arith_result 11028ed6f5d66Smrg case " $oldobjs " in 11029ed6f5d66Smrg *[\ /]"$newobj "*) ;; 11030ed6f5d66Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 11031ed6f5d66Smrg esac 11032ed6f5d66Smrg done 11033ed6f5d66Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 11034ed6f5d66Smrg func_append oldobjs " $gentop/$newobj" 11035ed6f5d66Smrg ;; 11036ed6f5d66Smrg *) func_append oldobjs " $obj" ;; 11037ed6f5d66Smrg esac 11038ed6f5d66Smrg done 11039ed6f5d66Smrg fi 11040ed6f5d66Smrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 11041ed6f5d66Smrg tool_oldlib=$func_to_tool_file_result 11042ed6f5d66Smrg eval cmds=\"$old_archive_cmds\" 11043ed6f5d66Smrg 11044ed6f5d66Smrg func_len " $cmds" 11045ed6f5d66Smrg len=$func_len_result 11046ed6f5d66Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 11047ed6f5d66Smrg cmds=$old_archive_cmds 11048ed6f5d66Smrg elif test -n "$archiver_list_spec"; then 11049ed6f5d66Smrg func_verbose "using command file archive linking..." 11050ed6f5d66Smrg for obj in $oldobjs 11051ed6f5d66Smrg do 11052ed6f5d66Smrg func_to_tool_file "$obj" 11053ed6f5d66Smrg $ECHO "$func_to_tool_file_result" 11054ed6f5d66Smrg done > $output_objdir/$libname.libcmd 11055ed6f5d66Smrg func_to_tool_file "$output_objdir/$libname.libcmd" 11056ed6f5d66Smrg oldobjs=" $archiver_list_spec$func_to_tool_file_result" 11057ed6f5d66Smrg cmds=$old_archive_cmds 11058ed6f5d66Smrg else 11059ed6f5d66Smrg # the command line is too long to link in one step, link in parts 11060ed6f5d66Smrg func_verbose "using piecewise archive linking..." 11061ed6f5d66Smrg save_RANLIB=$RANLIB 11062ed6f5d66Smrg RANLIB=: 11063ed6f5d66Smrg objlist= 11064ed6f5d66Smrg concat_cmds= 11065ed6f5d66Smrg save_oldobjs=$oldobjs 11066ed6f5d66Smrg oldobjs= 11067ed6f5d66Smrg # Is there a better way of finding the last object in the list? 11068ed6f5d66Smrg for obj in $save_oldobjs 11069ed6f5d66Smrg do 11070ed6f5d66Smrg last_oldobj=$obj 11071ed6f5d66Smrg done 11072ed6f5d66Smrg eval test_cmds=\"$old_archive_cmds\" 11073ed6f5d66Smrg func_len " $test_cmds" 11074ed6f5d66Smrg len0=$func_len_result 11075ed6f5d66Smrg len=$len0 11076ed6f5d66Smrg for obj in $save_oldobjs 11077ed6f5d66Smrg do 11078ed6f5d66Smrg func_len " $obj" 11079ed6f5d66Smrg func_arith $len + $func_len_result 11080ed6f5d66Smrg len=$func_arith_result 11081ed6f5d66Smrg func_append objlist " $obj" 11082ed6f5d66Smrg if test "$len" -lt "$max_cmd_len"; then 11083ed6f5d66Smrg : 11084ed6f5d66Smrg else 11085ed6f5d66Smrg # the above command should be used before it gets too long 11086ed6f5d66Smrg oldobjs=$objlist 11087fbc03982Smrg if test "$obj" = "$last_oldobj"; then 11088ed6f5d66Smrg RANLIB=$save_RANLIB 11089ed6f5d66Smrg fi 11090ed6f5d66Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 11091fbc03982Smrg eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" 11092ed6f5d66Smrg objlist= 11093ed6f5d66Smrg len=$len0 11094ed6f5d66Smrg fi 11095ed6f5d66Smrg done 11096ed6f5d66Smrg RANLIB=$save_RANLIB 11097ed6f5d66Smrg oldobjs=$objlist 11098fbc03982Smrg if test -z "$oldobjs"; then 11099ed6f5d66Smrg eval cmds=\"\$concat_cmds\" 11100ed6f5d66Smrg else 11101ed6f5d66Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 11102ed6f5d66Smrg fi 11103ed6f5d66Smrg fi 11104ed6f5d66Smrg fi 11105ed6f5d66Smrg func_execute_cmds "$cmds" 'exit $?' 11106ed6f5d66Smrg done 11107ed6f5d66Smrg 11108ed6f5d66Smrg test -n "$generated" && \ 11109ed6f5d66Smrg func_show_eval "${RM}r$generated" 11110ed6f5d66Smrg 11111ed6f5d66Smrg # Now create the libtool archive. 11112ed6f5d66Smrg case $output in 11113ed6f5d66Smrg *.la) 11114ed6f5d66Smrg old_library= 11115fbc03982Smrg test yes = "$build_old_libs" && old_library=$libname.$libext 11116ed6f5d66Smrg func_verbose "creating $output" 11117ed6f5d66Smrg 11118ed6f5d66Smrg # Preserve any variables that may affect compiler behavior 11119ed6f5d66Smrg for var in $variables_saved_for_relink; do 11120ed6f5d66Smrg if eval test -z \"\${$var+set}\"; then 11121ed6f5d66Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 11122ed6f5d66Smrg elif eval var_value=\$$var; test -z "$var_value"; then 11123ed6f5d66Smrg relink_command="$var=; export $var; $relink_command" 11124ed6f5d66Smrg else 111253d05230fSmrg func_quote_arg pretty,unquoted "$var_value" 111263d05230fSmrg relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command" 11127ed6f5d66Smrg fi 11128ed6f5d66Smrg done 11129ed6f5d66Smrg # Quote the link command for shipping. 111303d05230fSmrg func_quote eval cd "`pwd`" 111313d05230fSmrg relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 111323d05230fSmrg func_quote_arg pretty,unquoted "$relink_command" 111333d05230fSmrg relink_command=$func_quote_arg_unquoted_result 11134fbc03982Smrg if test yes = "$hardcode_automatic"; then 11135ed6f5d66Smrg relink_command= 11136ed6f5d66Smrg fi 11137ed6f5d66Smrg 11138ed6f5d66Smrg # Only create the output if not a dry run. 11139ed6f5d66Smrg $opt_dry_run || { 11140ed6f5d66Smrg for installed in no yes; do 11141fbc03982Smrg if test yes = "$installed"; then 11142ed6f5d66Smrg if test -z "$install_libdir"; then 11143ed6f5d66Smrg break 11144ed6f5d66Smrg fi 11145fbc03982Smrg output=$output_objdir/${outputname}i 11146ed6f5d66Smrg # Replace all uninstalled libtool libraries with the installed ones 11147ed6f5d66Smrg newdependency_libs= 11148ed6f5d66Smrg for deplib in $dependency_libs; do 11149ed6f5d66Smrg case $deplib in 11150ed6f5d66Smrg *.la) 11151ed6f5d66Smrg func_basename "$deplib" 11152fbc03982Smrg name=$func_basename_result 11153ed6f5d66Smrg func_resolve_sysroot "$deplib" 11154fbc03982Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 11155ed6f5d66Smrg test -z "$libdir" && \ 11156fbc03982Smrg func_fatal_error "'$deplib' is not a valid libtool archive" 11157ed6f5d66Smrg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 11158ed6f5d66Smrg ;; 11159ed6f5d66Smrg -L*) 11160ed6f5d66Smrg func_stripname -L '' "$deplib" 11161ed6f5d66Smrg func_replace_sysroot "$func_stripname_result" 11162ed6f5d66Smrg func_append newdependency_libs " -L$func_replace_sysroot_result" 11163ed6f5d66Smrg ;; 11164ed6f5d66Smrg -R*) 11165ed6f5d66Smrg func_stripname -R '' "$deplib" 11166ed6f5d66Smrg func_replace_sysroot "$func_stripname_result" 11167ed6f5d66Smrg func_append newdependency_libs " -R$func_replace_sysroot_result" 11168ed6f5d66Smrg ;; 11169ed6f5d66Smrg *) func_append newdependency_libs " $deplib" ;; 11170ed6f5d66Smrg esac 11171ed6f5d66Smrg done 11172fbc03982Smrg dependency_libs=$newdependency_libs 11173ed6f5d66Smrg newdlfiles= 11174ed6f5d66Smrg 11175ed6f5d66Smrg for lib in $dlfiles; do 11176ed6f5d66Smrg case $lib in 11177ed6f5d66Smrg *.la) 11178ed6f5d66Smrg func_basename "$lib" 11179fbc03982Smrg name=$func_basename_result 11180fbc03982Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 11181ed6f5d66Smrg test -z "$libdir" && \ 11182fbc03982Smrg func_fatal_error "'$lib' is not a valid libtool archive" 11183ed6f5d66Smrg func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 11184ed6f5d66Smrg ;; 11185ed6f5d66Smrg *) func_append newdlfiles " $lib" ;; 11186ed6f5d66Smrg esac 11187ed6f5d66Smrg done 11188fbc03982Smrg dlfiles=$newdlfiles 11189ed6f5d66Smrg newdlprefiles= 11190ed6f5d66Smrg for lib in $dlprefiles; do 11191ed6f5d66Smrg case $lib in 11192ed6f5d66Smrg *.la) 11193ed6f5d66Smrg # Only pass preopened files to the pseudo-archive (for 11194ed6f5d66Smrg # eventual linking with the app. that links it) if we 11195ed6f5d66Smrg # didn't already link the preopened objects directly into 11196ed6f5d66Smrg # the library: 11197ed6f5d66Smrg func_basename "$lib" 11198fbc03982Smrg name=$func_basename_result 11199fbc03982Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 11200ed6f5d66Smrg test -z "$libdir" && \ 11201fbc03982Smrg func_fatal_error "'$lib' is not a valid libtool archive" 11202ed6f5d66Smrg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 11203ed6f5d66Smrg ;; 11204ed6f5d66Smrg esac 11205ed6f5d66Smrg done 11206fbc03982Smrg dlprefiles=$newdlprefiles 11207ed6f5d66Smrg else 11208ed6f5d66Smrg newdlfiles= 11209ed6f5d66Smrg for lib in $dlfiles; do 11210ed6f5d66Smrg case $lib in 11211fbc03982Smrg [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 11212ed6f5d66Smrg *) abs=`pwd`"/$lib" ;; 11213ed6f5d66Smrg esac 11214ed6f5d66Smrg func_append newdlfiles " $abs" 11215ed6f5d66Smrg done 11216fbc03982Smrg dlfiles=$newdlfiles 11217ed6f5d66Smrg newdlprefiles= 11218ed6f5d66Smrg for lib in $dlprefiles; do 11219ed6f5d66Smrg case $lib in 11220fbc03982Smrg [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 11221ed6f5d66Smrg *) abs=`pwd`"/$lib" ;; 11222ed6f5d66Smrg esac 11223ed6f5d66Smrg func_append newdlprefiles " $abs" 11224ed6f5d66Smrg done 11225fbc03982Smrg dlprefiles=$newdlprefiles 11226ed6f5d66Smrg fi 11227ed6f5d66Smrg $RM $output 11228ed6f5d66Smrg # place dlname in correct position for cygwin 11229ed6f5d66Smrg # In fact, it would be nice if we could use this code for all target 11230ed6f5d66Smrg # systems that can't hard-code library paths into their executables 11231ed6f5d66Smrg # and that have no shared library path variable independent of PATH, 11232ed6f5d66Smrg # but it turns out we can't easily determine that from inspecting 11233ed6f5d66Smrg # libtool variables, so we have to hard-code the OSs to which it 11234ed6f5d66Smrg # applies here; at the moment, that means platforms that use the PE 11235ed6f5d66Smrg # object format with DLL files. See the long comment at the top of 11236ed6f5d66Smrg # tests/bindir.at for full details. 11237ed6f5d66Smrg tdlname=$dlname 11238ed6f5d66Smrg case $host,$output,$installed,$module,$dlname in 11239a3680546Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *windows*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 11240ed6f5d66Smrg # If a -bindir argument was supplied, place the dll there. 11241fbc03982Smrg if test -n "$bindir"; then 11242ed6f5d66Smrg func_relative_path "$install_libdir" "$bindir" 11243fbc03982Smrg tdlname=$func_relative_path_result/$dlname 11244ed6f5d66Smrg else 11245ed6f5d66Smrg # Otherwise fall back on heuristic. 11246ed6f5d66Smrg tdlname=../bin/$dlname 11247ed6f5d66Smrg fi 11248ed6f5d66Smrg ;; 11249ed6f5d66Smrg esac 11250ed6f5d66Smrg $ECHO > $output "\ 11251ed6f5d66Smrg# $outputname - a libtool library file 11252fbc03982Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 11253ed6f5d66Smrg# 11254ed6f5d66Smrg# Please DO NOT delete this file! 11255ed6f5d66Smrg# It is necessary for linking the library. 11256ed6f5d66Smrg 11257ed6f5d66Smrg# The name that we can dlopen(3). 11258ed6f5d66Smrgdlname='$tdlname' 11259ed6f5d66Smrg 11260ed6f5d66Smrg# Names of this library. 11261ed6f5d66Smrglibrary_names='$library_names' 11262ed6f5d66Smrg 11263ed6f5d66Smrg# The name of the static archive. 11264ed6f5d66Smrgold_library='$old_library' 11265ed6f5d66Smrg 11266fbc03982Smrg# Linker flags that cannot go in dependency_libs. 11267ed6f5d66Smrginherited_linker_flags='$new_inherited_linker_flags' 11268ed6f5d66Smrg 11269ed6f5d66Smrg# Libraries that this one depends upon. 11270ed6f5d66Smrgdependency_libs='$dependency_libs' 11271ed6f5d66Smrg 11272ed6f5d66Smrg# Names of additional weak libraries provided by this library 11273ed6f5d66Smrgweak_library_names='$weak_libs' 11274ed6f5d66Smrg 11275ed6f5d66Smrg# Version information for $libname. 11276ed6f5d66Smrgcurrent=$current 11277ed6f5d66Smrgage=$age 11278ed6f5d66Smrgrevision=$revision 11279ed6f5d66Smrg 11280ed6f5d66Smrg# Is this an already installed library? 11281ed6f5d66Smrginstalled=$installed 11282ed6f5d66Smrg 11283ed6f5d66Smrg# Should we warn about portability when linking against -modules? 11284ed6f5d66Smrgshouldnotlink=$module 11285ed6f5d66Smrg 11286ed6f5d66Smrg# Files to dlopen/dlpreopen 11287ed6f5d66Smrgdlopen='$dlfiles' 11288ed6f5d66Smrgdlpreopen='$dlprefiles' 11289ed6f5d66Smrg 11290ed6f5d66Smrg# Directory that this library needs to be installed in: 11291ed6f5d66Smrglibdir='$install_libdir'" 11292fbc03982Smrg if test no,yes = "$installed,$need_relink"; then 11293ed6f5d66Smrg $ECHO >> $output "\ 11294ed6f5d66Smrgrelink_command=\"$relink_command\"" 11295ed6f5d66Smrg fi 11296ed6f5d66Smrg done 11297ed6f5d66Smrg } 11298ed6f5d66Smrg 11299ed6f5d66Smrg # Do a symbolic link so that the libtool archive can be found in 11300ed6f5d66Smrg # LD_LIBRARY_PATH before the program is installed. 11301ed6f5d66Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 11302ed6f5d66Smrg ;; 11303ed6f5d66Smrg esac 11304ed6f5d66Smrg exit $EXIT_SUCCESS 11305ed6f5d66Smrg} 11306ed6f5d66Smrg 11307fbc03982Smrgif test link = "$opt_mode" || test relink = "$opt_mode"; then 11308fbc03982Smrg func_mode_link ${1+"$@"} 11309fbc03982Smrgfi 11310ed6f5d66Smrg 11311ed6f5d66Smrg 11312ed6f5d66Smrg# func_mode_uninstall arg... 11313ed6f5d66Smrgfunc_mode_uninstall () 11314ed6f5d66Smrg{ 11315fbc03982Smrg $debug_cmd 11316fbc03982Smrg 11317fbc03982Smrg RM=$nonopt 11318ed6f5d66Smrg files= 11319fbc03982Smrg rmforce=false 11320ed6f5d66Smrg exit_status=0 11321ed6f5d66Smrg 11322ed6f5d66Smrg # This variable tells wrapper scripts just to set variables rather 11323ed6f5d66Smrg # than running their programs. 11324fbc03982Smrg libtool_install_magic=$magic 11325ed6f5d66Smrg 11326ed6f5d66Smrg for arg 11327ed6f5d66Smrg do 11328ed6f5d66Smrg case $arg in 11329fbc03982Smrg -f) func_append RM " $arg"; rmforce=: ;; 11330ed6f5d66Smrg -*) func_append RM " $arg" ;; 11331ed6f5d66Smrg *) func_append files " $arg" ;; 11332ed6f5d66Smrg esac 11333ed6f5d66Smrg done 11334ed6f5d66Smrg 11335ed6f5d66Smrg test -z "$RM" && \ 11336ed6f5d66Smrg func_fatal_help "you must specify an RM program" 11337ed6f5d66Smrg 11338ed6f5d66Smrg rmdirs= 11339ed6f5d66Smrg 11340ed6f5d66Smrg for file in $files; do 11341ed6f5d66Smrg func_dirname "$file" "" "." 11342fbc03982Smrg dir=$func_dirname_result 11343fbc03982Smrg if test . = "$dir"; then 11344fbc03982Smrg odir=$objdir 11345ed6f5d66Smrg else 11346fbc03982Smrg odir=$dir/$objdir 11347ed6f5d66Smrg fi 11348ed6f5d66Smrg func_basename "$file" 11349fbc03982Smrg name=$func_basename_result 11350fbc03982Smrg test uninstall = "$opt_mode" && odir=$dir 11351ed6f5d66Smrg 11352ed6f5d66Smrg # Remember odir for removal later, being careful to avoid duplicates 11353fbc03982Smrg if test clean = "$opt_mode"; then 11354ed6f5d66Smrg case " $rmdirs " in 11355ed6f5d66Smrg *" $odir "*) ;; 11356ed6f5d66Smrg *) func_append rmdirs " $odir" ;; 11357ed6f5d66Smrg esac 11358ed6f5d66Smrg fi 11359ed6f5d66Smrg 11360ed6f5d66Smrg # Don't error if the file doesn't exist and rm -f was used. 11361ed6f5d66Smrg if { test -L "$file"; } >/dev/null 2>&1 || 11362ed6f5d66Smrg { test -h "$file"; } >/dev/null 2>&1 || 11363ed6f5d66Smrg test -f "$file"; then 11364ed6f5d66Smrg : 11365ed6f5d66Smrg elif test -d "$file"; then 11366ed6f5d66Smrg exit_status=1 11367ed6f5d66Smrg continue 11368fbc03982Smrg elif $rmforce; then 11369ed6f5d66Smrg continue 11370ed6f5d66Smrg fi 11371ed6f5d66Smrg 11372fbc03982Smrg rmfiles=$file 11373ed6f5d66Smrg 11374ed6f5d66Smrg case $name in 11375ed6f5d66Smrg *.la) 11376ed6f5d66Smrg # Possibly a libtool archive, so verify it. 11377ed6f5d66Smrg if func_lalib_p "$file"; then 11378ed6f5d66Smrg func_source $dir/$name 11379ed6f5d66Smrg 11380ed6f5d66Smrg # Delete the libtool libraries and symlinks. 11381ed6f5d66Smrg for n in $library_names; do 11382ed6f5d66Smrg func_append rmfiles " $odir/$n" 11383ed6f5d66Smrg done 11384ed6f5d66Smrg test -n "$old_library" && func_append rmfiles " $odir/$old_library" 11385ed6f5d66Smrg 11386fbc03982Smrg case $opt_mode in 11387ed6f5d66Smrg clean) 11388ed6f5d66Smrg case " $library_names " in 11389ed6f5d66Smrg *" $dlname "*) ;; 11390ed6f5d66Smrg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 11391ed6f5d66Smrg esac 11392ed6f5d66Smrg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 11393ed6f5d66Smrg ;; 11394ed6f5d66Smrg uninstall) 11395ed6f5d66Smrg if test -n "$library_names"; then 11396ed6f5d66Smrg # Do each command in the postuninstall commands. 11397fbc03982Smrg func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' 11398ed6f5d66Smrg fi 11399ed6f5d66Smrg 11400ed6f5d66Smrg if test -n "$old_library"; then 11401ed6f5d66Smrg # Do each command in the old_postuninstall commands. 11402fbc03982Smrg func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' 11403ed6f5d66Smrg fi 11404ed6f5d66Smrg # FIXME: should reinstall the best remaining shared library. 11405ed6f5d66Smrg ;; 11406ed6f5d66Smrg esac 11407ed6f5d66Smrg fi 11408ed6f5d66Smrg ;; 11409ed6f5d66Smrg 11410ed6f5d66Smrg *.lo) 11411ed6f5d66Smrg # Possibly a libtool object, so verify it. 11412ed6f5d66Smrg if func_lalib_p "$file"; then 11413ed6f5d66Smrg 11414ed6f5d66Smrg # Read the .lo file 11415ed6f5d66Smrg func_source $dir/$name 11416ed6f5d66Smrg 11417ed6f5d66Smrg # Add PIC object to the list of files to remove. 11418fbc03982Smrg if test -n "$pic_object" && test none != "$pic_object"; then 11419ed6f5d66Smrg func_append rmfiles " $dir/$pic_object" 11420ed6f5d66Smrg fi 11421ed6f5d66Smrg 11422ed6f5d66Smrg # Add non-PIC object to the list of files to remove. 11423fbc03982Smrg if test -n "$non_pic_object" && test none != "$non_pic_object"; then 11424ed6f5d66Smrg func_append rmfiles " $dir/$non_pic_object" 11425ed6f5d66Smrg fi 11426ed6f5d66Smrg fi 11427ed6f5d66Smrg ;; 11428ed6f5d66Smrg 11429ed6f5d66Smrg *) 11430fbc03982Smrg if test clean = "$opt_mode"; then 11431ed6f5d66Smrg noexename=$name 11432ed6f5d66Smrg case $file in 11433ed6f5d66Smrg *.exe) 11434ed6f5d66Smrg func_stripname '' '.exe' "$file" 11435ed6f5d66Smrg file=$func_stripname_result 11436ed6f5d66Smrg func_stripname '' '.exe' "$name" 11437ed6f5d66Smrg noexename=$func_stripname_result 11438ed6f5d66Smrg # $file with .exe has already been added to rmfiles, 11439ed6f5d66Smrg # add $file without .exe 11440ed6f5d66Smrg func_append rmfiles " $file" 11441ed6f5d66Smrg ;; 11442ed6f5d66Smrg esac 11443ed6f5d66Smrg # Do a test to see if this is a libtool program. 11444ed6f5d66Smrg if func_ltwrapper_p "$file"; then 11445ed6f5d66Smrg if func_ltwrapper_executable_p "$file"; then 11446ed6f5d66Smrg func_ltwrapper_scriptname "$file" 11447ed6f5d66Smrg relink_command= 11448ed6f5d66Smrg func_source $func_ltwrapper_scriptname_result 11449ed6f5d66Smrg func_append rmfiles " $func_ltwrapper_scriptname_result" 11450ed6f5d66Smrg else 11451ed6f5d66Smrg relink_command= 11452ed6f5d66Smrg func_source $dir/$noexename 11453ed6f5d66Smrg fi 11454ed6f5d66Smrg 11455ed6f5d66Smrg # note $name still contains .exe if it was in $file originally 11456ed6f5d66Smrg # as does the version of $file that was added into $rmfiles 11457fbc03982Smrg func_append rmfiles " $odir/$name $odir/${name}S.$objext" 11458fbc03982Smrg if test yes = "$fast_install" && test -n "$relink_command"; then 11459ed6f5d66Smrg func_append rmfiles " $odir/lt-$name" 11460ed6f5d66Smrg fi 11461fbc03982Smrg if test "X$noexename" != "X$name"; then 11462fbc03982Smrg func_append rmfiles " $odir/lt-$noexename.c" 11463ed6f5d66Smrg fi 11464ed6f5d66Smrg fi 11465ed6f5d66Smrg fi 11466ed6f5d66Smrg ;; 11467ed6f5d66Smrg esac 11468ed6f5d66Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 11469ed6f5d66Smrg done 11470ed6f5d66Smrg 11471fbc03982Smrg # Try to remove the $objdir's in the directories where we deleted files 11472ed6f5d66Smrg for dir in $rmdirs; do 11473ed6f5d66Smrg if test -d "$dir"; then 11474ed6f5d66Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 11475ed6f5d66Smrg fi 11476ed6f5d66Smrg done 11477ed6f5d66Smrg 11478ed6f5d66Smrg exit $exit_status 11479ed6f5d66Smrg} 11480ed6f5d66Smrg 11481fbc03982Smrgif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then 11482fbc03982Smrg func_mode_uninstall ${1+"$@"} 11483fbc03982Smrgfi 11484ed6f5d66Smrg 11485ed6f5d66Smrgtest -z "$opt_mode" && { 11486fbc03982Smrg help=$generic_help 11487ed6f5d66Smrg func_fatal_help "you must specify a MODE" 11488ed6f5d66Smrg} 11489ed6f5d66Smrg 11490ed6f5d66Smrgtest -z "$exec_cmd" && \ 11491fbc03982Smrg func_fatal_help "invalid operation mode '$opt_mode'" 11492ed6f5d66Smrg 11493ed6f5d66Smrgif test -n "$exec_cmd"; then 11494ed6f5d66Smrg eval exec "$exec_cmd" 11495ed6f5d66Smrg exit $EXIT_FAILURE 11496ed6f5d66Smrgfi 11497ed6f5d66Smrg 11498ed6f5d66Smrgexit $exit_status 11499ed6f5d66Smrg 11500ed6f5d66Smrg 11501ed6f5d66Smrg# The TAGs below are defined such that we never get into a situation 11502fbc03982Smrg# where we disable both kinds of libraries. Given conflicting 11503ed6f5d66Smrg# choices, we go for a static library, that is the most portable, 11504ed6f5d66Smrg# since we can't tell whether shared libraries were disabled because 11505ed6f5d66Smrg# the user asked for that or because the platform doesn't support 11506ed6f5d66Smrg# them. This is particularly important on AIX, because we don't 11507ed6f5d66Smrg# support having both static and shared libraries enabled at the same 11508ed6f5d66Smrg# time on that platform, so we default to a shared-only configuration. 11509ed6f5d66Smrg# If a disable-shared tag is given, we'll fallback to a static-only 11510ed6f5d66Smrg# configuration. But we'll never go from static-only to shared-only. 11511ed6f5d66Smrg 11512ed6f5d66Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 11513ed6f5d66Smrgbuild_libtool_libs=no 11514ed6f5d66Smrgbuild_old_libs=yes 11515ed6f5d66Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 11516ed6f5d66Smrg 11517ed6f5d66Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 11518ed6f5d66Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 11519ed6f5d66Smrg# ### END LIBTOOL TAG CONFIG: disable-static 11520ed6f5d66Smrg 11521ed6f5d66Smrg# Local Variables: 11522ed6f5d66Smrg# mode:shell-script 11523ed6f5d66Smrg# sh-indentation:2 11524ed6f5d66Smrg# End: 11525