ltmain.sh revision ae545d91
195b7a5c8Smrg#! /usr/bin/env sh 27cea3689Smrg## DO NOT EDIT - This file generated from ./build-aux/ltmain.in 395b7a5c8Smrg## by inline-source v2019-02-19.15 4e19dfac4Smrg 5ae545d91Smrg# libtool (GNU libtool) 2.5.4 67cea3689Smrg# Provide generalized library-building support services. 7e19dfac4Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 8e19dfac4Smrg 9ae545d91Smrg# Copyright (C) 1996-2019, 2021-2024 Free Software Foundation, Inc. 10e19dfac4Smrg# This is free software; see the source for copying conditions. There is NO 11e19dfac4Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12e19dfac4Smrg 13e19dfac4Smrg# GNU Libtool is free software; you can redistribute it and/or modify 1427702724Smrg# it under the terms of the GNU General Public License as published by 1527702724Smrg# the Free Software Foundation; either version 2 of the License, or 1627702724Smrg# (at your option) any later version. 1727702724Smrg# 18e19dfac4Smrg# As a special exception to the GNU General Public License, 19e19dfac4Smrg# if you distribute this file as part of a program or library that 20e19dfac4Smrg# is built using GNU Libtool, you may include this file under the 21e19dfac4Smrg# same distribution terms that you use for the rest of that program. 22e19dfac4Smrg# 23e19dfac4Smrg# GNU Libtool is distributed in the hope that it will be useful, but 2427702724Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 2527702724Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 2627702724Smrg# General Public License for more details. 2727702724Smrg# 2827702724Smrg# You should have received a copy of the GNU General Public License 297cea3689Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 30e19dfac4Smrg 31e19dfac4Smrg 32313a12fdSmrgPROGRAM=libtool 33e19dfac4SmrgPACKAGE=libtool 34ae545d91SmrgVERSION=2.5.4 35ae545d91Smrgpackage_revision=2.5.4 36e19dfac4Smrg 377cea3689Smrg 387cea3689Smrg## ------ ## 397cea3689Smrg## Usage. ## 407cea3689Smrg## ------ ## 417cea3689Smrg 427cea3689Smrg# Run './libtool --help' for help with using this script from the 437cea3689Smrg# command line. 447cea3689Smrg 457cea3689Smrg 467cea3689Smrg## ------------------------------- ## 477cea3689Smrg## User overridable command paths. ## 487cea3689Smrg## ------------------------------- ## 497cea3689Smrg 507cea3689Smrg# After configure completes, it has a better idea of some of the 517cea3689Smrg# shell tools we need than the defaults used by the functions shared 527cea3689Smrg# with bootstrap, so set those here where they can still be over- 537cea3689Smrg# ridden by the user, but otherwise take precedence. 547cea3689Smrg 557cea3689Smrg: ${AUTOCONF="autoconf"} 567cea3689Smrg: ${AUTOMAKE="automake"} 577cea3689Smrg 587cea3689Smrg 597cea3689Smrg## -------------------------- ## 607cea3689Smrg## Source external libraries. ## 617cea3689Smrg## -------------------------- ## 627cea3689Smrg 637cea3689Smrg# Much of our low-level functionality needs to be sourced from external 647cea3689Smrg# libraries, which are installed to $pkgauxdir. 657cea3689Smrg 667cea3689Smrg# Set a version string for this script. 6795b7a5c8Smrgscriptversion=2019-02-19.15; # UTC 687cea3689Smrg 697cea3689Smrg# General shell script boiler plate, and helper functions. 707cea3689Smrg# Written by Gary V. Vaughan, 2004 717cea3689Smrg 7295b7a5c8Smrg# This is free software. There is NO warranty; not even for 7395b7a5c8Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 7495b7a5c8Smrg# 75ae545d91Smrg# Copyright (C) 2004-2019, 2021, 2023-2024 Bootstrap Authors 7695b7a5c8Smrg# 7795b7a5c8Smrg# This file is dual licensed under the terms of the MIT license 78ae545d91Smrg# <https://opensource.org/licenses/MIT>, and GPL version 2 or later 79ae545d91Smrg# <https://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of 8095b7a5c8Smrg# these licenses when using or redistributing this software or any of 8195b7a5c8Smrg# the files within it. See the URLs above, or the file `LICENSE` 8295b7a5c8Smrg# included in the Bootstrap distribution for the full license texts. 837cea3689Smrg 8495b7a5c8Smrg# Please report bugs or propose patches to: 8595b7a5c8Smrg# <https://github.com/gnulib-modules/bootstrap/issues> 867cea3689Smrg 877cea3689Smrg 887cea3689Smrg## ------ ## 897cea3689Smrg## Usage. ## 907cea3689Smrg## ------ ## 917cea3689Smrg 927cea3689Smrg# Evaluate this file near the top of your script to gain access to 937cea3689Smrg# the functions and variables defined here: 947cea3689Smrg# 957cea3689Smrg# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh 967cea3689Smrg# 977cea3689Smrg# If you need to override any of the default environment variable 987cea3689Smrg# settings, do that before evaluating this file. 997cea3689Smrg 1007cea3689Smrg 1017cea3689Smrg## -------------------- ## 1027cea3689Smrg## Shell normalisation. ## 1037cea3689Smrg## -------------------- ## 1047cea3689Smrg 1057cea3689Smrg# Some shells need a little help to be as Bourne compatible as possible. 1067cea3689Smrg# Before doing anything else, make sure all that help has been provided! 1077cea3689Smrg 1087cea3689SmrgDUALCASE=1; export DUALCASE # for MKS sh 1097cea3689Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : 110e19dfac4Smrg emulate sh 111e19dfac4Smrg NULLCMD=: 1127cea3689Smrg # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which 113e19dfac4Smrg # is contrary to our usage. Disable this feature. 114e19dfac4Smrg alias -g '${1+"$@"}'='"$@"' 115e19dfac4Smrg setopt NO_GLOB_SUBST 116e19dfac4Smrgelse 1177cea3689Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac 118e19dfac4Smrgfi 119313a12fdSmrg 1207cea3689Smrg# NLS nuisances: We save the old values in case they are required later. 1217cea3689Smrg_G_user_locale= 1227cea3689Smrg_G_safe_locale= 1237cea3689Smrgfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 124e19dfac4Smrgdo 1257cea3689Smrg eval "if test set = \"\${$_G_var+set}\"; then 1267cea3689Smrg save_$_G_var=\$$_G_var 1277cea3689Smrg $_G_var=C 1287cea3689Smrg export $_G_var 1297cea3689Smrg _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" 1307cea3689Smrg _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" 131e19dfac4Smrg fi" 132e19dfac4Smrgdone 13395b7a5c8Smrg# These NLS vars are set unconditionally (bootstrap issue #24). Unset those 13495b7a5c8Smrg# in case the environment reset is needed later and the $save_* variant is not 13595b7a5c8Smrg# defined (see the code above). 13695b7a5c8SmrgLC_ALL=C 13795b7a5c8SmrgLANGUAGE=C 13895b7a5c8Smrgexport LANGUAGE LC_ALL 139e19dfac4Smrg 1407cea3689Smrg# Make sure IFS has a sensible default 1417cea3689Smrgsp=' ' 1427cea3689Smrgnl=' 1437cea3689Smrg' 1447cea3689SmrgIFS="$sp $nl" 1457cea3689Smrg 146ae545d91Smrg# There are apparently some systems that use ';' as a PATH separator! 1477cea3689Smrgif test "${PATH_SEPARATOR+set}" != set; then 1487cea3689Smrg PATH_SEPARATOR=: 1497cea3689Smrg (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { 1507cea3689Smrg (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || 1517cea3689Smrg PATH_SEPARATOR=';' 1527cea3689Smrg } 1537cea3689Smrgfi 154e19dfac4Smrg 155e19dfac4Smrg 15695b7a5c8Smrg# func_unset VAR 15795b7a5c8Smrg# -------------- 15895b7a5c8Smrg# Portably unset VAR. 15995b7a5c8Smrg# In some shells, an 'unset VAR' statement leaves a non-zero return 16095b7a5c8Smrg# status if VAR is already unset, which might be problematic if the 16195b7a5c8Smrg# statement is used at the end of a function (thus poisoning its return 16295b7a5c8Smrg# value) or when 'set -e' is active (causing even a spurious abort of 16395b7a5c8Smrg# the script in this case). 16495b7a5c8Smrgfunc_unset () 16595b7a5c8Smrg{ 16695b7a5c8Smrg { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; } 16795b7a5c8Smrg} 16895b7a5c8Smrg 16995b7a5c8Smrg 17095b7a5c8Smrg# Make sure CDPATH doesn't cause `cd` commands to output the target dir. 17195b7a5c8Smrgfunc_unset CDPATH 17295b7a5c8Smrg 17395b7a5c8Smrg# Make sure ${,E,F}GREP behave sanely. 17495b7a5c8Smrgfunc_unset GREP_OPTIONS 17595b7a5c8Smrg 176e19dfac4Smrg 1777cea3689Smrg## ------------------------- ## 1787cea3689Smrg## Locate command utilities. ## 1797cea3689Smrg## ------------------------- ## 1807cea3689Smrg 1817cea3689Smrg 1827cea3689Smrg# func_executable_p FILE 1837cea3689Smrg# ---------------------- 1847cea3689Smrg# Check that FILE is an executable regular file. 1857cea3689Smrgfunc_executable_p () 1867cea3689Smrg{ 1877cea3689Smrg test -f "$1" && test -x "$1" 1887cea3689Smrg} 1897cea3689Smrg 1907cea3689Smrg 1917cea3689Smrg# func_path_progs PROGS_LIST CHECK_FUNC [PATH] 1927cea3689Smrg# -------------------------------------------- 1937cea3689Smrg# Search for either a program that responds to --version with output 1947cea3689Smrg# containing "GNU", or else returned by CHECK_FUNC otherwise, by 1957cea3689Smrg# trying all the directories in PATH with each of the elements of 1967cea3689Smrg# PROGS_LIST. 1977cea3689Smrg# 1987cea3689Smrg# CHECK_FUNC should accept the path to a candidate program, and 1997cea3689Smrg# set $func_check_prog_result if it truncates its output less than 2007cea3689Smrg# $_G_path_prog_max characters. 2017cea3689Smrgfunc_path_progs () 2027cea3689Smrg{ 2037cea3689Smrg _G_progs_list=$1 2047cea3689Smrg _G_check_func=$2 2057cea3689Smrg _G_PATH=${3-"$PATH"} 2067cea3689Smrg 2077cea3689Smrg _G_path_prog_max=0 2087cea3689Smrg _G_path_prog_found=false 2097cea3689Smrg _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} 2107cea3689Smrg for _G_dir in $_G_PATH; do 2117cea3689Smrg IFS=$_G_save_IFS 2127cea3689Smrg test -z "$_G_dir" && _G_dir=. 2137cea3689Smrg for _G_prog_name in $_G_progs_list; do 2147cea3689Smrg for _exeext in '' .EXE; do 2157cea3689Smrg _G_path_prog=$_G_dir/$_G_prog_name$_exeext 2167cea3689Smrg func_executable_p "$_G_path_prog" || continue 2177cea3689Smrg case `"$_G_path_prog" --version 2>&1` in 2187cea3689Smrg *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; 2197cea3689Smrg *) $_G_check_func $_G_path_prog 2207cea3689Smrg func_path_progs_result=$func_check_prog_result 2217cea3689Smrg ;; 2227cea3689Smrg esac 2237cea3689Smrg $_G_path_prog_found && break 3 2247cea3689Smrg done 2257cea3689Smrg done 2267cea3689Smrg done 2277cea3689Smrg IFS=$_G_save_IFS 2287cea3689Smrg test -z "$func_path_progs_result" && { 2297cea3689Smrg echo "no acceptable sed could be found in \$PATH" >&2 2307cea3689Smrg exit 1 2317cea3689Smrg } 2327cea3689Smrg} 2337cea3689Smrg 2347cea3689Smrg 2357cea3689Smrg# We want to be able to use the functions in this file before configure 2367cea3689Smrg# has figured out where the best binaries are kept, which means we have 2377cea3689Smrg# to search for them ourselves - except when the results are already set 2387cea3689Smrg# where we skip the searches. 2397cea3689Smrg 2407cea3689Smrg# Unless the user overrides by setting SED, search the path for either GNU 2417cea3689Smrg# sed, or the sed that truncates its output the least. 2427cea3689Smrgtest -z "$SED" && { 2437cea3689Smrg _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ 2447cea3689Smrg for _G_i in 1 2 3 4 5 6 7; do 2457cea3689Smrg _G_sed_script=$_G_sed_script$nl$_G_sed_script 2467cea3689Smrg done 2477cea3689Smrg echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed 2487cea3689Smrg _G_sed_script= 2497cea3689Smrg 2507cea3689Smrg func_check_prog_sed () 2517cea3689Smrg { 2527cea3689Smrg _G_path_prog=$1 2537cea3689Smrg 2547cea3689Smrg _G_count=0 2557cea3689Smrg printf 0123456789 >conftest.in 2567cea3689Smrg while : 2577cea3689Smrg do 2587cea3689Smrg cat conftest.in conftest.in >conftest.tmp 2597cea3689Smrg mv conftest.tmp conftest.in 2607cea3689Smrg cp conftest.in conftest.nl 2617cea3689Smrg echo '' >> conftest.nl 2627cea3689Smrg "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break 2637cea3689Smrg diff conftest.out conftest.nl >/dev/null 2>&1 || break 2647cea3689Smrg _G_count=`expr $_G_count + 1` 2657cea3689Smrg if test "$_G_count" -gt "$_G_path_prog_max"; then 2667cea3689Smrg # Best one so far, save it but keep looking for a better one 2677cea3689Smrg func_check_prog_result=$_G_path_prog 2687cea3689Smrg _G_path_prog_max=$_G_count 2697cea3689Smrg fi 2707cea3689Smrg # 10*(2^10) chars as input seems more than enough 2717cea3689Smrg test 10 -lt "$_G_count" && break 2727cea3689Smrg done 2737cea3689Smrg rm -f conftest.in conftest.tmp conftest.nl conftest.out 2747cea3689Smrg } 2757cea3689Smrg 27695b7a5c8Smrg func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin" 2777cea3689Smrg rm -f conftest.sed 2787cea3689Smrg SED=$func_path_progs_result 2797cea3689Smrg} 2807cea3689Smrg 2817cea3689Smrg 2827cea3689Smrg# Unless the user overrides by setting GREP, search the path for either GNU 2837cea3689Smrg# grep, or the grep that truncates its output the least. 2847cea3689Smrgtest -z "$GREP" && { 2857cea3689Smrg func_check_prog_grep () 2867cea3689Smrg { 2877cea3689Smrg _G_path_prog=$1 2887cea3689Smrg 2897cea3689Smrg _G_count=0 2907cea3689Smrg _G_path_prog_max=0 2917cea3689Smrg printf 0123456789 >conftest.in 2927cea3689Smrg while : 2937cea3689Smrg do 2947cea3689Smrg cat conftest.in conftest.in >conftest.tmp 2957cea3689Smrg mv conftest.tmp conftest.in 2967cea3689Smrg cp conftest.in conftest.nl 2977cea3689Smrg echo 'GREP' >> conftest.nl 2987cea3689Smrg "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break 2997cea3689Smrg diff conftest.out conftest.nl >/dev/null 2>&1 || break 3007cea3689Smrg _G_count=`expr $_G_count + 1` 3017cea3689Smrg if test "$_G_count" -gt "$_G_path_prog_max"; then 3027cea3689Smrg # Best one so far, save it but keep looking for a better one 3037cea3689Smrg func_check_prog_result=$_G_path_prog 3047cea3689Smrg _G_path_prog_max=$_G_count 3057cea3689Smrg fi 3067cea3689Smrg # 10*(2^10) chars as input seems more than enough 3077cea3689Smrg test 10 -lt "$_G_count" && break 3087cea3689Smrg done 3097cea3689Smrg rm -f conftest.in conftest.tmp conftest.nl conftest.out 3107cea3689Smrg } 3117cea3689Smrg 31295b7a5c8Smrg func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin" 3137cea3689Smrg GREP=$func_path_progs_result 3147cea3689Smrg} 3157cea3689Smrg 3167cea3689Smrg 3177cea3689Smrg## ------------------------------- ## 3187cea3689Smrg## User overridable command paths. ## 3197cea3689Smrg## ------------------------------- ## 3207cea3689Smrg 3217cea3689Smrg# All uppercase variable names are used for environment variables. These 3227cea3689Smrg# variables can be overridden by the user before calling a script that 3237cea3689Smrg# uses them if a suitable command of that name is not already available 3247cea3689Smrg# in the command search PATH. 325e19dfac4Smrg 326e19dfac4Smrg: ${CP="cp -f"} 3277cea3689Smrg: ${ECHO="printf %s\n"} 3287cea3689Smrg: ${EGREP="$GREP -E"} 3297cea3689Smrg: ${FGREP="$GREP -F"} 3307cea3689Smrg: ${LN_S="ln -s"} 331e19dfac4Smrg: ${MAKE="make"} 332e19dfac4Smrg: ${MKDIR="mkdir"} 333e19dfac4Smrg: ${MV="mv -f"} 334e19dfac4Smrg: ${RM="rm -f"} 335e19dfac4Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 336e19dfac4Smrg 337e19dfac4Smrg 3387cea3689Smrg## -------------------- ## 3397cea3689Smrg## Useful sed snippets. ## 3407cea3689Smrg## -------------------- ## 341313a12fdSmrg 3427cea3689Smrgsed_dirname='s|/[^/]*$||' 3437cea3689Smrgsed_basename='s|^.*/||' 344313a12fdSmrg 3457cea3689Smrg# Sed substitution that helps us do robust quoting. It backslashifies 3467cea3689Smrg# metacharacters that are still active within double-quoted strings. 3477cea3689Smrgsed_quote_subst='s|\([`"$\\]\)|\\\1|g' 348313a12fdSmrg 3497cea3689Smrg# Same as above, but do not quote variable references. 3507cea3689Smrgsed_double_quote_subst='s/\(["`\\]\)/\\\1/g' 351313a12fdSmrg 3527cea3689Smrg# Sed substitution that turns a string into a regex matching for the 3537cea3689Smrg# string literally. 3547cea3689Smrgsed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' 355313a12fdSmrg 3567cea3689Smrg# Sed substitution that converts a w32 file name or path 3577cea3689Smrg# that contains forward slashes, into one that contains 3587cea3689Smrg# (escaped) backslashes. A very naive implementation. 3597cea3689Smrgsed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 3607cea3689Smrg 3617cea3689Smrg# Re-'\' parameter expansions in output of sed_double_quote_subst that 3627cea3689Smrg# were '\'-ed in input to the same. If an odd number of '\' preceded a 3637cea3689Smrg# '$' in input to sed_double_quote_subst, that '$' was protected from 3647cea3689Smrg# expansion. Since each input '\' is now two '\'s, look for any number 3657cea3689Smrg# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. 3667cea3689Smrg_G_bs='\\' 3677cea3689Smrg_G_bs2='\\\\' 3687cea3689Smrg_G_bs4='\\\\\\\\' 3697cea3689Smrg_G_dollar='\$' 3707cea3689Smrgsed_double_backslash="\ 3717cea3689Smrg s/$_G_bs4/&\\ 3727cea3689Smrg/g 3737cea3689Smrg s/^$_G_bs2$_G_dollar/$_G_bs&/ 3747cea3689Smrg s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g 3757cea3689Smrg s/\n//g" 376313a12fdSmrg 37795b7a5c8Smrg# require_check_ifs_backslash 37895b7a5c8Smrg# --------------------------- 37995b7a5c8Smrg# Check if we can use backslash as IFS='\' separator, and set 38095b7a5c8Smrg# $check_ifs_backshlash_broken to ':' or 'false'. 38195b7a5c8Smrgrequire_check_ifs_backslash=func_require_check_ifs_backslash 38295b7a5c8Smrgfunc_require_check_ifs_backslash () 38395b7a5c8Smrg{ 38495b7a5c8Smrg _G_save_IFS=$IFS 38595b7a5c8Smrg IFS='\' 38695b7a5c8Smrg _G_check_ifs_backshlash='a\\b' 38795b7a5c8Smrg for _G_i in $_G_check_ifs_backshlash 38895b7a5c8Smrg do 38995b7a5c8Smrg case $_G_i in 39095b7a5c8Smrg a) 39195b7a5c8Smrg check_ifs_backshlash_broken=false 39295b7a5c8Smrg ;; 39395b7a5c8Smrg '') 39495b7a5c8Smrg break 39595b7a5c8Smrg ;; 39695b7a5c8Smrg *) 39795b7a5c8Smrg check_ifs_backshlash_broken=: 39895b7a5c8Smrg break 39995b7a5c8Smrg ;; 40095b7a5c8Smrg esac 40195b7a5c8Smrg done 40295b7a5c8Smrg IFS=$_G_save_IFS 40395b7a5c8Smrg require_check_ifs_backslash=: 40495b7a5c8Smrg} 40595b7a5c8Smrg 406313a12fdSmrg 4077cea3689Smrg## ----------------- ## 4087cea3689Smrg## Global variables. ## 4097cea3689Smrg## ----------------- ## 410313a12fdSmrg 4117cea3689Smrg# Except for the global variables explicitly listed below, the following 4127cea3689Smrg# functions in the '^func_' namespace, and the '^require_' namespace 4137cea3689Smrg# variables initialised in the 'Resource management' section, sourcing 4147cea3689Smrg# this file will not pollute your global namespace with anything 4157cea3689Smrg# else. There's no portable way to scope variables in Bourne shell 4167cea3689Smrg# though, so actually running these functions will sometimes place 4177cea3689Smrg# results into a variable named after the function, and often use 4187cea3689Smrg# temporary variables in the '^_G_' namespace. If you are careful to 4197cea3689Smrg# avoid using those namespaces casually in your sourcing script, things 4207cea3689Smrg# should continue to work as you expect. And, of course, you can freely 4217cea3689Smrg# overwrite any of the functions or variables defined here before 4227cea3689Smrg# calling anything to customize them. 423313a12fdSmrg 4247cea3689SmrgEXIT_SUCCESS=0 4257cea3689SmrgEXIT_FAILURE=1 4267cea3689SmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 4277cea3689SmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 428e19dfac4Smrg 4297cea3689Smrg# Allow overriding, eg assuming that you follow the convention of 4307cea3689Smrg# putting '$debug_cmd' at the start of all your functions, you can get 4317cea3689Smrg# bash to show function call trace with: 4327cea3689Smrg# 4337cea3689Smrg# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name 4347cea3689Smrgdebug_cmd=${debug_cmd-":"} 4357cea3689Smrgexit_cmd=: 43627702724Smrg 4377cea3689Smrg# By convention, finish your script with: 4387cea3689Smrg# 4397cea3689Smrg# exit $exit_status 4407cea3689Smrg# 4417cea3689Smrg# so that you can set exit_status to non-zero if you want to indicate 4427cea3689Smrg# something went wrong during execution without actually bailing out at 4437cea3689Smrg# the point of failure. 4447cea3689Smrgexit_status=$EXIT_SUCCESS 445313a12fdSmrg 4467cea3689Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 4477cea3689Smrg# is ksh but when the shell is invoked as "sh" and the current value of 4487cea3689Smrg# the _XPG environment variable is not equal to 1 (one), the special 4497cea3689Smrg# positional parameter $0, within a function call, is the name of the 4507cea3689Smrg# function. 4517cea3689Smrgprogpath=$0 45227702724Smrg 4537cea3689Smrg# The name of this program. 4547cea3689Smrgprogname=`$ECHO "$progpath" |$SED "$sed_basename"` 45527702724Smrg 4567cea3689Smrg# Make sure we have an absolute progpath for reexecution: 457e19dfac4Smrgcase $progpath in 458e19dfac4Smrg [\\/]*|[A-Za-z]:\\*) ;; 459e19dfac4Smrg *[\\/]*) 4607cea3689Smrg progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` 461e19dfac4Smrg progdir=`cd "$progdir" && pwd` 4627cea3689Smrg progpath=$progdir/$progname 463e19dfac4Smrg ;; 464e19dfac4Smrg *) 4657cea3689Smrg _G_IFS=$IFS 466313a12fdSmrg IFS=${PATH_SEPARATOR-:} 467e19dfac4Smrg for progdir in $PATH; do 4687cea3689Smrg IFS=$_G_IFS 469e19dfac4Smrg test -x "$progdir/$progname" && break 470e19dfac4Smrg done 4717cea3689Smrg IFS=$_G_IFS 472e19dfac4Smrg test -n "$progdir" || progdir=`pwd` 4737cea3689Smrg progpath=$progdir/$progname 474e19dfac4Smrg ;; 475e19dfac4Smrgesac 47627702724Smrg 477e19dfac4Smrg 4787cea3689Smrg## ----------------- ## 4797cea3689Smrg## Standard options. ## 4807cea3689Smrg## ----------------- ## 481313a12fdSmrg 4827cea3689Smrg# The following options affect the operation of the functions defined 4837cea3689Smrg# below, and should be set appropriately depending on run-time para- 4847cea3689Smrg# meters passed on the command line. 485e19dfac4Smrg 486e19dfac4Smrgopt_dry_run=false 487e19dfac4Smrgopt_quiet=false 488e19dfac4Smrgopt_verbose=false 489e19dfac4Smrg 4907cea3689Smrg# Categories 'all' and 'none' are always available. Append any others 4917cea3689Smrg# you will pass as the first argument to func_warning from your own 4927cea3689Smrg# code. 4937cea3689Smrgwarning_categories= 49427702724Smrg 4957cea3689Smrg# By default, display warnings according to 'opt_warning_types'. Set 4967cea3689Smrg# 'warning_func' to ':' to elide all warnings, or func_fatal_error to 4977cea3689Smrg# treat the next displayed warning as a fatal error. 4987cea3689Smrgwarning_func=func_warn_and_continue 49927702724Smrg 5007cea3689Smrg# Set to 'all' to display all warnings, 'none' to suppress all 5017cea3689Smrg# warnings, or a space delimited list of some subset of 5027cea3689Smrg# 'warning_categories' to display only the listed warnings. 5037cea3689Smrgopt_warning_types=all 50427702724Smrg 505313a12fdSmrg 5067cea3689Smrg## -------------------- ## 5077cea3689Smrg## Resource management. ## 5087cea3689Smrg## -------------------- ## 50927702724Smrg 5107cea3689Smrg# This section contains definitions for functions that each ensure a 5117cea3689Smrg# particular resource (a file, or a non-empty configuration variable for 5127cea3689Smrg# example) is available, and if appropriate to extract default values 5137cea3689Smrg# from pertinent package files. Call them using their associated 5147cea3689Smrg# 'require_*' variable to ensure that they are executed, at most, once. 5157cea3689Smrg# 5167cea3689Smrg# It's entirely deliberate that calling these functions can set 5177cea3689Smrg# variables that don't obey the namespace limitations obeyed by the rest 5187cea3689Smrg# of this file, in order that that they be as useful as possible to 5197cea3689Smrg# callers. 52027702724Smrg 52127702724Smrg 5227cea3689Smrg# require_term_colors 5237cea3689Smrg# ------------------- 5247cea3689Smrg# Allow display of bold text on terminals that support it. 5257cea3689Smrgrequire_term_colors=func_require_term_colors 5267cea3689Smrgfunc_require_term_colors () 527e19dfac4Smrg{ 5287cea3689Smrg $debug_cmd 5297cea3689Smrg 5307cea3689Smrg test -t 1 && { 5317cea3689Smrg # COLORTERM and USE_ANSI_COLORS environment variables take 5327cea3689Smrg # precedence, because most terminfo databases neglect to describe 5337cea3689Smrg # whether color sequences are supported. 5347cea3689Smrg test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} 5357cea3689Smrg 5367cea3689Smrg if test 1 = "$USE_ANSI_COLORS"; then 5377cea3689Smrg # Standard ANSI escape sequences 5387cea3689Smrg tc_reset='[0m' 5397cea3689Smrg tc_bold='[1m'; tc_standout='[7m' 5407cea3689Smrg tc_red='[31m'; tc_green='[32m' 5417cea3689Smrg tc_blue='[34m'; tc_cyan='[36m' 5427cea3689Smrg else 5437cea3689Smrg # Otherwise trust the terminfo database after all. 5447cea3689Smrg test -n "`tput sgr0 2>/dev/null`" && { 5457cea3689Smrg tc_reset=`tput sgr0` 5467cea3689Smrg test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` 5477cea3689Smrg tc_standout=$tc_bold 5487cea3689Smrg test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` 5497cea3689Smrg test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` 5507cea3689Smrg test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` 5517cea3689Smrg test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` 5527cea3689Smrg test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` 5537cea3689Smrg } 5547cea3689Smrg fi 5557cea3689Smrg } 55627702724Smrg 5577cea3689Smrg require_term_colors=: 558e19dfac4Smrg} 55927702724Smrg 56027702724Smrg 5617cea3689Smrg## ----------------- ## 5627cea3689Smrg## Function library. ## 5637cea3689Smrg## ----------------- ## 5647cea3689Smrg 5657cea3689Smrg# This section contains a variety of useful functions to call in your 5667cea3689Smrg# scripts. Take note of the portable wrappers for features provided by 5677cea3689Smrg# some modern shells, which will fall back to slower equivalents on 5687cea3689Smrg# less featureful shells. 5697cea3689Smrg 5707cea3689Smrg 5717cea3689Smrg# func_append VAR VALUE 5727cea3689Smrg# --------------------- 5737cea3689Smrg# Append VALUE onto the existing contents of VAR. 5747cea3689Smrg 5757cea3689Smrg # We should try to minimise forks, especially on Windows where they are 5767cea3689Smrg # unreasonably slow, so skip the feature probes when bash or zsh are 5777cea3689Smrg # being used: 5787cea3689Smrg if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then 5797cea3689Smrg : ${_G_HAVE_ARITH_OP="yes"} 5807cea3689Smrg : ${_G_HAVE_XSI_OPS="yes"} 5817cea3689Smrg # The += operator was introduced in bash 3.1 5827cea3689Smrg case $BASH_VERSION in 5837cea3689Smrg [12].* | 3.0 | 3.0*) ;; 5847cea3689Smrg *) 5857cea3689Smrg : ${_G_HAVE_PLUSEQ_OP="yes"} 5867cea3689Smrg ;; 5877cea3689Smrg esac 5887cea3689Smrg fi 5897cea3689Smrg 5907cea3689Smrg # _G_HAVE_PLUSEQ_OP 5917cea3689Smrg # Can be empty, in which case the shell is probed, "yes" if += is 592ae545d91Smrg # usable or anything else if it does not work. 5937cea3689Smrg test -z "$_G_HAVE_PLUSEQ_OP" \ 5947cea3689Smrg && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ 5957cea3689Smrg && _G_HAVE_PLUSEQ_OP=yes 5967cea3689Smrg 5977cea3689Smrgif test yes = "$_G_HAVE_PLUSEQ_OP" 5987cea3689Smrgthen 5997cea3689Smrg # This is an XSI compatible shell, allowing a faster implementation... 6007cea3689Smrg eval 'func_append () 6017cea3689Smrg { 6027cea3689Smrg $debug_cmd 6037cea3689Smrg 6047cea3689Smrg eval "$1+=\$2" 6057cea3689Smrg }' 6067cea3689Smrgelse 6077cea3689Smrg # ...otherwise fall back to using expr, which is often a shell builtin. 6087cea3689Smrg func_append () 6097cea3689Smrg { 6107cea3689Smrg $debug_cmd 6117cea3689Smrg 6127cea3689Smrg eval "$1=\$$1\$2" 6137cea3689Smrg } 6147cea3689Smrgfi 6157cea3689Smrg 6167cea3689Smrg 6177cea3689Smrg# func_append_quoted VAR VALUE 6187cea3689Smrg# ---------------------------- 6197cea3689Smrg# Quote VALUE and append to the end of shell variable VAR, separated 6207cea3689Smrg# by a space. 6217cea3689Smrgif test yes = "$_G_HAVE_PLUSEQ_OP"; then 6227cea3689Smrg eval 'func_append_quoted () 6237cea3689Smrg { 6247cea3689Smrg $debug_cmd 6257cea3689Smrg 62695b7a5c8Smrg func_quote_arg pretty "$2" 62795b7a5c8Smrg eval "$1+=\\ \$func_quote_arg_result" 6287cea3689Smrg }' 6297cea3689Smrgelse 6307cea3689Smrg func_append_quoted () 6317cea3689Smrg { 6327cea3689Smrg $debug_cmd 6337cea3689Smrg 63495b7a5c8Smrg func_quote_arg pretty "$2" 63595b7a5c8Smrg eval "$1=\$$1\\ \$func_quote_arg_result" 6367cea3689Smrg } 6377cea3689Smrgfi 6387cea3689Smrg 6397cea3689Smrg 6407cea3689Smrg# func_append_uniq VAR VALUE 6417cea3689Smrg# -------------------------- 6427cea3689Smrg# Append unique VALUE onto the existing contents of VAR, assuming 6437cea3689Smrg# entries are delimited by the first character of VALUE. For example: 6447cea3689Smrg# 6457cea3689Smrg# func_append_uniq options " --another-option option-argument" 6467cea3689Smrg# 6477cea3689Smrg# will only append to $options if " --another-option option-argument " 6487cea3689Smrg# is not already present somewhere in $options already (note spaces at 6497cea3689Smrg# each end implied by leading space in second argument). 6507cea3689Smrgfunc_append_uniq () 6517cea3689Smrg{ 6527cea3689Smrg $debug_cmd 6537cea3689Smrg 6547cea3689Smrg eval _G_current_value='`$ECHO $'$1'`' 6557cea3689Smrg _G_delim=`expr "$2" : '\(.\)'` 6567cea3689Smrg 6577cea3689Smrg case $_G_delim$_G_current_value$_G_delim in 6587cea3689Smrg *"$2$_G_delim"*) ;; 6597cea3689Smrg *) func_append "$@" ;; 6607cea3689Smrg esac 6617cea3689Smrg} 6627cea3689Smrg 6637cea3689Smrg 6647cea3689Smrg# func_arith TERM... 6657cea3689Smrg# ------------------ 6667cea3689Smrg# Set func_arith_result to the result of evaluating TERMs. 6677cea3689Smrg test -z "$_G_HAVE_ARITH_OP" \ 6687cea3689Smrg && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ 6697cea3689Smrg && _G_HAVE_ARITH_OP=yes 6707cea3689Smrg 6717cea3689Smrgif test yes = "$_G_HAVE_ARITH_OP"; then 6727cea3689Smrg eval 'func_arith () 6737cea3689Smrg { 6747cea3689Smrg $debug_cmd 6757cea3689Smrg 6767cea3689Smrg func_arith_result=$(( $* )) 6777cea3689Smrg }' 6787cea3689Smrgelse 6797cea3689Smrg func_arith () 6807cea3689Smrg { 6817cea3689Smrg $debug_cmd 6827cea3689Smrg 6837cea3689Smrg func_arith_result=`expr "$@"` 6847cea3689Smrg } 6857cea3689Smrgfi 6867cea3689Smrg 6877cea3689Smrg 6887cea3689Smrg# func_basename FILE 6897cea3689Smrg# ------------------ 6907cea3689Smrg# Set func_basename_result to FILE with everything up to and including 6917cea3689Smrg# the last / stripped. 6927cea3689Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 6937cea3689Smrg # If this shell supports suffix pattern removal, then use it to avoid 6947cea3689Smrg # forking. Hide the definitions single quotes in case the shell chokes 6957cea3689Smrg # on unsupported syntax... 6967cea3689Smrg _b='func_basename_result=${1##*/}' 6977cea3689Smrg _d='case $1 in 6987cea3689Smrg */*) func_dirname_result=${1%/*}$2 ;; 6997cea3689Smrg * ) func_dirname_result=$3 ;; 7007cea3689Smrg esac' 7017cea3689Smrg 7027cea3689Smrgelse 7037cea3689Smrg # ...otherwise fall back to using sed. 7047cea3689Smrg _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' 7057cea3689Smrg _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` 7067cea3689Smrg if test "X$func_dirname_result" = "X$1"; then 7077cea3689Smrg func_dirname_result=$3 7087cea3689Smrg else 7097cea3689Smrg func_append func_dirname_result "$2" 7107cea3689Smrg fi' 7117cea3689Smrgfi 7127cea3689Smrg 7137cea3689Smrgeval 'func_basename () 7147cea3689Smrg{ 7157cea3689Smrg $debug_cmd 7167cea3689Smrg 7177cea3689Smrg '"$_b"' 7187cea3689Smrg}' 7197cea3689Smrg 7207cea3689Smrg 7217cea3689Smrg# func_dirname FILE APPEND NONDIR_REPLACEMENT 7227cea3689Smrg# ------------------------------------------- 7237cea3689Smrg# Compute the dirname of FILE. If nonempty, add APPEND to the result, 7247cea3689Smrg# otherwise set result to NONDIR_REPLACEMENT. 7257cea3689Smrgeval 'func_dirname () 7267cea3689Smrg{ 7277cea3689Smrg $debug_cmd 7287cea3689Smrg 7297cea3689Smrg '"$_d"' 7307cea3689Smrg}' 7317cea3689Smrg 7327cea3689Smrg 7337cea3689Smrg# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT 7347cea3689Smrg# -------------------------------------------------------- 7357cea3689Smrg# Perform func_basename and func_dirname in a single function 7367cea3689Smrg# call: 7377cea3689Smrg# dirname: Compute the dirname of FILE. If nonempty, 7387cea3689Smrg# add APPEND to the result, otherwise set result 7397cea3689Smrg# to NONDIR_REPLACEMENT. 7407cea3689Smrg# value returned in "$func_dirname_result" 7417cea3689Smrg# basename: Compute filename of FILE. 742ae545d91Smrg# value returned in "$func_basename_result" 7437cea3689Smrg# For efficiency, we do not delegate to the functions above but instead 7447cea3689Smrg# duplicate the functionality here. 7457cea3689Smrgeval 'func_dirname_and_basename () 7467cea3689Smrg{ 7477cea3689Smrg $debug_cmd 7487cea3689Smrg 7497cea3689Smrg '"$_b"' 7507cea3689Smrg '"$_d"' 7517cea3689Smrg}' 7527cea3689Smrg 7537cea3689Smrg 7547cea3689Smrg# func_echo ARG... 7557cea3689Smrg# ---------------- 7567cea3689Smrg# Echo program name prefixed message. 7577cea3689Smrgfunc_echo () 7587cea3689Smrg{ 7597cea3689Smrg $debug_cmd 7607cea3689Smrg 7617cea3689Smrg _G_message=$* 7627cea3689Smrg 7637cea3689Smrg func_echo_IFS=$IFS 7647cea3689Smrg IFS=$nl 7657cea3689Smrg for _G_line in $_G_message; do 7667cea3689Smrg IFS=$func_echo_IFS 7677cea3689Smrg $ECHO "$progname: $_G_line" 7687cea3689Smrg done 7697cea3689Smrg IFS=$func_echo_IFS 7707cea3689Smrg} 7717cea3689Smrg 7727cea3689Smrg 7737cea3689Smrg# func_echo_all ARG... 7747cea3689Smrg# -------------------- 7757cea3689Smrg# Invoke $ECHO with all args, space-separated. 7767cea3689Smrgfunc_echo_all () 7777cea3689Smrg{ 7787cea3689Smrg $ECHO "$*" 7797cea3689Smrg} 7807cea3689Smrg 7817cea3689Smrg 7827cea3689Smrg# func_echo_infix_1 INFIX ARG... 7837cea3689Smrg# ------------------------------ 7847cea3689Smrg# Echo program name, followed by INFIX on the first line, with any 7857cea3689Smrg# additional lines not showing INFIX. 7867cea3689Smrgfunc_echo_infix_1 () 7877cea3689Smrg{ 7887cea3689Smrg $debug_cmd 7897cea3689Smrg 7907cea3689Smrg $require_term_colors 7917cea3689Smrg 7927cea3689Smrg _G_infix=$1; shift 7937cea3689Smrg _G_indent=$_G_infix 7947cea3689Smrg _G_prefix="$progname: $_G_infix: " 7957cea3689Smrg _G_message=$* 7967cea3689Smrg 7977cea3689Smrg # Strip color escape sequences before counting printable length 7987cea3689Smrg for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" 7997cea3689Smrg do 8007cea3689Smrg test -n "$_G_tc" && { 8017cea3689Smrg _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` 8027cea3689Smrg _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` 8037cea3689Smrg } 8047cea3689Smrg done 8057cea3689Smrg _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes 8067cea3689Smrg 8077cea3689Smrg func_echo_infix_1_IFS=$IFS 8087cea3689Smrg IFS=$nl 8097cea3689Smrg for _G_line in $_G_message; do 8107cea3689Smrg IFS=$func_echo_infix_1_IFS 8117cea3689Smrg $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 8127cea3689Smrg _G_prefix=$_G_indent 8137cea3689Smrg done 8147cea3689Smrg IFS=$func_echo_infix_1_IFS 8157cea3689Smrg} 8167cea3689Smrg 8177cea3689Smrg 8187cea3689Smrg# func_error ARG... 8197cea3689Smrg# ----------------- 8207cea3689Smrg# Echo program name prefixed message to standard error. 8217cea3689Smrgfunc_error () 8227cea3689Smrg{ 8237cea3689Smrg $debug_cmd 8247cea3689Smrg 8257cea3689Smrg $require_term_colors 8267cea3689Smrg 8277cea3689Smrg func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 8287cea3689Smrg} 8297cea3689Smrg 8307cea3689Smrg 8317cea3689Smrg# func_fatal_error ARG... 8327cea3689Smrg# ----------------------- 8337cea3689Smrg# Echo program name prefixed message to standard error, and exit. 8347cea3689Smrgfunc_fatal_error () 8357cea3689Smrg{ 8367cea3689Smrg $debug_cmd 8377cea3689Smrg 8387cea3689Smrg func_error "$*" 8397cea3689Smrg exit $EXIT_FAILURE 8407cea3689Smrg} 8417cea3689Smrg 8427cea3689Smrg 8437cea3689Smrg# func_grep EXPRESSION FILENAME 8447cea3689Smrg# ----------------------------- 845e19dfac4Smrg# Check whether EXPRESSION matches any line of FILENAME, without output. 846e19dfac4Smrgfunc_grep () 847e19dfac4Smrg{ 8487cea3689Smrg $debug_cmd 8497cea3689Smrg 850e19dfac4Smrg $GREP "$1" "$2" >/dev/null 2>&1 851e19dfac4Smrg} 852e19dfac4Smrg 853e19dfac4Smrg 8547cea3689Smrg# func_len STRING 8557cea3689Smrg# --------------- 8567cea3689Smrg# Set func_len_result to the length of STRING. STRING may not 8577cea3689Smrg# start with a hyphen. 8587cea3689Smrg test -z "$_G_HAVE_XSI_OPS" \ 8597cea3689Smrg && (eval 'x=a/b/c; 8607cea3689Smrg test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 8617cea3689Smrg && _G_HAVE_XSI_OPS=yes 8627cea3689Smrg 8637cea3689Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 8647cea3689Smrg eval 'func_len () 8657cea3689Smrg { 8667cea3689Smrg $debug_cmd 8677cea3689Smrg 8687cea3689Smrg func_len_result=${#1} 8697cea3689Smrg }' 8707cea3689Smrgelse 8717cea3689Smrg func_len () 8727cea3689Smrg { 8737cea3689Smrg $debug_cmd 8747cea3689Smrg 8757cea3689Smrg func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` 8767cea3689Smrg } 8777cea3689Smrgfi 8787cea3689Smrg 8797cea3689Smrg 8807cea3689Smrg# func_mkdir_p DIRECTORY-PATH 8817cea3689Smrg# --------------------------- 882e19dfac4Smrg# Make sure the entire path to DIRECTORY-PATH is available. 883e19dfac4Smrgfunc_mkdir_p () 884e19dfac4Smrg{ 8857cea3689Smrg $debug_cmd 886e19dfac4Smrg 8877cea3689Smrg _G_directory_path=$1 8887cea3689Smrg _G_dir_list= 889e19dfac4Smrg 8907cea3689Smrg if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then 8917cea3689Smrg 8927cea3689Smrg # Protect directory names starting with '-' 8937cea3689Smrg case $_G_directory_path in 8947cea3689Smrg -*) _G_directory_path=./$_G_directory_path ;; 895e19dfac4Smrg esac 896e19dfac4Smrg 897e19dfac4Smrg # While some portion of DIR does not yet exist... 8987cea3689Smrg while test ! -d "$_G_directory_path"; do 899e19dfac4Smrg # ...make a list in topmost first order. Use a colon delimited 900ae545d91Smrg # list in case some portion of path contains whitespace. 9017cea3689Smrg _G_dir_list=$_G_directory_path:$_G_dir_list 902e19dfac4Smrg 903e19dfac4Smrg # If the last portion added has no slash in it, the list is done 9047cea3689Smrg case $_G_directory_path in */*) ;; *) break ;; esac 905e19dfac4Smrg 906e19dfac4Smrg # ...otherwise throw away the child directory and loop 9077cea3689Smrg _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` 908e19dfac4Smrg done 9097cea3689Smrg _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` 910e19dfac4Smrg 9117cea3689Smrg func_mkdir_p_IFS=$IFS; IFS=: 9127cea3689Smrg for _G_dir in $_G_dir_list; do 9137cea3689Smrg IFS=$func_mkdir_p_IFS 9147cea3689Smrg # mkdir can fail with a 'File exist' error if two processes 915e19dfac4Smrg # try to create one of the directories concurrently. Don't 916e19dfac4Smrg # stop in that case! 9177cea3689Smrg $MKDIR "$_G_dir" 2>/dev/null || : 918e19dfac4Smrg done 9197cea3689Smrg IFS=$func_mkdir_p_IFS 920e19dfac4Smrg 921e19dfac4Smrg # Bail out if we (or some other process) failed to create a directory. 9227cea3689Smrg test -d "$_G_directory_path" || \ 9237cea3689Smrg func_fatal_error "Failed to create '$1'" 924e19dfac4Smrg fi 925e19dfac4Smrg} 92627702724Smrg 92727702724Smrg 9287cea3689Smrg# func_mktempdir [BASENAME] 9297cea3689Smrg# ------------------------- 93027702724Smrg# Make a temporary directory that won't clash with other running 93127702724Smrg# libtool processes, and avoids race conditions if possible. If 9327cea3689Smrg# given, BASENAME is the basename for that directory. 93327702724Smrgfunc_mktempdir () 93427702724Smrg{ 9357cea3689Smrg $debug_cmd 9367cea3689Smrg 9377cea3689Smrg _G_template=${TMPDIR-/tmp}/${1-$progname} 93827702724Smrg 9397cea3689Smrg if test : = "$opt_dry_run"; then 94027702724Smrg # Return a directory name, but don't create it in dry-run mode 9417cea3689Smrg _G_tmpdir=$_G_template-$$ 94227702724Smrg else 94327702724Smrg 94427702724Smrg # If mktemp works, use that first and foremost 9457cea3689Smrg _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` 94627702724Smrg 9477cea3689Smrg if test ! -d "$_G_tmpdir"; then 948e19dfac4Smrg # Failing that, at least try and use $RANDOM to avoid a race 9497cea3689Smrg _G_tmpdir=$_G_template-${RANDOM-0}$$ 95027702724Smrg 9517cea3689Smrg func_mktempdir_umask=`umask` 952e19dfac4Smrg umask 0077 9537cea3689Smrg $MKDIR "$_G_tmpdir" 9547cea3689Smrg umask $func_mktempdir_umask 95527702724Smrg fi 95627702724Smrg 95727702724Smrg # If we're not in dry-run mode, bomb out on failure 9587cea3689Smrg test -d "$_G_tmpdir" || \ 9597cea3689Smrg func_fatal_error "cannot create temporary directory '$_G_tmpdir'" 9607cea3689Smrg fi 9617cea3689Smrg 9627cea3689Smrg $ECHO "$_G_tmpdir" 9637cea3689Smrg} 9647cea3689Smrg 9657cea3689Smrg 9667cea3689Smrg# func_normal_abspath PATH 9677cea3689Smrg# ------------------------ 9687cea3689Smrg# Remove doubled-up and trailing slashes, "." path components, 9697cea3689Smrg# and cancel out any ".." path components in PATH after making 9707cea3689Smrg# it an absolute path. 9717cea3689Smrgfunc_normal_abspath () 9727cea3689Smrg{ 9737cea3689Smrg $debug_cmd 9747cea3689Smrg 9757cea3689Smrg # These SED scripts presuppose an absolute path with a trailing slash. 9767cea3689Smrg _G_pathcar='s|^/\([^/]*\).*$|\1|' 9777cea3689Smrg _G_pathcdr='s|^/[^/]*||' 9787cea3689Smrg _G_removedotparts=':dotsl 9797cea3689Smrg s|/\./|/|g 9807cea3689Smrg t dotsl 9817cea3689Smrg s|/\.$|/|' 9827cea3689Smrg _G_collapseslashes='s|/\{1,\}|/|g' 9837cea3689Smrg _G_finalslash='s|/*$|/|' 9847cea3689Smrg 9857cea3689Smrg # Start from root dir and reassemble the path. 9867cea3689Smrg func_normal_abspath_result= 9877cea3689Smrg func_normal_abspath_tpath=$1 9887cea3689Smrg func_normal_abspath_altnamespace= 9897cea3689Smrg case $func_normal_abspath_tpath in 9907cea3689Smrg "") 9917cea3689Smrg # Empty path, that just means $cwd. 9927cea3689Smrg func_stripname '' '/' "`pwd`" 9937cea3689Smrg func_normal_abspath_result=$func_stripname_result 9947cea3689Smrg return 9957cea3689Smrg ;; 9967cea3689Smrg # The next three entries are used to spot a run of precisely 9977cea3689Smrg # two leading slashes without using negated character classes; 9987cea3689Smrg # we take advantage of case's first-match behaviour. 9997cea3689Smrg ///*) 10007cea3689Smrg # Unusual form of absolute path, do nothing. 10017cea3689Smrg ;; 10027cea3689Smrg //*) 10037cea3689Smrg # Not necessarily an ordinary path; POSIX reserves leading '//' 10047cea3689Smrg # and for example Cygwin uses it to access remote file shares 10057cea3689Smrg # over CIFS/SMB, so we conserve a leading double slash if found. 10067cea3689Smrg func_normal_abspath_altnamespace=/ 10077cea3689Smrg ;; 10087cea3689Smrg /*) 10097cea3689Smrg # Absolute path, do nothing. 10107cea3689Smrg ;; 10117cea3689Smrg *) 10127cea3689Smrg # Relative path, prepend $cwd. 10137cea3689Smrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 10147cea3689Smrg ;; 10157cea3689Smrg esac 10167cea3689Smrg 10177cea3689Smrg # Cancel out all the simple stuff to save iterations. We also want 10187cea3689Smrg # the path to end with a slash for ease of parsing, so make sure 10197cea3689Smrg # there is one (and only one) here. 10207cea3689Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 10217cea3689Smrg -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` 10227cea3689Smrg while :; do 10237cea3689Smrg # Processed it all yet? 10247cea3689Smrg if test / = "$func_normal_abspath_tpath"; then 10257cea3689Smrg # If we ascended to the root using ".." the result may be empty now. 10267cea3689Smrg if test -z "$func_normal_abspath_result"; then 10277cea3689Smrg func_normal_abspath_result=/ 10287cea3689Smrg fi 10297cea3689Smrg break 10307cea3689Smrg fi 10317cea3689Smrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 10327cea3689Smrg -e "$_G_pathcar"` 10337cea3689Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 10347cea3689Smrg -e "$_G_pathcdr"` 10357cea3689Smrg # Figure out what to do with it 10367cea3689Smrg case $func_normal_abspath_tcomponent in 10377cea3689Smrg "") 10387cea3689Smrg # Trailing empty path component, ignore it. 10397cea3689Smrg ;; 10407cea3689Smrg ..) 10417cea3689Smrg # Parent dir; strip last assembled component from result. 10427cea3689Smrg func_dirname "$func_normal_abspath_result" 10437cea3689Smrg func_normal_abspath_result=$func_dirname_result 10447cea3689Smrg ;; 10457cea3689Smrg *) 10467cea3689Smrg # Actual path component, append it. 10477cea3689Smrg func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" 10487cea3689Smrg ;; 10497cea3689Smrg esac 10507cea3689Smrg done 10517cea3689Smrg # Restore leading double-slash if one was found on entry. 10527cea3689Smrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 10537cea3689Smrg} 10547cea3689Smrg 10557cea3689Smrg 10567cea3689Smrg# func_notquiet ARG... 10577cea3689Smrg# -------------------- 10587cea3689Smrg# Echo program name prefixed message only when not in quiet mode. 10597cea3689Smrgfunc_notquiet () 10607cea3689Smrg{ 10617cea3689Smrg $debug_cmd 10627cea3689Smrg 10637cea3689Smrg $opt_quiet || func_echo ${1+"$@"} 10647cea3689Smrg 10657cea3689Smrg # A bug in bash halts the script if the last line of a function 10667cea3689Smrg # fails when set -e is in force, so we need another command to 10677cea3689Smrg # work around that: 10687cea3689Smrg : 10697cea3689Smrg} 10707cea3689Smrg 10717cea3689Smrg 10727cea3689Smrg# func_relative_path SRCDIR DSTDIR 10737cea3689Smrg# -------------------------------- 10747cea3689Smrg# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. 10757cea3689Smrgfunc_relative_path () 10767cea3689Smrg{ 10777cea3689Smrg $debug_cmd 10787cea3689Smrg 10797cea3689Smrg func_relative_path_result= 10807cea3689Smrg func_normal_abspath "$1" 10817cea3689Smrg func_relative_path_tlibdir=$func_normal_abspath_result 10827cea3689Smrg func_normal_abspath "$2" 10837cea3689Smrg func_relative_path_tbindir=$func_normal_abspath_result 10847cea3689Smrg 10857cea3689Smrg # Ascend the tree starting from libdir 10867cea3689Smrg while :; do 10877cea3689Smrg # check if we have found a prefix of bindir 10887cea3689Smrg case $func_relative_path_tbindir in 10897cea3689Smrg $func_relative_path_tlibdir) 10907cea3689Smrg # found an exact match 10917cea3689Smrg func_relative_path_tcancelled= 10927cea3689Smrg break 10937cea3689Smrg ;; 10947cea3689Smrg $func_relative_path_tlibdir*) 10957cea3689Smrg # found a matching prefix 10967cea3689Smrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 10977cea3689Smrg func_relative_path_tcancelled=$func_stripname_result 10987cea3689Smrg if test -z "$func_relative_path_result"; then 10997cea3689Smrg func_relative_path_result=. 11007cea3689Smrg fi 11017cea3689Smrg break 11027cea3689Smrg ;; 11037cea3689Smrg *) 11047cea3689Smrg func_dirname $func_relative_path_tlibdir 11057cea3689Smrg func_relative_path_tlibdir=$func_dirname_result 11067cea3689Smrg if test -z "$func_relative_path_tlibdir"; then 11077cea3689Smrg # Have to descend all the way to the root! 11087cea3689Smrg func_relative_path_result=../$func_relative_path_result 11097cea3689Smrg func_relative_path_tcancelled=$func_relative_path_tbindir 11107cea3689Smrg break 11117cea3689Smrg fi 11127cea3689Smrg func_relative_path_result=../$func_relative_path_result 11137cea3689Smrg ;; 11147cea3689Smrg esac 11157cea3689Smrg done 11167cea3689Smrg 11177cea3689Smrg # Now calculate path; take care to avoid doubling-up slashes. 11187cea3689Smrg func_stripname '' '/' "$func_relative_path_result" 11197cea3689Smrg func_relative_path_result=$func_stripname_result 11207cea3689Smrg func_stripname '/' '/' "$func_relative_path_tcancelled" 11217cea3689Smrg if test -n "$func_stripname_result"; then 11227cea3689Smrg func_append func_relative_path_result "/$func_stripname_result" 11237cea3689Smrg fi 11247cea3689Smrg 11257cea3689Smrg # Normalisation. If bindir is libdir, return '.' else relative path. 11267cea3689Smrg if test -n "$func_relative_path_result"; then 11277cea3689Smrg func_stripname './' '' "$func_relative_path_result" 11287cea3689Smrg func_relative_path_result=$func_stripname_result 112927702724Smrg fi 113027702724Smrg 11317cea3689Smrg test -n "$func_relative_path_result" || func_relative_path_result=. 11327cea3689Smrg 11337cea3689Smrg : 11347cea3689Smrg} 11357cea3689Smrg 11367cea3689Smrg 113795b7a5c8Smrg# func_quote_portable EVAL ARG 113895b7a5c8Smrg# ---------------------------- 113995b7a5c8Smrg# Internal function to portably implement func_quote_arg. Note that we still 114095b7a5c8Smrg# keep attention to performance here so we as much as possible try to avoid 114195b7a5c8Smrg# calling sed binary (so far O(N) complexity as long as func_append is O(1)). 114295b7a5c8Smrgfunc_quote_portable () 11437cea3689Smrg{ 11447cea3689Smrg $debug_cmd 11457cea3689Smrg 114695b7a5c8Smrg $require_check_ifs_backslash 114795b7a5c8Smrg 114895b7a5c8Smrg func_quote_portable_result=$2 114995b7a5c8Smrg 115095b7a5c8Smrg # one-time-loop (easy break) 115195b7a5c8Smrg while true 115295b7a5c8Smrg do 115395b7a5c8Smrg if $1; then 115495b7a5c8Smrg func_quote_portable_result=`$ECHO "$2" | $SED \ 115595b7a5c8Smrg -e "$sed_double_quote_subst" -e "$sed_double_backslash"` 115695b7a5c8Smrg break 11577cea3689Smrg fi 11587cea3689Smrg 115995b7a5c8Smrg # Quote for eval. 116095b7a5c8Smrg case $func_quote_portable_result in 116195b7a5c8Smrg *[\\\`\"\$]*) 116295b7a5c8Smrg # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string 116395b7a5c8Smrg # contains the shell wildcard characters. 116495b7a5c8Smrg case $check_ifs_backshlash_broken$func_quote_portable_result in 116595b7a5c8Smrg :*|*[\[\*\?]*) 116695b7a5c8Smrg func_quote_portable_result=`$ECHO "$func_quote_portable_result" \ 116795b7a5c8Smrg | $SED "$sed_quote_subst"` 116895b7a5c8Smrg break 116995b7a5c8Smrg ;; 117095b7a5c8Smrg esac 117195b7a5c8Smrg 117295b7a5c8Smrg func_quote_portable_old_IFS=$IFS 117395b7a5c8Smrg for _G_char in '\' '`' '"' '$' 117495b7a5c8Smrg do 117595b7a5c8Smrg # STATE($1) PREV($2) SEPARATOR($3) 117695b7a5c8Smrg set start "" "" 117795b7a5c8Smrg func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy 117895b7a5c8Smrg IFS=$_G_char 117995b7a5c8Smrg for _G_part in $func_quote_portable_result 118095b7a5c8Smrg do 118195b7a5c8Smrg case $1 in 118295b7a5c8Smrg quote) 118395b7a5c8Smrg func_append func_quote_portable_result "$3$2" 118495b7a5c8Smrg set quote "$_G_part" "\\$_G_char" 118595b7a5c8Smrg ;; 118695b7a5c8Smrg start) 118795b7a5c8Smrg set first "" "" 118895b7a5c8Smrg func_quote_portable_result= 118995b7a5c8Smrg ;; 119095b7a5c8Smrg first) 119195b7a5c8Smrg set quote "$_G_part" "" 119295b7a5c8Smrg ;; 119395b7a5c8Smrg esac 119495b7a5c8Smrg done 119595b7a5c8Smrg done 119695b7a5c8Smrg IFS=$func_quote_portable_old_IFS 11977cea3689Smrg ;; 119895b7a5c8Smrg *) ;; 11997cea3689Smrg esac 120095b7a5c8Smrg break 12017cea3689Smrg done 120295b7a5c8Smrg 120395b7a5c8Smrg func_quote_portable_unquoted_result=$func_quote_portable_result 120495b7a5c8Smrg case $func_quote_portable_result in 120595b7a5c8Smrg # double-quote args containing shell metacharacters to delay 120695b7a5c8Smrg # word splitting, command substitution and variable expansion 120795b7a5c8Smrg # for a subsequent eval. 120895b7a5c8Smrg # many bourne shells cannot handle close brackets correctly 120995b7a5c8Smrg # in scan sets, so we specify it separately. 121095b7a5c8Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 121195b7a5c8Smrg func_quote_portable_result=\"$func_quote_portable_result\" 121295b7a5c8Smrg ;; 121395b7a5c8Smrg esac 12147cea3689Smrg} 12157cea3689Smrg 12167cea3689Smrg 121795b7a5c8Smrg# func_quotefast_eval ARG 121895b7a5c8Smrg# ----------------------- 121995b7a5c8Smrg# Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG', 122095b7a5c8Smrg# but optimized for speed. Result is stored in $func_quotefast_eval. 122195b7a5c8Smrgif test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then 122295b7a5c8Smrg printf -v _GL_test_printf_tilde %q '~' 122395b7a5c8Smrg if test '\~' = "$_GL_test_printf_tilde"; then 122495b7a5c8Smrg func_quotefast_eval () 122595b7a5c8Smrg { 122695b7a5c8Smrg printf -v func_quotefast_eval_result %q "$1" 122795b7a5c8Smrg } 122895b7a5c8Smrg else 122995b7a5c8Smrg # Broken older Bash implementations. Make those faster too if possible. 123095b7a5c8Smrg func_quotefast_eval () 123195b7a5c8Smrg { 123295b7a5c8Smrg case $1 in 123395b7a5c8Smrg '~'*) 123495b7a5c8Smrg func_quote_portable false "$1" 123595b7a5c8Smrg func_quotefast_eval_result=$func_quote_portable_result 123695b7a5c8Smrg ;; 123795b7a5c8Smrg *) 123895b7a5c8Smrg printf -v func_quotefast_eval_result %q "$1" 123995b7a5c8Smrg ;; 124095b7a5c8Smrg esac 124195b7a5c8Smrg } 124295b7a5c8Smrg fi 124395b7a5c8Smrgelse 124495b7a5c8Smrg func_quotefast_eval () 124595b7a5c8Smrg { 124695b7a5c8Smrg func_quote_portable false "$1" 124795b7a5c8Smrg func_quotefast_eval_result=$func_quote_portable_result 124895b7a5c8Smrg } 124995b7a5c8Smrgfi 12507cea3689Smrg 125195b7a5c8Smrg 125295b7a5c8Smrg# func_quote_arg MODEs ARG 125395b7a5c8Smrg# ------------------------ 125495b7a5c8Smrg# Quote one ARG to be evaled later. MODEs argument may contain zero or more 125595b7a5c8Smrg# specifiers listed below separated by ',' character. This function returns two 125695b7a5c8Smrg# values: 125795b7a5c8Smrg# i) func_quote_arg_result 125895b7a5c8Smrg# double-quoted (when needed), suitable for a subsequent eval 125995b7a5c8Smrg# ii) func_quote_arg_unquoted_result 126095b7a5c8Smrg# has all characters that are still active within double 126195b7a5c8Smrg# quotes backslashified. Available only if 'unquoted' is specified. 126295b7a5c8Smrg# 126395b7a5c8Smrg# Available modes: 126495b7a5c8Smrg# ---------------- 126595b7a5c8Smrg# 'eval' (default) 126695b7a5c8Smrg# - escape shell special characters 126795b7a5c8Smrg# 'expand' 126895b7a5c8Smrg# - the same as 'eval'; but do not quote variable references 126995b7a5c8Smrg# 'pretty' 127095b7a5c8Smrg# - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might 127195b7a5c8Smrg# be used later in func_quote to get output like: 'echo "a b"' instead 127295b7a5c8Smrg# of 'echo a\ b'. This is slower than default on some shells. 127395b7a5c8Smrg# 'unquoted' 127495b7a5c8Smrg# - produce also $func_quote_arg_unquoted_result which does not contain 127595b7a5c8Smrg# wrapping double-quotes. 127695b7a5c8Smrg# 127795b7a5c8Smrg# Examples for 'func_quote_arg pretty,unquoted string': 127895b7a5c8Smrg# 127995b7a5c8Smrg# string | *_result | *_unquoted_result 128095b7a5c8Smrg# ------------+-----------------------+------------------- 128195b7a5c8Smrg# " | \" | \" 128295b7a5c8Smrg# a b | "a b" | a b 128395b7a5c8Smrg# "a b" | "\"a b\"" | \"a b\" 128495b7a5c8Smrg# * | "*" | * 128595b7a5c8Smrg# z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\" 128695b7a5c8Smrg# 128795b7a5c8Smrg# Examples for 'func_quote_arg pretty,unquoted,expand string': 128895b7a5c8Smrg# 128995b7a5c8Smrg# string | *_result | *_unquoted_result 129095b7a5c8Smrg# --------------+---------------------+-------------------- 129195b7a5c8Smrg# z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\" 129295b7a5c8Smrgfunc_quote_arg () 129395b7a5c8Smrg{ 129495b7a5c8Smrg _G_quote_expand=false 129595b7a5c8Smrg case ,$1, in 129695b7a5c8Smrg *,expand,*) 129795b7a5c8Smrg _G_quote_expand=: 129895b7a5c8Smrg ;; 12997cea3689Smrg esac 13007cea3689Smrg 130195b7a5c8Smrg case ,$1, in 130295b7a5c8Smrg *,pretty,*|*,expand,*|*,unquoted,*) 130395b7a5c8Smrg func_quote_portable $_G_quote_expand "$2" 130495b7a5c8Smrg func_quote_arg_result=$func_quote_portable_result 130595b7a5c8Smrg func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result 130695b7a5c8Smrg ;; 130795b7a5c8Smrg *) 130895b7a5c8Smrg # Faster quote-for-eval for some shells. 130995b7a5c8Smrg func_quotefast_eval "$2" 131095b7a5c8Smrg func_quote_arg_result=$func_quotefast_eval_result 13117cea3689Smrg ;; 13127cea3689Smrg esac 131395b7a5c8Smrg} 131495b7a5c8Smrg 13157cea3689Smrg 131695b7a5c8Smrg# func_quote MODEs ARGs... 131795b7a5c8Smrg# ------------------------ 131895b7a5c8Smrg# Quote all ARGs to be evaled later and join them into single command. See 131995b7a5c8Smrg# func_quote_arg's description for more info. 132095b7a5c8Smrgfunc_quote () 132195b7a5c8Smrg{ 132295b7a5c8Smrg $debug_cmd 132395b7a5c8Smrg _G_func_quote_mode=$1 ; shift 132495b7a5c8Smrg func_quote_result= 132595b7a5c8Smrg while test 0 -lt $#; do 132695b7a5c8Smrg func_quote_arg "$_G_func_quote_mode" "$1" 132795b7a5c8Smrg if test -n "$func_quote_result"; then 132895b7a5c8Smrg func_append func_quote_result " $func_quote_arg_result" 132995b7a5c8Smrg else 133095b7a5c8Smrg func_append func_quote_result "$func_quote_arg_result" 133195b7a5c8Smrg fi 133295b7a5c8Smrg shift 133395b7a5c8Smrg done 13347cea3689Smrg} 13357cea3689Smrg 13367cea3689Smrg 13377cea3689Smrg# func_stripname PREFIX SUFFIX NAME 13387cea3689Smrg# --------------------------------- 13397cea3689Smrg# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. 13407cea3689Smrg# PREFIX and SUFFIX must not contain globbing or regex special 13417cea3689Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading 13427cea3689Smrg# dot (in which case that matches only a dot). 13437cea3689Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 13447cea3689Smrg eval 'func_stripname () 13457cea3689Smrg { 13467cea3689Smrg $debug_cmd 13477cea3689Smrg 13487cea3689Smrg # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are 13497cea3689Smrg # positional parameters, so assign one to ordinary variable first. 13507cea3689Smrg func_stripname_result=$3 13517cea3689Smrg func_stripname_result=${func_stripname_result#"$1"} 13527cea3689Smrg func_stripname_result=${func_stripname_result%"$2"} 13537cea3689Smrg }' 13547cea3689Smrgelse 13557cea3689Smrg func_stripname () 13567cea3689Smrg { 13577cea3689Smrg $debug_cmd 13587cea3689Smrg 13597cea3689Smrg case $2 in 13607cea3689Smrg .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; 13617cea3689Smrg *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; 13627cea3689Smrg esac 13637cea3689Smrg } 13647cea3689Smrgfi 13657cea3689Smrg 13667cea3689Smrg 13677cea3689Smrg# func_show_eval CMD [FAIL_EXP] 13687cea3689Smrg# ----------------------------- 13697cea3689Smrg# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 13707cea3689Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 13717cea3689Smrg# is given, then evaluate it. 13727cea3689Smrgfunc_show_eval () 13737cea3689Smrg{ 13747cea3689Smrg $debug_cmd 13757cea3689Smrg 13767cea3689Smrg _G_cmd=$1 13777cea3689Smrg _G_fail_exp=${2-':'} 13787cea3689Smrg 137995b7a5c8Smrg func_quote_arg pretty,expand "$_G_cmd" 138095b7a5c8Smrg eval "func_notquiet $func_quote_arg_result" 13817cea3689Smrg 13827cea3689Smrg $opt_dry_run || { 13837cea3689Smrg eval "$_G_cmd" 13847cea3689Smrg _G_status=$? 13857cea3689Smrg if test 0 -ne "$_G_status"; then 13867cea3689Smrg eval "(exit $_G_status); $_G_fail_exp" 13877cea3689Smrg fi 13887cea3689Smrg } 13897cea3689Smrg} 13907cea3689Smrg 13917cea3689Smrg 13927cea3689Smrg# func_show_eval_locale CMD [FAIL_EXP] 13937cea3689Smrg# ------------------------------------ 13947cea3689Smrg# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 13957cea3689Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 13967cea3689Smrg# is given, then evaluate it. Use the saved locale for evaluation. 13977cea3689Smrgfunc_show_eval_locale () 13987cea3689Smrg{ 13997cea3689Smrg $debug_cmd 14007cea3689Smrg 14017cea3689Smrg _G_cmd=$1 14027cea3689Smrg _G_fail_exp=${2-':'} 14037cea3689Smrg 14047cea3689Smrg $opt_quiet || { 140595b7a5c8Smrg func_quote_arg expand,pretty "$_G_cmd" 140695b7a5c8Smrg eval "func_echo $func_quote_arg_result" 14077cea3689Smrg } 14087cea3689Smrg 14097cea3689Smrg $opt_dry_run || { 14107cea3689Smrg eval "$_G_user_locale 14117cea3689Smrg $_G_cmd" 14127cea3689Smrg _G_status=$? 14137cea3689Smrg eval "$_G_safe_locale" 14147cea3689Smrg if test 0 -ne "$_G_status"; then 14157cea3689Smrg eval "(exit $_G_status); $_G_fail_exp" 14167cea3689Smrg fi 14177cea3689Smrg } 14187cea3689Smrg} 14197cea3689Smrg 14207cea3689Smrg 14217cea3689Smrg# func_tr_sh 14227cea3689Smrg# ---------- 14237cea3689Smrg# Turn $1 into a string suitable for a shell variable name. 14247cea3689Smrg# Result is stored in $func_tr_sh_result. All characters 14257cea3689Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 14267cea3689Smrg# if $1 begins with a digit, a '_' is prepended as well. 14277cea3689Smrgfunc_tr_sh () 14287cea3689Smrg{ 14297cea3689Smrg $debug_cmd 14307cea3689Smrg 14317cea3689Smrg case $1 in 14327cea3689Smrg [0-9]* | *[!a-zA-Z0-9_]*) 14337cea3689Smrg func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` 14347cea3689Smrg ;; 14357cea3689Smrg * ) 14367cea3689Smrg func_tr_sh_result=$1 14377cea3689Smrg ;; 14387cea3689Smrg esac 14397cea3689Smrg} 14407cea3689Smrg 14417cea3689Smrg 14427cea3689Smrg# func_verbose ARG... 14437cea3689Smrg# ------------------- 14447cea3689Smrg# Echo program name prefixed message in verbose mode only. 14457cea3689Smrgfunc_verbose () 14467cea3689Smrg{ 14477cea3689Smrg $debug_cmd 14487cea3689Smrg 14497cea3689Smrg $opt_verbose && func_echo "$*" 14507cea3689Smrg 14517cea3689Smrg : 14527cea3689Smrg} 14537cea3689Smrg 14547cea3689Smrg 14557cea3689Smrg# func_warn_and_continue ARG... 14567cea3689Smrg# ----------------------------- 14577cea3689Smrg# Echo program name prefixed warning message to standard error. 14587cea3689Smrgfunc_warn_and_continue () 14597cea3689Smrg{ 14607cea3689Smrg $debug_cmd 14617cea3689Smrg 14627cea3689Smrg $require_term_colors 14637cea3689Smrg 14647cea3689Smrg func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 14657cea3689Smrg} 14667cea3689Smrg 14677cea3689Smrg 14687cea3689Smrg# func_warning CATEGORY ARG... 14697cea3689Smrg# ---------------------------- 14707cea3689Smrg# Echo program name prefixed warning message to standard error. Warning 14717cea3689Smrg# messages can be filtered according to CATEGORY, where this function 14727cea3689Smrg# elides messages where CATEGORY is not listed in the global variable 14737cea3689Smrg# 'opt_warning_types'. 14747cea3689Smrgfunc_warning () 14757cea3689Smrg{ 14767cea3689Smrg $debug_cmd 14777cea3689Smrg 14787cea3689Smrg # CATEGORY must be in the warning_categories list! 14797cea3689Smrg case " $warning_categories " in 14807cea3689Smrg *" $1 "*) ;; 14817cea3689Smrg *) func_internal_error "invalid warning category '$1'" ;; 14827cea3689Smrg esac 14837cea3689Smrg 14847cea3689Smrg _G_category=$1 14857cea3689Smrg shift 14867cea3689Smrg 14877cea3689Smrg case " $opt_warning_types " in 14887cea3689Smrg *" $_G_category "*) $warning_func ${1+"$@"} ;; 14897cea3689Smrg esac 14907cea3689Smrg} 14917cea3689Smrg 14927cea3689Smrg 14937cea3689Smrg# func_sort_ver VER1 VER2 14947cea3689Smrg# ----------------------- 14957cea3689Smrg# 'sort -V' is not generally available. 14967cea3689Smrg# Note this deviates from the version comparison in automake 14977cea3689Smrg# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a 14987cea3689Smrg# but this should suffice as we won't be specifying old 14997cea3689Smrg# version formats or redundant trailing .0 in bootstrap.conf. 15007cea3689Smrg# If we did want full compatibility then we should probably 15017cea3689Smrg# use m4_version_compare from autoconf. 15027cea3689Smrgfunc_sort_ver () 15037cea3689Smrg{ 15047cea3689Smrg $debug_cmd 15057cea3689Smrg 15067cea3689Smrg printf '%s\n%s\n' "$1" "$2" \ 15077cea3689Smrg | 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 15087cea3689Smrg} 15097cea3689Smrg 15107cea3689Smrg# func_lt_ver PREV CURR 15117cea3689Smrg# --------------------- 15127cea3689Smrg# Return true if PREV and CURR are in the correct order according to 15137cea3689Smrg# func_sort_ver, otherwise false. Use it like this: 15147cea3689Smrg# 15157cea3689Smrg# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." 15167cea3689Smrgfunc_lt_ver () 15177cea3689Smrg{ 15187cea3689Smrg $debug_cmd 15197cea3689Smrg 15207cea3689Smrg test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` 15217cea3689Smrg} 15227cea3689Smrg 15237cea3689Smrg 15247cea3689Smrg# Local variables: 15257cea3689Smrg# mode: shell-script 15267cea3689Smrg# sh-indentation: 2 15277cea3689Smrg# eval: (add-hook 'before-save-hook 'time-stamp) 15287cea3689Smrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" 15297cea3689Smrg# time-stamp-time-zone: "UTC" 15307cea3689Smrg# End: 15317cea3689Smrg#! /bin/sh 15327cea3689Smrg 15337cea3689Smrg# A portable, pluggable option parser for Bourne shell. 15347cea3689Smrg# Written by Gary V. Vaughan, 2010 15357cea3689Smrg 153695b7a5c8Smrg# This is free software. There is NO warranty; not even for 153795b7a5c8Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 153895b7a5c8Smrg# 1539ae545d91Smrg# Copyright (C) 2010-2019, 2021, 2023-2024 Bootstrap Authors 154095b7a5c8Smrg# 154195b7a5c8Smrg# This file is dual licensed under the terms of the MIT license 1542ae545d91Smrg# <https://opensource.org/licenses/MIT>, and GPL version 2 or later 1543ae545d91Smrg# <https://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of 154495b7a5c8Smrg# these licenses when using or redistributing this software or any of 154595b7a5c8Smrg# the files within it. See the URLs above, or the file `LICENSE` 154695b7a5c8Smrg# included in the Bootstrap distribution for the full license texts. 15477cea3689Smrg 154895b7a5c8Smrg# Please report bugs or propose patches to: 154995b7a5c8Smrg# <https://github.com/gnulib-modules/bootstrap/issues> 15507cea3689Smrg 155195b7a5c8Smrg# Set a version string for this script. 155295b7a5c8Smrgscriptversion=2019-02-19.15; # UTC 15537cea3689Smrg 15547cea3689Smrg 15557cea3689Smrg## ------ ## 15567cea3689Smrg## Usage. ## 15577cea3689Smrg## ------ ## 15587cea3689Smrg 15597cea3689Smrg# This file is a library for parsing options in your shell scripts along 15607cea3689Smrg# with assorted other useful supporting features that you can make use 15617cea3689Smrg# of too. 15627cea3689Smrg# 15637cea3689Smrg# For the simplest scripts you might need only: 15647cea3689Smrg# 15657cea3689Smrg# #!/bin/sh 15667cea3689Smrg# . relative/path/to/funclib.sh 15677cea3689Smrg# . relative/path/to/options-parser 15687cea3689Smrg# scriptversion=1.0 15697cea3689Smrg# func_options ${1+"$@"} 15707cea3689Smrg# eval set dummy "$func_options_result"; shift 15717cea3689Smrg# ...rest of your script... 15727cea3689Smrg# 15737cea3689Smrg# In order for the '--version' option to work, you will need to have a 15747cea3689Smrg# suitably formatted comment like the one at the top of this file 157595b7a5c8Smrg# starting with '# Written by ' and ending with '# Copyright'. 15767cea3689Smrg# 15777cea3689Smrg# For '-h' and '--help' to work, you will also need a one line 15787cea3689Smrg# description of your script's purpose in a comment directly above the 15797cea3689Smrg# '# Written by ' line, like the one at the top of this file. 15807cea3689Smrg# 15817cea3689Smrg# The default options also support '--debug', which will turn on shell 15827cea3689Smrg# execution tracing (see the comment above debug_cmd below for another 15837cea3689Smrg# use), and '--verbose' and the func_verbose function to allow your script 15847cea3689Smrg# to display verbose messages only when your user has specified 15857cea3689Smrg# '--verbose'. 15867cea3689Smrg# 158795b7a5c8Smrg# After sourcing this file, you can plug in processing for additional 15887cea3689Smrg# options by amending the variables from the 'Configuration' section 15897cea3689Smrg# below, and following the instructions in the 'Option parsing' 15907cea3689Smrg# section further down. 15917cea3689Smrg 15927cea3689Smrg## -------------- ## 15937cea3689Smrg## Configuration. ## 15947cea3689Smrg## -------------- ## 15957cea3689Smrg 15967cea3689Smrg# You should override these variables in your script after sourcing this 15977cea3689Smrg# file so that they reflect the customisations you have added to the 15987cea3689Smrg# option parser. 15997cea3689Smrg 16007cea3689Smrg# The usage line for option parsing errors and the start of '-h' and 16017cea3689Smrg# '--help' output messages. You can embed shell variables for delayed 16027cea3689Smrg# expansion at the time the message is displayed, but you will need to 16037cea3689Smrg# quote other shell meta-characters carefully to prevent them being 16047cea3689Smrg# expanded when the contents are evaled. 16057cea3689Smrgusage='$progpath [OPTION]...' 16067cea3689Smrg 16077cea3689Smrg# Short help message in response to '-h' and '--help'. Add to this or 16087cea3689Smrg# override it after sourcing this library to reflect the full set of 16097cea3689Smrg# options your script accepts. 16107cea3689Smrgusage_message="\ 16117cea3689Smrg --debug enable verbose shell tracing 16127cea3689Smrg -W, --warnings=CATEGORY 16137cea3689Smrg report the warnings falling in CATEGORY [all] 16147cea3689Smrg -v, --verbose verbosely report processing 16157cea3689Smrg --version print version information and exit 16167cea3689Smrg -h, --help print short or long help message and exit 16177cea3689Smrg" 16187cea3689Smrg 16197cea3689Smrg# Additional text appended to 'usage_message' in response to '--help'. 16207cea3689Smrglong_help_message=" 16217cea3689SmrgWarning categories include: 16227cea3689Smrg 'all' show all warnings 16237cea3689Smrg 'none' turn off all the warnings 16247cea3689Smrg 'error' warnings are treated as fatal errors" 16257cea3689Smrg 16267cea3689Smrg# Help message printed before fatal option parsing errors. 16277cea3689Smrgfatal_help="Try '\$progname --help' for more information." 16287cea3689Smrg 16297cea3689Smrg 16307cea3689Smrg 16317cea3689Smrg## ------------------------- ## 16327cea3689Smrg## Hook function management. ## 16337cea3689Smrg## ------------------------- ## 16347cea3689Smrg 16357cea3689Smrg# This section contains functions for adding, removing, and running hooks 163695b7a5c8Smrg# in the main code. A hook is just a list of function names that can be 163795b7a5c8Smrg# run in order later on. 16387cea3689Smrg 16397cea3689Smrg# func_hookable FUNC_NAME 16407cea3689Smrg# ----------------------- 16417cea3689Smrg# Declare that FUNC_NAME will run hooks added with 16427cea3689Smrg# 'func_add_hook FUNC_NAME ...'. 16437cea3689Smrgfunc_hookable () 16447cea3689Smrg{ 16457cea3689Smrg $debug_cmd 16467cea3689Smrg 16477cea3689Smrg func_append hookable_fns " $1" 16487cea3689Smrg} 16497cea3689Smrg 16507cea3689Smrg 16517cea3689Smrg# func_add_hook FUNC_NAME HOOK_FUNC 16527cea3689Smrg# --------------------------------- 16537cea3689Smrg# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must 16547cea3689Smrg# first have been declared "hookable" by a call to 'func_hookable'. 16557cea3689Smrgfunc_add_hook () 16567cea3689Smrg{ 16577cea3689Smrg $debug_cmd 16587cea3689Smrg 16597cea3689Smrg case " $hookable_fns " in 16607cea3689Smrg *" $1 "*) ;; 16617cea3689Smrg *) func_fatal_error "'$1' does not accept hook functions." ;; 16627cea3689Smrg esac 16637cea3689Smrg 16647cea3689Smrg eval func_append ${1}_hooks '" $2"' 16657cea3689Smrg} 16667cea3689Smrg 16677cea3689Smrg 16687cea3689Smrg# func_remove_hook FUNC_NAME HOOK_FUNC 16697cea3689Smrg# ------------------------------------ 167095b7a5c8Smrg# Remove HOOK_FUNC from the list of hook functions to be called by 167195b7a5c8Smrg# FUNC_NAME. 16727cea3689Smrgfunc_remove_hook () 16737cea3689Smrg{ 16747cea3689Smrg $debug_cmd 16757cea3689Smrg 16767cea3689Smrg eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' 16777cea3689Smrg} 16787cea3689Smrg 16797cea3689Smrg 168095b7a5c8Smrg# func_propagate_result FUNC_NAME_A FUNC_NAME_B 168195b7a5c8Smrg# --------------------------------------------- 168295b7a5c8Smrg# If the *_result variable of FUNC_NAME_A _is set_, assign its value to 168395b7a5c8Smrg# *_result variable of FUNC_NAME_B. 168495b7a5c8Smrgfunc_propagate_result () 168595b7a5c8Smrg{ 168695b7a5c8Smrg $debug_cmd 168795b7a5c8Smrg 168895b7a5c8Smrg func_propagate_result_result=: 168995b7a5c8Smrg if eval "test \"\${${1}_result+set}\" = set" 169095b7a5c8Smrg then 169195b7a5c8Smrg eval "${2}_result=\$${1}_result" 169295b7a5c8Smrg else 169395b7a5c8Smrg func_propagate_result_result=false 169495b7a5c8Smrg fi 169595b7a5c8Smrg} 169695b7a5c8Smrg 169795b7a5c8Smrg 16987cea3689Smrg# func_run_hooks FUNC_NAME [ARG]... 16997cea3689Smrg# --------------------------------- 17007cea3689Smrg# Run all hook functions registered to FUNC_NAME. 170195b7a5c8Smrg# It's assumed that the list of hook functions contains nothing more 17027cea3689Smrg# than a whitespace-delimited list of legal shell function names, and 17037cea3689Smrg# no effort is wasted trying to catch shell meta-characters or preserve 17047cea3689Smrg# whitespace. 17057cea3689Smrgfunc_run_hooks () 17067cea3689Smrg{ 17077cea3689Smrg $debug_cmd 17087cea3689Smrg 17097cea3689Smrg case " $hookable_fns " in 17107cea3689Smrg *" $1 "*) ;; 171195b7a5c8Smrg *) func_fatal_error "'$1' does not support hook functions." ;; 17127cea3689Smrg esac 17137cea3689Smrg 17147cea3689Smrg eval _G_hook_fns=\$$1_hooks; shift 17157cea3689Smrg 17167cea3689Smrg for _G_hook in $_G_hook_fns; do 171795b7a5c8Smrg func_unset "${_G_hook}_result" 171895b7a5c8Smrg eval $_G_hook '${1+"$@"}' 171995b7a5c8Smrg func_propagate_result $_G_hook func_run_hooks 172095b7a5c8Smrg if $func_propagate_result_result; then 172195b7a5c8Smrg eval set dummy "$func_run_hooks_result"; shift 172295b7a5c8Smrg fi 17237cea3689Smrg done 17247cea3689Smrg} 17257cea3689Smrg 17267cea3689Smrg 17277cea3689Smrg 17287cea3689Smrg## --------------- ## 17297cea3689Smrg## Option parsing. ## 17307cea3689Smrg## --------------- ## 17317cea3689Smrg 17327cea3689Smrg# In order to add your own option parsing hooks, you must accept the 173395b7a5c8Smrg# full positional parameter list from your hook function. You may remove 173495b7a5c8Smrg# or edit any options that you action, and then pass back the remaining 173595b7a5c8Smrg# unprocessed options in '<hooked_function_name>_result', escaped 173695b7a5c8Smrg# suitably for 'eval'. 173795b7a5c8Smrg# 173895b7a5c8Smrg# The '<hooked_function_name>_result' variable is automatically unset 173995b7a5c8Smrg# before your hook gets called; for best performance, only set the 174095b7a5c8Smrg# *_result variable when necessary (i.e. don't call the 'func_quote' 174195b7a5c8Smrg# function unnecessarily because it can be an expensive operation on some 174295b7a5c8Smrg# machines). 174395b7a5c8Smrg# 174495b7a5c8Smrg# Like this: 17457cea3689Smrg# 17467cea3689Smrg# my_options_prep () 17477cea3689Smrg# { 17487cea3689Smrg# $debug_cmd 17497cea3689Smrg# 17507cea3689Smrg# # Extend the existing usage message. 17517cea3689Smrg# usage_message=$usage_message' 17527cea3689Smrg# -s, --silent don'\''t print informational messages 17537cea3689Smrg# ' 175495b7a5c8Smrg# # No change in '$@' (ignored completely by this hook). Leave 175595b7a5c8Smrg# # my_options_prep_result variable intact. 17567cea3689Smrg# } 17577cea3689Smrg# func_add_hook func_options_prep my_options_prep 17587cea3689Smrg# 17597cea3689Smrg# 17607cea3689Smrg# my_silent_option () 17617cea3689Smrg# { 17627cea3689Smrg# $debug_cmd 17637cea3689Smrg# 176495b7a5c8Smrg# args_changed=false 176595b7a5c8Smrg# 176695b7a5c8Smrg# # Note that, for efficiency, we parse as many options as we can 17677cea3689Smrg# # recognise in a loop before passing the remainder back to the 17687cea3689Smrg# # caller on the first unrecognised argument we encounter. 17697cea3689Smrg# while test $# -gt 0; do 17707cea3689Smrg# opt=$1; shift 17717cea3689Smrg# case $opt in 177295b7a5c8Smrg# --silent|-s) opt_silent=: 177395b7a5c8Smrg# args_changed=: 177495b7a5c8Smrg# ;; 17757cea3689Smrg# # Separate non-argument short options: 17767cea3689Smrg# -s*) func_split_short_opt "$_G_opt" 17777cea3689Smrg# set dummy "$func_split_short_opt_name" \ 17787cea3689Smrg# "-$func_split_short_opt_arg" ${1+"$@"} 17797cea3689Smrg# shift 178095b7a5c8Smrg# args_changed=: 17817cea3689Smrg# ;; 178295b7a5c8Smrg# *) # Make sure the first unrecognised option "$_G_opt" 178395b7a5c8Smrg# # is added back to "$@" in case we need it later, 178495b7a5c8Smrg# # if $args_changed was set to 'true'. 178595b7a5c8Smrg# set dummy "$_G_opt" ${1+"$@"}; shift; break ;; 17867cea3689Smrg# esac 17877cea3689Smrg# done 17887cea3689Smrg# 178995b7a5c8Smrg# # Only call 'func_quote' here if we processed at least one argument. 179095b7a5c8Smrg# if $args_changed; then 179195b7a5c8Smrg# func_quote eval ${1+"$@"} 179295b7a5c8Smrg# my_silent_option_result=$func_quote_result 179395b7a5c8Smrg# fi 17947cea3689Smrg# } 17957cea3689Smrg# func_add_hook func_parse_options my_silent_option 17967cea3689Smrg# 17977cea3689Smrg# 17987cea3689Smrg# my_option_validation () 17997cea3689Smrg# { 18007cea3689Smrg# $debug_cmd 18017cea3689Smrg# 18027cea3689Smrg# $opt_silent && $opt_verbose && func_fatal_help "\ 18037cea3689Smrg# '--silent' and '--verbose' options are mutually exclusive." 18047cea3689Smrg# } 18057cea3689Smrg# func_add_hook func_validate_options my_option_validation 18067cea3689Smrg# 180795b7a5c8Smrg# You'll also need to manually amend $usage_message to reflect the extra 18087cea3689Smrg# options you parse. It's preferable to append if you can, so that 18097cea3689Smrg# multiple option parsing hooks can be added safely. 18107cea3689Smrg 18117cea3689Smrg 181295b7a5c8Smrg# func_options_finish [ARG]... 181395b7a5c8Smrg# ---------------------------- 181495b7a5c8Smrg# Finishing the option parse loop (call 'func_options' hooks ATM). 181595b7a5c8Smrgfunc_options_finish () 181695b7a5c8Smrg{ 181795b7a5c8Smrg $debug_cmd 181895b7a5c8Smrg 181995b7a5c8Smrg func_run_hooks func_options ${1+"$@"} 182095b7a5c8Smrg func_propagate_result func_run_hooks func_options_finish 182195b7a5c8Smrg} 182295b7a5c8Smrg 182395b7a5c8Smrg 18247cea3689Smrg# func_options [ARG]... 18257cea3689Smrg# --------------------- 18267cea3689Smrg# All the functions called inside func_options are hookable. See the 18277cea3689Smrg# individual implementations for details. 18287cea3689Smrgfunc_hookable func_options 18297cea3689Smrgfunc_options () 18307cea3689Smrg{ 18317cea3689Smrg $debug_cmd 18327cea3689Smrg 183395b7a5c8Smrg _G_options_quoted=false 18347cea3689Smrg 183595b7a5c8Smrg for my_func in options_prep parse_options validate_options options_finish 183695b7a5c8Smrg do 183795b7a5c8Smrg func_unset func_${my_func}_result 183895b7a5c8Smrg func_unset func_run_hooks_result 183995b7a5c8Smrg eval func_$my_func '${1+"$@"}' 184095b7a5c8Smrg func_propagate_result func_$my_func func_options 184195b7a5c8Smrg if $func_propagate_result_result; then 184295b7a5c8Smrg eval set dummy "$func_options_result"; shift 184395b7a5c8Smrg _G_options_quoted=: 184495b7a5c8Smrg fi 184595b7a5c8Smrg done 18467cea3689Smrg 184795b7a5c8Smrg $_G_options_quoted || { 184895b7a5c8Smrg # As we (func_options) are top-level options-parser function and 184995b7a5c8Smrg # nobody quoted "$@" for us yet, we need to do it explicitly for 185095b7a5c8Smrg # caller. 185195b7a5c8Smrg func_quote eval ${1+"$@"} 185295b7a5c8Smrg func_options_result=$func_quote_result 185395b7a5c8Smrg } 185427702724Smrg} 185527702724Smrg 185627702724Smrg 18577cea3689Smrg# func_options_prep [ARG]... 18587cea3689Smrg# -------------------------- 18597cea3689Smrg# All initialisations required before starting the option parse loop. 18607cea3689Smrg# Note that when calling hook functions, we pass through the list of 18617cea3689Smrg# positional parameters. If a hook function modifies that list, and 186295b7a5c8Smrg# needs to propagate that back to rest of this script, then the complete 186395b7a5c8Smrg# modified list must be put in 'func_run_hooks_result' before returning. 18647cea3689Smrgfunc_hookable func_options_prep 18657cea3689Smrgfunc_options_prep () 186627702724Smrg{ 18677cea3689Smrg $debug_cmd 1868e19dfac4Smrg 18697cea3689Smrg # Option defaults: 18707cea3689Smrg opt_verbose=false 18717cea3689Smrg opt_warning_types= 18727cea3689Smrg 18737cea3689Smrg func_run_hooks func_options_prep ${1+"$@"} 187495b7a5c8Smrg func_propagate_result func_run_hooks func_options_prep 187527702724Smrg} 187627702724Smrg 187727702724Smrg 18787cea3689Smrg# func_parse_options [ARG]... 18797cea3689Smrg# --------------------------- 18807cea3689Smrg# The main option parsing loop. 18817cea3689Smrgfunc_hookable func_parse_options 18827cea3689Smrgfunc_parse_options () 188327702724Smrg{ 18847cea3689Smrg $debug_cmd 1885e19dfac4Smrg 188695b7a5c8Smrg _G_parse_options_requote=false 18877cea3689Smrg # this just eases exit handling 18887cea3689Smrg while test $# -gt 0; do 18897cea3689Smrg # Defer to hook functions for initial option parsing, so they 18907cea3689Smrg # get priority in the event of reusing an option name. 18917cea3689Smrg func_run_hooks func_parse_options ${1+"$@"} 189295b7a5c8Smrg func_propagate_result func_run_hooks func_parse_options 189395b7a5c8Smrg if $func_propagate_result_result; then 189495b7a5c8Smrg eval set dummy "$func_parse_options_result"; shift 189595b7a5c8Smrg # Even though we may have changed "$@", we passed the "$@" array 189695b7a5c8Smrg # down into the hook and it quoted it for us (because we are in 189795b7a5c8Smrg # this if-branch). No need to quote it again. 189895b7a5c8Smrg _G_parse_options_requote=false 189995b7a5c8Smrg fi 190027702724Smrg 19017cea3689Smrg # Break out of the loop if we already parsed every option. 19027cea3689Smrg test $# -gt 0 || break 190327702724Smrg 190495b7a5c8Smrg # We expect that one of the options parsed in this function matches 190595b7a5c8Smrg # and thus we remove _G_opt from "$@" and need to re-quote. 190695b7a5c8Smrg _G_match_parse_options=: 19077cea3689Smrg _G_opt=$1 19087cea3689Smrg shift 19097cea3689Smrg case $_G_opt in 19107cea3689Smrg --debug|-x) debug_cmd='set -x' 191195b7a5c8Smrg func_echo "enabling shell trace mode" >&2 19127cea3689Smrg $debug_cmd 19137cea3689Smrg ;; 19147cea3689Smrg 19157cea3689Smrg --no-warnings|--no-warning|--no-warn) 19167cea3689Smrg set dummy --warnings none ${1+"$@"} 19177cea3689Smrg shift 19187cea3689Smrg ;; 1919e19dfac4Smrg 19207cea3689Smrg --warnings|--warning|-W) 192195b7a5c8Smrg if test $# = 0 && func_missing_arg $_G_opt; then 192295b7a5c8Smrg _G_parse_options_requote=: 192395b7a5c8Smrg break 192495b7a5c8Smrg fi 19257cea3689Smrg case " $warning_categories $1" in 19267cea3689Smrg *" $1 "*) 19277cea3689Smrg # trailing space prevents matching last $1 above 19287cea3689Smrg func_append_uniq opt_warning_types " $1" 19297cea3689Smrg ;; 19307cea3689Smrg *all) 19317cea3689Smrg opt_warning_types=$warning_categories 19327cea3689Smrg ;; 19337cea3689Smrg *none) 19347cea3689Smrg opt_warning_types=none 19357cea3689Smrg warning_func=: 19367cea3689Smrg ;; 19377cea3689Smrg *error) 19387cea3689Smrg opt_warning_types=$warning_categories 19397cea3689Smrg warning_func=func_fatal_error 19407cea3689Smrg ;; 19417cea3689Smrg *) 19427cea3689Smrg func_fatal_error \ 19437cea3689Smrg "unsupported warning category: '$1'" 19447cea3689Smrg ;; 19457cea3689Smrg esac 19467cea3689Smrg shift 19477cea3689Smrg ;; 19487cea3689Smrg 19497cea3689Smrg --verbose|-v) opt_verbose=: ;; 19507cea3689Smrg --version) func_version ;; 19517cea3689Smrg -\?|-h) func_usage ;; 19527cea3689Smrg --help) func_help ;; 19537cea3689Smrg 19547cea3689Smrg # Separate optargs to long options (plugins may need this): 19557cea3689Smrg --*=*) func_split_equals "$_G_opt" 19567cea3689Smrg set dummy "$func_split_equals_lhs" \ 19577cea3689Smrg "$func_split_equals_rhs" ${1+"$@"} 19587cea3689Smrg shift 19597cea3689Smrg ;; 19607cea3689Smrg 19617cea3689Smrg # Separate optargs to short options: 19627cea3689Smrg -W*) 19637cea3689Smrg func_split_short_opt "$_G_opt" 19647cea3689Smrg set dummy "$func_split_short_opt_name" \ 19657cea3689Smrg "$func_split_short_opt_arg" ${1+"$@"} 19667cea3689Smrg shift 19677cea3689Smrg ;; 19687cea3689Smrg 19697cea3689Smrg # Separate non-argument short options: 19707cea3689Smrg -\?*|-h*|-v*|-x*) 19717cea3689Smrg func_split_short_opt "$_G_opt" 19727cea3689Smrg set dummy "$func_split_short_opt_name" \ 19737cea3689Smrg "-$func_split_short_opt_arg" ${1+"$@"} 19747cea3689Smrg shift 19757cea3689Smrg ;; 19767cea3689Smrg 197795b7a5c8Smrg --) _G_parse_options_requote=: ; break ;; 19787cea3689Smrg -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; 197995b7a5c8Smrg *) set dummy "$_G_opt" ${1+"$@"}; shift 198095b7a5c8Smrg _G_match_parse_options=false 198195b7a5c8Smrg break 198295b7a5c8Smrg ;; 19837cea3689Smrg esac 198495b7a5c8Smrg 198595b7a5c8Smrg if $_G_match_parse_options; then 198695b7a5c8Smrg _G_parse_options_requote=: 198795b7a5c8Smrg fi 19887cea3689Smrg done 19897cea3689Smrg 199095b7a5c8Smrg if $_G_parse_options_requote; then 199195b7a5c8Smrg # save modified positional parameters for caller 199295b7a5c8Smrg func_quote eval ${1+"$@"} 199395b7a5c8Smrg func_parse_options_result=$func_quote_result 199495b7a5c8Smrg fi 199527702724Smrg} 199627702724Smrg 1997e19dfac4Smrg 19987cea3689Smrg# func_validate_options [ARG]... 19997cea3689Smrg# ------------------------------ 20007cea3689Smrg# Perform any sanity checks on option settings and/or unconsumed 20017cea3689Smrg# arguments. 20027cea3689Smrgfunc_hookable func_validate_options 20037cea3689Smrgfunc_validate_options () 200427702724Smrg{ 20057cea3689Smrg $debug_cmd 200627702724Smrg 20077cea3689Smrg # Display all warnings if -W was not given. 20087cea3689Smrg test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" 2009e19dfac4Smrg 20107cea3689Smrg func_run_hooks func_validate_options ${1+"$@"} 201195b7a5c8Smrg func_propagate_result func_run_hooks func_validate_options 201227702724Smrg 20137cea3689Smrg # Bail if the options were screwed! 20147cea3689Smrg $exit_cmd $EXIT_FAILURE 2015313a12fdSmrg} 2016e19dfac4Smrg 2017e19dfac4Smrg 2018313a12fdSmrg 20197cea3689Smrg## ----------------- ## 20207cea3689Smrg## Helper functions. ## 20217cea3689Smrg## ----------------- ## 2022e19dfac4Smrg 20237cea3689Smrg# This section contains the helper functions used by the rest of the 20247cea3689Smrg# hookable option parser framework in ascii-betical order. 20257cea3689Smrg 20267cea3689Smrg 20277cea3689Smrg# func_fatal_help ARG... 20287cea3689Smrg# ---------------------- 20297cea3689Smrg# Echo program name prefixed message to standard error, followed by 20307cea3689Smrg# a help hint, and exit. 20317cea3689Smrgfunc_fatal_help () 2032e19dfac4Smrg{ 20337cea3689Smrg $debug_cmd 2034313a12fdSmrg 20357cea3689Smrg eval \$ECHO \""Usage: $usage"\" 20367cea3689Smrg eval \$ECHO \""$fatal_help"\" 20377cea3689Smrg func_error ${1+"$@"} 20387cea3689Smrg exit $EXIT_FAILURE 2039e19dfac4Smrg} 2040e19dfac4Smrg 20417cea3689Smrg 20427cea3689Smrg# func_help 20437cea3689Smrg# --------- 20447cea3689Smrg# Echo long help message to standard output and exit. 2045e19dfac4Smrgfunc_help () 2046e19dfac4Smrg{ 20477cea3689Smrg $debug_cmd 20487cea3689Smrg 20497cea3689Smrg func_usage_message 20507cea3689Smrg $ECHO "$long_help_message" 20517cea3689Smrg exit 0 2052e19dfac4Smrg} 2053e19dfac4Smrg 20547cea3689Smrg 20557cea3689Smrg# func_missing_arg ARGNAME 20567cea3689Smrg# ------------------------ 2057e19dfac4Smrg# Echo program name prefixed message to standard error and set global 2058e19dfac4Smrg# exit_cmd. 2059e19dfac4Smrgfunc_missing_arg () 2060e19dfac4Smrg{ 20617cea3689Smrg $debug_cmd 2062313a12fdSmrg 20637cea3689Smrg func_error "Missing argument for '$1'." 2064e19dfac4Smrg exit_cmd=exit 2065e19dfac4Smrg} 2066e19dfac4Smrg 2067e19dfac4Smrg 20687cea3689Smrg# func_split_equals STRING 20697cea3689Smrg# ------------------------ 207095b7a5c8Smrg# Set func_split_equals_lhs and func_split_equals_rhs shell variables 207195b7a5c8Smrg# after splitting STRING at the '=' sign. 20727cea3689Smrgtest -z "$_G_HAVE_XSI_OPS" \ 20737cea3689Smrg && (eval 'x=a/b/c; 20747cea3689Smrg test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 20757cea3689Smrg && _G_HAVE_XSI_OPS=yes 20767cea3689Smrg 20777cea3689Smrgif test yes = "$_G_HAVE_XSI_OPS" 20787cea3689Smrgthen 20797cea3689Smrg # This is an XSI compatible shell, allowing a faster implementation... 20807cea3689Smrg eval 'func_split_equals () 20817cea3689Smrg { 20827cea3689Smrg $debug_cmd 20837cea3689Smrg 20847cea3689Smrg func_split_equals_lhs=${1%%=*} 20857cea3689Smrg func_split_equals_rhs=${1#*=} 208695b7a5c8Smrg if test "x$func_split_equals_lhs" = "x$1"; then 208795b7a5c8Smrg func_split_equals_rhs= 208895b7a5c8Smrg fi 20897cea3689Smrg }' 20907cea3689Smrgelse 20917cea3689Smrg # ...otherwise fall back to using expr, which is often a shell builtin. 20927cea3689Smrg func_split_equals () 20937cea3689Smrg { 20947cea3689Smrg $debug_cmd 20957cea3689Smrg 20967cea3689Smrg func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` 20977cea3689Smrg func_split_equals_rhs= 209895b7a5c8Smrg test "x$func_split_equals_lhs=" = "x$1" \ 20997cea3689Smrg || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` 21007cea3689Smrg } 21017cea3689Smrgfi #func_split_equals 21027cea3689Smrg 21037cea3689Smrg 21047cea3689Smrg# func_split_short_opt SHORTOPT 21057cea3689Smrg# ----------------------------- 2106313a12fdSmrg# Set func_split_short_opt_name and func_split_short_opt_arg shell 2107313a12fdSmrg# variables after splitting SHORTOPT after the 2nd character. 21087cea3689Smrgif test yes = "$_G_HAVE_XSI_OPS" 21097cea3689Smrgthen 21107cea3689Smrg # This is an XSI compatible shell, allowing a faster implementation... 21117cea3689Smrg eval 'func_split_short_opt () 21127cea3689Smrg { 21137cea3689Smrg $debug_cmd 21147cea3689Smrg 21157cea3689Smrg func_split_short_opt_arg=${1#??} 21167cea3689Smrg func_split_short_opt_name=${1%"$func_split_short_opt_arg"} 21177cea3689Smrg }' 21187cea3689Smrgelse 21197cea3689Smrg # ...otherwise fall back to using expr, which is often a shell builtin. 21207cea3689Smrg func_split_short_opt () 21217cea3689Smrg { 21227cea3689Smrg $debug_cmd 21237cea3689Smrg 212495b7a5c8Smrg func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'` 21257cea3689Smrg func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` 21267cea3689Smrg } 21277cea3689Smrgfi #func_split_short_opt 21287cea3689Smrg 21297cea3689Smrg 21307cea3689Smrg# func_usage 21317cea3689Smrg# ---------- 21327cea3689Smrg# Echo short help message to standard output and exit. 21337cea3689Smrgfunc_usage () 2134313a12fdSmrg{ 21357cea3689Smrg $debug_cmd 2136313a12fdSmrg 21377cea3689Smrg func_usage_message 21387cea3689Smrg $ECHO "Run '$progname --help |${PAGER-more}' for full usage" 21397cea3689Smrg exit 0 21407cea3689Smrg} 2141e19dfac4Smrg 2142e19dfac4Smrg 21437cea3689Smrg# func_usage_message 21447cea3689Smrg# ------------------ 21457cea3689Smrg# Echo short help message to standard output. 21467cea3689Smrgfunc_usage_message () 2147313a12fdSmrg{ 21487cea3689Smrg $debug_cmd 2149313a12fdSmrg 21507cea3689Smrg eval \$ECHO \""Usage: $usage"\" 21517cea3689Smrg echo 21527cea3689Smrg $SED -n 's|^# || 21537cea3689Smrg /^Written by/{ 21547cea3689Smrg x;p;x 21557cea3689Smrg } 21567cea3689Smrg h 21577cea3689Smrg /^Written by/q' < "$progpath" 21587cea3689Smrg echo 21597cea3689Smrg eval \$ECHO \""$usage_message"\" 21607cea3689Smrg} 2161313a12fdSmrg 2162313a12fdSmrg 21637cea3689Smrg# func_version 21647cea3689Smrg# ------------ 21657cea3689Smrg# Echo version message to standard output and exit. 216695b7a5c8Smrg# The version message is extracted from the calling file's header 216795b7a5c8Smrg# comments, with leading '# ' stripped: 216895b7a5c8Smrg# 1. First display the progname and version 216995b7a5c8Smrg# 2. Followed by the header comment line matching /^# Written by / 217095b7a5c8Smrg# 3. Then a blank line followed by the first following line matching 217195b7a5c8Smrg# /^# Copyright / 217295b7a5c8Smrg# 4. Immediately followed by any lines between the previous matches, 217395b7a5c8Smrg# except lines preceding the intervening completely blank line. 217495b7a5c8Smrg# For example, see the header comments of this file. 21757cea3689Smrgfunc_version () 21767cea3689Smrg{ 21777cea3689Smrg $debug_cmd 2178e19dfac4Smrg 21797cea3689Smrg printf '%s\n' "$progname $scriptversion" 21807cea3689Smrg $SED -n ' 218195b7a5c8Smrg /^# Written by /!b 218295b7a5c8Smrg s|^# ||; p; n 218395b7a5c8Smrg 218495b7a5c8Smrg :fwd2blnk 218595b7a5c8Smrg /./ { 218695b7a5c8Smrg n 218795b7a5c8Smrg b fwd2blnk 21887cea3689Smrg } 218995b7a5c8Smrg p; n 219095b7a5c8Smrg 219195b7a5c8Smrg :holdwrnt 219295b7a5c8Smrg s|^# || 219395b7a5c8Smrg s|^# *$|| 219495b7a5c8Smrg /^Copyright /!{ 219595b7a5c8Smrg /./H 219695b7a5c8Smrg n 219795b7a5c8Smrg b holdwrnt 21987cea3689Smrg } 219995b7a5c8Smrg 220095b7a5c8Smrg s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| 220195b7a5c8Smrg G 220295b7a5c8Smrg s|\(\n\)\n*|\1|g 220395b7a5c8Smrg p; q' < "$progpath" 2204e19dfac4Smrg 22057cea3689Smrg exit $? 22067cea3689Smrg} 220727702724Smrg 220827702724Smrg 22097cea3689Smrg# Local variables: 22107cea3689Smrg# mode: shell-script 22117cea3689Smrg# sh-indentation: 2 22127cea3689Smrg# eval: (add-hook 'before-save-hook 'time-stamp) 221395b7a5c8Smrg# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC" 22147cea3689Smrg# time-stamp-time-zone: "UTC" 22157cea3689Smrg# End: 221627702724Smrg 22177cea3689Smrg# Set a version string. 2218ae545d91Smrgscriptversion='(GNU libtool) 2.5.4' 2219ae545d91Smrg 2220ae545d91Smrg# func_version 2221ae545d91Smrg# ------------ 2222ae545d91Smrg# Echo version message to standard output and exit. 2223ae545d91Smrgfunc_version () 2224ae545d91Smrg{ 2225ae545d91Smrg $debug_cmd 2226ae545d91Smrg 2227ae545d91Smrg year=`date +%Y` 2228ae545d91Smrg 2229ae545d91Smrg cat <<EOF 2230ae545d91Smrg$progname $scriptversion 2231ae545d91SmrgCopyright (C) $year Free Software Foundation, Inc. 2232ae545d91SmrgLicense GPLv2+: GNU GPL version 2 or later <https://gnu.org/licenses/gpl.html> 2233ae545d91SmrgThis is free software: you are free to change and redistribute it. 2234ae545d91SmrgThere is NO WARRANTY, to the extent permitted by law. 2235ae545d91Smrg 2236ae545d91SmrgOriginally written by Gordon Matzigkeit, 1996 2237ae545d91Smrg(See AUTHORS for complete contributor listing) 2238ae545d91SmrgEOF 2239ae545d91Smrg 2240ae545d91Smrg exit $? 2241ae545d91Smrg} 224227702724Smrg 224327702724Smrg 22447cea3689Smrg# func_echo ARG... 22457cea3689Smrg# ---------------- 22467cea3689Smrg# Libtool also displays the current mode in messages, so override 22477cea3689Smrg# funclib.sh func_echo with this custom definition. 22487cea3689Smrgfunc_echo () 2249313a12fdSmrg{ 22507cea3689Smrg $debug_cmd 2251313a12fdSmrg 22527cea3689Smrg _G_message=$* 2253313a12fdSmrg 22547cea3689Smrg func_echo_IFS=$IFS 22557cea3689Smrg IFS=$nl 22567cea3689Smrg for _G_line in $_G_message; do 22577cea3689Smrg IFS=$func_echo_IFS 22587cea3689Smrg $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" 22597cea3689Smrg done 22607cea3689Smrg IFS=$func_echo_IFS 22617cea3689Smrg} 2262313a12fdSmrg 22637cea3689Smrg 22647cea3689Smrg## ---------------- ## 22657cea3689Smrg## Options parsing. ## 22667cea3689Smrg## ---------------- ## 22677cea3689Smrg 22687cea3689Smrg# Hook in the functions to make sure our own options are parsed during 22697cea3689Smrg# the option parsing loop. 22707cea3689Smrg 22717cea3689Smrgusage='$progpath [OPTION]... [MODE-ARG]...' 22727cea3689Smrg 22737cea3689Smrg# Short help message in response to '-h'. 22747cea3689Smrgusage_message="Options: 2275ae545d91Smrg --config show all configuration variables 2276ae545d91Smrg --debug enable verbose shell tracing 2277ae545d91Smrg -n, --dry-run display commands without modifying any files 2278ae545d91Smrg --features display basic configuration information 2279ae545d91Smrg --finish use operation '--mode=finish' 2280ae545d91Smrg --mode=MODE use operation mode MODE 2281ae545d91Smrg --no-finish don't update shared library cache 2282ae545d91Smrg --no-quiet, --no-silent print default informational messages 2283ae545d91Smrg --no-warnings equivalent to '-Wnone' 2284ae545d91Smrg --preserve-dup-deps don't remove duplicate dependency libraries 2285ae545d91Smrg --quiet, --silent don't print informational messages 2286ae545d91Smrg --reorder-cache=DIRS reorder shared library cache for preferred DIRS 2287ae545d91Smrg --tag=TAG use configuration variables from tag TAG 2288ae545d91Smrg -v, --verbose print more informational messages than default 2289ae545d91Smrg --version print version information 2290ae545d91Smrg -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] 2291ae545d91Smrg -h, --help, --help-all print short, long, or detailed help message 22927cea3689Smrg" 2293313a12fdSmrg 22947cea3689Smrg# Additional text appended to 'usage_message' in response to '--help'. 22957cea3689Smrgfunc_help () 2296313a12fdSmrg{ 22977cea3689Smrg $debug_cmd 22987cea3689Smrg 22997cea3689Smrg func_usage_message 23007cea3689Smrg $ECHO "$long_help_message 23017cea3689Smrg 23027cea3689SmrgMODE must be one of the following: 23037cea3689Smrg 23047cea3689Smrg clean remove files from the build directory 23057cea3689Smrg compile compile a source file into a libtool object 23067cea3689Smrg execute automatically set library path, then run a program 23077cea3689Smrg finish complete the installation of libtool libraries 23087cea3689Smrg install install libraries or executables 23097cea3689Smrg link create a library or an executable 23107cea3689Smrg uninstall remove libraries from an installed directory 23117cea3689Smrg 23127cea3689SmrgMODE-ARGS vary depending on the MODE. When passed as first option, 23137cea3689Smrg'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. 23147cea3689SmrgTry '$progname --help --mode=MODE' for a more detailed description of MODE. 23157cea3689Smrg 23167cea3689SmrgWhen reporting a bug, please describe a test case to reproduce it and 23177cea3689Smrginclude the following information: 23187cea3689Smrg 23197cea3689Smrg host-triplet: $host 23207cea3689Smrg shell: $SHELL 23217cea3689Smrg compiler: $LTCC 23227cea3689Smrg compiler flags: $LTCFLAGS 23237cea3689Smrg linker: $LD (gnu? $with_gnu_ld) 2324ae545d91Smrg version: $progname $scriptversion 23257cea3689Smrg automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` 23267cea3689Smrg autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` 23277cea3689Smrg 23287cea3689SmrgReport bugs to <bug-libtool@gnu.org>. 2329ae545d91SmrgGNU libtool home page: <https://www.gnu.org/software/libtool/>. 2330ae545d91SmrgGeneral help using GNU software: <https://www.gnu.org/gethelp/>." 23317cea3689Smrg exit 0 23327cea3689Smrg} 2333313a12fdSmrg 2334313a12fdSmrg 23357cea3689Smrg# func_lo2o OBJECT-NAME 23367cea3689Smrg# --------------------- 23377cea3689Smrg# Transform OBJECT-NAME from a '.lo' suffix to the platform specific 23387cea3689Smrg# object suffix. 23397cea3689Smrg 23407cea3689Smrglo2o=s/\\.lo\$/.$objext/ 23417cea3689Smrgo2lo=s/\\.$objext\$/.lo/ 23427cea3689Smrg 23437cea3689Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 23447cea3689Smrg eval 'func_lo2o () 23457cea3689Smrg { 23467cea3689Smrg case $1 in 23477cea3689Smrg *.lo) func_lo2o_result=${1%.lo}.$objext ;; 23487cea3689Smrg * ) func_lo2o_result=$1 ;; 23497cea3689Smrg esac 23507cea3689Smrg }' 23517cea3689Smrg 23527cea3689Smrg # func_xform LIBOBJ-OR-SOURCE 23537cea3689Smrg # --------------------------- 23547cea3689Smrg # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) 23557cea3689Smrg # suffix to a '.lo' libtool-object suffix. 23567cea3689Smrg eval 'func_xform () 23577cea3689Smrg { 23587cea3689Smrg func_xform_result=${1%.*}.lo 23597cea3689Smrg }' 23607cea3689Smrgelse 23617cea3689Smrg # ...otherwise fall back to using sed. 23627cea3689Smrg func_lo2o () 23637cea3689Smrg { 23647cea3689Smrg func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` 23657cea3689Smrg } 23667cea3689Smrg 23677cea3689Smrg func_xform () 23687cea3689Smrg { 23697cea3689Smrg func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` 23707cea3689Smrg } 23717cea3689Smrgfi 2372313a12fdSmrg 2373313a12fdSmrg 23747cea3689Smrg# func_fatal_configuration ARG... 23757cea3689Smrg# ------------------------------- 2376e19dfac4Smrg# Echo program name prefixed message to standard error, followed by 2377e19dfac4Smrg# a configuration failure hint, and exit. 2378e19dfac4Smrgfunc_fatal_configuration () 2379e19dfac4Smrg{ 238095b7a5c8Smrg func_fatal_error ${1+"$@"} \ 23817cea3689Smrg "See the $PACKAGE documentation for more information." \ 23827cea3689Smrg "Fatal configuration error." 2383e19dfac4Smrg} 2384e19dfac4Smrg 2385e19dfac4Smrg 2386e19dfac4Smrg# func_config 23877cea3689Smrg# ----------- 2388e19dfac4Smrg# Display the configuration for all the tags in this script. 2389e19dfac4Smrgfunc_config () 2390e19dfac4Smrg{ 2391e19dfac4Smrg re_begincf='^# ### BEGIN LIBTOOL' 2392e19dfac4Smrg re_endcf='^# ### END LIBTOOL' 2393e19dfac4Smrg 2394e19dfac4Smrg # Default configuration. 2395e19dfac4Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 239627702724Smrg 239727702724Smrg # Now print the configurations for the tags. 239827702724Smrg for tagname in $taglist; do 2399e19dfac4Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 240027702724Smrg done 240127702724Smrg 2402e19dfac4Smrg exit $? 2403e19dfac4Smrg} 240427702724Smrg 24057cea3689Smrg 2406e19dfac4Smrg# func_features 24077cea3689Smrg# ------------- 2408e19dfac4Smrg# Display the features supported by this script. 2409e19dfac4Smrgfunc_features () 2410e19dfac4Smrg{ 2411313a12fdSmrg echo "host: $host" 24127cea3689Smrg if test yes = "$build_libtool_libs"; then 2413313a12fdSmrg echo "enable shared libraries" 241427702724Smrg else 2415313a12fdSmrg echo "disable shared libraries" 241627702724Smrg fi 24177cea3689Smrg if test yes = "$build_old_libs"; then 2418313a12fdSmrg echo "enable static libraries" 241927702724Smrg else 2420313a12fdSmrg echo "disable static libraries" 242127702724Smrg fi 2422e19dfac4Smrg 242327702724Smrg exit $? 2424e19dfac4Smrg} 2425e19dfac4Smrg 24267cea3689Smrg 24277cea3689Smrg# func_enable_tag TAGNAME 24287cea3689Smrg# ----------------------- 2429e19dfac4Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 2430e19dfac4Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 2431e19dfac4Smrg# variable here. 2432e19dfac4Smrgfunc_enable_tag () 2433e19dfac4Smrg{ 24347cea3689Smrg # Global variable: 24357cea3689Smrg tagname=$1 243627702724Smrg 24377cea3689Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 24387cea3689Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 24397cea3689Smrg sed_extractcf=/$re_begincf/,/$re_endcf/p 244027702724Smrg 24417cea3689Smrg # Validate tagname. 24427cea3689Smrg case $tagname in 24437cea3689Smrg *[!-_A-Za-z0-9,/]*) 24447cea3689Smrg func_fatal_error "invalid tag name: $tagname" 24457cea3689Smrg ;; 24467cea3689Smrg esac 244727702724Smrg 24487cea3689Smrg # Don't test for the "default" C tag, as we know it's 24497cea3689Smrg # there but not specially marked. 24507cea3689Smrg case $tagname in 24517cea3689Smrg CC) ;; 2452e19dfac4Smrg *) 24537cea3689Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 24547cea3689Smrg taglist="$taglist $tagname" 24557cea3689Smrg 24567cea3689Smrg # Evaluate the configuration. Be careful to quote the path 24577cea3689Smrg # and the sed script, to avoid splitting on whitespace, but 24587cea3689Smrg # also don't use non-portable quotes within backquotes within 24597cea3689Smrg # quotes we have to do it in 2 steps: 24607cea3689Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 24617cea3689Smrg eval "$extractedcf" 24627cea3689Smrg else 24637cea3689Smrg func_error "ignoring unknown tag $tagname" 24647cea3689Smrg fi 24657cea3689Smrg ;; 24667cea3689Smrg esac 2467e19dfac4Smrg} 246827702724Smrg 24697cea3689Smrg 2470313a12fdSmrg# func_check_version_match 24717cea3689Smrg# ------------------------ 2472313a12fdSmrg# Ensure that we are using m4 macros, and libtool script from the same 2473313a12fdSmrg# release of libtool. 2474313a12fdSmrgfunc_check_version_match () 2475e19dfac4Smrg{ 24767cea3689Smrg if test "$package_revision" != "$macro_revision"; then 24777cea3689Smrg if test "$VERSION" != "$macro_version"; then 24787cea3689Smrg if test -z "$macro_version"; then 24797cea3689Smrg cat >&2 <<_LT_EOF 2480313a12fdSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2481313a12fdSmrg$progname: definition of this LT_INIT comes from an older release. 2482313a12fdSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2483313a12fdSmrg$progname: and run autoconf again. 2484313a12fdSmrg_LT_EOF 24857cea3689Smrg else 24867cea3689Smrg cat >&2 <<_LT_EOF 2487313a12fdSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2488313a12fdSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 2489313a12fdSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2490313a12fdSmrg$progname: and run autoconf again. 2491313a12fdSmrg_LT_EOF 24927cea3689Smrg fi 24937cea3689Smrg else 24947cea3689Smrg cat >&2 <<_LT_EOF 2495313a12fdSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 2496313a12fdSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 2497313a12fdSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 2498313a12fdSmrg$progname: of $PACKAGE $VERSION and run autoconf again. 2499313a12fdSmrg_LT_EOF 25007cea3689Smrg fi 2501313a12fdSmrg 25027cea3689Smrg exit $EXIT_MISMATCH 25037cea3689Smrg fi 2504313a12fdSmrg} 2505313a12fdSmrg 2506313a12fdSmrg 25077cea3689Smrg# libtool_options_prep [ARG]... 25087cea3689Smrg# ----------------------------- 25097cea3689Smrg# Preparation for options parsed by libtool. 25107cea3689Smrglibtool_options_prep () 25117cea3689Smrg{ 25127cea3689Smrg $debug_mode 251327702724Smrg 25147cea3689Smrg # Option defaults: 25157cea3689Smrg opt_config=false 25167cea3689Smrg opt_dlopen= 25177cea3689Smrg opt_dry_run=false 25187cea3689Smrg opt_help=false 25197cea3689Smrg opt_mode= 2520ae545d91Smrg opt_reorder_cache=false 25217cea3689Smrg opt_preserve_dup_deps=false 25227cea3689Smrg opt_quiet=false 2523ae545d91Smrg opt_finishing=true 2524ae545d91Smrg opt_warning= 252527702724Smrg 25267cea3689Smrg nonopt= 25277cea3689Smrg preserve_args= 2528313a12fdSmrg 252995b7a5c8Smrg _G_rc_lt_options_prep=: 253095b7a5c8Smrg 25317cea3689Smrg # Shorthand for --mode=foo, only valid as the first argument 25327cea3689Smrg case $1 in 25337cea3689Smrg clean|clea|cle|cl) 25347cea3689Smrg shift; set dummy --mode clean ${1+"$@"}; shift 25357cea3689Smrg ;; 25367cea3689Smrg compile|compil|compi|comp|com|co|c) 25377cea3689Smrg shift; set dummy --mode compile ${1+"$@"}; shift 25387cea3689Smrg ;; 25397cea3689Smrg execute|execut|execu|exec|exe|ex|e) 25407cea3689Smrg shift; set dummy --mode execute ${1+"$@"}; shift 25417cea3689Smrg ;; 25427cea3689Smrg finish|finis|fini|fin|fi|f) 25437cea3689Smrg shift; set dummy --mode finish ${1+"$@"}; shift 25447cea3689Smrg ;; 25457cea3689Smrg install|instal|insta|inst|ins|in|i) 25467cea3689Smrg shift; set dummy --mode install ${1+"$@"}; shift 25477cea3689Smrg ;; 25487cea3689Smrg link|lin|li|l) 25497cea3689Smrg shift; set dummy --mode link ${1+"$@"}; shift 25507cea3689Smrg ;; 25517cea3689Smrg uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 25527cea3689Smrg shift; set dummy --mode uninstall ${1+"$@"}; shift 25537cea3689Smrg ;; 255495b7a5c8Smrg *) 255595b7a5c8Smrg _G_rc_lt_options_prep=false 255695b7a5c8Smrg ;; 25577cea3689Smrg esac 25587cea3689Smrg 255995b7a5c8Smrg if $_G_rc_lt_options_prep; then 256095b7a5c8Smrg # Pass back the list of options. 256195b7a5c8Smrg func_quote eval ${1+"$@"} 256295b7a5c8Smrg libtool_options_prep_result=$func_quote_result 256395b7a5c8Smrg fi 25647cea3689Smrg} 25657cea3689Smrgfunc_add_hook func_options_prep libtool_options_prep 2566313a12fdSmrg 2567313a12fdSmrg 25687cea3689Smrg# libtool_parse_options [ARG]... 25697cea3689Smrg# --------------------------------- 25707cea3689Smrg# Provide handling for libtool specific options. 25717cea3689Smrglibtool_parse_options () 2572313a12fdSmrg{ 25737cea3689Smrg $debug_cmd 2574e19dfac4Smrg 257595b7a5c8Smrg _G_rc_lt_parse_options=false 257695b7a5c8Smrg 25777cea3689Smrg # Perform our own loop to consume as many options as possible in 25787cea3689Smrg # each iteration. 25797cea3689Smrg while test $# -gt 0; do 258095b7a5c8Smrg _G_match_lt_parse_options=: 25817cea3689Smrg _G_opt=$1 25827cea3689Smrg shift 25837cea3689Smrg case $_G_opt in 25847cea3689Smrg --dry-run|--dryrun|-n) 25857cea3689Smrg opt_dry_run=: 25867cea3689Smrg ;; 25877cea3689Smrg 25887cea3689Smrg --config) func_config ;; 25897cea3689Smrg 25907cea3689Smrg --dlopen|-dlopen) 25917cea3689Smrg opt_dlopen="${opt_dlopen+$opt_dlopen 25927cea3689Smrg}$1" 25937cea3689Smrg shift 25947cea3689Smrg ;; 25957cea3689Smrg 25967cea3689Smrg --preserve-dup-deps) 25977cea3689Smrg opt_preserve_dup_deps=: ;; 25987cea3689Smrg 25997cea3689Smrg --features) func_features ;; 26007cea3689Smrg 26017cea3689Smrg --finish) set dummy --mode finish ${1+"$@"}; shift ;; 26027cea3689Smrg 26037cea3689Smrg --help) opt_help=: ;; 26047cea3689Smrg 26057cea3689Smrg --help-all) opt_help=': help-all' ;; 26067cea3689Smrg 26077cea3689Smrg --mode) test $# = 0 && func_missing_arg $_G_opt && break 26087cea3689Smrg opt_mode=$1 26097cea3689Smrg case $1 in 26107cea3689Smrg # Valid mode arguments: 26117cea3689Smrg clean|compile|execute|finish|install|link|relink|uninstall) ;; 26127cea3689Smrg 26137cea3689Smrg # Catch anything else as an error 2614ae545d91Smrg *) func_error "invalid argument '$1' for $_G_opt" 26157cea3689Smrg exit_cmd=exit 26167cea3689Smrg ;; 26177cea3689Smrg esac 26187cea3689Smrg shift 26197cea3689Smrg ;; 26207cea3689Smrg 2621ae545d91Smrg --no-finish) 2622ae545d91Smrg opt_finishing=false 2623ae545d91Smrg func_append preserve_args " $_G_opt" 2624ae545d91Smrg ;; 2625ae545d91Smrg 26267cea3689Smrg --no-silent|--no-quiet) 26277cea3689Smrg opt_quiet=false 26287cea3689Smrg func_append preserve_args " $_G_opt" 26297cea3689Smrg ;; 26307cea3689Smrg 26317cea3689Smrg --no-warnings|--no-warning|--no-warn) 26327cea3689Smrg opt_warning=false 26337cea3689Smrg func_append preserve_args " $_G_opt" 26347cea3689Smrg ;; 26357cea3689Smrg 26367cea3689Smrg --no-verbose) 26377cea3689Smrg opt_verbose=false 26387cea3689Smrg func_append preserve_args " $_G_opt" 26397cea3689Smrg ;; 26407cea3689Smrg 2641ae545d91Smrg --reorder-cache) 2642ae545d91Smrg opt_reorder_cache=true 2643ae545d91Smrg shared_lib_dirs=$1 2644ae545d91Smrg if test -n "$shared_lib_dirs"; then 2645ae545d91Smrg case $1 in 2646ae545d91Smrg # Must begin with /: 2647ae545d91Smrg /*) ;; 2648ae545d91Smrg 2649ae545d91Smrg # Catch anything else as an error (relative paths) 2650ae545d91Smrg *) func_error "invalid argument '$1' for $_G_opt" 2651ae545d91Smrg func_error "absolute paths are required for $_G_opt" 2652ae545d91Smrg exit_cmd=exit 2653ae545d91Smrg ;; 2654ae545d91Smrg esac 2655ae545d91Smrg fi 2656ae545d91Smrg shift 2657ae545d91Smrg ;; 2658ae545d91Smrg 26597cea3689Smrg --silent|--quiet) 26607cea3689Smrg opt_quiet=: 26617cea3689Smrg opt_verbose=false 26627cea3689Smrg func_append preserve_args " $_G_opt" 26637cea3689Smrg ;; 26647cea3689Smrg 26657cea3689Smrg --tag) test $# = 0 && func_missing_arg $_G_opt && break 26667cea3689Smrg opt_tag=$1 26677cea3689Smrg func_append preserve_args " $_G_opt $1" 26687cea3689Smrg func_enable_tag "$1" 26697cea3689Smrg shift 26707cea3689Smrg ;; 26717cea3689Smrg 26727cea3689Smrg --verbose|-v) opt_quiet=false 26737cea3689Smrg opt_verbose=: 26747cea3689Smrg func_append preserve_args " $_G_opt" 26757cea3689Smrg ;; 26767cea3689Smrg 267795b7a5c8Smrg # An option not handled by this hook function: 267895b7a5c8Smrg *) set dummy "$_G_opt" ${1+"$@"} ; shift 267995b7a5c8Smrg _G_match_lt_parse_options=false 268095b7a5c8Smrg break 268195b7a5c8Smrg ;; 26827cea3689Smrg esac 268395b7a5c8Smrg $_G_match_lt_parse_options && _G_rc_lt_parse_options=: 26847cea3689Smrg done 2685313a12fdSmrg 268695b7a5c8Smrg if $_G_rc_lt_parse_options; then 268795b7a5c8Smrg # save modified positional parameters for caller 268895b7a5c8Smrg func_quote eval ${1+"$@"} 268995b7a5c8Smrg libtool_parse_options_result=$func_quote_result 269095b7a5c8Smrg fi 26917cea3689Smrg} 26927cea3689Smrgfunc_add_hook func_parse_options libtool_parse_options 2693e19dfac4Smrg 269427702724Smrg 2695ae545d91Smrg# func_warning ARG... 2696ae545d91Smrg# ------------------- 2697ae545d91Smrg# Libtool warnings are not categorized, so override funclib.sh 2698ae545d91Smrg# func_warning with this simpler definition. 2699ae545d91Smrgfunc_warning () 2700ae545d91Smrg{ 2701ae545d91Smrg if $opt_warning; then 2702ae545d91Smrg $debug_cmd 2703ae545d91Smrg $warning_func ${1+"$@"} 2704ae545d91Smrg fi 2705ae545d91Smrg} 2706ae545d91Smrg 2707e19dfac4Smrg 27087cea3689Smrg# libtool_validate_options [ARG]... 27097cea3689Smrg# --------------------------------- 27107cea3689Smrg# Perform any sanity checks on option settings and/or unconsumed 27117cea3689Smrg# arguments. 27127cea3689Smrglibtool_validate_options () 27137cea3689Smrg{ 27147cea3689Smrg # save first non-option argument 27157cea3689Smrg if test 0 -lt $#; then 27167cea3689Smrg nonopt=$1 27177cea3689Smrg shift 2718e19dfac4Smrg fi 2719e19dfac4Smrg 27207cea3689Smrg # preserve --debug 27217cea3689Smrg test : = "$debug_cmd" || func_append preserve_args " --debug" 2722e19dfac4Smrg 2723ae545d91Smrg case $host_os in 27247cea3689Smrg # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 27257cea3689Smrg # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 2726ae545d91Smrg cygwin* | mingw* | windows* | pw32* | cegcc* | solaris2* | os2*) 27277cea3689Smrg # don't eliminate duplications in $postdeps and $predeps 27287cea3689Smrg opt_duplicate_compiler_generated_deps=: 27297cea3689Smrg ;; 27307cea3689Smrg *) 27317cea3689Smrg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 27327cea3689Smrg ;; 27337cea3689Smrg esac 273427702724Smrg 27357cea3689Smrg $opt_help || { 27367cea3689Smrg # Sanity checks first: 27377cea3689Smrg func_check_version_match 27387cea3689Smrg 27397cea3689Smrg test yes != "$build_libtool_libs" \ 27407cea3689Smrg && test yes != "$build_old_libs" \ 27417cea3689Smrg && func_fatal_configuration "not configured to build any kind of library" 27427cea3689Smrg 27437cea3689Smrg # Darwin sucks 27447cea3689Smrg eval std_shrext=\"$shrext_cmds\" 27457cea3689Smrg 27467cea3689Smrg # Only execute mode is allowed to have -dlopen flags. 27477cea3689Smrg if test -n "$opt_dlopen" && test execute != "$opt_mode"; then 27487cea3689Smrg func_error "unrecognized option '-dlopen'" 27497cea3689Smrg $ECHO "$help" 1>&2 27507cea3689Smrg exit $EXIT_FAILURE 27517cea3689Smrg fi 2752e19dfac4Smrg 27537cea3689Smrg # Change the help message to a mode-specific one. 27547cea3689Smrg generic_help=$help 27557cea3689Smrg help="Try '$progname --help --mode=$opt_mode' for more information." 27567cea3689Smrg } 2757e19dfac4Smrg 27587cea3689Smrg # Pass back the unparsed argument list 275995b7a5c8Smrg func_quote eval ${1+"$@"} 276095b7a5c8Smrg libtool_validate_options_result=$func_quote_result 2761313a12fdSmrg} 27627cea3689Smrgfunc_add_hook func_validate_options libtool_validate_options 2763e19dfac4Smrg 2764e19dfac4Smrg 27657cea3689Smrg# Process options as early as possible so that --help and --version 27667cea3689Smrg# can return quickly. 27677cea3689Smrgfunc_options ${1+"$@"} 27687cea3689Smrgeval set dummy "$func_options_result"; shift 27697cea3689Smrg 277027702724Smrg 277127702724Smrg 2772313a12fdSmrg## ----------- ## 2773313a12fdSmrg## Main. ## 2774313a12fdSmrg## ----------- ## 277527702724Smrg 27767cea3689Smrgmagic='%%%MAGIC variable%%%' 27777cea3689Smrgmagic_exe='%%%MAGIC EXE variable%%%' 27787cea3689Smrg 27797cea3689Smrg# Global variables. 27807cea3689Smrgextracted_archives= 27817cea3689Smrgextracted_serial=0 27827cea3689Smrg 27837cea3689Smrg# If this variable is set in any of the actions, the command in it 27847cea3689Smrg# will be execed at the end. This prevents here-documents from being 27857cea3689Smrg# left over by shells. 27867cea3689Smrgexec_cmd= 27877cea3689Smrg 27887cea3689Smrg 27897cea3689Smrg# A function that is used when there is no print builtin or printf. 27907cea3689Smrgfunc_fallback_echo () 27917cea3689Smrg{ 27927cea3689Smrg eval 'cat <<_LTECHO_EOF 27937cea3689Smrg$1 27947cea3689Smrg_LTECHO_EOF' 27957cea3689Smrg} 27967cea3689Smrg 27977cea3689Smrg# func_generated_by_libtool 27987cea3689Smrg# True iff stdin has been generated by Libtool. This function is only 27997cea3689Smrg# a basic sanity check; it will hardly flush out determined imposters. 28007cea3689Smrgfunc_generated_by_libtool_p () 28017cea3689Smrg{ 28027cea3689Smrg $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 28037cea3689Smrg} 28047cea3689Smrg 2805e19dfac4Smrg# func_lalib_p file 28067cea3689Smrg# True iff FILE is a libtool '.la' library or '.lo' object file. 2807e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out 2808e19dfac4Smrg# determined imposters. 2809e19dfac4Smrgfunc_lalib_p () 2810e19dfac4Smrg{ 2811e19dfac4Smrg test -f "$1" && 28127cea3689Smrg $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p 2813e19dfac4Smrg} 281427702724Smrg 2815e19dfac4Smrg# func_lalib_unsafe_p file 28167cea3689Smrg# True iff FILE is a libtool '.la' library or '.lo' object file. 2817e19dfac4Smrg# This function implements the same check as func_lalib_p without 2818e19dfac4Smrg# resorting to external programs. To this end, it redirects stdin and 2819e19dfac4Smrg# closes it afterwards, without saving the original file descriptor. 2820e19dfac4Smrg# As a safety measure, use it only where a negative result would be 28217cea3689Smrg# fatal anyway. Works if 'file' does not exist. 2822e19dfac4Smrgfunc_lalib_unsafe_p () 2823e19dfac4Smrg{ 2824e19dfac4Smrg lalib_p=no 2825e19dfac4Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 2826e19dfac4Smrg for lalib_p_l in 1 2 3 4 2827e19dfac4Smrg do 2828e19dfac4Smrg read lalib_p_line 28297cea3689Smrg case $lalib_p_line in 2830e19dfac4Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 2831e19dfac4Smrg esac 2832e19dfac4Smrg done 2833e19dfac4Smrg exec 0<&5 5<&- 2834e19dfac4Smrg fi 28357cea3689Smrg test yes = "$lalib_p" 2836e19dfac4Smrg} 283727702724Smrg 2838e19dfac4Smrg# func_ltwrapper_script_p file 2839e19dfac4Smrg# True iff FILE is a libtool wrapper script 2840e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out 2841e19dfac4Smrg# determined imposters. 2842e19dfac4Smrgfunc_ltwrapper_script_p () 2843e19dfac4Smrg{ 28447cea3689Smrg test -f "$1" && 28457cea3689Smrg $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p 2846e19dfac4Smrg} 284727702724Smrg 2848e19dfac4Smrg# func_ltwrapper_executable_p file 2849e19dfac4Smrg# True iff FILE is a libtool wrapper executable 2850e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out 2851e19dfac4Smrg# determined imposters. 2852e19dfac4Smrgfunc_ltwrapper_executable_p () 2853e19dfac4Smrg{ 2854e19dfac4Smrg func_ltwrapper_exec_suffix= 2855e19dfac4Smrg case $1 in 2856e19dfac4Smrg *.exe) ;; 2857e19dfac4Smrg *) func_ltwrapper_exec_suffix=.exe ;; 2858e19dfac4Smrg esac 2859e19dfac4Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 2860e19dfac4Smrg} 286127702724Smrg 2862e19dfac4Smrg# func_ltwrapper_scriptname file 2863e19dfac4Smrg# Assumes file is an ltwrapper_executable 2864e19dfac4Smrg# uses $file to determine the appropriate filename for a 2865e19dfac4Smrg# temporary ltwrapper_script. 2866e19dfac4Smrgfunc_ltwrapper_scriptname () 2867e19dfac4Smrg{ 2868313a12fdSmrg func_dirname_and_basename "$1" "" "." 2869313a12fdSmrg func_stripname '' '.exe' "$func_basename_result" 28707cea3689Smrg func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper 2871e19dfac4Smrg} 287227702724Smrg 2873e19dfac4Smrg# func_ltwrapper_p file 2874e19dfac4Smrg# True iff FILE is a libtool wrapper script or wrapper executable 2875e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out 2876e19dfac4Smrg# determined imposters. 2877e19dfac4Smrgfunc_ltwrapper_p () 2878e19dfac4Smrg{ 2879e19dfac4Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 2880e19dfac4Smrg} 288127702724Smrg 288227702724Smrg 2883e19dfac4Smrg# func_execute_cmds commands fail_cmd 2884e19dfac4Smrg# Execute tilde-delimited COMMANDS. 2885e19dfac4Smrg# If FAIL_CMD is given, eval that upon failure. 2886e19dfac4Smrg# FAIL_CMD may read-access the current command in variable CMD! 2887e19dfac4Smrgfunc_execute_cmds () 2888e19dfac4Smrg{ 28897cea3689Smrg $debug_cmd 28907cea3689Smrg 2891e19dfac4Smrg save_ifs=$IFS; IFS='~' 2892e19dfac4Smrg for cmd in $1; do 28937cea3689Smrg IFS=$sp$nl 2894e19dfac4Smrg eval cmd=\"$cmd\" 28957cea3689Smrg IFS=$save_ifs 2896e19dfac4Smrg func_show_eval "$cmd" "${2-:}" 2897e19dfac4Smrg done 2898e19dfac4Smrg IFS=$save_ifs 2899e19dfac4Smrg} 2900e19dfac4Smrg 2901e19dfac4Smrg 2902e19dfac4Smrg# func_source file 2903e19dfac4Smrg# Source FILE, adding directory component if necessary. 2904e19dfac4Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 2905e19dfac4Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 2906e19dfac4Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 29077cea3689Smrg# 'FILE.' does not work on cygwin managed mounts. 2908e19dfac4Smrgfunc_source () 2909e19dfac4Smrg{ 29107cea3689Smrg $debug_cmd 29117cea3689Smrg 2912e19dfac4Smrg case $1 in 2913e19dfac4Smrg */* | *\\*) . "$1" ;; 2914e19dfac4Smrg *) . "./$1" ;; 2915e19dfac4Smrg esac 2916e19dfac4Smrg} 2917e19dfac4Smrg 2918e19dfac4Smrg 2919313a12fdSmrg# func_resolve_sysroot PATH 2920313a12fdSmrg# Replace a leading = in PATH with a sysroot. Store the result into 2921313a12fdSmrg# func_resolve_sysroot_result 2922313a12fdSmrgfunc_resolve_sysroot () 2923313a12fdSmrg{ 2924313a12fdSmrg func_resolve_sysroot_result=$1 2925313a12fdSmrg case $func_resolve_sysroot_result in 2926313a12fdSmrg =*) 2927313a12fdSmrg func_stripname '=' '' "$func_resolve_sysroot_result" 2928313a12fdSmrg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 2929313a12fdSmrg ;; 2930313a12fdSmrg esac 2931313a12fdSmrg} 2932313a12fdSmrg 2933313a12fdSmrg# func_replace_sysroot PATH 2934313a12fdSmrg# If PATH begins with the sysroot, replace it with = and 2935313a12fdSmrg# store the result into func_replace_sysroot_result. 2936313a12fdSmrgfunc_replace_sysroot () 2937313a12fdSmrg{ 29387cea3689Smrg case $lt_sysroot:$1 in 2939313a12fdSmrg ?*:"$lt_sysroot"*) 2940313a12fdSmrg func_stripname "$lt_sysroot" '' "$1" 29417cea3689Smrg func_replace_sysroot_result='='$func_stripname_result 2942313a12fdSmrg ;; 2943313a12fdSmrg *) 2944313a12fdSmrg # Including no sysroot. 2945313a12fdSmrg func_replace_sysroot_result=$1 2946313a12fdSmrg ;; 2947313a12fdSmrg esac 2948313a12fdSmrg} 2949313a12fdSmrg 2950e19dfac4Smrg# func_infer_tag arg 2951e19dfac4Smrg# Infer tagged configuration to use if any are available and 2952e19dfac4Smrg# if one wasn't chosen via the "--tag" command line option. 2953e19dfac4Smrg# Only attempt this if the compiler in the base compile 2954e19dfac4Smrg# command doesn't match the default compiler. 2955e19dfac4Smrg# arg is usually of the form 'gcc ...' 2956e19dfac4Smrgfunc_infer_tag () 2957e19dfac4Smrg{ 29587cea3689Smrg $debug_cmd 29597cea3689Smrg 2960e19dfac4Smrg if test -n "$available_tags" && test -z "$tagname"; then 2961e19dfac4Smrg CC_quoted= 2962e19dfac4Smrg for arg in $CC; do 2963313a12fdSmrg func_append_quoted CC_quoted "$arg" 2964e19dfac4Smrg done 2965313a12fdSmrg CC_expanded=`func_echo_all $CC` 2966313a12fdSmrg CC_quoted_expanded=`func_echo_all $CC_quoted` 2967e19dfac4Smrg case $@ in 2968e19dfac4Smrg # Blanks in the command may have been stripped by the calling shell, 2969e19dfac4Smrg # but not from the CC environment variable when configure was run. 2970313a12fdSmrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2971313a12fdSmrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 2972e19dfac4Smrg # Blanks at the start of $base_compile will cause this to fail 2973e19dfac4Smrg # if we don't check for them as well. 2974e19dfac4Smrg *) 2975e19dfac4Smrg for z in $available_tags; do 2976e19dfac4Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 2977e19dfac4Smrg # Evaluate the configuration. 29787cea3689Smrg eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 2979e19dfac4Smrg CC_quoted= 2980e19dfac4Smrg for arg in $CC; do 2981e19dfac4Smrg # Double-quote args containing other shell metacharacters. 2982313a12fdSmrg func_append_quoted CC_quoted "$arg" 2983e19dfac4Smrg done 2984313a12fdSmrg CC_expanded=`func_echo_all $CC` 2985313a12fdSmrg CC_quoted_expanded=`func_echo_all $CC_quoted` 2986e19dfac4Smrg case "$@ " in 2987313a12fdSmrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2988313a12fdSmrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 2989e19dfac4Smrg # The compiler in the base compile command matches 2990e19dfac4Smrg # the one in the tagged configuration. 2991e19dfac4Smrg # Assume this is the tagged configuration we want. 2992e19dfac4Smrg tagname=$z 2993e19dfac4Smrg break 2994e19dfac4Smrg ;; 299527702724Smrg esac 2996e19dfac4Smrg fi 2997e19dfac4Smrg done 2998e19dfac4Smrg # If $tagname still isn't set, then no tagged configuration 2999e19dfac4Smrg # was found and let the user know that the "--tag" command 3000e19dfac4Smrg # line option must be used. 3001e19dfac4Smrg if test -z "$tagname"; then 3002e19dfac4Smrg func_echo "unable to infer tagged configuration" 30037cea3689Smrg func_fatal_error "specify a tag with '--tag'" 3004e19dfac4Smrg# else 3005e19dfac4Smrg# func_verbose "using $tagname tagged configuration" 3006e19dfac4Smrg fi 3007e19dfac4Smrg ;; 3008e19dfac4Smrg esac 3009e19dfac4Smrg fi 3010e19dfac4Smrg} 3011e19dfac4Smrg 3012e19dfac4Smrg 3013e19dfac4Smrg 3014e19dfac4Smrg# func_write_libtool_object output_name pic_name nonpic_name 3015e19dfac4Smrg# Create a libtool object file (analogous to a ".la" file), 3016e19dfac4Smrg# but don't create it if we're doing a dry run. 3017e19dfac4Smrgfunc_write_libtool_object () 3018e19dfac4Smrg{ 30197cea3689Smrg write_libobj=$1 30207cea3689Smrg if test yes = "$build_libtool_libs"; then 30217cea3689Smrg write_lobj=\'$2\' 3022e19dfac4Smrg else 3023e19dfac4Smrg write_lobj=none 3024e19dfac4Smrg fi 3025e19dfac4Smrg 30267cea3689Smrg if test yes = "$build_old_libs"; then 30277cea3689Smrg write_oldobj=\'$3\' 3028e19dfac4Smrg else 3029e19dfac4Smrg write_oldobj=none 3030e19dfac4Smrg fi 3031e19dfac4Smrg 3032e19dfac4Smrg $opt_dry_run || { 3033e19dfac4Smrg cat >${write_libobj}T <<EOF 3034e19dfac4Smrg# $write_libobj - a libtool object file 30357cea3689Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 3036e19dfac4Smrg# 3037e19dfac4Smrg# Please DO NOT delete this file! 3038e19dfac4Smrg# It is necessary for linking the library. 3039e19dfac4Smrg 3040e19dfac4Smrg# Name of the PIC object. 3041e19dfac4Smrgpic_object=$write_lobj 3042e19dfac4Smrg 3043e19dfac4Smrg# Name of the non-PIC object 3044e19dfac4Smrgnon_pic_object=$write_oldobj 3045e19dfac4Smrg 3046e19dfac4SmrgEOF 30477cea3689Smrg $MV "${write_libobj}T" "$write_libobj" 3048e19dfac4Smrg } 3049e19dfac4Smrg} 3050e19dfac4Smrg 3051313a12fdSmrg 3052313a12fdSmrg################################################## 3053313a12fdSmrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 3054313a12fdSmrg################################################## 3055313a12fdSmrg 3056313a12fdSmrg# func_convert_core_file_wine_to_w32 ARG 3057313a12fdSmrg# Helper function used by file name conversion functions when $build is *nix, 3058ae545d91Smrg# and $host is mingw, windows, cygwin, or some other w32 environment. Relies on a 3059313a12fdSmrg# correctly configured wine environment available, with the winepath program 3060313a12fdSmrg# in $build's $PATH. 3061313a12fdSmrg# 3062313a12fdSmrg# ARG is the $build file name to be converted to w32 format. 3063313a12fdSmrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will 3064313a12fdSmrg# be empty on error (or when ARG is empty) 3065313a12fdSmrgfunc_convert_core_file_wine_to_w32 () 3066313a12fdSmrg{ 30677cea3689Smrg $debug_cmd 30687cea3689Smrg 30697cea3689Smrg func_convert_core_file_wine_to_w32_result=$1 3070313a12fdSmrg if test -n "$1"; then 3071313a12fdSmrg # Unfortunately, winepath does not exit with a non-zero error code, so we 3072313a12fdSmrg # are forced to check the contents of stdout. On the other hand, if the 3073313a12fdSmrg # command is not found, the shell will set an exit code of 127 and print 3074313a12fdSmrg # *an error message* to stdout. So we must check for both error code of 3075313a12fdSmrg # zero AND non-empty stdout, which explains the odd construction: 3076313a12fdSmrg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 30777cea3689Smrg if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then 3078313a12fdSmrg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 30797cea3689Smrg $SED -e "$sed_naive_backslashify"` 3080313a12fdSmrg else 3081313a12fdSmrg func_convert_core_file_wine_to_w32_result= 3082313a12fdSmrg fi 3083313a12fdSmrg fi 3084313a12fdSmrg} 3085313a12fdSmrg# end: func_convert_core_file_wine_to_w32 3086313a12fdSmrg 3087313a12fdSmrg 3088313a12fdSmrg# func_convert_core_path_wine_to_w32 ARG 3089313a12fdSmrg# Helper function used by path conversion functions when $build is *nix, and 3090ae545d91Smrg# $host is mingw, windows, cygwin, or some other w32 environment. Relies on a 3091ae545d91Smrg# correctly configured wine environment available, with the winepath program 3092ae545d91Smrg# in $build's $PATH. Assumes ARG has no leading or trailing path separator 3093ae545d91Smrg# characters. 3094313a12fdSmrg# 3095313a12fdSmrg# ARG is path to be converted from $build format to win32. 3096313a12fdSmrg# Result is available in $func_convert_core_path_wine_to_w32_result. 3097313a12fdSmrg# Unconvertible file (directory) names in ARG are skipped; if no directory names 3098313a12fdSmrg# are convertible, then the result may be empty. 3099313a12fdSmrgfunc_convert_core_path_wine_to_w32 () 3100313a12fdSmrg{ 31017cea3689Smrg $debug_cmd 31027cea3689Smrg 3103313a12fdSmrg # unfortunately, winepath doesn't convert paths, only file names 31047cea3689Smrg func_convert_core_path_wine_to_w32_result= 3105313a12fdSmrg if test -n "$1"; then 3106313a12fdSmrg oldIFS=$IFS 3107313a12fdSmrg IFS=: 3108313a12fdSmrg for func_convert_core_path_wine_to_w32_f in $1; do 3109313a12fdSmrg IFS=$oldIFS 3110313a12fdSmrg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 31117cea3689Smrg if test -n "$func_convert_core_file_wine_to_w32_result"; then 3112313a12fdSmrg if test -z "$func_convert_core_path_wine_to_w32_result"; then 31137cea3689Smrg func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result 3114313a12fdSmrg else 3115313a12fdSmrg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 3116313a12fdSmrg fi 3117313a12fdSmrg fi 3118313a12fdSmrg done 3119313a12fdSmrg IFS=$oldIFS 3120313a12fdSmrg fi 3121313a12fdSmrg} 3122313a12fdSmrg# end: func_convert_core_path_wine_to_w32 3123313a12fdSmrg 3124313a12fdSmrg 3125313a12fdSmrg# func_cygpath ARGS... 3126313a12fdSmrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 3127313a12fdSmrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 3128313a12fdSmrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 3129313a12fdSmrg# (2), returns the Cygwin file name or path in func_cygpath_result (input 3130313a12fdSmrg# file name or path is assumed to be in w32 format, as previously converted 3131313a12fdSmrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name 3132313a12fdSmrg# or path in func_cygpath_result (input file name or path is assumed to be in 3133313a12fdSmrg# Cygwin format). Returns an empty string on error. 3134313a12fdSmrg# 3135313a12fdSmrg# ARGS are passed to cygpath, with the last one being the file name or path to 3136313a12fdSmrg# be converted. 3137313a12fdSmrg# 3138313a12fdSmrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 3139313a12fdSmrg# environment variable; do not put it in $PATH. 3140313a12fdSmrgfunc_cygpath () 3141313a12fdSmrg{ 31427cea3689Smrg $debug_cmd 31437cea3689Smrg 3144313a12fdSmrg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 3145313a12fdSmrg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 3146313a12fdSmrg if test "$?" -ne 0; then 3147313a12fdSmrg # on failure, ensure result is empty 3148313a12fdSmrg func_cygpath_result= 3149313a12fdSmrg fi 3150313a12fdSmrg else 3151313a12fdSmrg func_cygpath_result= 31527cea3689Smrg func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" 3153313a12fdSmrg fi 3154313a12fdSmrg} 3155313a12fdSmrg#end: func_cygpath 3156313a12fdSmrg 3157313a12fdSmrg 3158313a12fdSmrg# func_convert_core_msys_to_w32 ARG 3159313a12fdSmrg# Convert file name or path ARG from MSYS format to w32 format. Return 3160313a12fdSmrg# result in func_convert_core_msys_to_w32_result. 3161313a12fdSmrgfunc_convert_core_msys_to_w32 () 3162313a12fdSmrg{ 31637cea3689Smrg $debug_cmd 31647cea3689Smrg 3165313a12fdSmrg # awkward: cmd appends spaces to result 3166313a12fdSmrg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 31677cea3689Smrg $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` 3168313a12fdSmrg} 3169313a12fdSmrg#end: func_convert_core_msys_to_w32 3170313a12fdSmrg 3171313a12fdSmrg 3172313a12fdSmrg# func_convert_file_check ARG1 ARG2 3173313a12fdSmrg# Verify that ARG1 (a file name in $build format) was converted to $host 3174313a12fdSmrg# format in ARG2. Otherwise, emit an error message, but continue (resetting 3175313a12fdSmrg# func_to_host_file_result to ARG1). 3176313a12fdSmrgfunc_convert_file_check () 3177313a12fdSmrg{ 31787cea3689Smrg $debug_cmd 31797cea3689Smrg 31807cea3689Smrg if test -z "$2" && test -n "$1"; then 3181313a12fdSmrg func_error "Could not determine host file name corresponding to" 31827cea3689Smrg func_error " '$1'" 3183313a12fdSmrg func_error "Continuing, but uninstalled executables may not work." 3184313a12fdSmrg # Fallback: 31857cea3689Smrg func_to_host_file_result=$1 3186313a12fdSmrg fi 3187313a12fdSmrg} 3188313a12fdSmrg# end func_convert_file_check 3189313a12fdSmrg 3190313a12fdSmrg 3191313a12fdSmrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 3192313a12fdSmrg# Verify that FROM_PATH (a path in $build format) was converted to $host 3193313a12fdSmrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 3194313a12fdSmrg# func_to_host_file_result to a simplistic fallback value (see below). 3195313a12fdSmrgfunc_convert_path_check () 3196313a12fdSmrg{ 31977cea3689Smrg $debug_cmd 31987cea3689Smrg 3199313a12fdSmrg if test -z "$4" && test -n "$3"; then 3200313a12fdSmrg func_error "Could not determine the host path corresponding to" 32017cea3689Smrg func_error " '$3'" 3202313a12fdSmrg func_error "Continuing, but uninstalled executables may not work." 3203313a12fdSmrg # Fallback. This is a deliberately simplistic "conversion" and 3204313a12fdSmrg # should not be "improved". See libtool.info. 3205313a12fdSmrg if test "x$1" != "x$2"; then 3206313a12fdSmrg lt_replace_pathsep_chars="s|$1|$2|g" 3207313a12fdSmrg func_to_host_path_result=`echo "$3" | 3208313a12fdSmrg $SED -e "$lt_replace_pathsep_chars"` 3209313a12fdSmrg else 32107cea3689Smrg func_to_host_path_result=$3 3211313a12fdSmrg fi 3212313a12fdSmrg fi 3213313a12fdSmrg} 3214313a12fdSmrg# end func_convert_path_check 3215313a12fdSmrg 3216313a12fdSmrg 3217313a12fdSmrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 3218313a12fdSmrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 3219313a12fdSmrg# and appending REPL if ORIG matches BACKPAT. 3220313a12fdSmrgfunc_convert_path_front_back_pathsep () 3221313a12fdSmrg{ 32227cea3689Smrg $debug_cmd 32237cea3689Smrg 3224313a12fdSmrg case $4 in 32257cea3689Smrg $1 ) func_to_host_path_result=$3$func_to_host_path_result 3226313a12fdSmrg ;; 3227313a12fdSmrg esac 3228313a12fdSmrg case $4 in 3229313a12fdSmrg $2 ) func_append func_to_host_path_result "$3" 3230313a12fdSmrg ;; 3231313a12fdSmrg esac 3232313a12fdSmrg} 3233313a12fdSmrg# end func_convert_path_front_back_pathsep 3234313a12fdSmrg 3235313a12fdSmrg 3236ae545d91Smrg# func_convert_delimited_path PATH ORIG_DELIMITER NEW_DELIMITER 3237ae545d91Smrg# Replaces a delimiter for a given path. 3238ae545d91Smrgfunc_convert_delimited_path () 3239ae545d91Smrg{ 3240ae545d91Smrg converted_path=`$ECHO "$1" | $SED "s#$2#$3#g"` 3241ae545d91Smrg} 3242ae545d91Smrg# end func_convert_delimited_path 3243ae545d91Smrg 3244ae545d91Smrg 3245313a12fdSmrg################################################## 3246313a12fdSmrg# $build to $host FILE NAME CONVERSION FUNCTIONS # 3247313a12fdSmrg################################################## 32487cea3689Smrg# invoked via '$to_host_file_cmd ARG' 3249313a12fdSmrg# 3250313a12fdSmrg# In each case, ARG is the path to be converted from $build to $host format. 3251313a12fdSmrg# Result will be available in $func_to_host_file_result. 3252313a12fdSmrg 3253313a12fdSmrg 3254313a12fdSmrg# func_to_host_file ARG 3255313a12fdSmrg# Converts the file name ARG from $build format to $host format. Return result 3256313a12fdSmrg# in func_to_host_file_result. 3257313a12fdSmrgfunc_to_host_file () 3258313a12fdSmrg{ 32597cea3689Smrg $debug_cmd 32607cea3689Smrg 3261313a12fdSmrg $to_host_file_cmd "$1" 3262313a12fdSmrg} 3263313a12fdSmrg# end func_to_host_file 3264313a12fdSmrg 3265313a12fdSmrg 3266313a12fdSmrg# func_to_tool_file ARG LAZY 3267313a12fdSmrg# converts the file name ARG from $build format to toolchain format. Return 3268313a12fdSmrg# result in func_to_tool_file_result. If the conversion in use is listed 3269313a12fdSmrg# in (the comma separated) LAZY, no conversion takes place. 3270313a12fdSmrgfunc_to_tool_file () 3271313a12fdSmrg{ 32727cea3689Smrg $debug_cmd 32737cea3689Smrg 3274313a12fdSmrg case ,$2, in 3275313a12fdSmrg *,"$to_tool_file_cmd",*) 3276313a12fdSmrg func_to_tool_file_result=$1 3277313a12fdSmrg ;; 3278313a12fdSmrg *) 3279313a12fdSmrg $to_tool_file_cmd "$1" 3280313a12fdSmrg func_to_tool_file_result=$func_to_host_file_result 3281313a12fdSmrg ;; 3282313a12fdSmrg esac 3283313a12fdSmrg} 3284313a12fdSmrg# end func_to_tool_file 3285313a12fdSmrg 3286313a12fdSmrg 3287313a12fdSmrg# func_convert_file_noop ARG 3288313a12fdSmrg# Copy ARG to func_to_host_file_result. 3289313a12fdSmrgfunc_convert_file_noop () 3290313a12fdSmrg{ 32917cea3689Smrg func_to_host_file_result=$1 3292313a12fdSmrg} 3293313a12fdSmrg# end func_convert_file_noop 3294313a12fdSmrg 3295313a12fdSmrg 3296313a12fdSmrg# func_convert_file_msys_to_w32 ARG 3297313a12fdSmrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 3298313a12fdSmrg# conversion to w32 is not available inside the cwrapper. Returns result in 3299313a12fdSmrg# func_to_host_file_result. 3300313a12fdSmrgfunc_convert_file_msys_to_w32 () 3301313a12fdSmrg{ 33027cea3689Smrg $debug_cmd 33037cea3689Smrg 33047cea3689Smrg func_to_host_file_result=$1 3305313a12fdSmrg if test -n "$1"; then 3306313a12fdSmrg func_convert_core_msys_to_w32 "$1" 33077cea3689Smrg func_to_host_file_result=$func_convert_core_msys_to_w32_result 3308313a12fdSmrg fi 3309313a12fdSmrg func_convert_file_check "$1" "$func_to_host_file_result" 3310313a12fdSmrg} 3311313a12fdSmrg# end func_convert_file_msys_to_w32 3312313a12fdSmrg 3313313a12fdSmrg 3314313a12fdSmrg# func_convert_file_cygwin_to_w32 ARG 3315313a12fdSmrg# Convert file name ARG from Cygwin to w32 format. Returns result in 3316313a12fdSmrg# func_to_host_file_result. 3317313a12fdSmrgfunc_convert_file_cygwin_to_w32 () 3318313a12fdSmrg{ 33197cea3689Smrg $debug_cmd 33207cea3689Smrg 33217cea3689Smrg func_to_host_file_result=$1 3322313a12fdSmrg if test -n "$1"; then 3323313a12fdSmrg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 3324313a12fdSmrg # LT_CYGPATH in this case. 3325313a12fdSmrg func_to_host_file_result=`cygpath -m "$1"` 3326313a12fdSmrg fi 3327313a12fdSmrg func_convert_file_check "$1" "$func_to_host_file_result" 3328313a12fdSmrg} 3329313a12fdSmrg# end func_convert_file_cygwin_to_w32 3330313a12fdSmrg 3331313a12fdSmrg 3332313a12fdSmrg# func_convert_file_nix_to_w32 ARG 3333313a12fdSmrg# Convert file name ARG from *nix to w32 format. Requires a wine environment 3334313a12fdSmrg# and a working winepath. Returns result in func_to_host_file_result. 3335313a12fdSmrgfunc_convert_file_nix_to_w32 () 3336313a12fdSmrg{ 33377cea3689Smrg $debug_cmd 33387cea3689Smrg 33397cea3689Smrg func_to_host_file_result=$1 3340313a12fdSmrg if test -n "$1"; then 3341313a12fdSmrg func_convert_core_file_wine_to_w32 "$1" 33427cea3689Smrg func_to_host_file_result=$func_convert_core_file_wine_to_w32_result 3343313a12fdSmrg fi 3344313a12fdSmrg func_convert_file_check "$1" "$func_to_host_file_result" 3345313a12fdSmrg} 3346313a12fdSmrg# end func_convert_file_nix_to_w32 3347313a12fdSmrg 3348313a12fdSmrg 3349313a12fdSmrg# func_convert_file_msys_to_cygwin ARG 3350313a12fdSmrg# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3351313a12fdSmrg# Returns result in func_to_host_file_result. 3352313a12fdSmrgfunc_convert_file_msys_to_cygwin () 3353313a12fdSmrg{ 33547cea3689Smrg $debug_cmd 33557cea3689Smrg 33567cea3689Smrg func_to_host_file_result=$1 3357313a12fdSmrg if test -n "$1"; then 3358313a12fdSmrg func_convert_core_msys_to_w32 "$1" 3359313a12fdSmrg func_cygpath -u "$func_convert_core_msys_to_w32_result" 33607cea3689Smrg func_to_host_file_result=$func_cygpath_result 3361313a12fdSmrg fi 3362313a12fdSmrg func_convert_file_check "$1" "$func_to_host_file_result" 3363313a12fdSmrg} 3364313a12fdSmrg# end func_convert_file_msys_to_cygwin 3365313a12fdSmrg 3366313a12fdSmrg 3367313a12fdSmrg# func_convert_file_nix_to_cygwin ARG 3368313a12fdSmrg# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 3369313a12fdSmrg# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 3370313a12fdSmrg# in func_to_host_file_result. 3371313a12fdSmrgfunc_convert_file_nix_to_cygwin () 3372313a12fdSmrg{ 33737cea3689Smrg $debug_cmd 33747cea3689Smrg 33757cea3689Smrg func_to_host_file_result=$1 3376313a12fdSmrg if test -n "$1"; then 3377313a12fdSmrg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 3378313a12fdSmrg func_convert_core_file_wine_to_w32 "$1" 3379313a12fdSmrg func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 33807cea3689Smrg func_to_host_file_result=$func_cygpath_result 3381313a12fdSmrg fi 3382313a12fdSmrg func_convert_file_check "$1" "$func_to_host_file_result" 3383313a12fdSmrg} 3384313a12fdSmrg# end func_convert_file_nix_to_cygwin 3385313a12fdSmrg 3386313a12fdSmrg 3387313a12fdSmrg############################################# 3388313a12fdSmrg# $build to $host PATH CONVERSION FUNCTIONS # 3389313a12fdSmrg############################################# 33907cea3689Smrg# invoked via '$to_host_path_cmd ARG' 3391313a12fdSmrg# 3392313a12fdSmrg# In each case, ARG is the path to be converted from $build to $host format. 3393313a12fdSmrg# The result will be available in $func_to_host_path_result. 3394313a12fdSmrg# 3395313a12fdSmrg# Path separators are also converted from $build format to $host format. If 3396313a12fdSmrg# ARG begins or ends with a path separator character, it is preserved (but 3397313a12fdSmrg# converted to $host format) on output. 3398313a12fdSmrg# 3399313a12fdSmrg# All path conversion functions are named using the following convention: 3400313a12fdSmrg# file name conversion function : func_convert_file_X_to_Y () 3401313a12fdSmrg# path conversion function : func_convert_path_X_to_Y () 3402313a12fdSmrg# where, for any given $build/$host combination the 'X_to_Y' value is the 3403313a12fdSmrg# same. If conversion functions are added for new $build/$host combinations, 3404313a12fdSmrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd 3405313a12fdSmrg# will break. 3406313a12fdSmrg 3407313a12fdSmrg 3408313a12fdSmrg# func_init_to_host_path_cmd 3409313a12fdSmrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the 3410313a12fdSmrg# appropriate value, based on the value of $to_host_file_cmd. 3411313a12fdSmrgto_host_path_cmd= 3412313a12fdSmrgfunc_init_to_host_path_cmd () 3413313a12fdSmrg{ 34147cea3689Smrg $debug_cmd 34157cea3689Smrg 3416313a12fdSmrg if test -z "$to_host_path_cmd"; then 3417313a12fdSmrg func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 34187cea3689Smrg to_host_path_cmd=func_convert_path_$func_stripname_result 3419313a12fdSmrg fi 3420313a12fdSmrg} 3421313a12fdSmrg 3422313a12fdSmrg 3423313a12fdSmrg# func_to_host_path ARG 3424313a12fdSmrg# Converts the path ARG from $build format to $host format. Return result 3425313a12fdSmrg# in func_to_host_path_result. 3426313a12fdSmrgfunc_to_host_path () 3427313a12fdSmrg{ 34287cea3689Smrg $debug_cmd 34297cea3689Smrg 3430313a12fdSmrg func_init_to_host_path_cmd 3431313a12fdSmrg $to_host_path_cmd "$1" 3432313a12fdSmrg} 3433313a12fdSmrg# end func_to_host_path 3434313a12fdSmrg 3435313a12fdSmrg 3436313a12fdSmrg# func_convert_path_noop ARG 3437313a12fdSmrg# Copy ARG to func_to_host_path_result. 3438313a12fdSmrgfunc_convert_path_noop () 3439313a12fdSmrg{ 34407cea3689Smrg func_to_host_path_result=$1 3441313a12fdSmrg} 3442313a12fdSmrg# end func_convert_path_noop 3443313a12fdSmrg 3444313a12fdSmrg 3445313a12fdSmrg# func_convert_path_msys_to_w32 ARG 3446313a12fdSmrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 3447313a12fdSmrg# conversion to w32 is not available inside the cwrapper. Returns result in 3448313a12fdSmrg# func_to_host_path_result. 3449313a12fdSmrgfunc_convert_path_msys_to_w32 () 3450313a12fdSmrg{ 34517cea3689Smrg $debug_cmd 34527cea3689Smrg 34537cea3689Smrg func_to_host_path_result=$1 3454313a12fdSmrg if test -n "$1"; then 3455313a12fdSmrg # Remove leading and trailing path separator characters from ARG. MSYS 3456313a12fdSmrg # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 3457313a12fdSmrg # and winepath ignores them completely. 3458313a12fdSmrg func_stripname : : "$1" 3459313a12fdSmrg func_to_host_path_tmp1=$func_stripname_result 3460313a12fdSmrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 34617cea3689Smrg func_to_host_path_result=$func_convert_core_msys_to_w32_result 3462313a12fdSmrg func_convert_path_check : ";" \ 3463313a12fdSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3464313a12fdSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3465313a12fdSmrg fi 3466313a12fdSmrg} 3467313a12fdSmrg# end func_convert_path_msys_to_w32 3468313a12fdSmrg 3469313a12fdSmrg 3470313a12fdSmrg# func_convert_path_cygwin_to_w32 ARG 3471313a12fdSmrg# Convert path ARG from Cygwin to w32 format. Returns result in 3472313a12fdSmrg# func_to_host_file_result. 3473313a12fdSmrgfunc_convert_path_cygwin_to_w32 () 3474313a12fdSmrg{ 34757cea3689Smrg $debug_cmd 34767cea3689Smrg 34777cea3689Smrg func_to_host_path_result=$1 3478313a12fdSmrg if test -n "$1"; then 3479313a12fdSmrg # See func_convert_path_msys_to_w32: 3480313a12fdSmrg func_stripname : : "$1" 3481313a12fdSmrg func_to_host_path_tmp1=$func_stripname_result 3482313a12fdSmrg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 3483313a12fdSmrg func_convert_path_check : ";" \ 3484313a12fdSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3485313a12fdSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3486313a12fdSmrg fi 3487313a12fdSmrg} 3488313a12fdSmrg# end func_convert_path_cygwin_to_w32 3489313a12fdSmrg 3490313a12fdSmrg 3491313a12fdSmrg# func_convert_path_nix_to_w32 ARG 3492313a12fdSmrg# Convert path ARG from *nix to w32 format. Requires a wine environment and 3493313a12fdSmrg# a working winepath. Returns result in func_to_host_file_result. 3494313a12fdSmrgfunc_convert_path_nix_to_w32 () 3495313a12fdSmrg{ 34967cea3689Smrg $debug_cmd 34977cea3689Smrg 34987cea3689Smrg func_to_host_path_result=$1 3499313a12fdSmrg if test -n "$1"; then 3500313a12fdSmrg # See func_convert_path_msys_to_w32: 3501313a12fdSmrg func_stripname : : "$1" 3502313a12fdSmrg func_to_host_path_tmp1=$func_stripname_result 3503313a12fdSmrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 35047cea3689Smrg func_to_host_path_result=$func_convert_core_path_wine_to_w32_result 3505313a12fdSmrg func_convert_path_check : ";" \ 3506313a12fdSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3507313a12fdSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3508313a12fdSmrg fi 3509313a12fdSmrg} 3510313a12fdSmrg# end func_convert_path_nix_to_w32 3511313a12fdSmrg 3512313a12fdSmrg 3513313a12fdSmrg# func_convert_path_msys_to_cygwin ARG 3514313a12fdSmrg# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3515313a12fdSmrg# Returns result in func_to_host_file_result. 3516313a12fdSmrgfunc_convert_path_msys_to_cygwin () 3517313a12fdSmrg{ 35187cea3689Smrg $debug_cmd 35197cea3689Smrg 35207cea3689Smrg func_to_host_path_result=$1 3521313a12fdSmrg if test -n "$1"; then 3522313a12fdSmrg # See func_convert_path_msys_to_w32: 3523313a12fdSmrg func_stripname : : "$1" 3524313a12fdSmrg func_to_host_path_tmp1=$func_stripname_result 3525313a12fdSmrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 3526313a12fdSmrg func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 35277cea3689Smrg func_to_host_path_result=$func_cygpath_result 3528313a12fdSmrg func_convert_path_check : : \ 3529313a12fdSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3530313a12fdSmrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3531313a12fdSmrg fi 3532313a12fdSmrg} 3533313a12fdSmrg# end func_convert_path_msys_to_cygwin 3534313a12fdSmrg 3535313a12fdSmrg 3536313a12fdSmrg# func_convert_path_nix_to_cygwin ARG 3537313a12fdSmrg# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 3538313a12fdSmrg# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 3539313a12fdSmrg# func_to_host_file_result. 3540313a12fdSmrgfunc_convert_path_nix_to_cygwin () 3541313a12fdSmrg{ 35427cea3689Smrg $debug_cmd 35437cea3689Smrg 35447cea3689Smrg func_to_host_path_result=$1 3545313a12fdSmrg if test -n "$1"; then 3546313a12fdSmrg # Remove leading and trailing path separator characters from 3547313a12fdSmrg # ARG. msys behavior is inconsistent here, cygpath turns them 3548313a12fdSmrg # into '.;' and ';.', and winepath ignores them completely. 3549313a12fdSmrg func_stripname : : "$1" 3550313a12fdSmrg func_to_host_path_tmp1=$func_stripname_result 3551313a12fdSmrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 3552313a12fdSmrg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 35537cea3689Smrg func_to_host_path_result=$func_cygpath_result 3554313a12fdSmrg func_convert_path_check : : \ 3555313a12fdSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3556313a12fdSmrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3557313a12fdSmrg fi 3558313a12fdSmrg} 3559313a12fdSmrg# end func_convert_path_nix_to_cygwin 3560313a12fdSmrg 3561313a12fdSmrg 35627cea3689Smrg# func_dll_def_p FILE 35637cea3689Smrg# True iff FILE is a Windows DLL '.def' file. 35647cea3689Smrg# Keep in sync with _LT_DLL_DEF_P in libtool.m4 35657cea3689Smrgfunc_dll_def_p () 35667cea3689Smrg{ 35677cea3689Smrg $debug_cmd 35687cea3689Smrg 35697cea3689Smrg func_dll_def_p_tmp=`$SED -n \ 35707cea3689Smrg -e 's/^[ ]*//' \ 35717cea3689Smrg -e '/^\(;.*\)*$/d' \ 35727cea3689Smrg -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ 35737cea3689Smrg -e q \ 35747cea3689Smrg "$1"` 35757cea3689Smrg test DEF = "$func_dll_def_p_tmp" 35767cea3689Smrg} 35777cea3689Smrg 35787cea3689Smrg 3579ae545d91Smrg# func_reorder_shared_lib_cache DIRS 3580ae545d91Smrg# Reorder the shared library cache by unconfiguring previous shared library cache 3581ae545d91Smrg# and configuring preferred search directories before previous search directories. 3582ae545d91Smrg# Previous shared library cache: /usr/lib /usr/local/lib 3583ae545d91Smrg# Preferred search directories: /tmp/testing 3584ae545d91Smrg# Reordered shared library cache: /tmp/testing /usr/lib /usr/local/lib 3585ae545d91Smrgfunc_reorder_shared_lib_cache () 3586ae545d91Smrg{ 3587ae545d91Smrg $debug_cmd 3588ae545d91Smrg 3589ae545d91Smrg case $host_os in 3590ae545d91Smrg openbsd*) 3591ae545d91Smrg get_search_directories=`PATH="$PATH:/sbin" ldconfig -r | $GREP "search directories" | $SED "s#.*search directories:\ ##g"` 3592ae545d91Smrg func_convert_delimited_path "$get_search_directories" ':' '\ ' 3593ae545d91Smrg save_search_directories=$converted_path 3594ae545d91Smrg func_convert_delimited_path "$1" ':' '\ ' 3595ae545d91Smrg 3596ae545d91Smrg # Ensure directories exist 3597ae545d91Smrg for dir in $converted_path; do 3598ae545d91Smrg # Ensure each directory is an absolute path 3599ae545d91Smrg case $dir in 3600ae545d91Smrg /*) ;; 3601ae545d91Smrg *) func_error "Directory '$dir' is not an absolute path" 3602ae545d91Smrg exit $EXIT_FAILURE ;; 3603ae545d91Smrg esac 3604ae545d91Smrg # Ensure no trailing slashes 3605ae545d91Smrg func_stripname '' '/' "$dir" 3606ae545d91Smrg dir=$func_stripname_result 3607ae545d91Smrg if test -d "$dir"; then 3608ae545d91Smrg if test -n "$preferred_search_directories"; then 3609ae545d91Smrg preferred_search_directories="$preferred_search_directories $dir" 3610ae545d91Smrg else 3611ae545d91Smrg preferred_search_directories=$dir 3612ae545d91Smrg fi 3613ae545d91Smrg else 3614ae545d91Smrg func_error "Directory '$dir' does not exist" 3615ae545d91Smrg exit $EXIT_FAILURE 3616ae545d91Smrg fi 3617ae545d91Smrg done 3618ae545d91Smrg 3619ae545d91Smrg PATH="$PATH:/sbin" ldconfig -U $save_search_directories 3620ae545d91Smrg PATH="$PATH:/sbin" ldconfig -m $preferred_search_directories $save_search_directories 3621ae545d91Smrg get_search_directories=`PATH="$PATH:/sbin" ldconfig -r | $GREP "search directories" | $SED "s#.*search directories:\ ##g"` 3622ae545d91Smrg func_convert_delimited_path "$get_search_directories" ':' '\ ' 3623ae545d91Smrg reordered_search_directories=$converted_path 3624ae545d91Smrg 3625ae545d91Smrg $ECHO "Original: $save_search_directories" 3626ae545d91Smrg $ECHO "Reordered: $reordered_search_directories" 3627ae545d91Smrg exit $EXIT_SUCCESS 3628ae545d91Smrg ;; 3629ae545d91Smrg *) 3630ae545d91Smrg func_error "--reorder-cache is not supported for host_os=$host_os." 3631ae545d91Smrg exit $EXIT_FAILURE 3632ae545d91Smrg ;; 3633ae545d91Smrg esac 3634ae545d91Smrg} 3635ae545d91Smrg# end func_reorder_shared_lib_cache 3636ae545d91Smrg 3637ae545d91Smrg 3638e19dfac4Smrg# func_mode_compile arg... 3639e19dfac4Smrgfunc_mode_compile () 3640e19dfac4Smrg{ 36417cea3689Smrg $debug_cmd 36427cea3689Smrg 3643e19dfac4Smrg # Get the compilation command and the source file. 3644e19dfac4Smrg base_compile= 36457cea3689Smrg srcfile=$nonopt # always keep a non-empty value in "srcfile" 3646e19dfac4Smrg suppress_opt=yes 3647e19dfac4Smrg suppress_output= 3648e19dfac4Smrg arg_mode=normal 3649e19dfac4Smrg libobj= 3650e19dfac4Smrg later= 3651e19dfac4Smrg pie_flag= 3652e19dfac4Smrg 3653e19dfac4Smrg for arg 3654e19dfac4Smrg do 3655e19dfac4Smrg case $arg_mode in 3656e19dfac4Smrg arg ) 3657e19dfac4Smrg # do not "continue". Instead, add this to base_compile 36587cea3689Smrg lastarg=$arg 3659e19dfac4Smrg arg_mode=normal 3660e19dfac4Smrg ;; 3661e19dfac4Smrg 3662e19dfac4Smrg target ) 36637cea3689Smrg libobj=$arg 3664e19dfac4Smrg arg_mode=normal 3665e19dfac4Smrg continue 3666e19dfac4Smrg ;; 3667e19dfac4Smrg 3668e19dfac4Smrg normal ) 3669e19dfac4Smrg # Accept any command-line options. 3670e19dfac4Smrg case $arg in 3671e19dfac4Smrg -o) 3672e19dfac4Smrg test -n "$libobj" && \ 36737cea3689Smrg func_fatal_error "you cannot specify '-o' more than once" 3674e19dfac4Smrg arg_mode=target 3675e19dfac4Smrg continue 3676e19dfac4Smrg ;; 3677e19dfac4Smrg 3678e19dfac4Smrg -pie | -fpie | -fPIE) 3679313a12fdSmrg func_append pie_flag " $arg" 3680e19dfac4Smrg continue 3681e19dfac4Smrg ;; 3682e19dfac4Smrg 3683e19dfac4Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 3684313a12fdSmrg func_append later " $arg" 3685e19dfac4Smrg continue 3686e19dfac4Smrg ;; 3687e19dfac4Smrg 3688e19dfac4Smrg -no-suppress) 3689e19dfac4Smrg suppress_opt=no 3690e19dfac4Smrg continue 3691e19dfac4Smrg ;; 3692e19dfac4Smrg 3693e19dfac4Smrg -Xcompiler) 3694e19dfac4Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 3695e19dfac4Smrg continue # The current "srcfile" will either be retained or 3696e19dfac4Smrg ;; # replaced later. I would guess that would be a bug. 3697e19dfac4Smrg 3698e19dfac4Smrg -Wc,*) 3699e19dfac4Smrg func_stripname '-Wc,' '' "$arg" 3700e19dfac4Smrg args=$func_stripname_result 3701e19dfac4Smrg lastarg= 37027cea3689Smrg save_ifs=$IFS; IFS=, 3703e19dfac4Smrg for arg in $args; do 37047cea3689Smrg IFS=$save_ifs 3705313a12fdSmrg func_append_quoted lastarg "$arg" 370627702724Smrg done 37077cea3689Smrg IFS=$save_ifs 3708e19dfac4Smrg func_stripname ' ' '' "$lastarg" 3709e19dfac4Smrg lastarg=$func_stripname_result 371027702724Smrg 371127702724Smrg # Add the arguments to base_compile. 3712313a12fdSmrg func_append base_compile " $lastarg" 371327702724Smrg continue 371427702724Smrg ;; 371527702724Smrg 3716e19dfac4Smrg *) 371727702724Smrg # Accept the current argument as the source file. 371827702724Smrg # The previous "srcfile" becomes the current argument. 371927702724Smrg # 37207cea3689Smrg lastarg=$srcfile 37217cea3689Smrg srcfile=$arg 372227702724Smrg ;; 372327702724Smrg esac # case $arg 372427702724Smrg ;; 372527702724Smrg esac # case $arg_mode 372627702724Smrg 372727702724Smrg # Aesthetically quote the previous argument. 3728313a12fdSmrg func_append_quoted base_compile "$lastarg" 372927702724Smrg done # for arg 373027702724Smrg 373127702724Smrg case $arg_mode in 373227702724Smrg arg) 3733e19dfac4Smrg func_fatal_error "you must specify an argument for -Xcompile" 373427702724Smrg ;; 373527702724Smrg target) 37367cea3689Smrg func_fatal_error "you must specify a target with '-o'" 373727702724Smrg ;; 373827702724Smrg *) 373927702724Smrg # Get the name of the library object. 3740e19dfac4Smrg test -z "$libobj" && { 3741e19dfac4Smrg func_basename "$srcfile" 37427cea3689Smrg libobj=$func_basename_result 3743e19dfac4Smrg } 374427702724Smrg ;; 374527702724Smrg esac 374627702724Smrg 374727702724Smrg # Recognize several different file suffixes. 374827702724Smrg # If the user specifies -o file.o, it is replaced with file.lo 374927702724Smrg case $libobj in 3750e19dfac4Smrg *.[cCFSifmso] | \ 3751e19dfac4Smrg *.ada | *.adb | *.ads | *.asm | \ 3752e19dfac4Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 3753313a12fdSmrg *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 3754e19dfac4Smrg func_xform "$libobj" 3755e19dfac4Smrg libobj=$func_xform_result 3756e19dfac4Smrg ;; 375727702724Smrg esac 375827702724Smrg 375927702724Smrg case $libobj in 3760e19dfac4Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 376127702724Smrg *) 37627cea3689Smrg func_fatal_error "cannot determine name of library object from '$libobj'" 376327702724Smrg ;; 376427702724Smrg esac 376527702724Smrg 376627702724Smrg func_infer_tag $base_compile 376727702724Smrg 376827702724Smrg for arg in $later; do 376927702724Smrg case $arg in 3770e19dfac4Smrg -shared) 37717cea3689Smrg test yes = "$build_libtool_libs" \ 37727cea3689Smrg || func_fatal_configuration "cannot build a shared library" 3773e19dfac4Smrg build_old_libs=no 3774e19dfac4Smrg continue 3775e19dfac4Smrg ;; 3776e19dfac4Smrg 377727702724Smrg -static) 3778e19dfac4Smrg build_libtool_libs=no 377927702724Smrg build_old_libs=yes 378027702724Smrg continue 378127702724Smrg ;; 378227702724Smrg 378327702724Smrg -prefer-pic) 378427702724Smrg pic_mode=yes 378527702724Smrg continue 378627702724Smrg ;; 378727702724Smrg 378827702724Smrg -prefer-non-pic) 378927702724Smrg pic_mode=no 379027702724Smrg continue 379127702724Smrg ;; 379227702724Smrg esac 379327702724Smrg done 379427702724Smrg 379595b7a5c8Smrg func_quote_arg pretty "$libobj" 379695b7a5c8Smrg test "X$libobj" != "X$func_quote_arg_result" \ 3797e19dfac4Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 37987cea3689Smrg && func_warning "libobj name '$libobj' may not contain shell special characters." 3799e19dfac4Smrg func_dirname_and_basename "$obj" "/" "" 38007cea3689Smrg objname=$func_basename_result 38017cea3689Smrg xdir=$func_dirname_result 38027cea3689Smrg lobj=$xdir$objdir/$objname 380327702724Smrg 3804e19dfac4Smrg test -z "$base_compile" && \ 3805e19dfac4Smrg func_fatal_help "you must specify a compilation command" 380627702724Smrg 380727702724Smrg # Delete any leftover library objects. 38087cea3689Smrg if test yes = "$build_old_libs"; then 380927702724Smrg removelist="$obj $lobj $libobj ${libobj}T" 381027702724Smrg else 381127702724Smrg removelist="$lobj $libobj ${libobj}T" 381227702724Smrg fi 381327702724Smrg 381427702724Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 381527702724Smrg case $host_os in 3816ae545d91Smrg cygwin* | mingw* | windows* | pw32* | os2* | cegcc*) 381727702724Smrg pic_mode=default 381827702724Smrg ;; 381927702724Smrg esac 38207cea3689Smrg if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then 382127702724Smrg # non-PIC code in shared libraries is not supported 382227702724Smrg pic_mode=default 382327702724Smrg fi 382427702724Smrg 382527702724Smrg # Calculate the filename of the output object if compiler does 382627702724Smrg # not support -o with -c 38277cea3689Smrg if test no = "$compiler_c_o"; then 38287cea3689Smrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext 38297cea3689Smrg lockfile=$output_obj.lock 383027702724Smrg else 383127702724Smrg output_obj= 383227702724Smrg need_locks=no 383327702724Smrg lockfile= 383427702724Smrg fi 383527702724Smrg 383627702724Smrg # Lock this critical section if it is needed 383727702724Smrg # We use this script file to make the link, it avoids creating a new file 38387cea3689Smrg if test yes = "$need_locks"; then 3839e19dfac4Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 3840e19dfac4Smrg func_echo "Waiting for $lockfile to be removed" 384127702724Smrg sleep 2 384227702724Smrg done 38437cea3689Smrg elif test warn = "$need_locks"; then 384427702724Smrg if test -f "$lockfile"; then 3845e19dfac4Smrg $ECHO "\ 384627702724Smrg*** ERROR, $lockfile exists and contains: 384727702724Smrg`cat $lockfile 2>/dev/null` 384827702724Smrg 384927702724SmrgThis indicates that another process is trying to use the same 385027702724Smrgtemporary object file, and libtool could not work around it because 38517cea3689Smrgyour compiler does not support '-c' and '-o' together. If you 385227702724Smrgrepeat this compilation, it may succeed, by chance, but you had better 385327702724Smrgavoid parallel builds (make -j) in this platform, or get a better 385427702724Smrgcompiler." 385527702724Smrg 3856e19dfac4Smrg $opt_dry_run || $RM $removelist 385727702724Smrg exit $EXIT_FAILURE 385827702724Smrg fi 3859313a12fdSmrg func_append removelist " $output_obj" 3860e19dfac4Smrg $ECHO "$srcfile" > "$lockfile" 386127702724Smrg fi 386227702724Smrg 3863e19dfac4Smrg $opt_dry_run || $RM $removelist 3864313a12fdSmrg func_append removelist " $lockfile" 3865e19dfac4Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 3866e19dfac4Smrg 3867313a12fdSmrg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 3868313a12fdSmrg srcfile=$func_to_tool_file_result 386995b7a5c8Smrg func_quote_arg pretty "$srcfile" 387095b7a5c8Smrg qsrcfile=$func_quote_arg_result 387127702724Smrg 387227702724Smrg # Only build a PIC object if we are building libtool libraries. 38737cea3689Smrg if test yes = "$build_libtool_libs"; then 387427702724Smrg # Without this assignment, base_compile gets emptied. 387527702724Smrg fbsd_hideous_sh_bug=$base_compile 387627702724Smrg 38777cea3689Smrg if test no != "$pic_mode"; then 387827702724Smrg command="$base_compile $qsrcfile $pic_flag" 387927702724Smrg else 388027702724Smrg # Don't build PIC code 388127702724Smrg command="$base_compile $qsrcfile" 388227702724Smrg fi 388327702724Smrg 3884e19dfac4Smrg func_mkdir_p "$xdir$objdir" 388527702724Smrg 388627702724Smrg if test -z "$output_obj"; then 388727702724Smrg # Place PIC objects in $objdir 3888313a12fdSmrg func_append command " -o $lobj" 388927702724Smrg fi 389027702724Smrg 3891e19dfac4Smrg func_show_eval_locale "$command" \ 3892e19dfac4Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 389327702724Smrg 38947cea3689Smrg if test warn = "$need_locks" && 389527702724Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3896e19dfac4Smrg $ECHO "\ 389727702724Smrg*** ERROR, $lockfile contains: 389827702724Smrg`cat $lockfile 2>/dev/null` 389927702724Smrg 390027702724Smrgbut it should contain: 390127702724Smrg$srcfile 390227702724Smrg 390327702724SmrgThis indicates that another process is trying to use the same 390427702724Smrgtemporary object file, and libtool could not work around it because 39057cea3689Smrgyour compiler does not support '-c' and '-o' together. If you 390627702724Smrgrepeat this compilation, it may succeed, by chance, but you had better 390727702724Smrgavoid parallel builds (make -j) in this platform, or get a better 390827702724Smrgcompiler." 390927702724Smrg 3910e19dfac4Smrg $opt_dry_run || $RM $removelist 391127702724Smrg exit $EXIT_FAILURE 391227702724Smrg fi 391327702724Smrg 391427702724Smrg # Just move the object if needed, then go on to compile the next one 391527702724Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 3916e19dfac4Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 3917e19dfac4Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 391827702724Smrg fi 391927702724Smrg 392027702724Smrg # Allow error messages only from the first compilation. 39217cea3689Smrg if test yes = "$suppress_opt"; then 3922e19dfac4Smrg suppress_output=' >/dev/null 2>&1' 392327702724Smrg fi 392427702724Smrg fi 392527702724Smrg 392627702724Smrg # Only build a position-dependent object if we build old libraries. 39277cea3689Smrg if test yes = "$build_old_libs"; then 39287cea3689Smrg if test yes != "$pic_mode"; then 392927702724Smrg # Don't build PIC code 3930e19dfac4Smrg command="$base_compile $qsrcfile$pie_flag" 393127702724Smrg else 393227702724Smrg command="$base_compile $qsrcfile $pic_flag" 393327702724Smrg fi 39347cea3689Smrg if test yes = "$compiler_c_o"; then 3935313a12fdSmrg func_append command " -o $obj" 393627702724Smrg fi 393727702724Smrg 393827702724Smrg # Suppress compiler output if we already did a PIC compilation. 3939313a12fdSmrg func_append command "$suppress_output" 3940e19dfac4Smrg func_show_eval_locale "$command" \ 3941e19dfac4Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 394227702724Smrg 39437cea3689Smrg if test warn = "$need_locks" && 394427702724Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3945e19dfac4Smrg $ECHO "\ 394627702724Smrg*** ERROR, $lockfile contains: 394727702724Smrg`cat $lockfile 2>/dev/null` 394827702724Smrg 394927702724Smrgbut it should contain: 395027702724Smrg$srcfile 395127702724Smrg 395227702724SmrgThis indicates that another process is trying to use the same 395327702724Smrgtemporary object file, and libtool could not work around it because 39547cea3689Smrgyour compiler does not support '-c' and '-o' together. If you 395527702724Smrgrepeat this compilation, it may succeed, by chance, but you had better 395627702724Smrgavoid parallel builds (make -j) in this platform, or get a better 395727702724Smrgcompiler." 395827702724Smrg 3959e19dfac4Smrg $opt_dry_run || $RM $removelist 396027702724Smrg exit $EXIT_FAILURE 396127702724Smrg fi 396227702724Smrg 396327702724Smrg # Just move the object if needed 396427702724Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 3965e19dfac4Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 3966e19dfac4Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 396727702724Smrg fi 396827702724Smrg fi 396927702724Smrg 3970e19dfac4Smrg $opt_dry_run || { 3971e19dfac4Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 397227702724Smrg 3973e19dfac4Smrg # Unlock the critical section if it was locked 39747cea3689Smrg if test no != "$need_locks"; then 3975e19dfac4Smrg removelist=$lockfile 3976e19dfac4Smrg $RM "$lockfile" 3977e19dfac4Smrg fi 3978e19dfac4Smrg } 397927702724Smrg 398027702724Smrg exit $EXIT_SUCCESS 3981e19dfac4Smrg} 398227702724Smrg 3983e19dfac4Smrg$opt_help || { 39847cea3689Smrg test compile = "$opt_mode" && func_mode_compile ${1+"$@"} 3985e19dfac4Smrg} 398627702724Smrg 3987e19dfac4Smrgfunc_mode_help () 3988e19dfac4Smrg{ 3989e19dfac4Smrg # We need to display help for each of the modes. 3990313a12fdSmrg case $opt_mode in 3991e19dfac4Smrg "") 3992e19dfac4Smrg # Generic help is extracted from the usage comments 3993e19dfac4Smrg # at the start of this file. 3994e19dfac4Smrg func_help 3995e19dfac4Smrg ;; 399627702724Smrg 3997e19dfac4Smrg clean) 3998e19dfac4Smrg $ECHO \ 3999e19dfac4Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 400027702724Smrg 4001e19dfac4SmrgRemove files from the build directory. 400227702724Smrg 4003e19dfac4SmrgRM is the name of the program to use to delete files associated with each FILE 40047cea3689Smrg(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 4005e19dfac4Smrgto RM. 400627702724Smrg 4007e19dfac4SmrgIf FILE is a libtool library, object or program, all the files associated 4008e19dfac4Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 4009e19dfac4Smrg ;; 401027702724Smrg 4011e19dfac4Smrg compile) 4012e19dfac4Smrg $ECHO \ 4013e19dfac4Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 401427702724Smrg 4015e19dfac4SmrgCompile a source file into a libtool library object. 401627702724Smrg 4017e19dfac4SmrgThis mode accepts the following additional options: 401827702724Smrg 4019e19dfac4Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 4020e19dfac4Smrg -no-suppress do not suppress compiler output for multiple passes 4021313a12fdSmrg -prefer-pic try to build PIC objects only 4022313a12fdSmrg -prefer-non-pic try to build non-PIC objects only 40237cea3689Smrg -shared do not build a '.o' file suitable for static linking 40247cea3689Smrg -static only build a '.o' file suitable for static linking 402595b7a5c8Smrg -Wc,FLAG 402695b7a5c8Smrg -Xcompiler FLAG pass FLAG directly to the compiler 402727702724Smrg 40287cea3689SmrgCOMPILE-COMMAND is a command to be used in creating a 'standard' object file 4029e19dfac4Smrgfrom the given SOURCEFILE. 403027702724Smrg 4031e19dfac4SmrgThe output file name is determined by removing the directory component from 40327cea3689SmrgSOURCEFILE, then substituting the C source code suffix '.c' with the 40337cea3689Smrglibrary object suffix, '.lo'." 4034e19dfac4Smrg ;; 403527702724Smrg 4036e19dfac4Smrg execute) 4037e19dfac4Smrg $ECHO \ 4038e19dfac4Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 403927702724Smrg 4040e19dfac4SmrgAutomatically set library path, then run a program. 404127702724Smrg 4042e19dfac4SmrgThis mode accepts the following additional options: 404327702724Smrg 4044e19dfac4Smrg -dlopen FILE add the directory containing FILE to the library path 404527702724Smrg 40467cea3689SmrgThis mode sets the library path environment variable according to '-dlopen' 4047e19dfac4Smrgflags. 404827702724Smrg 4049e19dfac4SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 4050e19dfac4Smrginto their corresponding uninstalled binary, and any of their required library 4051e19dfac4Smrgdirectories are added to the library path. 405227702724Smrg 4053e19dfac4SmrgThen, COMMAND is executed, with ARGS as arguments." 4054e19dfac4Smrg ;; 405527702724Smrg 4056e19dfac4Smrg finish) 4057e19dfac4Smrg $ECHO \ 4058e19dfac4Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 405927702724Smrg 4060e19dfac4SmrgComplete the installation of libtool libraries. 406127702724Smrg 4062e19dfac4SmrgEach LIBDIR is a directory that contains libtool libraries. 406327702724Smrg 4064e19dfac4SmrgThe commands that this mode executes may require superuser privileges. Use 40657cea3689Smrgthe '--dry-run' option if you just want to see what would be executed." 4066e19dfac4Smrg ;; 406727702724Smrg 4068e19dfac4Smrg install) 4069e19dfac4Smrg $ECHO \ 4070e19dfac4Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 407127702724Smrg 4072e19dfac4SmrgInstall executables or libraries. 407327702724Smrg 4074e19dfac4SmrgINSTALL-COMMAND is the installation command. The first component should be 40757cea3689Smrgeither the 'install' or 'cp' program. 407627702724Smrg 4077e19dfac4SmrgThe following components of INSTALL-COMMAND are treated specially: 407827702724Smrg 4079313a12fdSmrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 408027702724Smrg 4081e19dfac4SmrgThe rest of the components are interpreted as arguments to that command (only 4082e19dfac4SmrgBSD-compatible install options are recognized)." 4083e19dfac4Smrg ;; 408427702724Smrg 4085e19dfac4Smrg link) 4086e19dfac4Smrg $ECHO \ 4087e19dfac4Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 408827702724Smrg 4089e19dfac4SmrgLink object files or libraries together to form another library, or to 4090e19dfac4Smrgcreate an executable program. 409127702724Smrg 4092e19dfac4SmrgLINK-COMMAND is a command using the C compiler that you would use to create 4093e19dfac4Smrga program from several object files. 409427702724Smrg 4095e19dfac4SmrgThe following components of LINK-COMMAND are treated specially: 409627702724Smrg 4097e19dfac4Smrg -all-static do not do any dynamic linking at all 4098e19dfac4Smrg -avoid-version do not add a version suffix if possible 4099313a12fdSmrg -bindir BINDIR specify path to binaries directory (for systems where 4100313a12fdSmrg libraries must be found in the PATH setting at runtime) 41017cea3689Smrg -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime 4102e19dfac4Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 4103e19dfac4Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 4104e19dfac4Smrg -export-symbols SYMFILE 4105e19dfac4Smrg try to export only the symbols listed in SYMFILE 4106e19dfac4Smrg -export-symbols-regex REGEX 4107e19dfac4Smrg try to export only the symbols matching REGEX 4108e19dfac4Smrg -LLIBDIR search LIBDIR for required installed libraries 4109e19dfac4Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 4110e19dfac4Smrg -module build a library that can dlopened 4111e19dfac4Smrg -no-fast-install disable the fast-install mode 4112e19dfac4Smrg -no-install link a not-installable executable 4113e19dfac4Smrg -no-undefined declare that a library does not refer to external symbols 4114e19dfac4Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 41157cea3689Smrg -objectlist FILE use a list of object files found in FILE to specify objects 41167cea3689Smrg -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) 4117e19dfac4Smrg -precious-files-regex REGEX 4118e19dfac4Smrg don't remove output files matching REGEX 4119e19dfac4Smrg -release RELEASE specify package release information 4120e19dfac4Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 4121e19dfac4Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 4122e19dfac4Smrg -shared only do dynamic linking of libtool libraries 4123e19dfac4Smrg -shrext SUFFIX override the standard shared library file extension 4124e19dfac4Smrg -static do not do any dynamic linking of uninstalled libtool libraries 4125e19dfac4Smrg -static-libtool-libs 4126e19dfac4Smrg do not do any dynamic linking of libtool libraries 4127e19dfac4Smrg -version-info CURRENT[:REVISION[:AGE]] 4128e19dfac4Smrg specify library version info [each variable defaults to 0] 4129e19dfac4Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 4130313a12fdSmrg -Wc,FLAG 4131313a12fdSmrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 413295b7a5c8Smrg -Wa,FLAG 413395b7a5c8Smrg -Xassembler FLAG pass linker-specific FLAG directly to the assembler 4134313a12fdSmrg -Wl,FLAG 4135313a12fdSmrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 4136313a12fdSmrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 413727702724Smrg 41387cea3689SmrgAll other options (arguments beginning with '-') are ignored. 413927702724Smrg 41407cea3689SmrgEvery other argument is treated as a filename. Files ending in '.la' are 4141e19dfac4Smrgtreated as uninstalled libtool libraries, other files are standard or library 4142e19dfac4Smrgobject files. 414327702724Smrg 41447cea3689SmrgIf the OUTPUT-FILE ends in '.la', then a libtool library is created, 41457cea3689Smrgonly library objects ('.lo' files) may be specified, and '-rpath' is 4146e19dfac4Smrgrequired, except when creating a convenience library. 414727702724Smrg 41487cea3689SmrgIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created 41497cea3689Smrgusing 'ar' and 'ranlib', or on Windows using 'lib'. 415027702724Smrg 41517cea3689SmrgIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file 4152e19dfac4Smrgis created, otherwise an executable program is created." 415327702724Smrg ;; 415427702724Smrg 4155e19dfac4Smrg uninstall) 4156e19dfac4Smrg $ECHO \ 4157e19dfac4Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 415827702724Smrg 4159e19dfac4SmrgRemove libraries from an installation directory. 416027702724Smrg 4161e19dfac4SmrgRM is the name of the program to use to delete files associated with each FILE 41627cea3689Smrg(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 4163e19dfac4Smrgto RM. 416427702724Smrg 4165e19dfac4SmrgIf FILE is a libtool library, all the files associated with it are deleted. 4166e19dfac4SmrgOtherwise, only FILE itself is deleted using RM." 4167e19dfac4Smrg ;; 416827702724Smrg 4169e19dfac4Smrg *) 41707cea3689Smrg func_fatal_help "invalid operation mode '$opt_mode'" 4171e19dfac4Smrg ;; 4172e19dfac4Smrg esac 417327702724Smrg 4174313a12fdSmrg echo 41757cea3689Smrg $ECHO "Try '$progname --help' for more information about other modes." 4176e19dfac4Smrg} 417727702724Smrg 4178313a12fdSmrg# Now that we've collected a possible --mode arg, show help if necessary 4179313a12fdSmrgif $opt_help; then 41807cea3689Smrg if test : = "$opt_help"; then 4181313a12fdSmrg func_mode_help 4182313a12fdSmrg else 4183313a12fdSmrg { 4184313a12fdSmrg func_help noexit 4185313a12fdSmrg for opt_mode in compile link execute install finish uninstall clean; do 4186313a12fdSmrg func_mode_help 4187313a12fdSmrg done 41887cea3689Smrg } | $SED -n '1p; 2,$s/^Usage:/ or: /p' 4189313a12fdSmrg { 4190313a12fdSmrg func_help noexit 4191313a12fdSmrg for opt_mode in compile link execute install finish uninstall clean; do 4192313a12fdSmrg echo 4193313a12fdSmrg func_mode_help 4194313a12fdSmrg done 4195313a12fdSmrg } | 41967cea3689Smrg $SED '1d 4197313a12fdSmrg /^When reporting/,/^Report/{ 4198313a12fdSmrg H 4199313a12fdSmrg d 4200313a12fdSmrg } 4201313a12fdSmrg $x 4202313a12fdSmrg /information about other modes/d 4203313a12fdSmrg /more detailed .*MODE/d 4204313a12fdSmrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 4205313a12fdSmrg fi 4206313a12fdSmrg exit $? 4207313a12fdSmrgfi 420827702724Smrg 420927702724Smrg 4210ae545d91Smrg# If option '--reorder-cache', reorder the shared library cache and exit. 4211ae545d91Smrgif $opt_reorder_cache; then 4212ae545d91Smrg func_reorder_shared_lib_cache $shared_lib_dirs 4213ae545d91Smrgfi 4214ae545d91Smrg 4215ae545d91Smrg 4216e19dfac4Smrg# func_mode_execute arg... 4217e19dfac4Smrgfunc_mode_execute () 4218e19dfac4Smrg{ 42197cea3689Smrg $debug_cmd 42207cea3689Smrg 4221e19dfac4Smrg # The first argument is the command name. 42227cea3689Smrg cmd=$nonopt 4223e19dfac4Smrg test -z "$cmd" && \ 4224e19dfac4Smrg func_fatal_help "you must specify a COMMAND" 422527702724Smrg 4226e19dfac4Smrg # Handle -dlopen flags immediately. 4227313a12fdSmrg for file in $opt_dlopen; do 4228e19dfac4Smrg test -f "$file" \ 42297cea3689Smrg || func_fatal_help "'$file' is not a file" 423027702724Smrg 4231e19dfac4Smrg dir= 4232e19dfac4Smrg case $file in 4233e19dfac4Smrg *.la) 4234313a12fdSmrg func_resolve_sysroot "$file" 4235313a12fdSmrg file=$func_resolve_sysroot_result 4236313a12fdSmrg 4237e19dfac4Smrg # Check to see that this really is a libtool archive. 4238e19dfac4Smrg func_lalib_unsafe_p "$file" \ 42397cea3689Smrg || func_fatal_help "'$lib' is not a valid libtool archive" 424027702724Smrg 4241e19dfac4Smrg # Read the libtool library. 4242e19dfac4Smrg dlname= 4243e19dfac4Smrg library_names= 4244e19dfac4Smrg func_source "$file" 424527702724Smrg 4246e19dfac4Smrg # Skip this library if it cannot be dlopened. 4247e19dfac4Smrg if test -z "$dlname"; then 4248e19dfac4Smrg # Warn if it was a shared library. 4249e19dfac4Smrg test -n "$library_names" && \ 42507cea3689Smrg func_warning "'$file' was not linked with '-export-dynamic'" 4251e19dfac4Smrg continue 4252e19dfac4Smrg fi 425327702724Smrg 4254e19dfac4Smrg func_dirname "$file" "" "." 42557cea3689Smrg dir=$func_dirname_result 425627702724Smrg 4257e19dfac4Smrg if test -f "$dir/$objdir/$dlname"; then 4258313a12fdSmrg func_append dir "/$objdir" 4259e19dfac4Smrg else 4260e19dfac4Smrg if test ! -f "$dir/$dlname"; then 42617cea3689Smrg func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" 4262e19dfac4Smrg fi 4263e19dfac4Smrg fi 426427702724Smrg ;; 426527702724Smrg 4266e19dfac4Smrg *.lo) 4267e19dfac4Smrg # Just add the directory containing the .lo file. 4268e19dfac4Smrg func_dirname "$file" "" "." 42697cea3689Smrg dir=$func_dirname_result 427027702724Smrg ;; 427127702724Smrg 4272e19dfac4Smrg *) 42737cea3689Smrg func_warning "'-dlopen' is ignored for non-libtool libraries and objects" 427427702724Smrg continue 427527702724Smrg ;; 4276e19dfac4Smrg esac 427727702724Smrg 4278e19dfac4Smrg # Get the absolute pathname. 4279e19dfac4Smrg absdir=`cd "$dir" && pwd` 42807cea3689Smrg test -n "$absdir" && dir=$absdir 428127702724Smrg 4282e19dfac4Smrg # Now add the directory to shlibpath_var. 4283e19dfac4Smrg if eval "test -z \"\$$shlibpath_var\""; then 4284e19dfac4Smrg eval "$shlibpath_var=\"\$dir\"" 4285e19dfac4Smrg else 4286e19dfac4Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 4287e19dfac4Smrg fi 4288e19dfac4Smrg done 428927702724Smrg 4290e19dfac4Smrg # This variable tells wrapper scripts just to set shlibpath_var 4291e19dfac4Smrg # rather than running their programs. 42927cea3689Smrg libtool_execute_magic=$magic 429327702724Smrg 4294e19dfac4Smrg # Check if any of the arguments is a wrapper script. 4295e19dfac4Smrg args= 4296e19dfac4Smrg for file 4297e19dfac4Smrg do 4298e19dfac4Smrg case $file in 4299313a12fdSmrg -* | *.la | *.lo ) ;; 4300e19dfac4Smrg *) 4301e19dfac4Smrg # Do a test to see if this is really a libtool program. 4302e19dfac4Smrg if func_ltwrapper_script_p "$file"; then 4303e19dfac4Smrg func_source "$file" 4304e19dfac4Smrg # Transform arg to wrapped name. 43057cea3689Smrg file=$progdir/$program 4306e19dfac4Smrg elif func_ltwrapper_executable_p "$file"; then 4307e19dfac4Smrg func_ltwrapper_scriptname "$file" 4308e19dfac4Smrg func_source "$func_ltwrapper_scriptname_result" 4309e19dfac4Smrg # Transform arg to wrapped name. 43107cea3689Smrg file=$progdir/$program 4311e19dfac4Smrg fi 4312e19dfac4Smrg ;; 4313e19dfac4Smrg esac 4314e19dfac4Smrg # Quote arguments (to preserve shell metacharacters). 4315313a12fdSmrg func_append_quoted args "$file" 4316e19dfac4Smrg done 431727702724Smrg 43187cea3689Smrg if $opt_dry_run; then 43197cea3689Smrg # Display what would be done. 43207cea3689Smrg if test -n "$shlibpath_var"; then 43217cea3689Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 43227cea3689Smrg echo "export $shlibpath_var" 43237cea3689Smrg fi 43247cea3689Smrg $ECHO "$cmd$args" 43257cea3689Smrg exit $EXIT_SUCCESS 43267cea3689Smrg else 4327e19dfac4Smrg if test -n "$shlibpath_var"; then 4328e19dfac4Smrg # Export the shlibpath_var. 4329e19dfac4Smrg eval "export $shlibpath_var" 4330e19dfac4Smrg fi 433127702724Smrg 4332e19dfac4Smrg # Restore saved environment variables 4333e19dfac4Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 4334e19dfac4Smrg do 4335e19dfac4Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 4336e19dfac4Smrg $lt_var=\$save_$lt_var; export $lt_var 4337e19dfac4Smrg else 4338e19dfac4Smrg $lt_unset $lt_var 4339e19dfac4Smrg fi" 4340e19dfac4Smrg done 434127702724Smrg 4342e19dfac4Smrg # Now prepare to actually exec the command. 43437cea3689Smrg exec_cmd=\$cmd$args 4344e19dfac4Smrg fi 4345e19dfac4Smrg} 434627702724Smrg 43477cea3689Smrgtest execute = "$opt_mode" && func_mode_execute ${1+"$@"} 434827702724Smrg 434927702724Smrg 4350e19dfac4Smrg# func_mode_finish arg... 4351e19dfac4Smrgfunc_mode_finish () 4352e19dfac4Smrg{ 43537cea3689Smrg $debug_cmd 43547cea3689Smrg 4355313a12fdSmrg libs= 4356313a12fdSmrg libdirs= 4357e19dfac4Smrg admincmds= 435827702724Smrg 4359313a12fdSmrg for opt in "$nonopt" ${1+"$@"} 4360313a12fdSmrg do 4361313a12fdSmrg if test -d "$opt"; then 4362313a12fdSmrg func_append libdirs " $opt" 4363313a12fdSmrg 4364313a12fdSmrg elif test -f "$opt"; then 4365313a12fdSmrg if func_lalib_unsafe_p "$opt"; then 4366313a12fdSmrg func_append libs " $opt" 4367313a12fdSmrg else 43687cea3689Smrg func_warning "'$opt' is not a valid libtool archive" 4369313a12fdSmrg fi 4370313a12fdSmrg 4371313a12fdSmrg else 43727cea3689Smrg func_fatal_error "invalid argument '$opt'" 4373313a12fdSmrg fi 4374313a12fdSmrg done 4375313a12fdSmrg 4376313a12fdSmrg if test -n "$libs"; then 4377313a12fdSmrg if test -n "$lt_sysroot"; then 4378313a12fdSmrg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 4379313a12fdSmrg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 4380313a12fdSmrg else 4381313a12fdSmrg sysroot_cmd= 4382313a12fdSmrg fi 4383313a12fdSmrg 4384313a12fdSmrg # Remove sysroot references 4385313a12fdSmrg if $opt_dry_run; then 4386313a12fdSmrg for lib in $libs; do 43877cea3689Smrg echo "removing references to $lt_sysroot and '=' prefixes from $lib" 4388313a12fdSmrg done 4389313a12fdSmrg else 4390313a12fdSmrg tmpdir=`func_mktempdir` 4391313a12fdSmrg for lib in $libs; do 43927cea3689Smrg $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 4393313a12fdSmrg > $tmpdir/tmp-la 4394313a12fdSmrg mv -f $tmpdir/tmp-la $lib 4395313a12fdSmrg done 4396313a12fdSmrg ${RM}r "$tmpdir" 4397313a12fdSmrg fi 4398313a12fdSmrg fi 439927702724Smrg 4400ae545d91Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs" && $opt_finishing; then 4401e19dfac4Smrg for libdir in $libdirs; do 4402e19dfac4Smrg if test -n "$finish_cmds"; then 4403e19dfac4Smrg # Do each command in the finish commands. 4404e19dfac4Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 4405e19dfac4Smrg'"$cmd"'"' 4406e19dfac4Smrg fi 4407e19dfac4Smrg if test -n "$finish_eval"; then 4408e19dfac4Smrg # Do the single finish_eval. 4409e19dfac4Smrg eval cmds=\"$finish_eval\" 4410313a12fdSmrg $opt_dry_run || eval "$cmds" || func_append admincmds " 4411e19dfac4Smrg $cmds" 4412e19dfac4Smrg fi 4413e19dfac4Smrg done 4414e19dfac4Smrg fi 441527702724Smrg 4416e19dfac4Smrg # Exit here if they wanted silent mode. 44177cea3689Smrg $opt_quiet && exit $EXIT_SUCCESS 441827702724Smrg 4419313a12fdSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4420313a12fdSmrg echo "----------------------------------------------------------------------" 4421313a12fdSmrg echo "Libraries have been installed in:" 4422313a12fdSmrg for libdir in $libdirs; do 4423313a12fdSmrg $ECHO " $libdir" 4424313a12fdSmrg done 4425ae545d91Smrg if test "false" = "$opt_finishing"; then 4426ae545d91Smrg echo 4427ae545d91Smrg echo "NOTE: finish_cmds were not executed during testing, so you must" 4428ae545d91Smrg echo "manually run ldconfig to add a given test directory, LIBDIR, to" 4429ae545d91Smrg echo "the search path for generated executables." 4430ae545d91Smrg fi 4431313a12fdSmrg echo 4432313a12fdSmrg echo "If you ever happen to want to link against installed libraries" 4433313a12fdSmrg echo "in a given directory, LIBDIR, you must either use libtool, and" 44347cea3689Smrg echo "specify the full pathname of the library, or use the '-LLIBDIR'" 4435313a12fdSmrg echo "flag during linking and do at least one of the following:" 4436313a12fdSmrg if test -n "$shlibpath_var"; then 44377cea3689Smrg echo " - add LIBDIR to the '$shlibpath_var' environment variable" 4438313a12fdSmrg echo " during execution" 4439313a12fdSmrg fi 4440313a12fdSmrg if test -n "$runpath_var"; then 44417cea3689Smrg echo " - add LIBDIR to the '$runpath_var' environment variable" 4442313a12fdSmrg echo " during linking" 4443313a12fdSmrg fi 4444313a12fdSmrg if test -n "$hardcode_libdir_flag_spec"; then 4445313a12fdSmrg libdir=LIBDIR 4446313a12fdSmrg eval flag=\"$hardcode_libdir_flag_spec\" 4447313a12fdSmrg 44487cea3689Smrg $ECHO " - use the '$flag' linker flag" 4449313a12fdSmrg fi 4450313a12fdSmrg if test -n "$admincmds"; then 4451313a12fdSmrg $ECHO " - have your system administrator run these commands:$admincmds" 4452313a12fdSmrg fi 4453313a12fdSmrg if test -f /etc/ld.so.conf; then 44547cea3689Smrg echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" 4455313a12fdSmrg fi 4456313a12fdSmrg echo 445727702724Smrg 4458313a12fdSmrg echo "See any operating system documentation about shared libraries for" 4459313a12fdSmrg case $host in 4460313a12fdSmrg solaris2.[6789]|solaris2.1[0-9]) 4461313a12fdSmrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 4462313a12fdSmrg echo "pages." 4463313a12fdSmrg ;; 4464313a12fdSmrg *) 4465313a12fdSmrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 4466313a12fdSmrg ;; 4467313a12fdSmrg esac 4468313a12fdSmrg echo "----------------------------------------------------------------------" 4469e19dfac4Smrg fi 4470e19dfac4Smrg exit $EXIT_SUCCESS 4471e19dfac4Smrg} 447227702724Smrg 44737cea3689Smrgtest finish = "$opt_mode" && func_mode_finish ${1+"$@"} 447427702724Smrg 447527702724Smrg 4476e19dfac4Smrg# func_mode_install arg... 4477e19dfac4Smrgfunc_mode_install () 4478e19dfac4Smrg{ 44797cea3689Smrg $debug_cmd 44807cea3689Smrg 4481e19dfac4Smrg # There may be an optional sh(1) argument at the beginning of 4482e19dfac4Smrg # install_prog (especially on Windows NT). 44837cea3689Smrg if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || 4484e19dfac4Smrg # Allow the use of GNU shtool's install command. 44857cea3689Smrg case $nonopt in *shtool*) :;; *) false;; esac 44867cea3689Smrg then 4487e19dfac4Smrg # Aesthetically quote it. 448895b7a5c8Smrg func_quote_arg pretty "$nonopt" 448995b7a5c8Smrg install_prog="$func_quote_arg_result " 4490e19dfac4Smrg arg=$1 4491e19dfac4Smrg shift 4492e19dfac4Smrg else 4493e19dfac4Smrg install_prog= 4494e19dfac4Smrg arg=$nonopt 4495e19dfac4Smrg fi 449627702724Smrg 4497e19dfac4Smrg # The real first argument should be the name of the installation program. 4498e19dfac4Smrg # Aesthetically quote it. 449995b7a5c8Smrg func_quote_arg pretty "$arg" 450095b7a5c8Smrg func_append install_prog "$func_quote_arg_result" 4501313a12fdSmrg install_shared_prog=$install_prog 4502313a12fdSmrg case " $install_prog " in 4503313a12fdSmrg *[\\\ /]cp\ *) install_cp=: ;; 4504313a12fdSmrg *) install_cp=false ;; 4505313a12fdSmrg esac 4506e19dfac4Smrg 4507e19dfac4Smrg # We need to accept at least all the BSD install flags. 4508e19dfac4Smrg dest= 4509e19dfac4Smrg files= 4510e19dfac4Smrg opts= 4511e19dfac4Smrg prev= 4512e19dfac4Smrg install_type= 45137cea3689Smrg isdir=false 4514e19dfac4Smrg stripme= 4515313a12fdSmrg no_mode=: 4516e19dfac4Smrg for arg 4517e19dfac4Smrg do 4518313a12fdSmrg arg2= 4519e19dfac4Smrg if test -n "$dest"; then 4520313a12fdSmrg func_append files " $dest" 4521e19dfac4Smrg dest=$arg 4522e19dfac4Smrg continue 452327702724Smrg fi 452427702724Smrg 4525e19dfac4Smrg case $arg in 45267cea3689Smrg -d) isdir=: ;; 4527e19dfac4Smrg -f) 4528313a12fdSmrg if $install_cp; then :; else 4529313a12fdSmrg prev=$arg 4530313a12fdSmrg fi 4531e19dfac4Smrg ;; 4532e19dfac4Smrg -g | -m | -o) 4533e19dfac4Smrg prev=$arg 4534e19dfac4Smrg ;; 4535e19dfac4Smrg -s) 4536e19dfac4Smrg stripme=" -s" 4537e19dfac4Smrg continue 4538e19dfac4Smrg ;; 4539e19dfac4Smrg -*) 4540e19dfac4Smrg ;; 4541e19dfac4Smrg *) 4542e19dfac4Smrg # If the previous option needed an argument, then skip it. 4543e19dfac4Smrg if test -n "$prev"; then 45447cea3689Smrg if test X-m = "X$prev" && test -n "$install_override_mode"; then 4545313a12fdSmrg arg2=$install_override_mode 4546313a12fdSmrg no_mode=false 4547313a12fdSmrg fi 4548e19dfac4Smrg prev= 4549e19dfac4Smrg else 4550e19dfac4Smrg dest=$arg 4551e19dfac4Smrg continue 4552e19dfac4Smrg fi 4553e19dfac4Smrg ;; 4554e19dfac4Smrg esac 455527702724Smrg 4556e19dfac4Smrg # Aesthetically quote the argument. 455795b7a5c8Smrg func_quote_arg pretty "$arg" 455895b7a5c8Smrg func_append install_prog " $func_quote_arg_result" 4559313a12fdSmrg if test -n "$arg2"; then 456095b7a5c8Smrg func_quote_arg pretty "$arg2" 4561313a12fdSmrg fi 456295b7a5c8Smrg func_append install_shared_prog " $func_quote_arg_result" 4563e19dfac4Smrg done 456427702724Smrg 4565e19dfac4Smrg test -z "$install_prog" && \ 4566e19dfac4Smrg func_fatal_help "you must specify an install program" 456727702724Smrg 4568e19dfac4Smrg test -n "$prev" && \ 45697cea3689Smrg func_fatal_help "the '$prev' option requires an argument" 457027702724Smrg 4571313a12fdSmrg if test -n "$install_override_mode" && $no_mode; then 4572313a12fdSmrg if $install_cp; then :; else 457395b7a5c8Smrg func_quote_arg pretty "$install_override_mode" 457495b7a5c8Smrg func_append install_shared_prog " -m $func_quote_arg_result" 4575313a12fdSmrg fi 4576313a12fdSmrg fi 4577313a12fdSmrg 4578e19dfac4Smrg if test -z "$files"; then 4579e19dfac4Smrg if test -z "$dest"; then 4580e19dfac4Smrg func_fatal_help "no file or destination specified" 4581e19dfac4Smrg else 4582e19dfac4Smrg func_fatal_help "you must specify a destination" 458327702724Smrg fi 458427702724Smrg fi 458527702724Smrg 4586e19dfac4Smrg # Strip any trailing slash from the destination. 4587e19dfac4Smrg func_stripname '' '/' "$dest" 4588e19dfac4Smrg dest=$func_stripname_result 458927702724Smrg 4590e19dfac4Smrg # Check to see that the destination is a directory. 45917cea3689Smrg test -d "$dest" && isdir=: 45927cea3689Smrg if $isdir; then 45937cea3689Smrg destdir=$dest 4594e19dfac4Smrg destname= 4595e19dfac4Smrg else 4596e19dfac4Smrg func_dirname_and_basename "$dest" "" "." 45977cea3689Smrg destdir=$func_dirname_result 45987cea3689Smrg destname=$func_basename_result 4599e19dfac4Smrg 4600e19dfac4Smrg # Not a directory, so check to see that there is only one file specified. 4601e19dfac4Smrg set dummy $files; shift 4602e19dfac4Smrg test "$#" -gt 1 && \ 46037cea3689Smrg func_fatal_help "'$dest' is not a directory" 4604e19dfac4Smrg fi 4605e19dfac4Smrg case $destdir in 4606e19dfac4Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 460727702724Smrg *) 4608e19dfac4Smrg for file in $files; do 4609e19dfac4Smrg case $file in 4610e19dfac4Smrg *.lo) ;; 4611e19dfac4Smrg *) 46127cea3689Smrg func_fatal_help "'$destdir' must be an absolute directory name" 4613e19dfac4Smrg ;; 4614e19dfac4Smrg esac 4615e19dfac4Smrg done 461627702724Smrg ;; 461727702724Smrg esac 461827702724Smrg 4619e19dfac4Smrg # This variable tells wrapper scripts just to set variables rather 4620e19dfac4Smrg # than running their programs. 46217cea3689Smrg libtool_install_magic=$magic 462227702724Smrg 4623e19dfac4Smrg staticlibs= 4624e19dfac4Smrg future_libdirs= 4625e19dfac4Smrg current_libdirs= 4626e19dfac4Smrg for file in $files; do 462727702724Smrg 4628e19dfac4Smrg # Do each installation. 4629e19dfac4Smrg case $file in 4630e19dfac4Smrg *.$libext) 4631e19dfac4Smrg # Do the static libraries later. 4632313a12fdSmrg func_append staticlibs " $file" 4633e19dfac4Smrg ;; 4634e19dfac4Smrg 4635e19dfac4Smrg *.la) 4636313a12fdSmrg func_resolve_sysroot "$file" 4637313a12fdSmrg file=$func_resolve_sysroot_result 4638313a12fdSmrg 4639e19dfac4Smrg # Check to see that this really is a libtool archive. 4640e19dfac4Smrg func_lalib_unsafe_p "$file" \ 46417cea3689Smrg || func_fatal_help "'$file' is not a valid libtool archive" 4642e19dfac4Smrg 4643e19dfac4Smrg library_names= 4644e19dfac4Smrg old_library= 4645e19dfac4Smrg relink_command= 4646e19dfac4Smrg func_source "$file" 4647e19dfac4Smrg 4648e19dfac4Smrg # Add the libdir to current_libdirs if it is the destination. 4649e19dfac4Smrg if test "X$destdir" = "X$libdir"; then 4650e19dfac4Smrg case "$current_libdirs " in 4651e19dfac4Smrg *" $libdir "*) ;; 4652313a12fdSmrg *) func_append current_libdirs " $libdir" ;; 465327702724Smrg esac 4654e19dfac4Smrg else 4655e19dfac4Smrg # Note the libdir as a future libdir. 4656e19dfac4Smrg case "$future_libdirs " in 4657e19dfac4Smrg *" $libdir "*) ;; 4658313a12fdSmrg *) func_append future_libdirs " $libdir" ;; 4659e19dfac4Smrg esac 4660e19dfac4Smrg fi 466127702724Smrg 4662e19dfac4Smrg func_dirname "$file" "/" "" 46637cea3689Smrg dir=$func_dirname_result 4664313a12fdSmrg func_append dir "$objdir" 4665e19dfac4Smrg 4666e19dfac4Smrg if test -n "$relink_command"; then 4667ae545d91Smrg # Strip any trailing slash from the destination. 4668ae545d91Smrg func_stripname '' '/' "$libdir" 4669ae545d91Smrg destlibdir=$func_stripname_result 4670ae545d91Smrg 4671ae545d91Smrg func_stripname '' '/' "$destdir" 4672ae545d91Smrg s_destdir=$func_stripname_result 4673ae545d91Smrg 4674e19dfac4Smrg # Determine the prefix the user has applied to our future dir. 4675ae545d91Smrg inst_prefix_dir=`$ECHO "X$s_destdir" | $Xsed -e "s%$destlibdir\$%%"` 4676e19dfac4Smrg 4677e19dfac4Smrg # Don't allow the user to place us outside of our expected 4678e19dfac4Smrg # location b/c this prevents finding dependent libraries that 4679e19dfac4Smrg # are installed to the same prefix. 4680e19dfac4Smrg # At present, this check doesn't affect windows .dll's that 4681e19dfac4Smrg # are installed into $libdir/../bin (currently, that works fine) 4682e19dfac4Smrg # but it's something to keep an eye on. 4683e19dfac4Smrg test "$inst_prefix_dir" = "$destdir" && \ 46847cea3689Smrg func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" 4685e19dfac4Smrg 4686e19dfac4Smrg if test -n "$inst_prefix_dir"; then 4687e19dfac4Smrg # Stick the inst_prefix_dir data into the link command. 4688313a12fdSmrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 4689e19dfac4Smrg else 4690313a12fdSmrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 4691e19dfac4Smrg fi 4692e19dfac4Smrg 46937cea3689Smrg func_warning "relinking '$file'" 4694e19dfac4Smrg func_show_eval "$relink_command" \ 46957cea3689Smrg 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' 4696e19dfac4Smrg fi 4697e19dfac4Smrg 4698e19dfac4Smrg # See the names of the shared library. 4699e19dfac4Smrg set dummy $library_names; shift 4700e19dfac4Smrg if test -n "$1"; then 47017cea3689Smrg realname=$1 4702e19dfac4Smrg shift 4703e19dfac4Smrg 47047cea3689Smrg srcname=$realname 47057cea3689Smrg test -n "$relink_command" && srcname=${realname}T 4706e19dfac4Smrg 4707e19dfac4Smrg # Install the shared library and build the symlinks. 4708313a12fdSmrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 4709e19dfac4Smrg 'exit $?' 47107cea3689Smrg tstripme=$stripme 4711e19dfac4Smrg case $host_os in 4712ae545d91Smrg cygwin* | mingw* | windows* | pw32* | cegcc*) 4713e19dfac4Smrg case $realname in 4714e19dfac4Smrg *.dll.a) 47157cea3689Smrg tstripme= 47167cea3689Smrg ;; 47177cea3689Smrg esac 47187cea3689Smrg ;; 47197cea3689Smrg os2*) 47207cea3689Smrg case $realname in 47217cea3689Smrg *_dll.a) 47227cea3689Smrg tstripme= 4723e19dfac4Smrg ;; 4724e19dfac4Smrg esac 472527702724Smrg ;; 472627702724Smrg esac 4727e19dfac4Smrg if test -n "$tstripme" && test -n "$striplib"; then 4728e19dfac4Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 472927702724Smrg fi 4730e19dfac4Smrg 4731e19dfac4Smrg if test "$#" -gt 0; then 4732e19dfac4Smrg # Delete the old symlinks, and create new ones. 47337cea3689Smrg # Try 'ln -sf' first, because the 'ln' binary might depend on 4734e19dfac4Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 4735e19dfac4Smrg # so we also need to try rm && ln -s. 4736e19dfac4Smrg for linkname 4737e19dfac4Smrg do 4738e19dfac4Smrg test "$linkname" != "$realname" \ 4739e19dfac4Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 474027702724Smrg done 474127702724Smrg fi 474227702724Smrg 4743e19dfac4Smrg # Do each command in the postinstall commands. 47447cea3689Smrg lib=$destdir/$realname 4745e19dfac4Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 474627702724Smrg fi 474727702724Smrg 4748e19dfac4Smrg # Install the pseudo-library for information purposes. 4749e19dfac4Smrg func_basename "$file" 47507cea3689Smrg name=$func_basename_result 47517cea3689Smrg instname=$dir/${name}i 4752e19dfac4Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 475327702724Smrg 4754e19dfac4Smrg # Maybe install the static library, too. 4755313a12fdSmrg test -n "$old_library" && func_append staticlibs " $dir/$old_library" 4756e19dfac4Smrg ;; 475727702724Smrg 4758e19dfac4Smrg *.lo) 4759e19dfac4Smrg # Install (i.e. copy) a libtool object. 476027702724Smrg 4761e19dfac4Smrg # Figure out destination file name, if it wasn't already specified. 4762e19dfac4Smrg if test -n "$destname"; then 47637cea3689Smrg destfile=$destdir/$destname 4764e19dfac4Smrg else 4765e19dfac4Smrg func_basename "$file" 47667cea3689Smrg destfile=$func_basename_result 47677cea3689Smrg destfile=$destdir/$destfile 4768e19dfac4Smrg fi 4769e19dfac4Smrg 4770e19dfac4Smrg # Deduce the name of the destination old-style object file. 4771e19dfac4Smrg case $destfile in 4772e19dfac4Smrg *.lo) 4773e19dfac4Smrg func_lo2o "$destfile" 4774e19dfac4Smrg staticdest=$func_lo2o_result 4775e19dfac4Smrg ;; 4776e19dfac4Smrg *.$objext) 47777cea3689Smrg staticdest=$destfile 4778e19dfac4Smrg destfile= 4779e19dfac4Smrg ;; 4780e19dfac4Smrg *) 47817cea3689Smrg func_fatal_help "cannot copy a libtool object to '$destfile'" 4782e19dfac4Smrg ;; 478327702724Smrg esac 478427702724Smrg 4785e19dfac4Smrg # Install the libtool object if requested. 4786e19dfac4Smrg test -n "$destfile" && \ 4787e19dfac4Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 4788e19dfac4Smrg 4789e19dfac4Smrg # Install the old object if enabled. 47907cea3689Smrg if test yes = "$build_old_libs"; then 4791e19dfac4Smrg # Deduce the name of the old-style object file. 4792e19dfac4Smrg func_lo2o "$file" 4793e19dfac4Smrg staticobj=$func_lo2o_result 4794e19dfac4Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 479527702724Smrg fi 4796e19dfac4Smrg exit $EXIT_SUCCESS 4797e19dfac4Smrg ;; 479827702724Smrg 4799e19dfac4Smrg *) 4800e19dfac4Smrg # Figure out destination file name, if it wasn't already specified. 4801e19dfac4Smrg if test -n "$destname"; then 48027cea3689Smrg destfile=$destdir/$destname 4803e19dfac4Smrg else 4804e19dfac4Smrg func_basename "$file" 48057cea3689Smrg destfile=$func_basename_result 48067cea3689Smrg destfile=$destdir/$destfile 4807e19dfac4Smrg fi 4808e19dfac4Smrg 4809e19dfac4Smrg # If the file is missing, and there is a .exe on the end, strip it 4810e19dfac4Smrg # because it is most likely a libtool script we actually want to 4811e19dfac4Smrg # install 48127cea3689Smrg stripped_ext= 4813e19dfac4Smrg case $file in 4814e19dfac4Smrg *.exe) 4815e19dfac4Smrg if test ! -f "$file"; then 4816e19dfac4Smrg func_stripname '' '.exe' "$file" 4817e19dfac4Smrg file=$func_stripname_result 48187cea3689Smrg stripped_ext=.exe 481927702724Smrg fi 4820e19dfac4Smrg ;; 4821e19dfac4Smrg esac 482227702724Smrg 4823e19dfac4Smrg # Do a test to see if this is really a libtool program. 4824e19dfac4Smrg case $host in 4825ae545d91Smrg *cygwin* | *mingw* | *windows*) 4826e19dfac4Smrg if func_ltwrapper_executable_p "$file"; then 4827e19dfac4Smrg func_ltwrapper_scriptname "$file" 4828e19dfac4Smrg wrapper=$func_ltwrapper_scriptname_result 4829e19dfac4Smrg else 4830e19dfac4Smrg func_stripname '' '.exe' "$file" 4831e19dfac4Smrg wrapper=$func_stripname_result 4832e19dfac4Smrg fi 4833e19dfac4Smrg ;; 4834e19dfac4Smrg *) 4835e19dfac4Smrg wrapper=$file 4836e19dfac4Smrg ;; 4837e19dfac4Smrg esac 4838e19dfac4Smrg if func_ltwrapper_script_p "$wrapper"; then 4839e19dfac4Smrg notinst_deplibs= 4840e19dfac4Smrg relink_command= 484127702724Smrg 4842e19dfac4Smrg func_source "$wrapper" 484327702724Smrg 4844e19dfac4Smrg # Check the variables that should have been set. 4845e19dfac4Smrg test -z "$generated_by_libtool_version" && \ 48467cea3689Smrg func_fatal_error "invalid libtool wrapper script '$wrapper'" 4847e19dfac4Smrg 48487cea3689Smrg finalize=: 4849e19dfac4Smrg for lib in $notinst_deplibs; do 4850e19dfac4Smrg # Check to see that each library is installed. 4851e19dfac4Smrg libdir= 4852e19dfac4Smrg if test -f "$lib"; then 4853e19dfac4Smrg func_source "$lib" 4854e19dfac4Smrg fi 48557cea3689Smrg libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` 4856e19dfac4Smrg if test -n "$libdir" && test ! -f "$libfile"; then 48577cea3689Smrg func_warning "'$lib' has not been installed in '$libdir'" 48587cea3689Smrg finalize=false 4859e19dfac4Smrg fi 4860e19dfac4Smrg done 4861e19dfac4Smrg 4862e19dfac4Smrg relink_command= 4863e19dfac4Smrg func_source "$wrapper" 4864e19dfac4Smrg 4865e19dfac4Smrg outputname= 48667cea3689Smrg if test no = "$fast_install" && test -n "$relink_command"; then 4867e19dfac4Smrg $opt_dry_run || { 48687cea3689Smrg if $finalize; then 4869e19dfac4Smrg tmpdir=`func_mktempdir` 4870e19dfac4Smrg func_basename "$file$stripped_ext" 48717cea3689Smrg file=$func_basename_result 48727cea3689Smrg outputname=$tmpdir/$file 4873e19dfac4Smrg # Replace the output file specification. 4874313a12fdSmrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 4875e19dfac4Smrg 48767cea3689Smrg $opt_quiet || { 487795b7a5c8Smrg func_quote_arg expand,pretty "$relink_command" 487895b7a5c8Smrg eval "func_echo $func_quote_arg_result" 4879e19dfac4Smrg } 4880e19dfac4Smrg if eval "$relink_command"; then : 4881e19dfac4Smrg else 48827cea3689Smrg func_error "error: relink '$file' with the above command before installing it" 4883e19dfac4Smrg $opt_dry_run || ${RM}r "$tmpdir" 4884e19dfac4Smrg continue 4885e19dfac4Smrg fi 48867cea3689Smrg file=$outputname 4887e19dfac4Smrg else 48887cea3689Smrg func_warning "cannot relink '$file'" 4889e19dfac4Smrg fi 4890e19dfac4Smrg } 489127702724Smrg else 4892e19dfac4Smrg # Install the binary that we compiled earlier. 4893313a12fdSmrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 489427702724Smrg fi 4895e19dfac4Smrg fi 489627702724Smrg 4897e19dfac4Smrg # remove .exe since cygwin /usr/bin/install will append another 4898e19dfac4Smrg # one anyway 4899e19dfac4Smrg case $install_prog,$host in 4900e19dfac4Smrg */usr/bin/install*,*cygwin*) 4901e19dfac4Smrg case $file:$destfile in 4902e19dfac4Smrg *.exe:*.exe) 4903e19dfac4Smrg # this is ok 4904e19dfac4Smrg ;; 4905e19dfac4Smrg *.exe:*) 4906e19dfac4Smrg destfile=$destfile.exe 4907e19dfac4Smrg ;; 4908e19dfac4Smrg *:*.exe) 4909e19dfac4Smrg func_stripname '' '.exe' "$destfile" 4910e19dfac4Smrg destfile=$func_stripname_result 4911e19dfac4Smrg ;; 4912e19dfac4Smrg esac 491327702724Smrg ;; 491427702724Smrg esac 4915e19dfac4Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 4916e19dfac4Smrg $opt_dry_run || if test -n "$outputname"; then 4917e19dfac4Smrg ${RM}r "$tmpdir" 4918e19dfac4Smrg fi 4919e19dfac4Smrg ;; 4920e19dfac4Smrg esac 4921e19dfac4Smrg done 492227702724Smrg 4923e19dfac4Smrg for file in $staticlibs; do 4924e19dfac4Smrg func_basename "$file" 49257cea3689Smrg name=$func_basename_result 492627702724Smrg 4927e19dfac4Smrg # Set up the ranlib parameters. 49287cea3689Smrg oldlib=$destdir/$name 4929313a12fdSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 4930313a12fdSmrg tool_oldlib=$func_to_tool_file_result 493127702724Smrg 4932e19dfac4Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 493327702724Smrg 4934e19dfac4Smrg if test -n "$stripme" && test -n "$old_striplib"; then 4935313a12fdSmrg func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 4936e19dfac4Smrg fi 493727702724Smrg 4938e19dfac4Smrg # Do each command in the postinstall commands. 4939e19dfac4Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 4940e19dfac4Smrg done 494127702724Smrg 4942e19dfac4Smrg test -n "$future_libdirs" && \ 49437cea3689Smrg func_warning "remember to run '$progname --finish$future_libdirs'" 494427702724Smrg 4945e19dfac4Smrg if test -n "$current_libdirs"; then 4946e19dfac4Smrg # Maybe just do a dry run. 4947e19dfac4Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 49487cea3689Smrg exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' 4949e19dfac4Smrg else 4950e19dfac4Smrg exit $EXIT_SUCCESS 4951e19dfac4Smrg fi 4952e19dfac4Smrg} 495327702724Smrg 49547cea3689Smrgtest install = "$opt_mode" && func_mode_install ${1+"$@"} 495527702724Smrg 495627702724Smrg 4957e19dfac4Smrg# func_generate_dlsyms outputname originator pic_p 4958e19dfac4Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 4959e19dfac4Smrg# a dlpreopen symbol table. 4960e19dfac4Smrgfunc_generate_dlsyms () 4961e19dfac4Smrg{ 49627cea3689Smrg $debug_cmd 49637cea3689Smrg 49647cea3689Smrg my_outputname=$1 49657cea3689Smrg my_originator=$2 49667cea3689Smrg my_pic_p=${3-false} 49677cea3689Smrg my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` 4968e19dfac4Smrg my_dlsyms= 4969e19dfac4Smrg 49707cea3689Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 4971e19dfac4Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 49727cea3689Smrg my_dlsyms=${my_outputname}S.c 4973e19dfac4Smrg else 4974e19dfac4Smrg func_error "not configured to extract global symbols from dlpreopened files" 4975e19dfac4Smrg fi 4976e19dfac4Smrg fi 497727702724Smrg 4978e19dfac4Smrg if test -n "$my_dlsyms"; then 4979e19dfac4Smrg case $my_dlsyms in 4980e19dfac4Smrg "") ;; 4981e19dfac4Smrg *.c) 4982e19dfac4Smrg # Discover the nlist of each of the dlfiles. 49837cea3689Smrg nlist=$output_objdir/$my_outputname.nm 4984e19dfac4Smrg 4985e19dfac4Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 4986e19dfac4Smrg 4987e19dfac4Smrg # Parse the name list into a source file. 4988e19dfac4Smrg func_verbose "creating $output_objdir/$my_dlsyms" 4989e19dfac4Smrg 4990e19dfac4Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 49917cea3689Smrg/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ 49927cea3689Smrg/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ 4993e19dfac4Smrg 4994e19dfac4Smrg#ifdef __cplusplus 4995e19dfac4Smrgextern \"C\" { 4996e19dfac4Smrg#endif 4997e19dfac4Smrg 49987cea3689Smrg#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 4999313a12fdSmrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 5000313a12fdSmrg#endif 5001313a12fdSmrg 5002313a12fdSmrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 50037cea3689Smrg#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE 50047cea3689Smrg/* DATA imports from DLLs on WIN32 can't be const, because runtime 5005313a12fdSmrg relocations are performed -- see ld's documentation on pseudo-relocs. */ 5006313a12fdSmrg# define LT_DLSYM_CONST 50077cea3689Smrg#elif defined __osf__ 5008313a12fdSmrg/* This system does not cope well with relocations in const data. */ 5009313a12fdSmrg# define LT_DLSYM_CONST 5010313a12fdSmrg#else 5011313a12fdSmrg# define LT_DLSYM_CONST const 5012313a12fdSmrg#endif 5013313a12fdSmrg 50147cea3689Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 50157cea3689Smrg 5016e19dfac4Smrg/* External symbol declarations for the compiler. */\ 5017e19dfac4Smrg" 5018e19dfac4Smrg 50197cea3689Smrg if test yes = "$dlself"; then 50207cea3689Smrg func_verbose "generating symbol list for '$output'" 5021e19dfac4Smrg 5022e19dfac4Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 5023e19dfac4Smrg 5024e19dfac4Smrg # Add our own program objects to the symbol list. 5025313a12fdSmrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 5026e19dfac4Smrg for progfile in $progfiles; do 5027313a12fdSmrg func_to_tool_file "$progfile" func_convert_file_msys_to_w32 50287cea3689Smrg func_verbose "extracting global C symbols from '$func_to_tool_file_result'" 5029313a12fdSmrg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 5030e19dfac4Smrg done 5031e19dfac4Smrg 5032e19dfac4Smrg if test -n "$exclude_expsyms"; then 5033e19dfac4Smrg $opt_dry_run || { 5034e19dfac4Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 5035e19dfac4Smrg eval '$MV "$nlist"T "$nlist"' 5036e19dfac4Smrg } 503727702724Smrg fi 503827702724Smrg 5039e19dfac4Smrg if test -n "$export_symbols_regex"; then 5040e19dfac4Smrg $opt_dry_run || { 5041e19dfac4Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 5042e19dfac4Smrg eval '$MV "$nlist"T "$nlist"' 5043e19dfac4Smrg } 504427702724Smrg fi 5045e19dfac4Smrg 5046e19dfac4Smrg # Prepare the list of exported symbols 5047e19dfac4Smrg if test -z "$export_symbols"; then 50487cea3689Smrg export_symbols=$output_objdir/$outputname.exp 5049e19dfac4Smrg $opt_dry_run || { 5050e19dfac4Smrg $RM $export_symbols 50517cea3689Smrg eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 5052e19dfac4Smrg case $host in 5053ae545d91Smrg *cygwin* | *mingw* | *windows* | *cegcc* ) 5054e19dfac4Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 5055e19dfac4Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 5056e19dfac4Smrg ;; 505727702724Smrg esac 5058e19dfac4Smrg } 5059e19dfac4Smrg else 5060e19dfac4Smrg $opt_dry_run || { 50617cea3689Smrg eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 5062e19dfac4Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 5063e19dfac4Smrg eval '$MV "$nlist"T "$nlist"' 5064e19dfac4Smrg case $host in 5065ae545d91Smrg *cygwin* | *mingw* | *windows* | *cegcc* ) 5066e19dfac4Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 5067e19dfac4Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 5068e19dfac4Smrg ;; 506927702724Smrg esac 5070e19dfac4Smrg } 507127702724Smrg fi 5072e19dfac4Smrg fi 507327702724Smrg 5074e19dfac4Smrg for dlprefile in $dlprefiles; do 50757cea3689Smrg func_verbose "extracting global C symbols from '$dlprefile'" 5076e19dfac4Smrg func_basename "$dlprefile" 50777cea3689Smrg name=$func_basename_result 5078313a12fdSmrg case $host in 5079ae545d91Smrg *cygwin* | *mingw* | *windows* | *cegcc* ) 5080313a12fdSmrg # if an import library, we need to obtain dlname 5081313a12fdSmrg if func_win32_import_lib_p "$dlprefile"; then 5082313a12fdSmrg func_tr_sh "$dlprefile" 5083313a12fdSmrg eval "curr_lafile=\$libfile_$func_tr_sh_result" 50847cea3689Smrg dlprefile_dlbasename= 5085313a12fdSmrg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 5086313a12fdSmrg # Use subshell, to avoid clobbering current variable values 5087313a12fdSmrg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 50887cea3689Smrg if test -n "$dlprefile_dlname"; then 5089313a12fdSmrg func_basename "$dlprefile_dlname" 50907cea3689Smrg dlprefile_dlbasename=$func_basename_result 5091313a12fdSmrg else 5092313a12fdSmrg # no lafile. user explicitly requested -dlpreopen <import library>. 5093313a12fdSmrg $sharedlib_from_linklib_cmd "$dlprefile" 5094313a12fdSmrg dlprefile_dlbasename=$sharedlib_from_linklib_result 5095313a12fdSmrg fi 5096313a12fdSmrg fi 5097313a12fdSmrg $opt_dry_run || { 50987cea3689Smrg if test -n "$dlprefile_dlbasename"; then 5099313a12fdSmrg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 5100313a12fdSmrg else 5101313a12fdSmrg func_warning "Could not compute DLL name from $name" 5102313a12fdSmrg eval '$ECHO ": $name " >> "$nlist"' 5103313a12fdSmrg fi 5104313a12fdSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 5105ae545d91Smrg case $host in 5106ae545d91Smrg i[3456]86-*-mingw32*) 5107ae545d91Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 5108ae545d91Smrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 5109ae545d91Smrg ;; 5110ae545d91Smrg *) 5111ae545d91Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 5112ae545d91Smrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/__nm_//' >> '$nlist'" 5113ae545d91Smrg ;; 5114ae545d91Smrg esac 5115313a12fdSmrg } 5116313a12fdSmrg else # not an import lib 5117313a12fdSmrg $opt_dry_run || { 5118313a12fdSmrg eval '$ECHO ": $name " >> "$nlist"' 5119313a12fdSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 5120313a12fdSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 5121313a12fdSmrg } 5122313a12fdSmrg fi 5123313a12fdSmrg ;; 5124313a12fdSmrg *) 5125313a12fdSmrg $opt_dry_run || { 5126313a12fdSmrg eval '$ECHO ": $name " >> "$nlist"' 5127313a12fdSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 5128313a12fdSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 5129313a12fdSmrg } 5130313a12fdSmrg ;; 5131313a12fdSmrg esac 5132e19dfac4Smrg done 513327702724Smrg 5134e19dfac4Smrg $opt_dry_run || { 5135e19dfac4Smrg # Make sure we have at least an empty file. 5136e19dfac4Smrg test -f "$nlist" || : > "$nlist" 513727702724Smrg 5138e19dfac4Smrg if test -n "$exclude_expsyms"; then 5139e19dfac4Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 5140e19dfac4Smrg $MV "$nlist"T "$nlist" 514127702724Smrg fi 514227702724Smrg 5143e19dfac4Smrg # Try sorting and uniquifying the output. 5144e19dfac4Smrg if $GREP -v "^: " < "$nlist" | 5145e19dfac4Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 5146e19dfac4Smrg sort -k 3 514727702724Smrg else 5148e19dfac4Smrg sort +2 5149e19dfac4Smrg fi | 5150e19dfac4Smrg uniq > "$nlist"S; then 5151e19dfac4Smrg : 515227702724Smrg else 5153e19dfac4Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 515427702724Smrg fi 515527702724Smrg 5156e19dfac4Smrg if test -f "$nlist"S; then 5157e19dfac4Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 515827702724Smrg else 5159313a12fdSmrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 516027702724Smrg fi 516127702724Smrg 51627cea3689Smrg func_show_eval '$RM "${nlist}I"' 51637cea3689Smrg if test -n "$global_symbol_to_import"; then 51647cea3689Smrg eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' 51657cea3689Smrg fi 51667cea3689Smrg 5167313a12fdSmrg echo >> "$output_objdir/$my_dlsyms" "\ 516827702724Smrg 5169e19dfac4Smrg/* The mapping between symbol names and symbols. */ 5170e19dfac4Smrgtypedef struct { 5171e19dfac4Smrg const char *name; 5172e19dfac4Smrg void *address; 5173e19dfac4Smrg} lt_dlsymlist; 5174313a12fdSmrgextern LT_DLSYM_CONST lt_dlsymlist 51757cea3689Smrglt_${my_prefix}_LTX_preloaded_symbols[];\ 51767cea3689Smrg" 51777cea3689Smrg 51787cea3689Smrg if test -s "$nlist"I; then 51797cea3689Smrg echo >> "$output_objdir/$my_dlsyms" "\ 51807cea3689Smrgstatic void lt_syminit(void) 51817cea3689Smrg{ 51827cea3689Smrg LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; 51837cea3689Smrg for (; symbol->name; ++symbol) 51847cea3689Smrg {" 51857cea3689Smrg $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" 51867cea3689Smrg echo >> "$output_objdir/$my_dlsyms" "\ 51877cea3689Smrg } 51887cea3689Smrg}" 51897cea3689Smrg fi 51907cea3689Smrg echo >> "$output_objdir/$my_dlsyms" "\ 5191313a12fdSmrgLT_DLSYM_CONST lt_dlsymlist 5192e19dfac4Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 51937cea3689Smrg{ {\"$my_originator\", (void *) 0}," 51947cea3689Smrg 51957cea3689Smrg if test -s "$nlist"I; then 51967cea3689Smrg echo >> "$output_objdir/$my_dlsyms" "\ 51977cea3689Smrg {\"@INIT@\", (void *) <_syminit}," 51987cea3689Smrg fi 5199e19dfac4Smrg 5200e19dfac4Smrg case $need_lib_prefix in 5201e19dfac4Smrg no) 5202e19dfac4Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 5203e19dfac4Smrg ;; 5204e19dfac4Smrg *) 5205e19dfac4Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 5206e19dfac4Smrg ;; 5207e19dfac4Smrg esac 5208313a12fdSmrg echo >> "$output_objdir/$my_dlsyms" "\ 5209e19dfac4Smrg {0, (void *) 0} 5210e19dfac4Smrg}; 5211e19dfac4Smrg 5212e19dfac4Smrg/* This works around a problem in FreeBSD linker */ 5213e19dfac4Smrg#ifdef FREEBSD_WORKAROUND 5214e19dfac4Smrgstatic const void *lt_preloaded_setup() { 5215e19dfac4Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 5216e19dfac4Smrg} 5217e19dfac4Smrg#endif 5218e19dfac4Smrg 5219e19dfac4Smrg#ifdef __cplusplus 5220e19dfac4Smrg} 5221e19dfac4Smrg#endif\ 5222e19dfac4Smrg" 5223e19dfac4Smrg } # !$opt_dry_run 5224e19dfac4Smrg 5225e19dfac4Smrg pic_flag_for_symtable= 5226e19dfac4Smrg case "$compile_command " in 5227e19dfac4Smrg *" -static "*) ;; 5228e19dfac4Smrg *) 5229e19dfac4Smrg case $host in 5230e19dfac4Smrg # compiling the symbol table file with pic_flag works around 5231e19dfac4Smrg # a FreeBSD bug that causes programs to crash when -lm is 5232e19dfac4Smrg # linked before any other PIC object. But we must not use 5233e19dfac4Smrg # pic_flag when linking with -static. The problem exists in 5234e19dfac4Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 5235313a12fdSmrg *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 5236e19dfac4Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 5237e19dfac4Smrg *-*-hpux*) 5238e19dfac4Smrg pic_flag_for_symtable=" $pic_flag" ;; 5239e19dfac4Smrg *) 52407cea3689Smrg $my_pic_p && pic_flag_for_symtable=" $pic_flag" 5241e19dfac4Smrg ;; 5242e19dfac4Smrg esac 5243e19dfac4Smrg ;; 5244e19dfac4Smrg esac 5245e19dfac4Smrg symtab_cflags= 5246e19dfac4Smrg for arg in $LTCFLAGS; do 5247e19dfac4Smrg case $arg in 5248e19dfac4Smrg -pie | -fpie | -fPIE) ;; 5249313a12fdSmrg *) func_append symtab_cflags " $arg" ;; 5250e19dfac4Smrg esac 5251e19dfac4Smrg done 525227702724Smrg 5253e19dfac4Smrg # Now compile the dynamic symbol file. 5254e19dfac4Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 525527702724Smrg 5256e19dfac4Smrg # Clean up the generated files. 52577cea3689Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' 5258e19dfac4Smrg 5259e19dfac4Smrg # Transform the symbol file into the correct name. 52607cea3689Smrg symfileobj=$output_objdir/${my_outputname}S.$objext 5261e19dfac4Smrg case $host in 5262ae545d91Smrg *cygwin* | *mingw* | *windows* | *cegcc* ) 5263e19dfac4Smrg if test -f "$output_objdir/$my_outputname.def"; then 5264313a12fdSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 5265313a12fdSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 5266e19dfac4Smrg else 5267313a12fdSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5268313a12fdSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5269e19dfac4Smrg fi 5270e19dfac4Smrg ;; 5271e19dfac4Smrg *) 5272313a12fdSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5273313a12fdSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 527427702724Smrg ;; 527527702724Smrg esac 5276e19dfac4Smrg ;; 5277e19dfac4Smrg *) 52787cea3689Smrg func_fatal_error "unknown suffix for '$my_dlsyms'" 5279e19dfac4Smrg ;; 5280e19dfac4Smrg esac 5281e19dfac4Smrg else 5282e19dfac4Smrg # We keep going just in case the user didn't refer to 5283e19dfac4Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 5284e19dfac4Smrg # really was required. 5285e19dfac4Smrg 5286e19dfac4Smrg # Nullify the symbol file. 5287313a12fdSmrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 5288313a12fdSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 528927702724Smrg fi 5290e19dfac4Smrg} 529127702724Smrg 52927cea3689Smrg# func_cygming_gnu_implib_p ARG 52937cea3689Smrg# This predicate returns with zero status (TRUE) if 52947cea3689Smrg# ARG is a GNU/binutils-style import library. Returns 52957cea3689Smrg# with nonzero status (FALSE) otherwise. 52967cea3689Smrgfunc_cygming_gnu_implib_p () 52977cea3689Smrg{ 52987cea3689Smrg $debug_cmd 52997cea3689Smrg 53007cea3689Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 53017cea3689Smrg 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)$'` 53027cea3689Smrg test -n "$func_cygming_gnu_implib_tmp" 53037cea3689Smrg} 53047cea3689Smrg 53057cea3689Smrg# func_cygming_ms_implib_p ARG 53067cea3689Smrg# This predicate returns with zero status (TRUE) if 53077cea3689Smrg# ARG is an MS-style import library. Returns 53087cea3689Smrg# with nonzero status (FALSE) otherwise. 53097cea3689Smrgfunc_cygming_ms_implib_p () 53107cea3689Smrg{ 53117cea3689Smrg $debug_cmd 53127cea3689Smrg 53137cea3689Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 53147cea3689Smrg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 53157cea3689Smrg test -n "$func_cygming_ms_implib_tmp" 53167cea3689Smrg} 53177cea3689Smrg 5318e19dfac4Smrg# func_win32_libid arg 5319e19dfac4Smrg# return the library type of file 'arg' 5320e19dfac4Smrg# 5321e19dfac4Smrg# Need a lot of goo to handle *both* DLLs and import libs 5322e19dfac4Smrg# Has to be a shell function in order to 'eat' the argument 5323e19dfac4Smrg# that is supplied when $file_magic_command is called. 5324313a12fdSmrg# Despite the name, also deal with 64 bit binaries. 5325e19dfac4Smrgfunc_win32_libid () 5326e19dfac4Smrg{ 53277cea3689Smrg $debug_cmd 53287cea3689Smrg 53297cea3689Smrg win32_libid_type=unknown 5330e19dfac4Smrg win32_fileres=`file -L $1 2>/dev/null` 5331e19dfac4Smrg case $win32_fileres in 5332e19dfac4Smrg *ar\ archive\ import\ library*) # definitely import 5333e19dfac4Smrg win32_libid_type="x86 archive import" 5334e19dfac4Smrg ;; 5335e19dfac4Smrg *ar\ archive*) # could be an import, or static 5336313a12fdSmrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 5337e19dfac4Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 5338ae545d91Smrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64|pe-aarch64)' >/dev/null; then 53397cea3689Smrg case $nm_interface in 53407cea3689Smrg "MS dumpbin") 53417cea3689Smrg if func_cygming_ms_implib_p "$1" || 53427cea3689Smrg func_cygming_gnu_implib_p "$1" 53437cea3689Smrg then 53447cea3689Smrg win32_nmres=import 53457cea3689Smrg else 53467cea3689Smrg win32_nmres= 53477cea3689Smrg fi 53487cea3689Smrg ;; 53497cea3689Smrg *) 53507cea3689Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 53517cea3689Smrg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 53527cea3689Smrg $SED -n -e ' 5353e19dfac4Smrg 1,100{ 5354e19dfac4Smrg / I /{ 53557cea3689Smrg s|.*|import| 5356e19dfac4Smrg p 5357e19dfac4Smrg q 5358e19dfac4Smrg } 5359e19dfac4Smrg }'` 53607cea3689Smrg ;; 53617cea3689Smrg esac 5362e19dfac4Smrg case $win32_nmres in 5363e19dfac4Smrg import*) win32_libid_type="x86 archive import";; 5364e19dfac4Smrg *) win32_libid_type="x86 archive static";; 5365e19dfac4Smrg esac 5366e19dfac4Smrg fi 5367e19dfac4Smrg ;; 5368e19dfac4Smrg *DLL*) 5369e19dfac4Smrg win32_libid_type="x86 DLL" 5370e19dfac4Smrg ;; 5371e19dfac4Smrg *executable*) # but shell scripts are "executable" too... 5372e19dfac4Smrg case $win32_fileres in 5373e19dfac4Smrg *MS\ Windows\ PE\ Intel*) 5374e19dfac4Smrg win32_libid_type="x86 DLL" 5375e19dfac4Smrg ;; 5376e19dfac4Smrg esac 5377e19dfac4Smrg ;; 5378e19dfac4Smrg esac 5379e19dfac4Smrg $ECHO "$win32_libid_type" 5380e19dfac4Smrg} 538127702724Smrg 5382313a12fdSmrg# func_cygming_dll_for_implib ARG 5383313a12fdSmrg# 5384313a12fdSmrg# Platform-specific function to extract the 5385313a12fdSmrg# name of the DLL associated with the specified 5386313a12fdSmrg# import library ARG. 5387313a12fdSmrg# Invoked by eval'ing the libtool variable 5388313a12fdSmrg# $sharedlib_from_linklib_cmd 5389313a12fdSmrg# Result is available in the variable 5390313a12fdSmrg# $sharedlib_from_linklib_result 5391313a12fdSmrgfunc_cygming_dll_for_implib () 5392313a12fdSmrg{ 53937cea3689Smrg $debug_cmd 53947cea3689Smrg 5395313a12fdSmrg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 5396313a12fdSmrg} 5397313a12fdSmrg 5398313a12fdSmrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 5399313a12fdSmrg# 5400313a12fdSmrg# The is the core of a fallback implementation of a 5401313a12fdSmrg# platform-specific function to extract the name of the 5402313a12fdSmrg# DLL associated with the specified import library LIBNAME. 5403313a12fdSmrg# 5404313a12fdSmrg# SECTION_NAME is either .idata$6 or .idata$7, depending 5405313a12fdSmrg# on the platform and compiler that created the implib. 5406313a12fdSmrg# 5407313a12fdSmrg# Echos the name of the DLL associated with the 5408313a12fdSmrg# specified import library. 5409313a12fdSmrgfunc_cygming_dll_for_implib_fallback_core () 5410313a12fdSmrg{ 54117cea3689Smrg $debug_cmd 54127cea3689Smrg 5413313a12fdSmrg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 5414313a12fdSmrg $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 5415313a12fdSmrg $SED '/^Contents of section '"$match_literal"':/{ 5416313a12fdSmrg # Place marker at beginning of archive member dllname section 5417313a12fdSmrg s/.*/====MARK====/ 5418313a12fdSmrg p 5419313a12fdSmrg d 5420313a12fdSmrg } 5421313a12fdSmrg # These lines can sometimes be longer than 43 characters, but 5422313a12fdSmrg # are always uninteresting 5423313a12fdSmrg /:[ ]*file format pe[i]\{,1\}-/d 5424313a12fdSmrg /^In archive [^:]*:/d 5425313a12fdSmrg # Ensure marker is printed 5426313a12fdSmrg /^====MARK====/p 5427313a12fdSmrg # Remove all lines with less than 43 characters 5428313a12fdSmrg /^.\{43\}/!d 5429313a12fdSmrg # From remaining lines, remove first 43 characters 5430313a12fdSmrg s/^.\{43\}//' | 5431313a12fdSmrg $SED -n ' 5432313a12fdSmrg # Join marker and all lines until next marker into a single line 5433313a12fdSmrg /^====MARK====/ b para 5434313a12fdSmrg H 5435313a12fdSmrg $ b para 5436313a12fdSmrg b 5437313a12fdSmrg :para 5438313a12fdSmrg x 5439313a12fdSmrg s/\n//g 5440313a12fdSmrg # Remove the marker 5441313a12fdSmrg s/^====MARK====// 5442313a12fdSmrg # Remove trailing dots and whitespace 5443313a12fdSmrg s/[\. \t]*$// 5444313a12fdSmrg # Print 5445313a12fdSmrg /./p' | 5446313a12fdSmrg # we now have a list, one entry per line, of the stringified 5447313a12fdSmrg # contents of the appropriate section of all members of the 54487cea3689Smrg # archive that possess that section. Heuristic: eliminate 54497cea3689Smrg # all those that have a first or second character that is 5450313a12fdSmrg # a '.' (that is, objdump's representation of an unprintable 5451313a12fdSmrg # character.) This should work for all archives with less than 5452313a12fdSmrg # 0x302f exports -- but will fail for DLLs whose name actually 5453313a12fdSmrg # begins with a literal '.' or a single character followed by 5454313a12fdSmrg # a '.'. 5455313a12fdSmrg # 5456313a12fdSmrg # Of those that remain, print the first one. 5457313a12fdSmrg $SED -e '/^\./d;/^.\./d;q' 5458313a12fdSmrg} 5459313a12fdSmrg 5460313a12fdSmrg# func_cygming_dll_for_implib_fallback ARG 5461313a12fdSmrg# Platform-specific function to extract the 5462313a12fdSmrg# name of the DLL associated with the specified 5463313a12fdSmrg# import library ARG. 5464313a12fdSmrg# 5465313a12fdSmrg# This fallback implementation is for use when $DLLTOOL 5466313a12fdSmrg# does not support the --identify-strict option. 5467313a12fdSmrg# Invoked by eval'ing the libtool variable 5468313a12fdSmrg# $sharedlib_from_linklib_cmd 5469313a12fdSmrg# Result is available in the variable 5470313a12fdSmrg# $sharedlib_from_linklib_result 5471313a12fdSmrgfunc_cygming_dll_for_implib_fallback () 5472313a12fdSmrg{ 54737cea3689Smrg $debug_cmd 54747cea3689Smrg 54757cea3689Smrg if func_cygming_gnu_implib_p "$1"; then 5476313a12fdSmrg # binutils import library 5477313a12fdSmrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 54787cea3689Smrg elif func_cygming_ms_implib_p "$1"; then 5479313a12fdSmrg # ms-generated import library 5480313a12fdSmrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 5481313a12fdSmrg else 5482313a12fdSmrg # unknown 54837cea3689Smrg sharedlib_from_linklib_result= 5484313a12fdSmrg fi 5485313a12fdSmrg} 548627702724Smrg 548727702724Smrg 5488e19dfac4Smrg# func_extract_an_archive dir oldlib 5489e19dfac4Smrgfunc_extract_an_archive () 5490e19dfac4Smrg{ 54917cea3689Smrg $debug_cmd 54927cea3689Smrg 54937cea3689Smrg f_ex_an_ar_dir=$1; shift 54947cea3689Smrg f_ex_an_ar_oldlib=$1 54957cea3689Smrg if test yes = "$lock_old_archive_extraction"; then 5496313a12fdSmrg lockfile=$f_ex_an_ar_oldlib.lock 5497313a12fdSmrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 5498313a12fdSmrg func_echo "Waiting for $lockfile to be removed" 5499313a12fdSmrg sleep 2 5500313a12fdSmrg done 5501313a12fdSmrg fi 5502313a12fdSmrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 5503313a12fdSmrg 'stat=$?; rm -f "$lockfile"; exit $stat' 55047cea3689Smrg if test yes = "$lock_old_archive_extraction"; then 5505313a12fdSmrg $opt_dry_run || rm -f "$lockfile" 5506313a12fdSmrg fi 5507e19dfac4Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 5508e19dfac4Smrg : 5509e19dfac4Smrg else 5510e19dfac4Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 5511e19dfac4Smrg fi 5512e19dfac4Smrg} 551327702724Smrg 551427702724Smrg 5515e19dfac4Smrg# func_extract_archives gentop oldlib ... 5516e19dfac4Smrgfunc_extract_archives () 5517e19dfac4Smrg{ 55187cea3689Smrg $debug_cmd 55197cea3689Smrg 55207cea3689Smrg my_gentop=$1; shift 5521e19dfac4Smrg my_oldlibs=${1+"$@"} 55227cea3689Smrg my_oldobjs= 55237cea3689Smrg my_xlib= 55247cea3689Smrg my_xabs= 55257cea3689Smrg my_xdir= 552627702724Smrg 5527e19dfac4Smrg for my_xlib in $my_oldlibs; do 5528e19dfac4Smrg # Extract the objects. 5529e19dfac4Smrg case $my_xlib in 55307cea3689Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; 5531e19dfac4Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 5532e19dfac4Smrg esac 5533e19dfac4Smrg func_basename "$my_xlib" 55347cea3689Smrg my_xlib=$func_basename_result 5535e19dfac4Smrg my_xlib_u=$my_xlib 5536e19dfac4Smrg while :; do 5537e19dfac4Smrg case " $extracted_archives " in 5538e19dfac4Smrg *" $my_xlib_u "*) 5539e19dfac4Smrg func_arith $extracted_serial + 1 5540e19dfac4Smrg extracted_serial=$func_arith_result 5541e19dfac4Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 5542e19dfac4Smrg *) break ;; 5543e19dfac4Smrg esac 5544e19dfac4Smrg done 5545e19dfac4Smrg extracted_archives="$extracted_archives $my_xlib_u" 55467cea3689Smrg my_xdir=$my_gentop/$my_xlib_u 554727702724Smrg 5548e19dfac4Smrg func_mkdir_p "$my_xdir" 554927702724Smrg 5550e19dfac4Smrg case $host in 5551e19dfac4Smrg *-darwin*) 5552e19dfac4Smrg func_verbose "Extracting $my_xabs" 5553e19dfac4Smrg # Do not bother doing anything if just a dry run 5554e19dfac4Smrg $opt_dry_run || { 5555e19dfac4Smrg darwin_orig_dir=`pwd` 5556e19dfac4Smrg cd $my_xdir || exit $? 5557e19dfac4Smrg darwin_archive=$my_xabs 5558e19dfac4Smrg darwin_curdir=`pwd` 55597cea3689Smrg func_basename "$darwin_archive" 55607cea3689Smrg darwin_base_archive=$func_basename_result 5561e19dfac4Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 5562e19dfac4Smrg if test -n "$darwin_arches"; then 5563e19dfac4Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 5564e19dfac4Smrg darwin_arch= 5565e19dfac4Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 55667cea3689Smrg for darwin_arch in $darwin_arches; do 55677cea3689Smrg func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" 55687cea3689Smrg $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" 55697cea3689Smrg cd "unfat-$$/$darwin_base_archive-$darwin_arch" 55707cea3689Smrg func_extract_an_archive "`pwd`" "$darwin_base_archive" 5571e19dfac4Smrg cd "$darwin_curdir" 55727cea3689Smrg $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" 5573e19dfac4Smrg done # $darwin_arches 5574e19dfac4Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 55757cea3689Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` 5576e19dfac4Smrg darwin_file= 5577e19dfac4Smrg darwin_files= 5578e19dfac4Smrg for darwin_file in $darwin_filelist; do 5579313a12fdSmrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 5580e19dfac4Smrg $LIPO -create -output "$darwin_file" $darwin_files 5581e19dfac4Smrg done # $darwin_filelist 5582e19dfac4Smrg $RM -rf unfat-$$ 5583e19dfac4Smrg cd "$darwin_orig_dir" 5584e19dfac4Smrg else 5585e19dfac4Smrg cd $darwin_orig_dir 5586e19dfac4Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 5587e19dfac4Smrg fi # $darwin_arches 5588e19dfac4Smrg } # !$opt_dry_run 5589e19dfac4Smrg ;; 5590e19dfac4Smrg *) 5591e19dfac4Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 5592e19dfac4Smrg ;; 559327702724Smrg esac 5594313a12fdSmrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 5595e19dfac4Smrg done 559627702724Smrg 55977cea3689Smrg func_extract_archives_result=$my_oldobjs 5598e19dfac4Smrg} 559927702724Smrg 560027702724Smrg 5601313a12fdSmrg# func_emit_wrapper [arg=no] 5602313a12fdSmrg# 5603313a12fdSmrg# Emit a libtool wrapper script on stdout. 5604313a12fdSmrg# Don't directly open a file because we may want to 5605ae545d91Smrg# incorporate the script contents within a cygwin/mingw/windows 5606313a12fdSmrg# wrapper executable. Must ONLY be called from within 5607313a12fdSmrg# func_mode_link because it depends on a number of variables 5608313a12fdSmrg# set therein. 5609e19dfac4Smrg# 5610313a12fdSmrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 5611313a12fdSmrg# variable will take. If 'yes', then the emitted script 56127cea3689Smrg# will assume that the directory where it is stored is 5613ae545d91Smrg# the $objdir directory. This is a cygwin/mingw/windows-specific 5614313a12fdSmrg# behavior. 5615313a12fdSmrgfunc_emit_wrapper () 5616e19dfac4Smrg{ 5617313a12fdSmrg func_emit_wrapper_arg1=${1-no} 561827702724Smrg 5619e19dfac4Smrg $ECHO "\ 5620e19dfac4Smrg#! $SHELL 562127702724Smrg 5622e19dfac4Smrg# $output - temporary wrapper script for $objdir/$outputname 56237cea3689Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5624e19dfac4Smrg# 5625e19dfac4Smrg# The $output program cannot be directly executed until all the libtool 5626e19dfac4Smrg# libraries that it depends on are installed. 5627e19dfac4Smrg# 5628e19dfac4Smrg# This wrapper script should never be moved out of the build directory. 5629e19dfac4Smrg# If it is, it will not operate correctly. 563027702724Smrg 5631e19dfac4Smrg# Sed substitution that helps us do robust quoting. It backslashifies 5632e19dfac4Smrg# metacharacters that are still active within double-quoted strings. 5633e19dfac4Smrgsed_quote_subst='$sed_quote_subst' 563427702724Smrg 5635e19dfac4Smrg# Be Bourne compatible 5636e19dfac4Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 5637e19dfac4Smrg emulate sh 5638e19dfac4Smrg NULLCMD=: 5639e19dfac4Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 5640e19dfac4Smrg # is contrary to our usage. Disable this feature. 5641e19dfac4Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 5642e19dfac4Smrg setopt NO_GLOB_SUBST 5643e19dfac4Smrgelse 5644e19dfac4Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 5645e19dfac4Smrgfi 5646e19dfac4SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 5647e19dfac4SmrgDUALCASE=1; export DUALCASE # for MKS sh 564827702724Smrg 5649e19dfac4Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 5650e19dfac4Smrg# if CDPATH is set. 5651e19dfac4Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 565227702724Smrg 5653e19dfac4Smrgrelink_command=\"$relink_command\" 565427702724Smrg 5655e19dfac4Smrg# This environment variable determines our operation mode. 5656e19dfac4Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 5657e19dfac4Smrg # install mode needs the following variables: 5658e19dfac4Smrg generated_by_libtool_version='$macro_version' 5659e19dfac4Smrg notinst_deplibs='$notinst_deplibs' 5660e19dfac4Smrgelse 5661e19dfac4Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 5662e19dfac4Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 5663313a12fdSmrg file=\"\$0\"" 5664313a12fdSmrg 566595b7a5c8Smrg func_quote_arg pretty "$ECHO" 566695b7a5c8Smrg qECHO=$func_quote_arg_result 5667313a12fdSmrg $ECHO "\ 5668313a12fdSmrg 5669313a12fdSmrg# A function that is used when there is no print builtin or printf. 5670313a12fdSmrgfunc_fallback_echo () 5671313a12fdSmrg{ 5672313a12fdSmrg eval 'cat <<_LTECHO_EOF 5673313a12fdSmrg\$1 5674313a12fdSmrg_LTECHO_EOF' 5675313a12fdSmrg} 567695b7a5c8Smrg ECHO=$qECHO 5677313a12fdSmrg fi 5678313a12fdSmrg 5679313a12fdSmrg# Very basic option parsing. These options are (a) specific to 5680313a12fdSmrg# the libtool wrapper, (b) are identical between the wrapper 56817cea3689Smrg# /script/ and the wrapper /executable/ that is used only on 5682313a12fdSmrg# windows platforms, and (c) all begin with the string "--lt-" 56837cea3689Smrg# (application programs are unlikely to have options that match 5684313a12fdSmrg# this pattern). 5685313a12fdSmrg# 5686313a12fdSmrg# There are only two supported options: --lt-debug and 5687313a12fdSmrg# --lt-dump-script. There is, deliberately, no --lt-help. 5688313a12fdSmrg# 5689313a12fdSmrg# The first argument to this parsing function should be the 5690313a12fdSmrg# script's $0 value, followed by "$@". 5691313a12fdSmrglt_option_debug= 5692313a12fdSmrgfunc_parse_lt_options () 5693313a12fdSmrg{ 5694313a12fdSmrg lt_script_arg0=\$0 5695313a12fdSmrg shift 5696313a12fdSmrg for lt_opt 5697313a12fdSmrg do 5698313a12fdSmrg case \"\$lt_opt\" in 5699313a12fdSmrg --lt-debug) lt_option_debug=1 ;; 5700313a12fdSmrg --lt-dump-script) 5701313a12fdSmrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 5702313a12fdSmrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 5703313a12fdSmrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 5704313a12fdSmrg cat \"\$lt_dump_D/\$lt_dump_F\" 5705313a12fdSmrg exit 0 5706313a12fdSmrg ;; 5707313a12fdSmrg --lt-*) 5708313a12fdSmrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 5709313a12fdSmrg exit 1 5710313a12fdSmrg ;; 5711313a12fdSmrg esac 5712313a12fdSmrg done 5713313a12fdSmrg 5714313a12fdSmrg # Print the debug banner immediately: 5715313a12fdSmrg if test -n \"\$lt_option_debug\"; then 57167cea3689Smrg echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 5717313a12fdSmrg fi 5718313a12fdSmrg} 5719313a12fdSmrg 5720313a12fdSmrg# Used when --lt-debug. Prints its arguments to stdout 5721313a12fdSmrg# (redirection is the responsibility of the caller) 5722313a12fdSmrgfunc_lt_dump_args () 5723313a12fdSmrg{ 5724313a12fdSmrg lt_dump_args_N=1; 5725313a12fdSmrg for lt_arg 5726313a12fdSmrg do 57277cea3689Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" 5728313a12fdSmrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 5729313a12fdSmrg done 5730313a12fdSmrg} 5731313a12fdSmrg 5732313a12fdSmrg# Core function for launching the target application 5733313a12fdSmrgfunc_exec_program_core () 5734313a12fdSmrg{ 5735e19dfac4Smrg" 5736313a12fdSmrg case $host in 5737313a12fdSmrg # Backslashes separate directories on plain windows 5738ae545d91Smrg *-*-mingw* | *-*-windows* | *-*-os2* | *-cegcc*) 5739313a12fdSmrg $ECHO "\ 5740313a12fdSmrg if test -n \"\$lt_option_debug\"; then 57417cea3689Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 5742313a12fdSmrg func_lt_dump_args \${1+\"\$@\"} 1>&2 5743313a12fdSmrg fi 5744313a12fdSmrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 5745313a12fdSmrg" 5746313a12fdSmrg ;; 5747313a12fdSmrg 5748313a12fdSmrg *) 5749313a12fdSmrg $ECHO "\ 5750313a12fdSmrg if test -n \"\$lt_option_debug\"; then 57517cea3689Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 5752313a12fdSmrg func_lt_dump_args \${1+\"\$@\"} 1>&2 5753313a12fdSmrg fi 5754313a12fdSmrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 5755313a12fdSmrg" 5756313a12fdSmrg ;; 5757313a12fdSmrg esac 5758313a12fdSmrg $ECHO "\ 5759313a12fdSmrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 5760313a12fdSmrg exit 1 5761313a12fdSmrg} 5762313a12fdSmrg 5763313a12fdSmrg# A function to encapsulate launching the target application 5764313a12fdSmrg# Strips options in the --lt-* namespace from \$@ and 5765313a12fdSmrg# launches target application with the remaining arguments. 5766313a12fdSmrgfunc_exec_program () 5767313a12fdSmrg{ 5768313a12fdSmrg case \" \$* \" in 5769313a12fdSmrg *\\ --lt-*) 5770313a12fdSmrg for lt_wr_arg 5771313a12fdSmrg do 5772313a12fdSmrg case \$lt_wr_arg in 5773313a12fdSmrg --lt-*) ;; 5774313a12fdSmrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 5775313a12fdSmrg esac 5776313a12fdSmrg shift 5777313a12fdSmrg done ;; 5778313a12fdSmrg esac 5779313a12fdSmrg func_exec_program_core \${1+\"\$@\"} 5780313a12fdSmrg} 5781313a12fdSmrg 5782313a12fdSmrg # Parse options 5783313a12fdSmrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 578427702724Smrg 5785e19dfac4Smrg # Find the directory that this script lives in. 5786313a12fdSmrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 5787e19dfac4Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 578827702724Smrg 5789e19dfac4Smrg # Follow symbolic links until we get to the real thisdir. 5790313a12fdSmrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 5791e19dfac4Smrg while test -n \"\$file\"; do 5792313a12fdSmrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 579327702724Smrg 5794e19dfac4Smrg # If there was a directory component, then change thisdir. 5795e19dfac4Smrg if test \"x\$destdir\" != \"x\$file\"; then 5796e19dfac4Smrg case \"\$destdir\" in 5797e19dfac4Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 5798e19dfac4Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 5799e19dfac4Smrg esac 5800e19dfac4Smrg fi 580127702724Smrg 5802313a12fdSmrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 5803313a12fdSmrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 5804e19dfac4Smrg done 580527702724Smrg 5806ae545d91Smrg # Usually 'no', except on cygwin/mingw/windows when embedded into 5807e19dfac4Smrg # the cwrapper. 5808313a12fdSmrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 5809e19dfac4Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 5810e19dfac4Smrg # special case for '.' 5811e19dfac4Smrg if test \"\$thisdir\" = \".\"; then 5812e19dfac4Smrg thisdir=\`pwd\` 5813e19dfac4Smrg fi 5814e19dfac4Smrg # remove .libs from thisdir 5815e19dfac4Smrg case \"\$thisdir\" in 5816313a12fdSmrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 5817e19dfac4Smrg $objdir ) thisdir=. ;; 5818e19dfac4Smrg esac 5819e19dfac4Smrg fi 582027702724Smrg 5821e19dfac4Smrg # Try to get the absolute directory name. 5822e19dfac4Smrg absdir=\`cd \"\$thisdir\" && pwd\` 5823e19dfac4Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 5824e19dfac4Smrg" 582527702724Smrg 58267cea3689Smrg if test yes = "$fast_install"; then 5827e19dfac4Smrg $ECHO "\ 5828e19dfac4Smrg program=lt-'$outputname'$exeext 5829e19dfac4Smrg progdir=\"\$thisdir/$objdir\" 583027702724Smrg 5831e19dfac4Smrg if test ! -f \"\$progdir/\$program\" || 58327cea3689Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ 5833e19dfac4Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 583427702724Smrg 5835e19dfac4Smrg file=\"\$\$-\$program\" 583627702724Smrg 5837e19dfac4Smrg if test ! -d \"\$progdir\"; then 5838e19dfac4Smrg $MKDIR \"\$progdir\" 5839e19dfac4Smrg else 5840e19dfac4Smrg $RM \"\$progdir/\$file\" 5841e19dfac4Smrg fi" 584227702724Smrg 5843e19dfac4Smrg $ECHO "\ 584427702724Smrg 5845e19dfac4Smrg # relink executable if necessary 5846e19dfac4Smrg if test -n \"\$relink_command\"; then 5847e19dfac4Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 5848e19dfac4Smrg else 58497cea3689Smrg \$ECHO \"\$relink_command_output\" >&2 5850e19dfac4Smrg $RM \"\$progdir/\$file\" 5851e19dfac4Smrg exit 1 5852e19dfac4Smrg fi 5853e19dfac4Smrg fi 585427702724Smrg 5855e19dfac4Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 5856e19dfac4Smrg { $RM \"\$progdir/\$program\"; 5857e19dfac4Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 5858e19dfac4Smrg $RM \"\$progdir/\$file\" 5859e19dfac4Smrg fi" 5860e19dfac4Smrg else 5861e19dfac4Smrg $ECHO "\ 5862e19dfac4Smrg program='$outputname' 5863e19dfac4Smrg progdir=\"\$thisdir/$objdir\" 5864e19dfac4Smrg" 5865e19dfac4Smrg fi 586627702724Smrg 5867e19dfac4Smrg $ECHO "\ 586827702724Smrg 5869e19dfac4Smrg if test -f \"\$progdir/\$program\"; then" 587027702724Smrg 5871313a12fdSmrg # fixup the dll searchpath if we need to. 5872313a12fdSmrg # 5873313a12fdSmrg # Fix the DLL searchpath if we need to. Do this before prepending 5874313a12fdSmrg # to shlibpath, because on Windows, both are PATH and uninstalled 5875313a12fdSmrg # libraries must come first. 5876313a12fdSmrg if test -n "$dllsearchpath"; then 5877313a12fdSmrg $ECHO "\ 5878313a12fdSmrg # Add the dll search path components to the executable PATH 5879313a12fdSmrg PATH=$dllsearchpath:\$PATH 5880313a12fdSmrg" 5881313a12fdSmrg fi 5882313a12fdSmrg 5883e19dfac4Smrg # Export our shlibpath_var if we have one. 58847cea3689Smrg if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5885e19dfac4Smrg $ECHO "\ 5886e19dfac4Smrg # Add our own library path to $shlibpath_var 5887e19dfac4Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 588827702724Smrg 5889e19dfac4Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 5890e19dfac4Smrg # The second colon is a workaround for a bug in BeOS R4 sed 5891313a12fdSmrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 589227702724Smrg 5893e19dfac4Smrg export $shlibpath_var 5894e19dfac4Smrg" 589527702724Smrg fi 589627702724Smrg 5897e19dfac4Smrg $ECHO "\ 5898e19dfac4Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 5899e19dfac4Smrg # Run the actual program with our arguments. 5900313a12fdSmrg func_exec_program \${1+\"\$@\"} 5901e19dfac4Smrg fi 5902e19dfac4Smrg else 5903e19dfac4Smrg # The program doesn't exist. 59047cea3689Smrg \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 5905e19dfac4Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 5906313a12fdSmrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 5907e19dfac4Smrg exit 1 5908e19dfac4Smrg fi 5909e19dfac4Smrgfi\ 5910e19dfac4Smrg" 5911e19dfac4Smrg} 591227702724Smrg 591327702724Smrg 5914e19dfac4Smrg# func_emit_cwrapperexe_src 5915e19dfac4Smrg# emit the source code for a wrapper executable on stdout 5916e19dfac4Smrg# Must ONLY be called from within func_mode_link because 5917e19dfac4Smrg# it depends on a number of variable set therein. 5918e19dfac4Smrgfunc_emit_cwrapperexe_src () 5919e19dfac4Smrg{ 5920e19dfac4Smrg cat <<EOF 592127702724Smrg 5922e19dfac4Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 59237cea3689Smrg Generated by $PROGRAM (GNU $PACKAGE) $VERSION 592427702724Smrg 5925e19dfac4Smrg The $output program cannot be directly executed until all the libtool 5926e19dfac4Smrg libraries that it depends on are installed. 592727702724Smrg 5928e19dfac4Smrg This wrapper executable should never be moved out of the build directory. 5929e19dfac4Smrg If it is, it will not operate correctly. 5930e19dfac4Smrg*/ 5931e19dfac4SmrgEOF 5932e19dfac4Smrg cat <<"EOF" 5933313a12fdSmrg#ifdef _MSC_VER 5934313a12fdSmrg# define _CRT_SECURE_NO_DEPRECATE 1 5935313a12fdSmrg#endif 5936e19dfac4Smrg#include <stdio.h> 5937e19dfac4Smrg#include <stdlib.h> 5938ae545d91Smrg#if defined _WIN32 && !defined __GNUC__ 5939e19dfac4Smrg# include <direct.h> 5940e19dfac4Smrg# include <process.h> 5941e19dfac4Smrg# include <io.h> 5942e19dfac4Smrg#else 5943e19dfac4Smrg# include <unistd.h> 5944e19dfac4Smrg# include <stdint.h> 5945e19dfac4Smrg# ifdef __CYGWIN__ 5946e19dfac4Smrg# include <io.h> 5947e19dfac4Smrg# endif 5948e19dfac4Smrg#endif 5949e19dfac4Smrg#include <malloc.h> 5950e19dfac4Smrg#include <stdarg.h> 5951e19dfac4Smrg#include <assert.h> 5952e19dfac4Smrg#include <string.h> 5953e19dfac4Smrg#include <ctype.h> 5954e19dfac4Smrg#include <errno.h> 5955e19dfac4Smrg#include <fcntl.h> 5956e19dfac4Smrg#include <sys/stat.h> 5957e19dfac4Smrg 59587cea3689Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 59597cea3689Smrg 5960313a12fdSmrg/* declarations of non-ANSI functions */ 59617cea3689Smrg#if defined __MINGW32__ 5962313a12fdSmrg# ifdef __STRICT_ANSI__ 5963ae545d91Smrg_CRTIMP int __cdecl _putenv (const char *); 5964313a12fdSmrg# endif 59657cea3689Smrg#elif defined __CYGWIN__ 5966313a12fdSmrg# ifdef __STRICT_ANSI__ 5967313a12fdSmrgchar *realpath (const char *, char *); 5968313a12fdSmrgint putenv (char *); 5969313a12fdSmrgint setenv (const char *, const char *, int); 5970313a12fdSmrg# endif 59717cea3689Smrg/* #elif defined other_platform || defined ... */ 5972313a12fdSmrg#endif 5973313a12fdSmrg 5974313a12fdSmrg/* portability defines, excluding path handling macros */ 59757cea3689Smrg#if defined _MSC_VER 5976313a12fdSmrg# define setmode _setmode 5977313a12fdSmrg# define stat _stat 5978313a12fdSmrg# define chmod _chmod 5979313a12fdSmrg# define getcwd _getcwd 5980313a12fdSmrg# define putenv _putenv 5981313a12fdSmrg# define S_IXUSR _S_IEXEC 59827cea3689Smrg#elif defined __MINGW32__ 5983313a12fdSmrg# define setmode _setmode 5984313a12fdSmrg# define stat _stat 5985313a12fdSmrg# define chmod _chmod 5986313a12fdSmrg# define getcwd _getcwd 5987313a12fdSmrg# define putenv _putenv 59887cea3689Smrg#elif defined __CYGWIN__ 5989313a12fdSmrg# define HAVE_SETENV 5990313a12fdSmrg# define FOPEN_WB "wb" 59917cea3689Smrg/* #elif defined other platforms ... */ 5992313a12fdSmrg#endif 5993313a12fdSmrg 59947cea3689Smrg#if defined PATH_MAX 5995e19dfac4Smrg# define LT_PATHMAX PATH_MAX 59967cea3689Smrg#elif defined MAXPATHLEN 5997e19dfac4Smrg# define LT_PATHMAX MAXPATHLEN 5998e19dfac4Smrg#else 5999e19dfac4Smrg# define LT_PATHMAX 1024 6000e19dfac4Smrg#endif 6001e19dfac4Smrg 6002e19dfac4Smrg#ifndef S_IXOTH 6003e19dfac4Smrg# define S_IXOTH 0 6004e19dfac4Smrg#endif 6005e19dfac4Smrg#ifndef S_IXGRP 6006e19dfac4Smrg# define S_IXGRP 0 6007e19dfac4Smrg#endif 6008e19dfac4Smrg 6009313a12fdSmrg/* path handling portability macros */ 6010e19dfac4Smrg#ifndef DIR_SEPARATOR 6011e19dfac4Smrg# define DIR_SEPARATOR '/' 6012e19dfac4Smrg# define PATH_SEPARATOR ':' 6013e19dfac4Smrg#endif 6014e19dfac4Smrg 60157cea3689Smrg#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ 60167cea3689Smrg defined __OS2__ 6017e19dfac4Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 6018e19dfac4Smrg# define FOPEN_WB "wb" 6019e19dfac4Smrg# ifndef DIR_SEPARATOR_2 6020e19dfac4Smrg# define DIR_SEPARATOR_2 '\\' 6021e19dfac4Smrg# endif 6022e19dfac4Smrg# ifndef PATH_SEPARATOR_2 6023e19dfac4Smrg# define PATH_SEPARATOR_2 ';' 6024e19dfac4Smrg# endif 6025e19dfac4Smrg#endif 6026e19dfac4Smrg 6027e19dfac4Smrg#ifndef DIR_SEPARATOR_2 6028e19dfac4Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 6029e19dfac4Smrg#else /* DIR_SEPARATOR_2 */ 6030e19dfac4Smrg# define IS_DIR_SEPARATOR(ch) \ 6031e19dfac4Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 6032e19dfac4Smrg#endif /* DIR_SEPARATOR_2 */ 6033e19dfac4Smrg 6034e19dfac4Smrg#ifndef PATH_SEPARATOR_2 6035e19dfac4Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 6036e19dfac4Smrg#else /* PATH_SEPARATOR_2 */ 6037e19dfac4Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 6038e19dfac4Smrg#endif /* PATH_SEPARATOR_2 */ 6039e19dfac4Smrg 6040e19dfac4Smrg#ifndef FOPEN_WB 6041e19dfac4Smrg# define FOPEN_WB "w" 6042e19dfac4Smrg#endif 6043e19dfac4Smrg#ifndef _O_BINARY 6044e19dfac4Smrg# define _O_BINARY 0 6045e19dfac4Smrg#endif 6046e19dfac4Smrg 6047e19dfac4Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 6048e19dfac4Smrg#define XFREE(stale) do { \ 60497cea3689Smrg if (stale) { free (stale); stale = 0; } \ 6050e19dfac4Smrg} while (0) 6051e19dfac4Smrg 60527cea3689Smrg#if defined LT_DEBUGWRAPPER 6053313a12fdSmrgstatic int lt_debug = 1; 6054e19dfac4Smrg#else 6055313a12fdSmrgstatic int lt_debug = 0; 6056e19dfac4Smrg#endif 6057e19dfac4Smrg 6058313a12fdSmrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 6059e19dfac4Smrg 6060e19dfac4Smrgvoid *xmalloc (size_t num); 6061e19dfac4Smrgchar *xstrdup (const char *string); 6062e19dfac4Smrgconst char *base_name (const char *name); 6063e19dfac4Smrgchar *find_executable (const char *wrapper); 6064e19dfac4Smrgchar *chase_symlinks (const char *pathspec); 6065e19dfac4Smrgint make_executable (const char *path); 6066e19dfac4Smrgint check_executable (const char *path); 6067e19dfac4Smrgchar *strendzap (char *str, const char *pat); 6068313a12fdSmrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 6069313a12fdSmrgvoid lt_fatal (const char *file, int line, const char *message, ...); 6070313a12fdSmrgstatic const char *nonnull (const char *s); 6071313a12fdSmrgstatic const char *nonempty (const char *s); 6072e19dfac4Smrgvoid lt_setenv (const char *name, const char *value); 6073e19dfac4Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 6074e19dfac4Smrgvoid lt_update_exe_path (const char *name, const char *value); 6075e19dfac4Smrgvoid lt_update_lib_path (const char *name, const char *value); 6076313a12fdSmrgchar **prepare_spawn (char **argv); 6077313a12fdSmrgvoid lt_dump_script (FILE *f); 6078e19dfac4SmrgEOF 6079e19dfac4Smrg 6080e19dfac4Smrg cat <<EOF 60817cea3689Smrg#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) 60827cea3689Smrg# define externally_visible volatile 60837cea3689Smrg#else 60847cea3689Smrg# define externally_visible __attribute__((externally_visible)) volatile 60857cea3689Smrg#endif 60867cea3689Smrgexternally_visible const char * MAGIC_EXE = "$magic_exe"; 6087e19dfac4Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 6088e19dfac4SmrgEOF 6089e19dfac4Smrg 60907cea3689Smrg if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 6091313a12fdSmrg func_to_host_path "$temp_rpath" 6092e19dfac4Smrg cat <<EOF 6093313a12fdSmrgconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 609427702724SmrgEOF 609527702724Smrg else 6096e19dfac4Smrg cat <<"EOF" 6097e19dfac4Smrgconst char * LIB_PATH_VALUE = ""; 6098e19dfac4SmrgEOF 609927702724Smrg fi 6100e19dfac4Smrg 6101e19dfac4Smrg if test -n "$dllsearchpath"; then 6102313a12fdSmrg func_to_host_path "$dllsearchpath:" 6103e19dfac4Smrg cat <<EOF 6104e19dfac4Smrgconst char * EXE_PATH_VARNAME = "PATH"; 6105313a12fdSmrgconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 6106e19dfac4SmrgEOF 610727702724Smrg else 6108e19dfac4Smrg cat <<"EOF" 6109e19dfac4Smrgconst char * EXE_PATH_VARNAME = ""; 6110e19dfac4Smrgconst char * EXE_PATH_VALUE = ""; 6111e19dfac4SmrgEOF 611227702724Smrg fi 6113e19dfac4Smrg 61147cea3689Smrg if test yes = "$fast_install"; then 6115e19dfac4Smrg cat <<EOF 6116e19dfac4Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 6117e19dfac4SmrgEOF 611827702724Smrg else 6119e19dfac4Smrg cat <<EOF 6120e19dfac4Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 6121e19dfac4SmrgEOF 612227702724Smrg fi 612327702724Smrg 612427702724Smrg 6125e19dfac4Smrg cat <<"EOF" 612627702724Smrg 6127e19dfac4Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 612827702724Smrg 6129e19dfac4Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 6130e19dfac4Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 6131313a12fdSmrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 613227702724Smrg 6133e19dfac4Smrgint 6134e19dfac4Smrgmain (int argc, char *argv[]) 6135e19dfac4Smrg{ 6136e19dfac4Smrg char **newargz; 6137e19dfac4Smrg int newargc; 6138e19dfac4Smrg char *tmp_pathspec; 6139e19dfac4Smrg char *actual_cwrapper_path; 6140e19dfac4Smrg char *actual_cwrapper_name; 6141e19dfac4Smrg char *target_name; 6142e19dfac4Smrg char *lt_argv_zero; 61437cea3689Smrg int rval = 127; 614427702724Smrg 6145e19dfac4Smrg int i; 614627702724Smrg 6147e19dfac4Smrg program_name = (char *) xstrdup (base_name (argv[0])); 61487cea3689Smrg newargz = XMALLOC (char *, (size_t) argc + 1); 614927702724Smrg 6150313a12fdSmrg /* very simple arg parsing; don't want to rely on getopt 6151313a12fdSmrg * also, copy all non cwrapper options to newargz, except 6152313a12fdSmrg * argz[0], which is handled differently 6153313a12fdSmrg */ 6154313a12fdSmrg newargc=0; 6155e19dfac4Smrg for (i = 1; i < argc; i++) 6156e19dfac4Smrg { 61577cea3689Smrg if (STREQ (argv[i], dumpscript_opt)) 6158e19dfac4Smrg { 6159e19dfac4SmrgEOF 61607cea3689Smrg case $host in 6161ae545d91Smrg *mingw* | *windows* | *cygwin* ) 6162e19dfac4Smrg # make stdout use "unix" line endings 6163e19dfac4Smrg echo " setmode(1,_O_BINARY);" 6164e19dfac4Smrg ;; 6165e19dfac4Smrg esac 616627702724Smrg 6167e19dfac4Smrg cat <<"EOF" 6168313a12fdSmrg lt_dump_script (stdout); 6169e19dfac4Smrg return 0; 6170e19dfac4Smrg } 61717cea3689Smrg if (STREQ (argv[i], debug_opt)) 6172313a12fdSmrg { 6173313a12fdSmrg lt_debug = 1; 6174313a12fdSmrg continue; 6175313a12fdSmrg } 61767cea3689Smrg if (STREQ (argv[i], ltwrapper_option_prefix)) 6177313a12fdSmrg { 6178313a12fdSmrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 6179313a12fdSmrg namespace, but it is not one of the ones we know about and 6180ae545d91Smrg have already dealt with, above (including dump-script), then 6181313a12fdSmrg report an error. Otherwise, targets might begin to believe 6182313a12fdSmrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 6183313a12fdSmrg namespace. The first time any user complains about this, we'll 6184313a12fdSmrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 6185313a12fdSmrg or a configure.ac-settable value. 6186313a12fdSmrg */ 6187313a12fdSmrg lt_fatal (__FILE__, __LINE__, 6188313a12fdSmrg "unrecognized %s option: '%s'", 6189313a12fdSmrg ltwrapper_option_prefix, argv[i]); 6190313a12fdSmrg } 6191313a12fdSmrg /* otherwise ... */ 6192313a12fdSmrg newargz[++newargc] = xstrdup (argv[i]); 6193e19dfac4Smrg } 6194313a12fdSmrg newargz[++newargc] = NULL; 6195313a12fdSmrg 6196313a12fdSmrgEOF 6197313a12fdSmrg cat <<EOF 6198313a12fdSmrg /* The GNU banner must be the first non-error debug message */ 61997cea3689Smrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); 6200313a12fdSmrgEOF 6201313a12fdSmrg cat <<"EOF" 6202313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 6203313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 620427702724Smrg 6205e19dfac4Smrg tmp_pathspec = find_executable (argv[0]); 6206e19dfac4Smrg if (tmp_pathspec == NULL) 6207313a12fdSmrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 6208313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 6209313a12fdSmrg "(main) found exe (before symlink chase) at: %s\n", 6210313a12fdSmrg tmp_pathspec); 6211e19dfac4Smrg 6212e19dfac4Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 6213313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 6214313a12fdSmrg "(main) found exe (after symlink chase) at: %s\n", 6215313a12fdSmrg actual_cwrapper_path); 6216e19dfac4Smrg XFREE (tmp_pathspec); 6217e19dfac4Smrg 6218313a12fdSmrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 6219e19dfac4Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 6220e19dfac4Smrg 6221e19dfac4Smrg /* wrapper name transforms */ 6222e19dfac4Smrg strendzap (actual_cwrapper_name, ".exe"); 6223e19dfac4Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 6224e19dfac4Smrg XFREE (actual_cwrapper_name); 6225e19dfac4Smrg actual_cwrapper_name = tmp_pathspec; 6226e19dfac4Smrg tmp_pathspec = 0; 6227e19dfac4Smrg 6228e19dfac4Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 6229e19dfac4Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 6230e19dfac4Smrg strendzap (target_name, ".exe"); 6231e19dfac4Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 6232e19dfac4Smrg XFREE (target_name); 6233e19dfac4Smrg target_name = tmp_pathspec; 6234e19dfac4Smrg tmp_pathspec = 0; 6235e19dfac4Smrg 6236313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 6237313a12fdSmrg "(main) libtool target name: %s\n", 6238313a12fdSmrg target_name); 6239e19dfac4SmrgEOF 624027702724Smrg 6241e19dfac4Smrg cat <<EOF 6242e19dfac4Smrg newargz[0] = 6243e19dfac4Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 6244e19dfac4Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 6245e19dfac4Smrg strcpy (newargz[0], actual_cwrapper_path); 6246e19dfac4Smrg strcat (newargz[0], "$objdir"); 6247e19dfac4Smrg strcat (newargz[0], "/"); 6248e19dfac4SmrgEOF 624927702724Smrg 6250e19dfac4Smrg cat <<"EOF" 6251e19dfac4Smrg /* stop here, and copy so we don't have to do this twice */ 6252e19dfac4Smrg tmp_pathspec = xstrdup (newargz[0]); 625327702724Smrg 6254e19dfac4Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 6255e19dfac4Smrg strcat (newargz[0], actual_cwrapper_name); 625627702724Smrg 6257e19dfac4Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 6258e19dfac4Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 6259e19dfac4Smrg XFREE (tmp_pathspec); 6260e19dfac4Smrg tmp_pathspec = NULL; 6261e19dfac4SmrgEOF 626227702724Smrg 6263e19dfac4Smrg case $host_os in 6264ae545d91Smrg mingw* | windows*) 6265e19dfac4Smrg cat <<"EOF" 6266e19dfac4Smrg { 6267e19dfac4Smrg char* p; 6268e19dfac4Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 6269e19dfac4Smrg { 6270e19dfac4Smrg *p = '/'; 6271e19dfac4Smrg } 6272e19dfac4Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 6273e19dfac4Smrg { 6274e19dfac4Smrg *p = '/'; 6275e19dfac4Smrg } 6276e19dfac4Smrg } 6277e19dfac4SmrgEOF 6278e19dfac4Smrg ;; 6279e19dfac4Smrg esac 628027702724Smrg 6281e19dfac4Smrg cat <<"EOF" 6282e19dfac4Smrg XFREE (target_name); 6283e19dfac4Smrg XFREE (actual_cwrapper_path); 6284e19dfac4Smrg XFREE (actual_cwrapper_name); 628527702724Smrg 6286e19dfac4Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 6287e19dfac4Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 6288313a12fdSmrg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 6289313a12fdSmrg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 6290313a12fdSmrg because on Windows, both *_VARNAMEs are PATH but uninstalled 6291313a12fdSmrg libraries must come first. */ 6292e19dfac4Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 6293313a12fdSmrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 629427702724Smrg 6295313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 6296313a12fdSmrg nonnull (lt_argv_zero)); 6297e19dfac4Smrg for (i = 0; i < newargc; i++) 6298e19dfac4Smrg { 6299313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 6300313a12fdSmrg i, nonnull (newargz[i])); 6301e19dfac4Smrg } 630227702724Smrg 6303e19dfac4SmrgEOF 630427702724Smrg 6305e19dfac4Smrg case $host_os in 6306ae545d91Smrg mingw* | windows*) 6307e19dfac4Smrg cat <<"EOF" 6308e19dfac4Smrg /* execv doesn't actually work on mingw as expected on unix */ 6309313a12fdSmrg newargz = prepare_spawn (newargz); 63107cea3689Smrg rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 6311e19dfac4Smrg if (rval == -1) 6312e19dfac4Smrg { 6313e19dfac4Smrg /* failed to start process */ 6314313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 6315313a12fdSmrg "(main) failed to launch target \"%s\": %s\n", 6316313a12fdSmrg lt_argv_zero, nonnull (strerror (errno))); 6317e19dfac4Smrg return 127; 6318e19dfac4Smrg } 6319e19dfac4Smrg return rval; 6320e19dfac4SmrgEOF 6321e19dfac4Smrg ;; 6322e19dfac4Smrg *) 6323e19dfac4Smrg cat <<"EOF" 6324e19dfac4Smrg execv (lt_argv_zero, newargz); 6325e19dfac4Smrg return rval; /* =127, but avoids unused variable warning */ 6326e19dfac4SmrgEOF 6327e19dfac4Smrg ;; 6328e19dfac4Smrg esac 632927702724Smrg 6330e19dfac4Smrg cat <<"EOF" 6331e19dfac4Smrg} 633227702724Smrg 6333e19dfac4Smrgvoid * 6334e19dfac4Smrgxmalloc (size_t num) 6335e19dfac4Smrg{ 6336e19dfac4Smrg void *p = (void *) malloc (num); 6337e19dfac4Smrg if (!p) 6338313a12fdSmrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 633927702724Smrg 6340e19dfac4Smrg return p; 6341e19dfac4Smrg} 634227702724Smrg 6343e19dfac4Smrgchar * 6344e19dfac4Smrgxstrdup (const char *string) 6345e19dfac4Smrg{ 6346e19dfac4Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 6347e19dfac4Smrg string) : NULL; 6348e19dfac4Smrg} 634927702724Smrg 6350e19dfac4Smrgconst char * 6351e19dfac4Smrgbase_name (const char *name) 6352e19dfac4Smrg{ 6353e19dfac4Smrg const char *base; 635427702724Smrg 63557cea3689Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 6356e19dfac4Smrg /* Skip over the disk name in MSDOS pathnames. */ 6357e19dfac4Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 6358e19dfac4Smrg name += 2; 6359e19dfac4Smrg#endif 636027702724Smrg 6361e19dfac4Smrg for (base = name; *name; name++) 6362e19dfac4Smrg if (IS_DIR_SEPARATOR (*name)) 6363e19dfac4Smrg base = name + 1; 6364e19dfac4Smrg return base; 6365e19dfac4Smrg} 636627702724Smrg 6367e19dfac4Smrgint 6368e19dfac4Smrgcheck_executable (const char *path) 6369e19dfac4Smrg{ 6370e19dfac4Smrg struct stat st; 637127702724Smrg 6372313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 6373313a12fdSmrg nonempty (path)); 6374e19dfac4Smrg if ((!path) || (!*path)) 6375e19dfac4Smrg return 0; 637627702724Smrg 6377e19dfac4Smrg if ((stat (path, &st) >= 0) 6378e19dfac4Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 6379e19dfac4Smrg return 1; 6380e19dfac4Smrg else 6381e19dfac4Smrg return 0; 6382e19dfac4Smrg} 638327702724Smrg 6384e19dfac4Smrgint 6385e19dfac4Smrgmake_executable (const char *path) 6386e19dfac4Smrg{ 6387e19dfac4Smrg int rval = 0; 6388e19dfac4Smrg struct stat st; 638927702724Smrg 6390313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 6391313a12fdSmrg nonempty (path)); 6392e19dfac4Smrg if ((!path) || (!*path)) 6393e19dfac4Smrg return 0; 639427702724Smrg 6395e19dfac4Smrg if (stat (path, &st) >= 0) 6396e19dfac4Smrg { 6397e19dfac4Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 6398e19dfac4Smrg } 6399e19dfac4Smrg return rval; 6400e19dfac4Smrg} 640127702724Smrg 6402e19dfac4Smrg/* Searches for the full path of the wrapper. Returns 6403e19dfac4Smrg newly allocated full path name if found, NULL otherwise 6404e19dfac4Smrg Does not chase symlinks, even on platforms that support them. 6405e19dfac4Smrg*/ 6406e19dfac4Smrgchar * 6407e19dfac4Smrgfind_executable (const char *wrapper) 6408e19dfac4Smrg{ 6409e19dfac4Smrg int has_slash = 0; 6410e19dfac4Smrg const char *p; 6411e19dfac4Smrg const char *p_next; 6412e19dfac4Smrg /* static buffer for getcwd */ 6413e19dfac4Smrg char tmp[LT_PATHMAX + 1]; 64147cea3689Smrg size_t tmp_len; 6415e19dfac4Smrg char *concat_name; 641627702724Smrg 6417313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 6418313a12fdSmrg nonempty (wrapper)); 641927702724Smrg 6420e19dfac4Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 6421e19dfac4Smrg return NULL; 642227702724Smrg 6423e19dfac4Smrg /* Absolute path? */ 64247cea3689Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 6425e19dfac4Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 6426e19dfac4Smrg { 6427e19dfac4Smrg concat_name = xstrdup (wrapper); 6428e19dfac4Smrg if (check_executable (concat_name)) 6429e19dfac4Smrg return concat_name; 6430e19dfac4Smrg XFREE (concat_name); 6431e19dfac4Smrg } 6432e19dfac4Smrg else 6433e19dfac4Smrg { 6434e19dfac4Smrg#endif 6435e19dfac4Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 6436e19dfac4Smrg { 6437e19dfac4Smrg concat_name = xstrdup (wrapper); 6438e19dfac4Smrg if (check_executable (concat_name)) 6439e19dfac4Smrg return concat_name; 6440e19dfac4Smrg XFREE (concat_name); 6441e19dfac4Smrg } 64427cea3689Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 6443e19dfac4Smrg } 6444e19dfac4Smrg#endif 644527702724Smrg 6446e19dfac4Smrg for (p = wrapper; *p; p++) 6447e19dfac4Smrg if (*p == '/') 6448e19dfac4Smrg { 6449e19dfac4Smrg has_slash = 1; 6450e19dfac4Smrg break; 6451e19dfac4Smrg } 6452e19dfac4Smrg if (!has_slash) 6453e19dfac4Smrg { 6454e19dfac4Smrg /* no slashes; search PATH */ 6455e19dfac4Smrg const char *path = getenv ("PATH"); 6456e19dfac4Smrg if (path != NULL) 6457e19dfac4Smrg { 6458e19dfac4Smrg for (p = path; *p; p = p_next) 6459e19dfac4Smrg { 6460e19dfac4Smrg const char *q; 6461e19dfac4Smrg size_t p_len; 6462e19dfac4Smrg for (q = p; *q; q++) 6463e19dfac4Smrg if (IS_PATH_SEPARATOR (*q)) 6464e19dfac4Smrg break; 64657cea3689Smrg p_len = (size_t) (q - p); 6466e19dfac4Smrg p_next = (*q == '\0' ? q : q + 1); 6467e19dfac4Smrg if (p_len == 0) 6468e19dfac4Smrg { 6469e19dfac4Smrg /* empty path: current directory */ 6470e19dfac4Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 6471313a12fdSmrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6472313a12fdSmrg nonnull (strerror (errno))); 6473e19dfac4Smrg tmp_len = strlen (tmp); 6474e19dfac4Smrg concat_name = 6475e19dfac4Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6476e19dfac4Smrg memcpy (concat_name, tmp, tmp_len); 6477e19dfac4Smrg concat_name[tmp_len] = '/'; 6478e19dfac4Smrg strcpy (concat_name + tmp_len + 1, wrapper); 6479e19dfac4Smrg } 6480e19dfac4Smrg else 6481e19dfac4Smrg { 6482e19dfac4Smrg concat_name = 6483e19dfac4Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 6484e19dfac4Smrg memcpy (concat_name, p, p_len); 6485e19dfac4Smrg concat_name[p_len] = '/'; 6486e19dfac4Smrg strcpy (concat_name + p_len + 1, wrapper); 6487e19dfac4Smrg } 6488e19dfac4Smrg if (check_executable (concat_name)) 6489e19dfac4Smrg return concat_name; 6490e19dfac4Smrg XFREE (concat_name); 6491e19dfac4Smrg } 6492e19dfac4Smrg } 6493e19dfac4Smrg /* not found in PATH; assume curdir */ 6494e19dfac4Smrg } 6495e19dfac4Smrg /* Relative path | not found in path: prepend cwd */ 6496e19dfac4Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 6497313a12fdSmrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6498313a12fdSmrg nonnull (strerror (errno))); 6499e19dfac4Smrg tmp_len = strlen (tmp); 6500e19dfac4Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6501e19dfac4Smrg memcpy (concat_name, tmp, tmp_len); 6502e19dfac4Smrg concat_name[tmp_len] = '/'; 6503e19dfac4Smrg strcpy (concat_name + tmp_len + 1, wrapper); 650427702724Smrg 6505e19dfac4Smrg if (check_executable (concat_name)) 6506e19dfac4Smrg return concat_name; 6507e19dfac4Smrg XFREE (concat_name); 6508e19dfac4Smrg return NULL; 6509e19dfac4Smrg} 651027702724Smrg 6511e19dfac4Smrgchar * 6512e19dfac4Smrgchase_symlinks (const char *pathspec) 6513e19dfac4Smrg{ 6514e19dfac4Smrg#ifndef S_ISLNK 6515e19dfac4Smrg return xstrdup (pathspec); 6516e19dfac4Smrg#else 6517e19dfac4Smrg char buf[LT_PATHMAX]; 6518e19dfac4Smrg struct stat s; 6519e19dfac4Smrg char *tmp_pathspec = xstrdup (pathspec); 6520e19dfac4Smrg char *p; 6521e19dfac4Smrg int has_symlinks = 0; 6522e19dfac4Smrg while (strlen (tmp_pathspec) && !has_symlinks) 6523e19dfac4Smrg { 6524313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 6525313a12fdSmrg "checking path component for symlinks: %s\n", 6526313a12fdSmrg tmp_pathspec); 6527e19dfac4Smrg if (lstat (tmp_pathspec, &s) == 0) 6528e19dfac4Smrg { 6529e19dfac4Smrg if (S_ISLNK (s.st_mode) != 0) 6530e19dfac4Smrg { 6531e19dfac4Smrg has_symlinks = 1; 6532e19dfac4Smrg break; 6533e19dfac4Smrg } 653427702724Smrg 6535e19dfac4Smrg /* search backwards for last DIR_SEPARATOR */ 6536e19dfac4Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 6537e19dfac4Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6538e19dfac4Smrg p--; 6539e19dfac4Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6540e19dfac4Smrg { 6541e19dfac4Smrg /* no more DIR_SEPARATORS left */ 6542e19dfac4Smrg break; 6543e19dfac4Smrg } 6544e19dfac4Smrg *p = '\0'; 6545e19dfac4Smrg } 6546e19dfac4Smrg else 6547e19dfac4Smrg { 6548313a12fdSmrg lt_fatal (__FILE__, __LINE__, 6549313a12fdSmrg "error accessing file \"%s\": %s", 6550313a12fdSmrg tmp_pathspec, nonnull (strerror (errno))); 6551e19dfac4Smrg } 6552e19dfac4Smrg } 6553e19dfac4Smrg XFREE (tmp_pathspec); 655427702724Smrg 6555e19dfac4Smrg if (!has_symlinks) 6556e19dfac4Smrg { 6557e19dfac4Smrg return xstrdup (pathspec); 6558e19dfac4Smrg } 655927702724Smrg 6560e19dfac4Smrg tmp_pathspec = realpath (pathspec, buf); 6561e19dfac4Smrg if (tmp_pathspec == 0) 6562e19dfac4Smrg { 6563313a12fdSmrg lt_fatal (__FILE__, __LINE__, 6564313a12fdSmrg "could not follow symlinks for %s", pathspec); 6565e19dfac4Smrg } 6566e19dfac4Smrg return xstrdup (tmp_pathspec); 6567e19dfac4Smrg#endif 6568e19dfac4Smrg} 656927702724Smrg 6570e19dfac4Smrgchar * 6571e19dfac4Smrgstrendzap (char *str, const char *pat) 6572e19dfac4Smrg{ 6573e19dfac4Smrg size_t len, patlen; 657427702724Smrg 6575e19dfac4Smrg assert (str != NULL); 6576e19dfac4Smrg assert (pat != NULL); 657727702724Smrg 6578e19dfac4Smrg len = strlen (str); 6579e19dfac4Smrg patlen = strlen (pat); 658027702724Smrg 6581e19dfac4Smrg if (patlen <= len) 6582e19dfac4Smrg { 6583e19dfac4Smrg str += len - patlen; 65847cea3689Smrg if (STREQ (str, pat)) 6585e19dfac4Smrg *str = '\0'; 6586e19dfac4Smrg } 6587e19dfac4Smrg return str; 6588e19dfac4Smrg} 658927702724Smrg 6590313a12fdSmrgvoid 6591313a12fdSmrglt_debugprintf (const char *file, int line, const char *fmt, ...) 6592313a12fdSmrg{ 6593313a12fdSmrg va_list args; 6594313a12fdSmrg if (lt_debug) 6595313a12fdSmrg { 6596313a12fdSmrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 6597313a12fdSmrg va_start (args, fmt); 6598313a12fdSmrg (void) vfprintf (stderr, fmt, args); 6599313a12fdSmrg va_end (args); 6600313a12fdSmrg } 6601313a12fdSmrg} 6602313a12fdSmrg 6603e19dfac4Smrgstatic void 6604313a12fdSmrglt_error_core (int exit_status, const char *file, 6605313a12fdSmrg int line, const char *mode, 6606e19dfac4Smrg const char *message, va_list ap) 6607e19dfac4Smrg{ 6608313a12fdSmrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 6609e19dfac4Smrg vfprintf (stderr, message, ap); 6610e19dfac4Smrg fprintf (stderr, ".\n"); 661127702724Smrg 6612e19dfac4Smrg if (exit_status >= 0) 6613e19dfac4Smrg exit (exit_status); 6614e19dfac4Smrg} 661527702724Smrg 6616e19dfac4Smrgvoid 6617313a12fdSmrglt_fatal (const char *file, int line, const char *message, ...) 6618e19dfac4Smrg{ 6619e19dfac4Smrg va_list ap; 6620e19dfac4Smrg va_start (ap, message); 6621313a12fdSmrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 6622e19dfac4Smrg va_end (ap); 6623e19dfac4Smrg} 662427702724Smrg 6625313a12fdSmrgstatic const char * 6626313a12fdSmrgnonnull (const char *s) 6627313a12fdSmrg{ 6628313a12fdSmrg return s ? s : "(null)"; 6629313a12fdSmrg} 6630313a12fdSmrg 6631313a12fdSmrgstatic const char * 6632313a12fdSmrgnonempty (const char *s) 6633313a12fdSmrg{ 6634313a12fdSmrg return (s && !*s) ? "(empty)" : nonnull (s); 6635313a12fdSmrg} 6636313a12fdSmrg 6637e19dfac4Smrgvoid 6638e19dfac4Smrglt_setenv (const char *name, const char *value) 6639e19dfac4Smrg{ 6640313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 6641313a12fdSmrg "(lt_setenv) setting '%s' to '%s'\n", 6642313a12fdSmrg nonnull (name), nonnull (value)); 6643e19dfac4Smrg { 6644e19dfac4Smrg#ifdef HAVE_SETENV 6645e19dfac4Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 6646e19dfac4Smrg char *str = xstrdup (value); 6647e19dfac4Smrg setenv (name, str, 1); 6648e19dfac4Smrg#else 66497cea3689Smrg size_t len = strlen (name) + 1 + strlen (value) + 1; 6650e19dfac4Smrg char *str = XMALLOC (char, len); 6651e19dfac4Smrg sprintf (str, "%s=%s", name, value); 6652e19dfac4Smrg if (putenv (str) != EXIT_SUCCESS) 6653e19dfac4Smrg { 6654e19dfac4Smrg XFREE (str); 6655e19dfac4Smrg } 6656e19dfac4Smrg#endif 6657e19dfac4Smrg } 6658e19dfac4Smrg} 665927702724Smrg 6660e19dfac4Smrgchar * 6661e19dfac4Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 6662e19dfac4Smrg{ 6663e19dfac4Smrg char *new_value; 6664e19dfac4Smrg if (orig_value && *orig_value) 6665e19dfac4Smrg { 66667cea3689Smrg size_t orig_value_len = strlen (orig_value); 66677cea3689Smrg size_t add_len = strlen (add); 6668e19dfac4Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 6669e19dfac4Smrg if (to_end) 6670e19dfac4Smrg { 6671e19dfac4Smrg strcpy (new_value, orig_value); 6672e19dfac4Smrg strcpy (new_value + orig_value_len, add); 6673e19dfac4Smrg } 6674e19dfac4Smrg else 6675e19dfac4Smrg { 6676e19dfac4Smrg strcpy (new_value, add); 6677e19dfac4Smrg strcpy (new_value + add_len, orig_value); 6678e19dfac4Smrg } 6679e19dfac4Smrg } 6680e19dfac4Smrg else 6681e19dfac4Smrg { 6682e19dfac4Smrg new_value = xstrdup (add); 6683e19dfac4Smrg } 6684e19dfac4Smrg return new_value; 6685e19dfac4Smrg} 668627702724Smrg 6687e19dfac4Smrgvoid 6688e19dfac4Smrglt_update_exe_path (const char *name, const char *value) 6689e19dfac4Smrg{ 6690313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 6691313a12fdSmrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 6692313a12fdSmrg nonnull (name), nonnull (value)); 669327702724Smrg 6694e19dfac4Smrg if (name && *name && value && *value) 6695e19dfac4Smrg { 6696e19dfac4Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 6697e19dfac4Smrg /* some systems can't cope with a ':'-terminated path #' */ 66987cea3689Smrg size_t len = strlen (new_value); 66997cea3689Smrg while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 6700e19dfac4Smrg { 67017cea3689Smrg new_value[--len] = '\0'; 6702e19dfac4Smrg } 6703e19dfac4Smrg lt_setenv (name, new_value); 6704e19dfac4Smrg XFREE (new_value); 6705e19dfac4Smrg } 6706e19dfac4Smrg} 670727702724Smrg 6708e19dfac4Smrgvoid 6709e19dfac4Smrglt_update_lib_path (const char *name, const char *value) 6710e19dfac4Smrg{ 6711313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 6712313a12fdSmrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 6713313a12fdSmrg nonnull (name), nonnull (value)); 671427702724Smrg 6715e19dfac4Smrg if (name && *name && value && *value) 6716e19dfac4Smrg { 6717e19dfac4Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 6718e19dfac4Smrg lt_setenv (name, new_value); 6719e19dfac4Smrg XFREE (new_value); 6720e19dfac4Smrg } 6721e19dfac4Smrg} 672227702724Smrg 6723313a12fdSmrgEOF 6724313a12fdSmrg case $host_os in 6725ae545d91Smrg mingw* | windows*) 6726313a12fdSmrg cat <<"EOF" 6727313a12fdSmrg 6728313a12fdSmrg/* Prepares an argument vector before calling spawn(). 6729313a12fdSmrg Note that spawn() does not by itself call the command interpreter 6730313a12fdSmrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 6731313a12fdSmrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 6732313a12fdSmrg GetVersionEx(&v); 6733313a12fdSmrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 6734313a12fdSmrg }) ? "cmd.exe" : "command.com"). 6735313a12fdSmrg Instead it simply concatenates the arguments, separated by ' ', and calls 6736313a12fdSmrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 6737313a12fdSmrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 6738313a12fdSmrg special way: 6739313a12fdSmrg - Space and tab are interpreted as delimiters. They are not treated as 6740313a12fdSmrg delimiters if they are surrounded by double quotes: "...". 6741313a12fdSmrg - Unescaped double quotes are removed from the input. Their only effect is 6742313a12fdSmrg that within double quotes, space and tab are treated like normal 6743313a12fdSmrg characters. 6744313a12fdSmrg - Backslashes not followed by double quotes are not special. 6745313a12fdSmrg - But 2*n+1 backslashes followed by a double quote become 6746313a12fdSmrg n backslashes followed by a double quote (n >= 0): 6747313a12fdSmrg \" -> " 6748313a12fdSmrg \\\" -> \" 6749313a12fdSmrg \\\\\" -> \\" 6750313a12fdSmrg */ 6751313a12fdSmrg#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" 6752313a12fdSmrg#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" 6753313a12fdSmrgchar ** 6754313a12fdSmrgprepare_spawn (char **argv) 6755313a12fdSmrg{ 6756313a12fdSmrg size_t argc; 6757313a12fdSmrg char **new_argv; 6758313a12fdSmrg size_t i; 6759313a12fdSmrg 6760313a12fdSmrg /* Count number of arguments. */ 6761313a12fdSmrg for (argc = 0; argv[argc] != NULL; argc++) 6762313a12fdSmrg ; 6763313a12fdSmrg 6764313a12fdSmrg /* Allocate new argument vector. */ 6765313a12fdSmrg new_argv = XMALLOC (char *, argc + 1); 6766313a12fdSmrg 6767313a12fdSmrg /* Put quoted arguments into the new argument vector. */ 6768313a12fdSmrg for (i = 0; i < argc; i++) 6769313a12fdSmrg { 6770313a12fdSmrg const char *string = argv[i]; 6771313a12fdSmrg 6772313a12fdSmrg if (string[0] == '\0') 6773313a12fdSmrg new_argv[i] = xstrdup ("\"\""); 6774313a12fdSmrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 6775313a12fdSmrg { 6776313a12fdSmrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 6777313a12fdSmrg size_t length; 6778313a12fdSmrg unsigned int backslashes; 6779313a12fdSmrg const char *s; 6780313a12fdSmrg char *quoted_string; 6781313a12fdSmrg char *p; 6782313a12fdSmrg 6783313a12fdSmrg length = 0; 6784313a12fdSmrg backslashes = 0; 6785313a12fdSmrg if (quote_around) 6786313a12fdSmrg length++; 6787313a12fdSmrg for (s = string; *s != '\0'; s++) 6788313a12fdSmrg { 6789313a12fdSmrg char c = *s; 6790313a12fdSmrg if (c == '"') 6791313a12fdSmrg length += backslashes + 1; 6792313a12fdSmrg length++; 6793313a12fdSmrg if (c == '\\') 6794313a12fdSmrg backslashes++; 6795313a12fdSmrg else 6796313a12fdSmrg backslashes = 0; 6797313a12fdSmrg } 6798313a12fdSmrg if (quote_around) 6799313a12fdSmrg length += backslashes + 1; 6800313a12fdSmrg 6801313a12fdSmrg quoted_string = XMALLOC (char, length + 1); 6802313a12fdSmrg 6803313a12fdSmrg p = quoted_string; 6804313a12fdSmrg backslashes = 0; 6805313a12fdSmrg if (quote_around) 6806313a12fdSmrg *p++ = '"'; 6807313a12fdSmrg for (s = string; *s != '\0'; s++) 6808313a12fdSmrg { 6809313a12fdSmrg char c = *s; 6810313a12fdSmrg if (c == '"') 6811313a12fdSmrg { 6812313a12fdSmrg unsigned int j; 6813313a12fdSmrg for (j = backslashes + 1; j > 0; j--) 6814313a12fdSmrg *p++ = '\\'; 6815313a12fdSmrg } 6816313a12fdSmrg *p++ = c; 6817313a12fdSmrg if (c == '\\') 6818313a12fdSmrg backslashes++; 6819313a12fdSmrg else 6820313a12fdSmrg backslashes = 0; 6821313a12fdSmrg } 6822313a12fdSmrg if (quote_around) 6823313a12fdSmrg { 6824313a12fdSmrg unsigned int j; 6825313a12fdSmrg for (j = backslashes; j > 0; j--) 6826313a12fdSmrg *p++ = '\\'; 6827313a12fdSmrg *p++ = '"'; 6828313a12fdSmrg } 6829313a12fdSmrg *p = '\0'; 6830313a12fdSmrg 6831313a12fdSmrg new_argv[i] = quoted_string; 6832313a12fdSmrg } 6833313a12fdSmrg else 6834313a12fdSmrg new_argv[i] = (char *) string; 6835313a12fdSmrg } 6836313a12fdSmrg new_argv[argc] = NULL; 6837313a12fdSmrg 6838313a12fdSmrg return new_argv; 6839313a12fdSmrg} 6840313a12fdSmrgEOF 6841313a12fdSmrg ;; 6842313a12fdSmrg esac 684327702724Smrg 6844313a12fdSmrg cat <<"EOF" 6845313a12fdSmrgvoid lt_dump_script (FILE* f) 6846313a12fdSmrg{ 6847313a12fdSmrgEOF 6848313a12fdSmrg func_emit_wrapper yes | 6849313a12fdSmrg $SED -n -e ' 6850313a12fdSmrgs/^\(.\{79\}\)\(..*\)/\1\ 6851313a12fdSmrg\2/ 6852313a12fdSmrgh 6853313a12fdSmrgs/\([\\"]\)/\\\1/g 6854313a12fdSmrgs/$/\\n/ 6855313a12fdSmrgs/\([^\n]*\).*/ fputs ("\1", f);/p 6856313a12fdSmrgg 6857313a12fdSmrgD' 6858313a12fdSmrg cat <<"EOF" 6859313a12fdSmrg} 6860e19dfac4SmrgEOF 6861e19dfac4Smrg} 6862e19dfac4Smrg# end: func_emit_cwrapperexe_src 686327702724Smrg 6864313a12fdSmrg# func_win32_import_lib_p ARG 6865313a12fdSmrg# True if ARG is an import lib, as indicated by $file_magic_cmd 6866313a12fdSmrgfunc_win32_import_lib_p () 6867313a12fdSmrg{ 68687cea3689Smrg $debug_cmd 68697cea3689Smrg 6870313a12fdSmrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 6871313a12fdSmrg *import*) : ;; 6872313a12fdSmrg *) false ;; 6873313a12fdSmrg esac 6874313a12fdSmrg} 6875313a12fdSmrg 68767cea3689Smrg# func_suncc_cstd_abi 68777cea3689Smrg# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! 68787cea3689Smrg# Several compiler flags select an ABI that is incompatible with the 68797cea3689Smrg# Cstd library. Avoid specifying it if any are in CXXFLAGS. 68807cea3689Smrgfunc_suncc_cstd_abi () 68817cea3689Smrg{ 68827cea3689Smrg $debug_cmd 68837cea3689Smrg 68847cea3689Smrg case " $compile_command " in 68857cea3689Smrg *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) 68867cea3689Smrg suncc_use_cstd_abi=no 68877cea3689Smrg ;; 68887cea3689Smrg *) 68897cea3689Smrg suncc_use_cstd_abi=yes 68907cea3689Smrg ;; 68917cea3689Smrg esac 68927cea3689Smrg} 68937cea3689Smrg 6894e19dfac4Smrg# func_mode_link arg... 6895e19dfac4Smrgfunc_mode_link () 6896e19dfac4Smrg{ 68977cea3689Smrg $debug_cmd 68987cea3689Smrg 6899e19dfac4Smrg case $host in 6900ae545d91Smrg *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-cegcc*) 6901e19dfac4Smrg # It is impossible to link a dll without this setting, and 6902e19dfac4Smrg # we shouldn't force the makefile maintainer to figure out 69037cea3689Smrg # what system we are compiling for in order to pass an extra 6904e19dfac4Smrg # flag for every libtool invocation. 6905e19dfac4Smrg # allow_undefined=no 690627702724Smrg 6907e19dfac4Smrg # FIXME: Unfortunately, there are problems with the above when trying 69087cea3689Smrg # to make a dll that has undefined symbols, in which case not 6909e19dfac4Smrg # even a static library is built. For now, we need to specify 6910e19dfac4Smrg # -no-undefined on the libtool link line when we can be certain 6911e19dfac4Smrg # that all symbols are satisfied, otherwise we get a static library. 6912e19dfac4Smrg allow_undefined=yes 6913e19dfac4Smrg ;; 6914e19dfac4Smrg *) 6915e19dfac4Smrg allow_undefined=yes 6916e19dfac4Smrg ;; 6917e19dfac4Smrg esac 6918e19dfac4Smrg libtool_args=$nonopt 6919e19dfac4Smrg base_compile="$nonopt $@" 6920e19dfac4Smrg compile_command=$nonopt 6921e19dfac4Smrg finalize_command=$nonopt 692227702724Smrg 6923e19dfac4Smrg compile_rpath= 6924ae545d91Smrg compile_rpath_tail= 6925e19dfac4Smrg finalize_rpath= 6926e19dfac4Smrg compile_shlibpath= 6927e19dfac4Smrg finalize_shlibpath= 6928e19dfac4Smrg convenience= 6929e19dfac4Smrg old_convenience= 6930e19dfac4Smrg deplibs= 6931e19dfac4Smrg old_deplibs= 6932e19dfac4Smrg compiler_flags= 6933e19dfac4Smrg linker_flags= 6934e19dfac4Smrg dllsearchpath= 6935e19dfac4Smrg lib_search_path=`pwd` 6936e19dfac4Smrg inst_prefix_dir= 6937e19dfac4Smrg new_inherited_linker_flags= 693827702724Smrg 6939e19dfac4Smrg avoid_version=no 6940313a12fdSmrg bindir= 6941e19dfac4Smrg dlfiles= 6942e19dfac4Smrg dlprefiles= 6943e19dfac4Smrg dlself=no 6944e19dfac4Smrg export_dynamic=no 6945e19dfac4Smrg export_symbols= 6946e19dfac4Smrg export_symbols_regex= 6947e19dfac4Smrg generated= 6948e19dfac4Smrg libobjs= 6949e19dfac4Smrg ltlibs= 6950e19dfac4Smrg module=no 6951e19dfac4Smrg no_install=no 6952e19dfac4Smrg objs= 69537cea3689Smrg os2dllname= 6954e19dfac4Smrg non_pic_objects= 6955e19dfac4Smrg precious_files_regex= 6956e19dfac4Smrg prefer_static_libs=no 69577cea3689Smrg preload=false 6958e19dfac4Smrg prev= 6959e19dfac4Smrg prevarg= 6960e19dfac4Smrg release= 6961e19dfac4Smrg rpath= 6962e19dfac4Smrg xrpath= 6963e19dfac4Smrg perm_rpath= 6964e19dfac4Smrg temp_rpath= 6965ae545d91Smrg temp_rpath_tail= 6966e19dfac4Smrg thread_safe=no 6967e19dfac4Smrg vinfo= 6968e19dfac4Smrg vinfo_number=no 6969e19dfac4Smrg weak_libs= 6970ae545d91Smrg rpath_arg= 69717cea3689Smrg single_module=$wl-single_module 6972e19dfac4Smrg func_infer_tag $base_compile 697327702724Smrg 6974e19dfac4Smrg # We need to know -static, to get the right output filenames. 6975e19dfac4Smrg for arg 6976e19dfac4Smrg do 6977e19dfac4Smrg case $arg in 6978e19dfac4Smrg -shared) 69797cea3689Smrg test yes != "$build_libtool_libs" \ 69807cea3689Smrg && func_fatal_configuration "cannot build a shared library" 6981e19dfac4Smrg build_old_libs=no 6982e19dfac4Smrg break 6983e19dfac4Smrg ;; 6984e19dfac4Smrg -all-static | -static | -static-libtool-libs) 6985e19dfac4Smrg case $arg in 6986e19dfac4Smrg -all-static) 69877cea3689Smrg if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then 6988e19dfac4Smrg func_warning "complete static linking is impossible in this configuration" 698927702724Smrg fi 6990e19dfac4Smrg if test -n "$link_static_flag"; then 6991e19dfac4Smrg dlopen_self=$dlopen_self_static 699227702724Smrg fi 6993e19dfac4Smrg prefer_static_libs=yes 699427702724Smrg ;; 6995e19dfac4Smrg -static) 6996e19dfac4Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 6997e19dfac4Smrg dlopen_self=$dlopen_self_static 6998e19dfac4Smrg fi 6999e19dfac4Smrg prefer_static_libs=built 7000e19dfac4Smrg ;; 7001e19dfac4Smrg -static-libtool-libs) 7002e19dfac4Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 7003e19dfac4Smrg dlopen_self=$dlopen_self_static 7004e19dfac4Smrg fi 7005e19dfac4Smrg prefer_static_libs=yes 700627702724Smrg ;; 700727702724Smrg esac 7008e19dfac4Smrg build_libtool_libs=no 7009e19dfac4Smrg build_old_libs=yes 7010e19dfac4Smrg break 7011e19dfac4Smrg ;; 7012e19dfac4Smrg esac 7013e19dfac4Smrg done 701427702724Smrg 7015e19dfac4Smrg # See if our shared archives depend on static archives. 7016e19dfac4Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 701727702724Smrg 7018e19dfac4Smrg # Go through the arguments, transforming them on the way. 7019e19dfac4Smrg while test "$#" -gt 0; do 70207cea3689Smrg arg=$1 7021e19dfac4Smrg shift 702295b7a5c8Smrg func_quote_arg pretty,unquoted "$arg" 702395b7a5c8Smrg qarg=$func_quote_arg_unquoted_result 702495b7a5c8Smrg func_append libtool_args " $func_quote_arg_result" 702527702724Smrg 7026e19dfac4Smrg # If the previous option needs an argument, assign it. 7027e19dfac4Smrg if test -n "$prev"; then 7028e19dfac4Smrg case $prev in 7029e19dfac4Smrg output) 7030e19dfac4Smrg func_append compile_command " @OUTPUT@" 7031e19dfac4Smrg func_append finalize_command " @OUTPUT@" 7032e19dfac4Smrg ;; 7033e19dfac4Smrg esac 703427702724Smrg 7035e19dfac4Smrg case $prev in 7036313a12fdSmrg bindir) 70377cea3689Smrg bindir=$arg 7038313a12fdSmrg prev= 7039313a12fdSmrg continue 7040313a12fdSmrg ;; 7041e19dfac4Smrg dlfiles|dlprefiles) 70427cea3689Smrg $preload || { 7043e19dfac4Smrg # Add the symbol object into the linking commands. 7044e19dfac4Smrg func_append compile_command " @SYMFILE@" 7045e19dfac4Smrg func_append finalize_command " @SYMFILE@" 70467cea3689Smrg preload=: 70477cea3689Smrg } 7048e19dfac4Smrg case $arg in 7049e19dfac4Smrg *.la | *.lo) ;; # We handle these cases below. 7050e19dfac4Smrg force) 70517cea3689Smrg if test no = "$dlself"; then 7052e19dfac4Smrg dlself=needless 7053e19dfac4Smrg export_dynamic=yes 7054e19dfac4Smrg fi 7055e19dfac4Smrg prev= 7056e19dfac4Smrg continue 7057e19dfac4Smrg ;; 7058e19dfac4Smrg self) 70597cea3689Smrg if test dlprefiles = "$prev"; then 7060e19dfac4Smrg dlself=yes 70617cea3689Smrg elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then 7062e19dfac4Smrg dlself=yes 7063e19dfac4Smrg else 7064e19dfac4Smrg dlself=needless 7065e19dfac4Smrg export_dynamic=yes 7066e19dfac4Smrg fi 7067e19dfac4Smrg prev= 7068e19dfac4Smrg continue 706927702724Smrg ;; 707027702724Smrg *) 70717cea3689Smrg if test dlfiles = "$prev"; then 7072313a12fdSmrg func_append dlfiles " $arg" 7073e19dfac4Smrg else 7074313a12fdSmrg func_append dlprefiles " $arg" 7075e19dfac4Smrg fi 7076e19dfac4Smrg prev= 7077e19dfac4Smrg continue 707827702724Smrg ;; 707927702724Smrg esac 7080e19dfac4Smrg ;; 7081e19dfac4Smrg expsyms) 70827cea3689Smrg export_symbols=$arg 7083e19dfac4Smrg test -f "$arg" \ 70847cea3689Smrg || func_fatal_error "symbol file '$arg' does not exist" 7085e19dfac4Smrg prev= 7086e19dfac4Smrg continue 7087e19dfac4Smrg ;; 7088e19dfac4Smrg expsyms_regex) 70897cea3689Smrg export_symbols_regex=$arg 7090e19dfac4Smrg prev= 7091e19dfac4Smrg continue 7092e19dfac4Smrg ;; 7093e19dfac4Smrg framework) 7094e19dfac4Smrg case $host in 7095e19dfac4Smrg *-*-darwin*) 7096e19dfac4Smrg case "$deplibs " in 7097e19dfac4Smrg *" $qarg.ltframework "*) ;; 7098313a12fdSmrg *) func_append deplibs " $qarg.ltframework" # this is fixed later 7099e19dfac4Smrg ;; 7100e19dfac4Smrg esac 7101e19dfac4Smrg ;; 7102e19dfac4Smrg esac 7103e19dfac4Smrg prev= 7104e19dfac4Smrg continue 7105e19dfac4Smrg ;; 7106e19dfac4Smrg inst_prefix) 71077cea3689Smrg inst_prefix_dir=$arg 71087cea3689Smrg prev= 71097cea3689Smrg continue 71107cea3689Smrg ;; 71117cea3689Smrg mllvm) 71127cea3689Smrg # Clang does not use LLVM to link, so we can simply discard any 71137cea3689Smrg # '-mllvm $arg' options when doing the link step. 7114e19dfac4Smrg prev= 7115e19dfac4Smrg continue 7116e19dfac4Smrg ;; 7117e19dfac4Smrg objectlist) 7118e19dfac4Smrg if test -f "$arg"; then 7119e19dfac4Smrg save_arg=$arg 7120e19dfac4Smrg moreargs= 7121e19dfac4Smrg for fil in `cat "$save_arg"` 7122e19dfac4Smrg do 7123313a12fdSmrg# func_append moreargs " $fil" 7124e19dfac4Smrg arg=$fil 7125e19dfac4Smrg # A libtool-controlled object. 712627702724Smrg 7127e19dfac4Smrg # Check to see that this really is a libtool object. 7128e19dfac4Smrg if func_lalib_unsafe_p "$arg"; then 7129e19dfac4Smrg pic_object= 7130e19dfac4Smrg non_pic_object= 713127702724Smrg 7132e19dfac4Smrg # Read the .lo file 7133e19dfac4Smrg func_source "$arg" 713427702724Smrg 7135e19dfac4Smrg if test -z "$pic_object" || 7136e19dfac4Smrg test -z "$non_pic_object" || 71377cea3689Smrg test none = "$pic_object" && 71387cea3689Smrg test none = "$non_pic_object"; then 71397cea3689Smrg func_fatal_error "cannot find name of object for '$arg'" 7140e19dfac4Smrg fi 714127702724Smrg 7142e19dfac4Smrg # Extract subdirectory from the argument. 7143e19dfac4Smrg func_dirname "$arg" "/" "" 71447cea3689Smrg xdir=$func_dirname_result 714527702724Smrg 71467cea3689Smrg if test none != "$pic_object"; then 7147e19dfac4Smrg # Prepend the subdirectory the object is found in. 71487cea3689Smrg pic_object=$xdir$pic_object 714927702724Smrg 71507cea3689Smrg if test dlfiles = "$prev"; then 71517cea3689Smrg if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 7152313a12fdSmrg func_append dlfiles " $pic_object" 7153e19dfac4Smrg prev= 7154e19dfac4Smrg continue 7155e19dfac4Smrg else 7156e19dfac4Smrg # If libtool objects are unsupported, then we need to preload. 7157e19dfac4Smrg prev=dlprefiles 7158e19dfac4Smrg fi 7159e19dfac4Smrg fi 716027702724Smrg 7161e19dfac4Smrg # CHECK ME: I think I busted this. -Ossama 71627cea3689Smrg if test dlprefiles = "$prev"; then 7163e19dfac4Smrg # Preload the old-style object. 7164313a12fdSmrg func_append dlprefiles " $pic_object" 7165e19dfac4Smrg prev= 7166e19dfac4Smrg fi 716727702724Smrg 7168e19dfac4Smrg # A PIC object. 7169e19dfac4Smrg func_append libobjs " $pic_object" 71707cea3689Smrg arg=$pic_object 7171e19dfac4Smrg fi 717227702724Smrg 7173e19dfac4Smrg # Non-PIC object. 71747cea3689Smrg if test none != "$non_pic_object"; then 7175e19dfac4Smrg # Prepend the subdirectory the object is found in. 71767cea3689Smrg non_pic_object=$xdir$non_pic_object 717727702724Smrg 7178e19dfac4Smrg # A standard non-PIC object 7179e19dfac4Smrg func_append non_pic_objects " $non_pic_object" 71807cea3689Smrg if test -z "$pic_object" || test none = "$pic_object"; then 71817cea3689Smrg arg=$non_pic_object 7182e19dfac4Smrg fi 7183e19dfac4Smrg else 7184e19dfac4Smrg # If the PIC object exists, use it instead. 7185e19dfac4Smrg # $xdir was prepended to $pic_object above. 71867cea3689Smrg non_pic_object=$pic_object 7187e19dfac4Smrg func_append non_pic_objects " $non_pic_object" 7188e19dfac4Smrg fi 7189e19dfac4Smrg else 7190e19dfac4Smrg # Only an error if not doing a dry-run. 7191e19dfac4Smrg if $opt_dry_run; then 7192e19dfac4Smrg # Extract subdirectory from the argument. 7193e19dfac4Smrg func_dirname "$arg" "/" "" 71947cea3689Smrg xdir=$func_dirname_result 7195e19dfac4Smrg 7196e19dfac4Smrg func_lo2o "$arg" 7197e19dfac4Smrg pic_object=$xdir$objdir/$func_lo2o_result 7198e19dfac4Smrg non_pic_object=$xdir$func_lo2o_result 7199e19dfac4Smrg func_append libobjs " $pic_object" 7200e19dfac4Smrg func_append non_pic_objects " $non_pic_object" 7201e19dfac4Smrg else 72027cea3689Smrg func_fatal_error "'$arg' is not a valid libtool object" 7203e19dfac4Smrg fi 7204e19dfac4Smrg fi 7205e19dfac4Smrg done 7206e19dfac4Smrg else 72077cea3689Smrg func_fatal_error "link input file '$arg' does not exist" 7208e19dfac4Smrg fi 7209e19dfac4Smrg arg=$save_arg 7210e19dfac4Smrg prev= 7211e19dfac4Smrg continue 7212e19dfac4Smrg ;; 72137cea3689Smrg os2dllname) 72147cea3689Smrg os2dllname=$arg 72157cea3689Smrg prev= 72167cea3689Smrg continue 72177cea3689Smrg ;; 7218e19dfac4Smrg precious_regex) 72197cea3689Smrg precious_files_regex=$arg 7220e19dfac4Smrg prev= 7221e19dfac4Smrg continue 7222e19dfac4Smrg ;; 7223e19dfac4Smrg release) 72247cea3689Smrg release=-$arg 7225e19dfac4Smrg prev= 7226e19dfac4Smrg continue 7227e19dfac4Smrg ;; 7228e19dfac4Smrg rpath | xrpath) 7229e19dfac4Smrg # We need an absolute path. 7230e19dfac4Smrg case $arg in 7231e19dfac4Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 7232e19dfac4Smrg *) 7233ae545d91Smrg func_fatal_error "argument to -rpath is not absolute: $arg" 7234e19dfac4Smrg ;; 7235e19dfac4Smrg esac 72367cea3689Smrg if test rpath = "$prev"; then 7237e19dfac4Smrg case "$rpath " in 7238e19dfac4Smrg *" $arg "*) ;; 7239313a12fdSmrg *) func_append rpath " $arg" ;; 7240e19dfac4Smrg esac 7241e19dfac4Smrg else 7242e19dfac4Smrg case "$xrpath " in 7243e19dfac4Smrg *" $arg "*) ;; 7244313a12fdSmrg *) func_append xrpath " $arg" ;; 7245e19dfac4Smrg esac 7246e19dfac4Smrg fi 7247e19dfac4Smrg prev= 7248e19dfac4Smrg continue 7249e19dfac4Smrg ;; 7250e19dfac4Smrg shrext) 72517cea3689Smrg shrext_cmds=$arg 7252e19dfac4Smrg prev= 7253e19dfac4Smrg continue 7254e19dfac4Smrg ;; 7255e19dfac4Smrg weak) 7256313a12fdSmrg func_append weak_libs " $arg" 7257e19dfac4Smrg prev= 7258e19dfac4Smrg continue 7259e19dfac4Smrg ;; 726095b7a5c8Smrg xassembler) 726195b7a5c8Smrg func_append compiler_flags " -Xassembler $qarg" 726295b7a5c8Smrg prev= 726395b7a5c8Smrg func_append compile_command " -Xassembler $qarg" 726495b7a5c8Smrg func_append finalize_command " -Xassembler $qarg" 726595b7a5c8Smrg continue 726695b7a5c8Smrg ;; 7267e19dfac4Smrg xcclinker) 7268313a12fdSmrg func_append linker_flags " $qarg" 7269313a12fdSmrg func_append compiler_flags " $qarg" 7270e19dfac4Smrg prev= 7271e19dfac4Smrg func_append compile_command " $qarg" 7272e19dfac4Smrg func_append finalize_command " $qarg" 7273e19dfac4Smrg continue 7274e19dfac4Smrg ;; 7275e19dfac4Smrg xcompiler) 7276313a12fdSmrg func_append compiler_flags " $qarg" 7277e19dfac4Smrg prev= 7278e19dfac4Smrg func_append compile_command " $qarg" 7279e19dfac4Smrg func_append finalize_command " $qarg" 7280e19dfac4Smrg continue 7281e19dfac4Smrg ;; 7282e19dfac4Smrg xlinker) 7283313a12fdSmrg func_append linker_flags " $qarg" 7284313a12fdSmrg func_append compiler_flags " $wl$qarg" 7285e19dfac4Smrg prev= 7286e19dfac4Smrg func_append compile_command " $wl$qarg" 7287e19dfac4Smrg func_append finalize_command " $wl$qarg" 7288e19dfac4Smrg continue 7289e19dfac4Smrg ;; 7290e19dfac4Smrg *) 7291e19dfac4Smrg eval "$prev=\"\$arg\"" 7292e19dfac4Smrg prev= 7293e19dfac4Smrg continue 7294e19dfac4Smrg ;; 729527702724Smrg esac 7296e19dfac4Smrg fi # test -n "$prev" 729727702724Smrg 72987cea3689Smrg prevarg=$arg 729927702724Smrg 7300e19dfac4Smrg case $arg in 7301e19dfac4Smrg -all-static) 7302e19dfac4Smrg if test -n "$link_static_flag"; then 7303e19dfac4Smrg # See comment for -static flag below, for more details. 7304e19dfac4Smrg func_append compile_command " $link_static_flag" 7305e19dfac4Smrg func_append finalize_command " $link_static_flag" 7306e19dfac4Smrg fi 7307e19dfac4Smrg continue 7308e19dfac4Smrg ;; 730927702724Smrg 7310e19dfac4Smrg -allow-undefined) 7311e19dfac4Smrg # FIXME: remove this flag sometime in the future. 73127cea3689Smrg func_fatal_error "'-allow-undefined' must not be used because it is the default" 7313e19dfac4Smrg ;; 731427702724Smrg 7315e19dfac4Smrg -avoid-version) 7316e19dfac4Smrg avoid_version=yes 7317e19dfac4Smrg continue 7318e19dfac4Smrg ;; 731927702724Smrg 7320313a12fdSmrg -bindir) 7321313a12fdSmrg prev=bindir 7322313a12fdSmrg continue 7323313a12fdSmrg ;; 7324313a12fdSmrg 7325e19dfac4Smrg -dlopen) 7326e19dfac4Smrg prev=dlfiles 7327e19dfac4Smrg continue 7328e19dfac4Smrg ;; 732927702724Smrg 7330e19dfac4Smrg -dlpreopen) 7331e19dfac4Smrg prev=dlprefiles 7332e19dfac4Smrg continue 7333e19dfac4Smrg ;; 733427702724Smrg 7335e19dfac4Smrg -export-dynamic) 7336e19dfac4Smrg export_dynamic=yes 7337e19dfac4Smrg continue 7338e19dfac4Smrg ;; 733927702724Smrg 7340e19dfac4Smrg -export-symbols | -export-symbols-regex) 7341e19dfac4Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 7342e19dfac4Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 7343e19dfac4Smrg fi 73447cea3689Smrg if test X-export-symbols = "X$arg"; then 7345e19dfac4Smrg prev=expsyms 7346e19dfac4Smrg else 7347e19dfac4Smrg prev=expsyms_regex 7348e19dfac4Smrg fi 7349e19dfac4Smrg continue 7350e19dfac4Smrg ;; 735127702724Smrg 7352e19dfac4Smrg -framework) 7353e19dfac4Smrg prev=framework 7354e19dfac4Smrg continue 7355e19dfac4Smrg ;; 735627702724Smrg 7357e19dfac4Smrg -inst-prefix-dir) 7358e19dfac4Smrg prev=inst_prefix 7359e19dfac4Smrg continue 7360e19dfac4Smrg ;; 736127702724Smrg 7362e19dfac4Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 7363e19dfac4Smrg # so, if we see these flags be careful not to treat them like -L 7364e19dfac4Smrg -L[A-Z][A-Z]*:*) 7365e19dfac4Smrg case $with_gcc/$host in 7366e19dfac4Smrg no/*-*-irix* | /*-*-irix*) 7367e19dfac4Smrg func_append compile_command " $arg" 7368e19dfac4Smrg func_append finalize_command " $arg" 7369e19dfac4Smrg ;; 7370e19dfac4Smrg esac 7371e19dfac4Smrg continue 7372e19dfac4Smrg ;; 737327702724Smrg 7374e19dfac4Smrg -L*) 7375313a12fdSmrg func_stripname "-L" '' "$arg" 7376313a12fdSmrg if test -z "$func_stripname_result"; then 7377e19dfac4Smrg if test "$#" -gt 0; then 73787cea3689Smrg func_fatal_error "require no space between '-L' and '$1'" 7379e19dfac4Smrg else 73807cea3689Smrg func_fatal_error "need path for '-L' option" 7381e19dfac4Smrg fi 7382e19dfac4Smrg fi 7383313a12fdSmrg func_resolve_sysroot "$func_stripname_result" 7384313a12fdSmrg dir=$func_resolve_sysroot_result 7385e19dfac4Smrg # We need an absolute path. 7386e19dfac4Smrg case $dir in 7387e19dfac4Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 7388e19dfac4Smrg *) 7389e19dfac4Smrg absdir=`cd "$dir" && pwd` 7390e19dfac4Smrg test -z "$absdir" && \ 73917cea3689Smrg func_fatal_error "cannot determine absolute directory name of '$dir'" 73927cea3689Smrg dir=$absdir 7393e19dfac4Smrg ;; 7394e19dfac4Smrg esac 7395e19dfac4Smrg case "$deplibs " in 7396313a12fdSmrg *" -L$dir "* | *" $arg "*) 7397313a12fdSmrg # Will only happen for absolute or sysroot arguments 7398313a12fdSmrg ;; 7399e19dfac4Smrg *) 7400313a12fdSmrg # Preserve sysroot, but never include relative directories 7401313a12fdSmrg case $dir in 7402313a12fdSmrg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 7403313a12fdSmrg *) func_append deplibs " -L$dir" ;; 7404313a12fdSmrg esac 7405313a12fdSmrg func_append lib_search_path " $dir" 7406e19dfac4Smrg ;; 7407e19dfac4Smrg esac 7408e19dfac4Smrg case $host in 7409ae545d91Smrg *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-cegcc*) 7410313a12fdSmrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 7411e19dfac4Smrg case :$dllsearchpath: in 7412e19dfac4Smrg *":$dir:"*) ;; 7413e19dfac4Smrg ::) dllsearchpath=$dir;; 7414313a12fdSmrg *) func_append dllsearchpath ":$dir";; 7415e19dfac4Smrg esac 7416e19dfac4Smrg case :$dllsearchpath: in 7417e19dfac4Smrg *":$testbindir:"*) ;; 7418e19dfac4Smrg ::) dllsearchpath=$testbindir;; 7419313a12fdSmrg *) func_append dllsearchpath ":$testbindir";; 7420e19dfac4Smrg esac 7421e19dfac4Smrg ;; 7422e19dfac4Smrg esac 7423e19dfac4Smrg continue 7424e19dfac4Smrg ;; 742527702724Smrg 7426e19dfac4Smrg -l*) 74277cea3689Smrg if test X-lc = "X$arg" || test X-lm = "X$arg"; then 7428e19dfac4Smrg case $host in 7429ae545d91Smrg *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 7430e19dfac4Smrg # These systems don't actually have a C or math library (as such) 7431e19dfac4Smrg continue 7432e19dfac4Smrg ;; 7433e19dfac4Smrg *-*-os2*) 7434e19dfac4Smrg # These systems don't actually have a C library (as such) 74357cea3689Smrg test X-lc = "X$arg" && continue 7436e19dfac4Smrg ;; 7437ae545d91Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) 7438e19dfac4Smrg # Do not include libc due to us having libc/libc_r. 74397cea3689Smrg test X-lc = "X$arg" && continue 7440e19dfac4Smrg ;; 7441e19dfac4Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7442e19dfac4Smrg # Rhapsody C and math libraries are in the System framework 7443313a12fdSmrg func_append deplibs " System.ltframework" 7444e19dfac4Smrg continue 7445e19dfac4Smrg ;; 7446e19dfac4Smrg *-*-sco3.2v5* | *-*-sco5v6*) 7447e19dfac4Smrg # Causes problems with __ctype 74487cea3689Smrg test X-lc = "X$arg" && continue 7449e19dfac4Smrg ;; 7450e19dfac4Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7451e19dfac4Smrg # Compiler inserts libc in the correct place for threads to work 74527cea3689Smrg test X-lc = "X$arg" && continue 7453e19dfac4Smrg ;; 7454e19dfac4Smrg esac 74557cea3689Smrg elif test X-lc_r = "X$arg"; then 7456e19dfac4Smrg case $host in 7457ae545d91Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) 7458e19dfac4Smrg # Do not include libc_r directly, use -pthread flag. 7459e19dfac4Smrg continue 7460e19dfac4Smrg ;; 7461e19dfac4Smrg esac 7462e19dfac4Smrg fi 7463313a12fdSmrg func_append deplibs " $arg" 7464e19dfac4Smrg continue 7465e19dfac4Smrg ;; 746627702724Smrg 74677cea3689Smrg -mllvm) 74687cea3689Smrg prev=mllvm 74697cea3689Smrg continue 74707cea3689Smrg ;; 74717cea3689Smrg 7472e19dfac4Smrg -module) 7473e19dfac4Smrg module=yes 7474e19dfac4Smrg continue 7475e19dfac4Smrg ;; 747627702724Smrg 7477e19dfac4Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 7478e19dfac4Smrg # classes, name mangling, and exception handling. 7479e19dfac4Smrg # Darwin uses the -arch flag to determine output architecture. 7480ae545d91Smrg # -q <option> for IBM XL C/C++ compiler. 7481ae545d91Smrg -model|-arch|-isysroot|--sysroot|-q) 7482313a12fdSmrg func_append compiler_flags " $arg" 7483e19dfac4Smrg func_append compile_command " $arg" 7484e19dfac4Smrg func_append finalize_command " $arg" 7485e19dfac4Smrg prev=xcompiler 7486e19dfac4Smrg continue 7487e19dfac4Smrg ;; 748895b7a5c8Smrg # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199. 748995b7a5c8Smrg -pthread) 749095b7a5c8Smrg case $host in 749195b7a5c8Smrg *solaris2*) ;; 749295b7a5c8Smrg *) 749395b7a5c8Smrg case "$new_inherited_linker_flags " in 749495b7a5c8Smrg *" $arg "*) ;; 749595b7a5c8Smrg * ) func_append new_inherited_linker_flags " $arg" ;; 749695b7a5c8Smrg esac 749795b7a5c8Smrg ;; 749895b7a5c8Smrg esac 749995b7a5c8Smrg continue 750095b7a5c8Smrg ;; 750195b7a5c8Smrg -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \ 7502ae545d91Smrg |-threads|-fopenmp|-fopenmp=*|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 7503313a12fdSmrg func_append compiler_flags " $arg" 7504e19dfac4Smrg func_append compile_command " $arg" 7505e19dfac4Smrg func_append finalize_command " $arg" 7506e19dfac4Smrg case "$new_inherited_linker_flags " in 7507e19dfac4Smrg *" $arg "*) ;; 7508313a12fdSmrg * ) func_append new_inherited_linker_flags " $arg" ;; 7509e19dfac4Smrg esac 7510e19dfac4Smrg continue 7511e19dfac4Smrg ;; 751227702724Smrg 7513e19dfac4Smrg -multi_module) 75147cea3689Smrg single_module=$wl-multi_module 7515e19dfac4Smrg continue 7516e19dfac4Smrg ;; 751727702724Smrg 7518e19dfac4Smrg -no-fast-install) 7519e19dfac4Smrg fast_install=no 7520e19dfac4Smrg continue 7521e19dfac4Smrg ;; 752227702724Smrg 7523e19dfac4Smrg -no-install) 7524e19dfac4Smrg case $host in 7525ae545d91Smrg *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 7526e19dfac4Smrg # The PATH hackery in wrapper scripts is required on Windows 7527e19dfac4Smrg # and Darwin in order for the loader to find any dlls it needs. 75287cea3689Smrg func_warning "'-no-install' is ignored for $host" 75297cea3689Smrg func_warning "assuming '-no-fast-install' instead" 7530e19dfac4Smrg fast_install=no 7531e19dfac4Smrg ;; 7532e19dfac4Smrg *) no_install=yes ;; 7533e19dfac4Smrg esac 7534e19dfac4Smrg continue 7535e19dfac4Smrg ;; 753627702724Smrg 7537e19dfac4Smrg -no-undefined) 7538e19dfac4Smrg allow_undefined=no 7539e19dfac4Smrg continue 7540e19dfac4Smrg ;; 754127702724Smrg 7542e19dfac4Smrg -objectlist) 7543e19dfac4Smrg prev=objectlist 7544e19dfac4Smrg continue 7545e19dfac4Smrg ;; 754627702724Smrg 75477cea3689Smrg -os2dllname) 75487cea3689Smrg prev=os2dllname 75497cea3689Smrg continue 75507cea3689Smrg ;; 75517cea3689Smrg 7552e19dfac4Smrg -o) prev=output ;; 755327702724Smrg 7554e19dfac4Smrg -precious-files-regex) 7555e19dfac4Smrg prev=precious_regex 7556e19dfac4Smrg continue 7557e19dfac4Smrg ;; 755827702724Smrg 7559e19dfac4Smrg -release) 7560e19dfac4Smrg prev=release 7561e19dfac4Smrg continue 7562e19dfac4Smrg ;; 756327702724Smrg 7564e19dfac4Smrg -rpath) 7565e19dfac4Smrg prev=rpath 7566e19dfac4Smrg continue 7567e19dfac4Smrg ;; 756827702724Smrg 7569e19dfac4Smrg -R) 7570e19dfac4Smrg prev=xrpath 7571e19dfac4Smrg continue 7572e19dfac4Smrg ;; 757327702724Smrg 7574e19dfac4Smrg -R*) 7575e19dfac4Smrg func_stripname '-R' '' "$arg" 7576e19dfac4Smrg dir=$func_stripname_result 7577e19dfac4Smrg # We need an absolute path. 7578e19dfac4Smrg case $dir in 7579e19dfac4Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 7580313a12fdSmrg =*) 7581313a12fdSmrg func_stripname '=' '' "$dir" 7582313a12fdSmrg dir=$lt_sysroot$func_stripname_result 7583313a12fdSmrg ;; 7584e19dfac4Smrg *) 7585ae545d91Smrg func_fatal_error "argument ($arg) to '-R' is not an absolute path: $dir" 7586e19dfac4Smrg ;; 7587e19dfac4Smrg esac 7588e19dfac4Smrg case "$xrpath " in 7589e19dfac4Smrg *" $dir "*) ;; 7590313a12fdSmrg *) func_append xrpath " $dir" ;; 7591e19dfac4Smrg esac 7592e19dfac4Smrg continue 7593e19dfac4Smrg ;; 759427702724Smrg 7595e19dfac4Smrg -shared) 7596e19dfac4Smrg # The effects of -shared are defined in a previous loop. 7597e19dfac4Smrg continue 7598e19dfac4Smrg ;; 759927702724Smrg 7600e19dfac4Smrg -shrext) 7601e19dfac4Smrg prev=shrext 7602e19dfac4Smrg continue 7603e19dfac4Smrg ;; 760427702724Smrg 7605e19dfac4Smrg -static | -static-libtool-libs) 7606e19dfac4Smrg # The effects of -static are defined in a previous loop. 7607e19dfac4Smrg # We used to do the same as -all-static on platforms that 7608e19dfac4Smrg # didn't have a PIC flag, but the assumption that the effects 7609e19dfac4Smrg # would be equivalent was wrong. It would break on at least 7610e19dfac4Smrg # Digital Unix and AIX. 7611e19dfac4Smrg continue 7612e19dfac4Smrg ;; 761327702724Smrg 7614e19dfac4Smrg -thread-safe) 7615e19dfac4Smrg thread_safe=yes 7616e19dfac4Smrg continue 7617e19dfac4Smrg ;; 761827702724Smrg 7619e19dfac4Smrg -version-info) 7620e19dfac4Smrg prev=vinfo 7621e19dfac4Smrg continue 7622e19dfac4Smrg ;; 762327702724Smrg 7624e19dfac4Smrg -version-number) 7625e19dfac4Smrg prev=vinfo 7626e19dfac4Smrg vinfo_number=yes 7627e19dfac4Smrg continue 7628e19dfac4Smrg ;; 762927702724Smrg 7630e19dfac4Smrg -weak) 7631e19dfac4Smrg prev=weak 7632e19dfac4Smrg continue 7633e19dfac4Smrg ;; 763427702724Smrg 7635e19dfac4Smrg -Wc,*) 7636e19dfac4Smrg func_stripname '-Wc,' '' "$arg" 7637e19dfac4Smrg args=$func_stripname_result 7638e19dfac4Smrg arg= 76397cea3689Smrg save_ifs=$IFS; IFS=, 7640e19dfac4Smrg for flag in $args; do 76417cea3689Smrg IFS=$save_ifs 764295b7a5c8Smrg func_quote_arg pretty "$flag" 764395b7a5c8Smrg func_append arg " $func_quote_arg_result" 764495b7a5c8Smrg func_append compiler_flags " $func_quote_arg_result" 7645e19dfac4Smrg done 76467cea3689Smrg IFS=$save_ifs 7647e19dfac4Smrg func_stripname ' ' '' "$arg" 7648e19dfac4Smrg arg=$func_stripname_result 7649e19dfac4Smrg ;; 765027702724Smrg 7651e19dfac4Smrg -Wl,*) 7652e19dfac4Smrg func_stripname '-Wl,' '' "$arg" 7653e19dfac4Smrg args=$func_stripname_result 7654e19dfac4Smrg arg= 76557cea3689Smrg save_ifs=$IFS; IFS=, 7656e19dfac4Smrg for flag in $args; do 76577cea3689Smrg IFS=$save_ifs 765895b7a5c8Smrg func_quote_arg pretty "$flag" 765995b7a5c8Smrg func_append arg " $wl$func_quote_arg_result" 766095b7a5c8Smrg func_append compiler_flags " $wl$func_quote_arg_result" 766195b7a5c8Smrg func_append linker_flags " $func_quote_arg_result" 7662e19dfac4Smrg done 76637cea3689Smrg IFS=$save_ifs 7664e19dfac4Smrg func_stripname ' ' '' "$arg" 7665e19dfac4Smrg arg=$func_stripname_result 7666e19dfac4Smrg ;; 766727702724Smrg 766895b7a5c8Smrg -Xassembler) 766995b7a5c8Smrg prev=xassembler 767095b7a5c8Smrg continue 767195b7a5c8Smrg ;; 767295b7a5c8Smrg 7673e19dfac4Smrg -Xcompiler) 7674e19dfac4Smrg prev=xcompiler 7675e19dfac4Smrg continue 7676e19dfac4Smrg ;; 767727702724Smrg 7678e19dfac4Smrg -Xlinker) 7679e19dfac4Smrg prev=xlinker 7680e19dfac4Smrg continue 7681e19dfac4Smrg ;; 768227702724Smrg 7683e19dfac4Smrg -XCClinker) 7684e19dfac4Smrg prev=xcclinker 7685e19dfac4Smrg continue 7686e19dfac4Smrg ;; 768727702724Smrg 7688e19dfac4Smrg # -msg_* for osf cc 7689e19dfac4Smrg -msg_*) 769095b7a5c8Smrg func_quote_arg pretty "$arg" 769195b7a5c8Smrg arg=$func_quote_arg_result 7692e19dfac4Smrg ;; 769327702724Smrg 7694313a12fdSmrg # Flags to be passed through unchanged, with rationale: 7695313a12fdSmrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 7696313a12fdSmrg # -r[0-9][0-9]* specify processor for the SGI compiler 7697313a12fdSmrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 7698313a12fdSmrg # +DA*, +DD* enable 64-bit mode for the HP compiler 7699313a12fdSmrg # -q* compiler args for the IBM compiler 7700313a12fdSmrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 7701313a12fdSmrg # -F/path path to uninstalled frameworks, gcc on darwin 7702313a12fdSmrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 77037cea3689Smrg # -fstack-protector* stack protector flags for GCC 7704313a12fdSmrg # @file GCC response files 7705313a12fdSmrg # -tp=* Portland pgcc target processor selection 7706313a12fdSmrg # --sysroot=* for sysroot support 77077cea3689Smrg # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 770895b7a5c8Smrg # -specs=* GCC specs files 77097cea3689Smrg # -stdlib=* select c++ std lib with clang 7710ae545d91Smrg # -fdiagnostics-color* simply affects output 7711ae545d91Smrg # -frecord-gcc-switches used to verify flags were respected 771295b7a5c8Smrg # -fsanitize=* Clang/GCC memory and address sanitizer 7713ae545d91Smrg # -fno-sanitize* Clang/GCC memory and address sanitizer 7714ae545d91Smrg # -shared-libsan Link with shared sanitizer runtimes (Clang) 7715ae545d91Smrg # -static-libsan Link with static sanitizer runtimes (Clang) 7716ae545d91Smrg # -no-canonical-prefixes Do not expand any symbolic links 771795b7a5c8Smrg # -fuse-ld=* Linker select flags for GCC 7718ae545d91Smrg # -static-* direct GCC to link specific libraries statically 7719ae545d91Smrg # -fcilkplus Cilk Plus language extension features for C/C++ 7720ae545d91Smrg # -rtlib=* select c runtime lib with clang 7721ae545d91Smrg # --unwindlib=* select unwinder library with clang 7722ae545d91Smrg # -f{file|debug|macro|profile}-prefix-map=* needed for lto linking 772395b7a5c8Smrg # -Wa,* Pass flags directly to the assembler 7724ae545d91Smrg # -Werror, -Werror=* Report (specified) warnings as errors 7725e19dfac4Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 7726313a12fdSmrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 7727ae545d91Smrg -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-no-canonical-prefixes| \ 7728ae545d91Smrg -stdlib=*|-rtlib=*|--unwindlib=*| \ 7729ae545d91Smrg -specs=*|-fsanitize=*|-fno-sanitize*|-shared-libsan|-static-libsan| \ 7730ae545d91Smrg -ffile-prefix-map=*|-fdebug-prefix-map=*|-fmacro-prefix-map=*|-fprofile-prefix-map=*| \ 7731ae545d91Smrg -fdiagnostics-color*|-frecord-gcc-switches| \ 7732ae545d91Smrg -fuse-ld=*|-static-*|-fcilkplus|-Wa,*|-Werror|-Werror=*) 773395b7a5c8Smrg func_quote_arg pretty "$arg" 773495b7a5c8Smrg arg=$func_quote_arg_result 7735e19dfac4Smrg func_append compile_command " $arg" 7736e19dfac4Smrg func_append finalize_command " $arg" 7737313a12fdSmrg func_append compiler_flags " $arg" 7738e19dfac4Smrg continue 7739e19dfac4Smrg ;; 774027702724Smrg 77417cea3689Smrg -Z*) 77427cea3689Smrg if test os2 = "`expr $host : '.*\(os2\)'`"; then 77437cea3689Smrg # OS/2 uses -Zxxx to specify OS/2-specific options 77447cea3689Smrg compiler_flags="$compiler_flags $arg" 77457cea3689Smrg func_append compile_command " $arg" 77467cea3689Smrg func_append finalize_command " $arg" 77477cea3689Smrg case $arg in 77487cea3689Smrg -Zlinker | -Zstack) 77497cea3689Smrg prev=xcompiler 77507cea3689Smrg ;; 77517cea3689Smrg esac 77527cea3689Smrg continue 77537cea3689Smrg else 77547cea3689Smrg # Otherwise treat like 'Some other compiler flag' below 775595b7a5c8Smrg func_quote_arg pretty "$arg" 775695b7a5c8Smrg arg=$func_quote_arg_result 77577cea3689Smrg fi 77587cea3689Smrg ;; 77597cea3689Smrg 7760e19dfac4Smrg # Some other compiler flag. 7761e19dfac4Smrg -* | +*) 776295b7a5c8Smrg func_quote_arg pretty "$arg" 776395b7a5c8Smrg arg=$func_quote_arg_result 7764e19dfac4Smrg ;; 776527702724Smrg 7766e19dfac4Smrg *.$objext) 7767e19dfac4Smrg # A standard object. 7768313a12fdSmrg func_append objs " $arg" 7769e19dfac4Smrg ;; 777027702724Smrg 7771e19dfac4Smrg *.lo) 7772e19dfac4Smrg # A libtool-controlled object. 777327702724Smrg 7774e19dfac4Smrg # Check to see that this really is a libtool object. 7775e19dfac4Smrg if func_lalib_unsafe_p "$arg"; then 7776e19dfac4Smrg pic_object= 7777e19dfac4Smrg non_pic_object= 7778e19dfac4Smrg 7779e19dfac4Smrg # Read the .lo file 7780e19dfac4Smrg func_source "$arg" 7781e19dfac4Smrg 7782e19dfac4Smrg if test -z "$pic_object" || 7783e19dfac4Smrg test -z "$non_pic_object" || 77847cea3689Smrg test none = "$pic_object" && 77857cea3689Smrg test none = "$non_pic_object"; then 77867cea3689Smrg func_fatal_error "cannot find name of object for '$arg'" 7787e19dfac4Smrg fi 7788e19dfac4Smrg 7789e19dfac4Smrg # Extract subdirectory from the argument. 7790e19dfac4Smrg func_dirname "$arg" "/" "" 77917cea3689Smrg xdir=$func_dirname_result 7792e19dfac4Smrg 77937cea3689Smrg test none = "$pic_object" || { 7794e19dfac4Smrg # Prepend the subdirectory the object is found in. 77957cea3689Smrg pic_object=$xdir$pic_object 7796e19dfac4Smrg 77977cea3689Smrg if test dlfiles = "$prev"; then 77987cea3689Smrg if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 7799313a12fdSmrg func_append dlfiles " $pic_object" 7800e19dfac4Smrg prev= 7801e19dfac4Smrg continue 7802e19dfac4Smrg else 7803e19dfac4Smrg # If libtool objects are unsupported, then we need to preload. 7804e19dfac4Smrg prev=dlprefiles 7805e19dfac4Smrg fi 7806e19dfac4Smrg fi 7807e19dfac4Smrg 7808e19dfac4Smrg # CHECK ME: I think I busted this. -Ossama 78097cea3689Smrg if test dlprefiles = "$prev"; then 7810e19dfac4Smrg # Preload the old-style object. 7811313a12fdSmrg func_append dlprefiles " $pic_object" 7812e19dfac4Smrg prev= 7813e19dfac4Smrg fi 7814e19dfac4Smrg 7815e19dfac4Smrg # A PIC object. 7816e19dfac4Smrg func_append libobjs " $pic_object" 78177cea3689Smrg arg=$pic_object 78187cea3689Smrg } 7819e19dfac4Smrg 7820e19dfac4Smrg # Non-PIC object. 78217cea3689Smrg if test none != "$non_pic_object"; then 7822e19dfac4Smrg # Prepend the subdirectory the object is found in. 78237cea3689Smrg non_pic_object=$xdir$non_pic_object 7824e19dfac4Smrg 7825e19dfac4Smrg # A standard non-PIC object 7826e19dfac4Smrg func_append non_pic_objects " $non_pic_object" 78277cea3689Smrg if test -z "$pic_object" || test none = "$pic_object"; then 78287cea3689Smrg arg=$non_pic_object 7829e19dfac4Smrg fi 7830e19dfac4Smrg else 7831e19dfac4Smrg # If the PIC object exists, use it instead. 7832e19dfac4Smrg # $xdir was prepended to $pic_object above. 78337cea3689Smrg non_pic_object=$pic_object 7834e19dfac4Smrg func_append non_pic_objects " $non_pic_object" 7835e19dfac4Smrg fi 7836e19dfac4Smrg else 7837e19dfac4Smrg # Only an error if not doing a dry-run. 7838e19dfac4Smrg if $opt_dry_run; then 7839e19dfac4Smrg # Extract subdirectory from the argument. 7840e19dfac4Smrg func_dirname "$arg" "/" "" 78417cea3689Smrg xdir=$func_dirname_result 7842e19dfac4Smrg 7843e19dfac4Smrg func_lo2o "$arg" 7844e19dfac4Smrg pic_object=$xdir$objdir/$func_lo2o_result 7845e19dfac4Smrg non_pic_object=$xdir$func_lo2o_result 7846e19dfac4Smrg func_append libobjs " $pic_object" 7847e19dfac4Smrg func_append non_pic_objects " $non_pic_object" 7848e19dfac4Smrg else 78497cea3689Smrg func_fatal_error "'$arg' is not a valid libtool object" 7850e19dfac4Smrg fi 7851e19dfac4Smrg fi 7852e19dfac4Smrg ;; 7853e19dfac4Smrg 7854e19dfac4Smrg *.$libext) 7855e19dfac4Smrg # An archive. 7856313a12fdSmrg func_append deplibs " $arg" 7857313a12fdSmrg func_append old_deplibs " $arg" 7858e19dfac4Smrg continue 7859e19dfac4Smrg ;; 7860e19dfac4Smrg 7861e19dfac4Smrg *.la) 7862e19dfac4Smrg # A libtool-controlled library. 7863e19dfac4Smrg 7864313a12fdSmrg func_resolve_sysroot "$arg" 78657cea3689Smrg if test dlfiles = "$prev"; then 7866e19dfac4Smrg # This library was specified with -dlopen. 7867313a12fdSmrg func_append dlfiles " $func_resolve_sysroot_result" 7868e19dfac4Smrg prev= 78697cea3689Smrg elif test dlprefiles = "$prev"; then 7870e19dfac4Smrg # The library was specified with -dlpreopen. 7871313a12fdSmrg func_append dlprefiles " $func_resolve_sysroot_result" 7872e19dfac4Smrg prev= 7873e19dfac4Smrg else 7874313a12fdSmrg func_append deplibs " $func_resolve_sysroot_result" 7875e19dfac4Smrg fi 7876e19dfac4Smrg continue 7877e19dfac4Smrg ;; 7878e19dfac4Smrg 7879e19dfac4Smrg # Some other compiler argument. 7880e19dfac4Smrg *) 7881e19dfac4Smrg # Unknown arguments in both finalize_command and compile_command need 7882e19dfac4Smrg # to be aesthetically quoted because they are evaled later. 788395b7a5c8Smrg func_quote_arg pretty "$arg" 788495b7a5c8Smrg arg=$func_quote_arg_result 7885e19dfac4Smrg ;; 7886e19dfac4Smrg esac # arg 7887e19dfac4Smrg 7888e19dfac4Smrg # Now actually substitute the argument into the commands. 7889e19dfac4Smrg if test -n "$arg"; then 7890ae545d91Smrg if test -n "$rpath_arg"; then 7891ae545d91Smrg func_append finalize_rpath " ${arg##*,}" 7892ae545d91Smrg unset rpath_arg 7893ae545d91Smrg else 7894ae545d91Smrg case $arg in 7895ae545d91Smrg -Wl,-rpath,*) 7896ae545d91Smrg func_append finalize_rpath " ${arg##*,}";; 7897ae545d91Smrg -Wl,-rpath) 7898ae545d91Smrg rpath_arg=1;; 7899ae545d91Smrg *) 7900ae545d91Smrg func_append compile_command " $arg" 7901ae545d91Smrg func_append finalize_command " $arg" 7902ae545d91Smrg esac 7903ae545d91Smrg fi 7904e19dfac4Smrg fi 7905e19dfac4Smrg done # argument parsing loop 7906e19dfac4Smrg 7907e19dfac4Smrg test -n "$prev" && \ 79087cea3689Smrg func_fatal_help "the '$prevarg' option requires an argument" 7909e19dfac4Smrg 79107cea3689Smrg if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then 7911e19dfac4Smrg eval arg=\"$export_dynamic_flag_spec\" 7912e19dfac4Smrg func_append compile_command " $arg" 7913e19dfac4Smrg func_append finalize_command " $arg" 7914e19dfac4Smrg fi 7915e19dfac4Smrg 7916e19dfac4Smrg oldlibs= 7917e19dfac4Smrg # calculate the name of the file, without its directory 7918e19dfac4Smrg func_basename "$output" 79197cea3689Smrg outputname=$func_basename_result 79207cea3689Smrg libobjs_save=$libobjs 7921e19dfac4Smrg 7922e19dfac4Smrg if test -n "$shlibpath_var"; then 7923e19dfac4Smrg # get the directories listed in $shlibpath_var 79247cea3689Smrg eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` 792527702724Smrg else 7926e19dfac4Smrg shlib_search_path= 792727702724Smrg fi 7928e19dfac4Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 7929e19dfac4Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 793027702724Smrg 79317cea3689Smrg # Definition is injected by LT_CONFIG during libtool generation. 79327cea3689Smrg func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" 79337cea3689Smrg 7934e19dfac4Smrg func_dirname "$output" "/" "" 79357cea3689Smrg output_objdir=$func_dirname_result$objdir 7936313a12fdSmrg func_to_tool_file "$output_objdir/" 7937313a12fdSmrg tool_output_objdir=$func_to_tool_file_result 7938e19dfac4Smrg # Create the object directory. 7939e19dfac4Smrg func_mkdir_p "$output_objdir" 794027702724Smrg 7941e19dfac4Smrg # Determine the type of output 7942e19dfac4Smrg case $output in 7943e19dfac4Smrg "") 7944e19dfac4Smrg func_fatal_help "you must specify an output file" 7945e19dfac4Smrg ;; 7946e19dfac4Smrg *.$libext) linkmode=oldlib ;; 7947e19dfac4Smrg *.lo | *.$objext) linkmode=obj ;; 7948e19dfac4Smrg *.la) linkmode=lib ;; 7949e19dfac4Smrg *) linkmode=prog ;; # Anything else should be a program. 7950e19dfac4Smrg esac 7951e19dfac4Smrg 7952e19dfac4Smrg specialdeplibs= 7953e19dfac4Smrg 7954e19dfac4Smrg libs= 7955e19dfac4Smrg # Find all interdependent deplibs by searching for libraries 7956e19dfac4Smrg # that are linked more than once (e.g. -la -lb -la) 7957e19dfac4Smrg for deplib in $deplibs; do 79587cea3689Smrg if $opt_preserve_dup_deps; then 7959e19dfac4Smrg case "$libs " in 7960313a12fdSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 7961e19dfac4Smrg esac 7962e19dfac4Smrg fi 7963313a12fdSmrg func_append libs " $deplib" 7964e19dfac4Smrg done 7965e19dfac4Smrg 79667cea3689Smrg if test lib = "$linkmode"; then 7967e19dfac4Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 7968e19dfac4Smrg 7969e19dfac4Smrg # Compute libraries that are listed more than once in $predeps 7970e19dfac4Smrg # $postdeps and mark them as special (i.e., whose duplicates are 7971e19dfac4Smrg # not to be eliminated). 7972e19dfac4Smrg pre_post_deps= 7973e19dfac4Smrg if $opt_duplicate_compiler_generated_deps; then 7974e19dfac4Smrg for pre_post_dep in $predeps $postdeps; do 7975e19dfac4Smrg case "$pre_post_deps " in 7976313a12fdSmrg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 7977e19dfac4Smrg esac 7978313a12fdSmrg func_append pre_post_deps " $pre_post_dep" 7979e19dfac4Smrg done 7980e19dfac4Smrg fi 7981e19dfac4Smrg pre_post_deps= 7982e19dfac4Smrg fi 7983e19dfac4Smrg 7984e19dfac4Smrg deplibs= 7985e19dfac4Smrg newdependency_libs= 7986e19dfac4Smrg newlib_search_path= 7987e19dfac4Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 7988e19dfac4Smrg notinst_deplibs= # not-installed libtool libraries 7989e19dfac4Smrg notinst_path= # paths that contain not-installed libtool libraries 7990e19dfac4Smrg 7991e19dfac4Smrg case $linkmode in 7992e19dfac4Smrg lib) 7993e19dfac4Smrg passes="conv dlpreopen link" 7994e19dfac4Smrg for file in $dlfiles $dlprefiles; do 7995e19dfac4Smrg case $file in 7996e19dfac4Smrg *.la) ;; 7997e19dfac4Smrg *) 79987cea3689Smrg func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" 7999e19dfac4Smrg ;; 8000e19dfac4Smrg esac 8001e19dfac4Smrg done 8002e19dfac4Smrg ;; 8003e19dfac4Smrg prog) 8004e19dfac4Smrg compile_deplibs= 8005e19dfac4Smrg finalize_deplibs= 80067cea3689Smrg alldeplibs=false 8007e19dfac4Smrg newdlfiles= 8008e19dfac4Smrg newdlprefiles= 8009e19dfac4Smrg passes="conv scan dlopen dlpreopen link" 8010e19dfac4Smrg ;; 8011e19dfac4Smrg *) passes="conv" 8012e19dfac4Smrg ;; 8013e19dfac4Smrg esac 8014e19dfac4Smrg 8015e19dfac4Smrg for pass in $passes; do 8016e19dfac4Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 8017e19dfac4Smrg # so that -L comes before libs that need it for instance... 80187cea3689Smrg if test lib,link = "$linkmode,$pass"; then 8019e19dfac4Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 8020e19dfac4Smrg ## order, and fix it there properly 8021e19dfac4Smrg tmp_deplibs= 8022e19dfac4Smrg for deplib in $deplibs; do 8023e19dfac4Smrg tmp_deplibs="$deplib $tmp_deplibs" 8024e19dfac4Smrg done 80257cea3689Smrg deplibs=$tmp_deplibs 8026e19dfac4Smrg fi 8027e19dfac4Smrg 80287cea3689Smrg if test lib,link = "$linkmode,$pass" || 80297cea3689Smrg test prog,scan = "$linkmode,$pass"; then 80307cea3689Smrg libs=$deplibs 8031e19dfac4Smrg deplibs= 8032e19dfac4Smrg fi 80337cea3689Smrg if test prog = "$linkmode"; then 8034e19dfac4Smrg case $pass in 80357cea3689Smrg dlopen) libs=$dlfiles ;; 80367cea3689Smrg dlpreopen) libs=$dlprefiles ;; 8037313a12fdSmrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 8038e19dfac4Smrg esac 8039e19dfac4Smrg fi 80407cea3689Smrg if test lib,dlpreopen = "$linkmode,$pass"; then 8041e19dfac4Smrg # Collect and forward deplibs of preopened libtool libs 8042e19dfac4Smrg for lib in $dlprefiles; do 8043e19dfac4Smrg # Ignore non-libtool-libs 8044e19dfac4Smrg dependency_libs= 8045313a12fdSmrg func_resolve_sysroot "$lib" 8046e19dfac4Smrg case $lib in 8047313a12fdSmrg *.la) func_source "$func_resolve_sysroot_result" ;; 8048e19dfac4Smrg esac 8049e19dfac4Smrg 8050e19dfac4Smrg # Collect preopened libtool deplibs, except any this library 8051e19dfac4Smrg # has declared as weak libs 8052e19dfac4Smrg for deplib in $dependency_libs; do 8053313a12fdSmrg func_basename "$deplib" 8054313a12fdSmrg deplib_base=$func_basename_result 8055e19dfac4Smrg case " $weak_libs " in 8056e19dfac4Smrg *" $deplib_base "*) ;; 8057313a12fdSmrg *) func_append deplibs " $deplib" ;; 8058e19dfac4Smrg esac 8059e19dfac4Smrg done 8060e19dfac4Smrg done 80617cea3689Smrg libs=$dlprefiles 8062e19dfac4Smrg fi 80637cea3689Smrg if test dlopen = "$pass"; then 8064e19dfac4Smrg # Collect dlpreopened libraries 80657cea3689Smrg save_deplibs=$deplibs 8066e19dfac4Smrg deplibs= 8067e19dfac4Smrg fi 8068e19dfac4Smrg 8069e19dfac4Smrg for deplib in $libs; do 8070e19dfac4Smrg lib= 80717cea3689Smrg found=false 8072e19dfac4Smrg case $deplib in 8073313a12fdSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 8074ae545d91Smrg |-threads|-fopenmp|-fopenmp=*|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 80757cea3689Smrg if test prog,link = "$linkmode,$pass"; then 8076e19dfac4Smrg compile_deplibs="$deplib $compile_deplibs" 8077e19dfac4Smrg finalize_deplibs="$deplib $finalize_deplibs" 8078e19dfac4Smrg else 8079313a12fdSmrg func_append compiler_flags " $deplib" 80807cea3689Smrg if test lib = "$linkmode"; then 8081e19dfac4Smrg case "$new_inherited_linker_flags " in 8082e19dfac4Smrg *" $deplib "*) ;; 8083313a12fdSmrg * ) func_append new_inherited_linker_flags " $deplib" ;; 8084e19dfac4Smrg esac 8085e19dfac4Smrg fi 8086e19dfac4Smrg fi 8087e19dfac4Smrg continue 8088e19dfac4Smrg ;; 8089e19dfac4Smrg -l*) 80907cea3689Smrg if test lib != "$linkmode" && test prog != "$linkmode"; then 80917cea3689Smrg func_warning "'-l' is ignored for archives/objects" 8092e19dfac4Smrg continue 8093e19dfac4Smrg fi 8094e19dfac4Smrg func_stripname '-l' '' "$deplib" 8095e19dfac4Smrg name=$func_stripname_result 80967cea3689Smrg if test lib = "$linkmode"; then 8097e19dfac4Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 8098e19dfac4Smrg else 8099e19dfac4Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 8100e19dfac4Smrg fi 8101e19dfac4Smrg for searchdir in $searchdirs; do 8102e19dfac4Smrg for search_ext in .la $std_shrext .so .a; do 8103e19dfac4Smrg # Search the libtool library 81047cea3689Smrg lib=$searchdir/lib$name$search_ext 8105e19dfac4Smrg if test -f "$lib"; then 81067cea3689Smrg if test .la = "$search_ext"; then 81077cea3689Smrg found=: 8108e19dfac4Smrg else 81097cea3689Smrg found=false 8110e19dfac4Smrg fi 8111e19dfac4Smrg break 2 8112e19dfac4Smrg fi 8113e19dfac4Smrg done 8114e19dfac4Smrg done 81157cea3689Smrg if $found; then 81167cea3689Smrg # deplib is a libtool library 8117e19dfac4Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 8118e19dfac4Smrg # We need to do some special things here, and not later. 81197cea3689Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 8120e19dfac4Smrg case " $predeps $postdeps " in 8121e19dfac4Smrg *" $deplib "*) 8122e19dfac4Smrg if func_lalib_p "$lib"; then 8123e19dfac4Smrg library_names= 8124e19dfac4Smrg old_library= 8125e19dfac4Smrg func_source "$lib" 8126e19dfac4Smrg for l in $old_library $library_names; do 81277cea3689Smrg ll=$l 8128e19dfac4Smrg done 81297cea3689Smrg if test "X$ll" = "X$old_library"; then # only static version available 81307cea3689Smrg found=false 8131e19dfac4Smrg func_dirname "$lib" "" "." 81327cea3689Smrg ladir=$func_dirname_result 8133e19dfac4Smrg lib=$ladir/$old_library 81347cea3689Smrg if test prog,link = "$linkmode,$pass"; then 8135e19dfac4Smrg compile_deplibs="$deplib $compile_deplibs" 8136e19dfac4Smrg finalize_deplibs="$deplib $finalize_deplibs" 8137e19dfac4Smrg else 8138e19dfac4Smrg deplibs="$deplib $deplibs" 81397cea3689Smrg test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 8140e19dfac4Smrg fi 8141e19dfac4Smrg continue 8142e19dfac4Smrg fi 8143e19dfac4Smrg fi 8144e19dfac4Smrg ;; 8145e19dfac4Smrg *) ;; 8146e19dfac4Smrg esac 8147e19dfac4Smrg fi 81487cea3689Smrg else 81497cea3689Smrg # deplib doesn't seem to be a libtool library 81507cea3689Smrg if test prog,link = "$linkmode,$pass"; then 81517cea3689Smrg compile_deplibs="$deplib $compile_deplibs" 81527cea3689Smrg finalize_deplibs="$deplib $finalize_deplibs" 81537cea3689Smrg else 81547cea3689Smrg deplibs="$deplib $deplibs" 81557cea3689Smrg test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 81567cea3689Smrg fi 81577cea3689Smrg continue 8158e19dfac4Smrg fi 8159e19dfac4Smrg ;; # -l 8160e19dfac4Smrg *.ltframework) 81617cea3689Smrg if test prog,link = "$linkmode,$pass"; then 8162e19dfac4Smrg compile_deplibs="$deplib $compile_deplibs" 8163e19dfac4Smrg finalize_deplibs="$deplib $finalize_deplibs" 8164e19dfac4Smrg else 8165e19dfac4Smrg deplibs="$deplib $deplibs" 81667cea3689Smrg if test lib = "$linkmode"; then 8167e19dfac4Smrg case "$new_inherited_linker_flags " in 8168e19dfac4Smrg *" $deplib "*) ;; 8169313a12fdSmrg * ) func_append new_inherited_linker_flags " $deplib" ;; 8170e19dfac4Smrg esac 8171e19dfac4Smrg fi 8172e19dfac4Smrg fi 8173e19dfac4Smrg continue 8174e19dfac4Smrg ;; 8175e19dfac4Smrg -L*) 8176e19dfac4Smrg case $linkmode in 8177e19dfac4Smrg lib) 8178e19dfac4Smrg deplibs="$deplib $deplibs" 81797cea3689Smrg test conv = "$pass" && continue 8180e19dfac4Smrg newdependency_libs="$deplib $newdependency_libs" 8181e19dfac4Smrg func_stripname '-L' '' "$deplib" 8182313a12fdSmrg func_resolve_sysroot "$func_stripname_result" 8183313a12fdSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 8184e19dfac4Smrg ;; 8185e19dfac4Smrg prog) 81867cea3689Smrg if test conv = "$pass"; then 8187e19dfac4Smrg deplibs="$deplib $deplibs" 8188e19dfac4Smrg continue 8189e19dfac4Smrg fi 81907cea3689Smrg if test scan = "$pass"; then 8191e19dfac4Smrg deplibs="$deplib $deplibs" 8192e19dfac4Smrg else 8193e19dfac4Smrg compile_deplibs="$deplib $compile_deplibs" 8194e19dfac4Smrg finalize_deplibs="$deplib $finalize_deplibs" 8195e19dfac4Smrg fi 8196e19dfac4Smrg func_stripname '-L' '' "$deplib" 8197313a12fdSmrg func_resolve_sysroot "$func_stripname_result" 8198313a12fdSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 8199e19dfac4Smrg ;; 8200e19dfac4Smrg *) 82017cea3689Smrg func_warning "'-L' is ignored for archives/objects" 8202e19dfac4Smrg ;; 8203e19dfac4Smrg esac # linkmode 8204e19dfac4Smrg continue 8205e19dfac4Smrg ;; # -L 8206e19dfac4Smrg -R*) 82077cea3689Smrg if test link = "$pass"; then 8208e19dfac4Smrg func_stripname '-R' '' "$deplib" 8209313a12fdSmrg func_resolve_sysroot "$func_stripname_result" 8210313a12fdSmrg dir=$func_resolve_sysroot_result 8211e19dfac4Smrg # Make sure the xrpath contains only unique directories. 8212e19dfac4Smrg case "$xrpath " in 8213e19dfac4Smrg *" $dir "*) ;; 8214313a12fdSmrg *) func_append xrpath " $dir" ;; 8215e19dfac4Smrg esac 8216e19dfac4Smrg fi 8217e19dfac4Smrg deplibs="$deplib $deplibs" 8218e19dfac4Smrg continue 8219e19dfac4Smrg ;; 8220313a12fdSmrg *.la) 8221313a12fdSmrg func_resolve_sysroot "$deplib" 8222313a12fdSmrg lib=$func_resolve_sysroot_result 8223313a12fdSmrg ;; 8224e19dfac4Smrg *.$libext) 82257cea3689Smrg if test conv = "$pass"; then 8226e19dfac4Smrg deplibs="$deplib $deplibs" 8227e19dfac4Smrg continue 8228e19dfac4Smrg fi 8229e19dfac4Smrg case $linkmode in 8230e19dfac4Smrg lib) 8231e19dfac4Smrg # Linking convenience modules into shared libraries is allowed, 8232e19dfac4Smrg # but linking other static libraries is non-portable. 8233e19dfac4Smrg case " $dlpreconveniencelibs " in 8234e19dfac4Smrg *" $deplib "*) ;; 8235e19dfac4Smrg *) 82367cea3689Smrg valid_a_lib=false 8237e19dfac4Smrg case $deplibs_check_method in 8238e19dfac4Smrg match_pattern*) 8239e19dfac4Smrg set dummy $deplibs_check_method; shift 8240e19dfac4Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 8241313a12fdSmrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 8242e19dfac4Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 82437cea3689Smrg valid_a_lib=: 8244e19dfac4Smrg fi 8245e19dfac4Smrg ;; 8246e19dfac4Smrg pass_all) 82477cea3689Smrg valid_a_lib=: 8248e19dfac4Smrg ;; 8249e19dfac4Smrg esac 82507cea3689Smrg if $valid_a_lib; then 8251ae545d91Smrg func_warning "Linking the shared library $output against the static library $deplib is not portable!" 82527cea3689Smrg deplibs="$deplib $deplibs" 82537cea3689Smrg else 8254ae545d91Smrg func_warning "Trying to link with static lib archive $deplib." 8255ae545d91Smrg func_warning "I have the capability to make that library automatically link in when" 8256ae545d91Smrg func_warning "you link to this library. But I can only do this if you have a" 8257ae545d91Smrg func_warning "shared version of the library, which you do not appear to have" 8258ae545d91Smrg func_warning "because the file extensions .$libext of this argument makes me believe" 8259ae545d91Smrg func_warning "that it is just a static archive that I should not use here." 8260e19dfac4Smrg fi 8261e19dfac4Smrg ;; 8262e19dfac4Smrg esac 8263e19dfac4Smrg continue 8264e19dfac4Smrg ;; 8265e19dfac4Smrg prog) 82667cea3689Smrg if test link != "$pass"; then 8267e19dfac4Smrg deplibs="$deplib $deplibs" 8268e19dfac4Smrg else 8269e19dfac4Smrg compile_deplibs="$deplib $compile_deplibs" 8270e19dfac4Smrg finalize_deplibs="$deplib $finalize_deplibs" 8271e19dfac4Smrg fi 8272e19dfac4Smrg continue 8273e19dfac4Smrg ;; 8274e19dfac4Smrg esac # linkmode 8275e19dfac4Smrg ;; # *.$libext 8276e19dfac4Smrg *.lo | *.$objext) 82777cea3689Smrg if test conv = "$pass"; then 8278e19dfac4Smrg deplibs="$deplib $deplibs" 82797cea3689Smrg elif test prog = "$linkmode"; then 82807cea3689Smrg if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then 8281e19dfac4Smrg # If there is no dlopen support or we're linking statically, 8282e19dfac4Smrg # we need to preload. 8283313a12fdSmrg func_append newdlprefiles " $deplib" 8284e19dfac4Smrg compile_deplibs="$deplib $compile_deplibs" 8285e19dfac4Smrg finalize_deplibs="$deplib $finalize_deplibs" 8286e19dfac4Smrg else 8287313a12fdSmrg func_append newdlfiles " $deplib" 8288e19dfac4Smrg fi 8289e19dfac4Smrg fi 8290e19dfac4Smrg continue 8291e19dfac4Smrg ;; 8292e19dfac4Smrg %DEPLIBS%) 82937cea3689Smrg alldeplibs=: 8294e19dfac4Smrg continue 8295e19dfac4Smrg ;; 8296e19dfac4Smrg esac # case $deplib 8297e19dfac4Smrg 82987cea3689Smrg $found || test -f "$lib" \ 82997cea3689Smrg || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" 8300e19dfac4Smrg 8301e19dfac4Smrg # Check to see that this really is a libtool archive. 8302e19dfac4Smrg func_lalib_unsafe_p "$lib" \ 83037cea3689Smrg || func_fatal_error "'$lib' is not a valid libtool archive" 8304e19dfac4Smrg 8305e19dfac4Smrg func_dirname "$lib" "" "." 83067cea3689Smrg ladir=$func_dirname_result 8307e19dfac4Smrg 8308e19dfac4Smrg dlname= 8309e19dfac4Smrg dlopen= 8310e19dfac4Smrg dlpreopen= 8311e19dfac4Smrg libdir= 8312e19dfac4Smrg library_names= 8313e19dfac4Smrg old_library= 8314e19dfac4Smrg inherited_linker_flags= 8315e19dfac4Smrg # If the library was installed with an old release of libtool, 8316e19dfac4Smrg # it will not redefine variables installed, or shouldnotlink 8317e19dfac4Smrg installed=yes 8318e19dfac4Smrg shouldnotlink=no 8319e19dfac4Smrg avoidtemprpath= 8320e19dfac4Smrg 8321e19dfac4Smrg 8322e19dfac4Smrg # Read the .la file 8323e19dfac4Smrg func_source "$lib" 8324e19dfac4Smrg 8325e19dfac4Smrg # Convert "-framework foo" to "foo.ltframework" 8326e19dfac4Smrg if test -n "$inherited_linker_flags"; then 8327313a12fdSmrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 8328e19dfac4Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 8329e19dfac4Smrg case " $new_inherited_linker_flags " in 8330e19dfac4Smrg *" $tmp_inherited_linker_flag "*) ;; 8331313a12fdSmrg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 8332e19dfac4Smrg esac 8333e19dfac4Smrg done 8334e19dfac4Smrg fi 8335313a12fdSmrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 83367cea3689Smrg if test lib,link = "$linkmode,$pass" || 83377cea3689Smrg test prog,scan = "$linkmode,$pass" || 83387cea3689Smrg { test prog != "$linkmode" && test lib != "$linkmode"; }; then 8339313a12fdSmrg test -n "$dlopen" && func_append dlfiles " $dlopen" 8340313a12fdSmrg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 8341e19dfac4Smrg fi 8342e19dfac4Smrg 83437cea3689Smrg if test conv = "$pass"; then 8344e19dfac4Smrg # Only check for convenience libraries 8345e19dfac4Smrg deplibs="$lib $deplibs" 8346e19dfac4Smrg if test -z "$libdir"; then 8347e19dfac4Smrg if test -z "$old_library"; then 83487cea3689Smrg func_fatal_error "cannot find name of link library for '$lib'" 8349e19dfac4Smrg fi 8350e19dfac4Smrg # It is a libtool convenience library, so add in its objects. 8351313a12fdSmrg func_append convenience " $ladir/$objdir/$old_library" 8352313a12fdSmrg func_append old_convenience " $ladir/$objdir/$old_library" 83537cea3689Smrg elif test prog != "$linkmode" && test lib != "$linkmode"; then 83547cea3689Smrg func_fatal_error "'$lib' is not a convenience library" 8355e19dfac4Smrg fi 8356313a12fdSmrg tmp_libs= 8357313a12fdSmrg for deplib in $dependency_libs; do 8358313a12fdSmrg deplibs="$deplib $deplibs" 83597cea3689Smrg if $opt_preserve_dup_deps; then 8360313a12fdSmrg case "$tmp_libs " in 8361313a12fdSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 8362313a12fdSmrg esac 8363313a12fdSmrg fi 8364313a12fdSmrg func_append tmp_libs " $deplib" 8365313a12fdSmrg done 8366e19dfac4Smrg continue 8367e19dfac4Smrg fi # $pass = conv 8368e19dfac4Smrg 8369e19dfac4Smrg 8370e19dfac4Smrg # Get the name of the library we link against. 8371e19dfac4Smrg linklib= 8372313a12fdSmrg if test -n "$old_library" && 83737cea3689Smrg { test yes = "$prefer_static_libs" || 83747cea3689Smrg test built,no = "$prefer_static_libs,$installed"; }; then 8375313a12fdSmrg linklib=$old_library 8376313a12fdSmrg else 8377313a12fdSmrg for l in $old_library $library_names; do 83787cea3689Smrg linklib=$l 8379313a12fdSmrg done 8380313a12fdSmrg fi 8381e19dfac4Smrg if test -z "$linklib"; then 83827cea3689Smrg func_fatal_error "cannot find name of link library for '$lib'" 8383e19dfac4Smrg fi 8384e19dfac4Smrg 8385e19dfac4Smrg # This library was specified with -dlopen. 83867cea3689Smrg if test dlopen = "$pass"; then 83877cea3689Smrg test -z "$libdir" \ 83887cea3689Smrg && func_fatal_error "cannot -dlopen a convenience library: '$lib'" 8389e19dfac4Smrg if test -z "$dlname" || 83907cea3689Smrg test yes != "$dlopen_support" || 83917cea3689Smrg test no = "$build_libtool_libs" 83927cea3689Smrg then 8393e19dfac4Smrg # If there is no dlname, no dlopen support or we're linking 8394e19dfac4Smrg # statically, we need to preload. We also need to preload any 8395e19dfac4Smrg # dependent libraries so libltdl's deplib preloader doesn't 8396e19dfac4Smrg # bomb out in the load deplibs phase. 8397313a12fdSmrg func_append dlprefiles " $lib $dependency_libs" 8398e19dfac4Smrg else 8399313a12fdSmrg func_append newdlfiles " $lib" 8400e19dfac4Smrg fi 8401e19dfac4Smrg continue 8402e19dfac4Smrg fi # $pass = dlopen 8403e19dfac4Smrg 8404e19dfac4Smrg # We need an absolute path. 8405e19dfac4Smrg case $ladir in 84067cea3689Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; 8407e19dfac4Smrg *) 8408e19dfac4Smrg abs_ladir=`cd "$ladir" && pwd` 8409e19dfac4Smrg if test -z "$abs_ladir"; then 84107cea3689Smrg func_warning "cannot determine absolute directory name of '$ladir'" 8411e19dfac4Smrg func_warning "passing it literally to the linker, although it might fail" 84127cea3689Smrg abs_ladir=$ladir 8413e19dfac4Smrg fi 8414e19dfac4Smrg ;; 8415e19dfac4Smrg esac 8416e19dfac4Smrg func_basename "$lib" 84177cea3689Smrg laname=$func_basename_result 8418e19dfac4Smrg 8419e19dfac4Smrg # Find the relevant object directory and library name. 84207cea3689Smrg if test yes = "$installed"; then 8421313a12fdSmrg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 84227cea3689Smrg func_warning "library '$lib' was moved." 84237cea3689Smrg dir=$ladir 84247cea3689Smrg absdir=$abs_ladir 84257cea3689Smrg libdir=$abs_ladir 8426e19dfac4Smrg else 84277cea3689Smrg dir=$lt_sysroot$libdir 84287cea3689Smrg absdir=$lt_sysroot$libdir 8429e19dfac4Smrg fi 84307cea3689Smrg test yes = "$hardcode_automatic" && avoidtemprpath=yes 8431e19dfac4Smrg else 8432e19dfac4Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 84337cea3689Smrg dir=$ladir 84347cea3689Smrg absdir=$abs_ladir 8435e19dfac4Smrg # Remove this search path later 8436313a12fdSmrg func_append notinst_path " $abs_ladir" 8437e19dfac4Smrg else 84387cea3689Smrg dir=$ladir/$objdir 84397cea3689Smrg absdir=$abs_ladir/$objdir 8440e19dfac4Smrg # Remove this search path later 8441313a12fdSmrg func_append notinst_path " $abs_ladir" 8442e19dfac4Smrg fi 8443e19dfac4Smrg fi # $installed = yes 8444e19dfac4Smrg func_stripname 'lib' '.la' "$laname" 8445e19dfac4Smrg name=$func_stripname_result 8446e19dfac4Smrg 8447e19dfac4Smrg # This library was specified with -dlpreopen. 84487cea3689Smrg if test dlpreopen = "$pass"; then 84497cea3689Smrg if test -z "$libdir" && test prog = "$linkmode"; then 84507cea3689Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" 8451e19dfac4Smrg fi 84527cea3689Smrg case $host in 8453313a12fdSmrg # special handling for platforms with PE-DLLs. 8454ae545d91Smrg *cygwin* | *mingw* | *windows* | *cegcc* ) 8455313a12fdSmrg # Linker will automatically link against shared library if both 8456313a12fdSmrg # static and shared are present. Therefore, ensure we extract 8457313a12fdSmrg # symbols from the import library if a shared library is present 8458313a12fdSmrg # (otherwise, the dlopen module name will be incorrect). We do 8459313a12fdSmrg # this by putting the import library name into $newdlprefiles. 8460313a12fdSmrg # We recover the dlopen module name by 'saving' the la file 8461313a12fdSmrg # name in a special purpose variable, and (later) extracting the 8462313a12fdSmrg # dlname from the la file. 8463313a12fdSmrg if test -n "$dlname"; then 8464313a12fdSmrg func_tr_sh "$dir/$linklib" 8465313a12fdSmrg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 8466313a12fdSmrg func_append newdlprefiles " $dir/$linklib" 8467313a12fdSmrg else 8468313a12fdSmrg func_append newdlprefiles " $dir/$old_library" 8469313a12fdSmrg # Keep a list of preopened convenience libraries to check 8470313a12fdSmrg # that they are being used correctly in the link pass. 8471313a12fdSmrg test -z "$libdir" && \ 8472313a12fdSmrg func_append dlpreconveniencelibs " $dir/$old_library" 8473313a12fdSmrg fi 8474313a12fdSmrg ;; 8475313a12fdSmrg * ) 8476313a12fdSmrg # Prefer using a static library (so that no silly _DYNAMIC symbols 8477313a12fdSmrg # are required to link). 8478313a12fdSmrg if test -n "$old_library"; then 8479313a12fdSmrg func_append newdlprefiles " $dir/$old_library" 8480313a12fdSmrg # Keep a list of preopened convenience libraries to check 8481313a12fdSmrg # that they are being used correctly in the link pass. 8482313a12fdSmrg test -z "$libdir" && \ 8483313a12fdSmrg func_append dlpreconveniencelibs " $dir/$old_library" 8484313a12fdSmrg # Otherwise, use the dlname, so that lt_dlopen finds it. 8485313a12fdSmrg elif test -n "$dlname"; then 8486313a12fdSmrg func_append newdlprefiles " $dir/$dlname" 8487313a12fdSmrg else 8488313a12fdSmrg func_append newdlprefiles " $dir/$linklib" 8489313a12fdSmrg fi 8490313a12fdSmrg ;; 8491313a12fdSmrg esac 8492e19dfac4Smrg fi # $pass = dlpreopen 8493e19dfac4Smrg 8494e19dfac4Smrg if test -z "$libdir"; then 8495e19dfac4Smrg # Link the convenience library 84967cea3689Smrg if test lib = "$linkmode"; then 8497e19dfac4Smrg deplibs="$dir/$old_library $deplibs" 84987cea3689Smrg elif test prog,link = "$linkmode,$pass"; then 8499e19dfac4Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 8500e19dfac4Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 8501e19dfac4Smrg else 8502e19dfac4Smrg deplibs="$lib $deplibs" # used for prog,scan pass 8503e19dfac4Smrg fi 8504e19dfac4Smrg continue 8505e19dfac4Smrg fi 8506e19dfac4Smrg 8507e19dfac4Smrg 85087cea3689Smrg if test prog = "$linkmode" && test link != "$pass"; then 8509313a12fdSmrg func_append newlib_search_path " $ladir" 8510e19dfac4Smrg deplibs="$lib $deplibs" 8511e19dfac4Smrg 85127cea3689Smrg linkalldeplibs=false 85137cea3689Smrg if test no != "$link_all_deplibs" || test -z "$library_names" || 85147cea3689Smrg test no = "$build_libtool_libs"; then 85157cea3689Smrg linkalldeplibs=: 8516e19dfac4Smrg fi 8517e19dfac4Smrg 8518e19dfac4Smrg tmp_libs= 8519e19dfac4Smrg for deplib in $dependency_libs; do 8520e19dfac4Smrg case $deplib in 8521e19dfac4Smrg -L*) func_stripname '-L' '' "$deplib" 8522313a12fdSmrg func_resolve_sysroot "$func_stripname_result" 8523313a12fdSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 8524e19dfac4Smrg ;; 8525e19dfac4Smrg esac 8526e19dfac4Smrg # Need to link against all dependency_libs? 85277cea3689Smrg if $linkalldeplibs; then 8528e19dfac4Smrg deplibs="$deplib $deplibs" 8529e19dfac4Smrg else 8530e19dfac4Smrg # Need to hardcode shared library paths 8531e19dfac4Smrg # or/and link against static libraries 8532e19dfac4Smrg newdependency_libs="$deplib $newdependency_libs" 8533e19dfac4Smrg fi 85347cea3689Smrg if $opt_preserve_dup_deps; then 8535e19dfac4Smrg case "$tmp_libs " in 8536313a12fdSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 8537e19dfac4Smrg esac 8538e19dfac4Smrg fi 8539313a12fdSmrg func_append tmp_libs " $deplib" 8540e19dfac4Smrg done # for deplib 8541e19dfac4Smrg continue 8542e19dfac4Smrg fi # $linkmode = prog... 8543e19dfac4Smrg 85447cea3689Smrg if test prog,link = "$linkmode,$pass"; then 8545e19dfac4Smrg if test -n "$library_names" && 85467cea3689Smrg { { test no = "$prefer_static_libs" || 85477cea3689Smrg test built,yes = "$prefer_static_libs,$installed"; } || 8548e19dfac4Smrg test -z "$old_library"; }; then 8549e19dfac4Smrg # We need to hardcode the library path 85507cea3689Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then 8551e19dfac4Smrg # Make sure the rpath contains only unique directories. 85527cea3689Smrg case $temp_rpath: in 8553e19dfac4Smrg *"$absdir:"*) ;; 8554ae545d91Smrg *) case $absdir in 8555ae545d91Smrg "$progdir/"*) func_append temp_rpath "$absdir:" ;; 8556ae545d91Smrg *) func_append temp_rpath_tail "$absdir:" ;; 8557ae545d91Smrg esac 8558e19dfac4Smrg esac 8559e19dfac4Smrg fi 8560e19dfac4Smrg 8561e19dfac4Smrg # Hardcode the library path. 8562e19dfac4Smrg # Skip directories that are in the system default run-time 8563e19dfac4Smrg # search path. 8564e19dfac4Smrg case " $sys_lib_dlsearch_path " in 8565e19dfac4Smrg *" $absdir "*) ;; 8566e19dfac4Smrg *) 8567ae545d91Smrg case "$compile_rpath$compile_rpath_tail " in 8568e19dfac4Smrg *" $absdir "*) ;; 8569ae545d91Smrg *) case $absdir in 8570ae545d91Smrg "$progdir/"*) func_append compile_rpath " $absdir" ;; 8571ae545d91Smrg *) func_append compile_rpath_tail " $absdir" ;; 8572ae545d91Smrg esac 8573e19dfac4Smrg esac 8574e19dfac4Smrg ;; 8575e19dfac4Smrg esac 8576e19dfac4Smrg case " $sys_lib_dlsearch_path " in 8577e19dfac4Smrg *" $libdir "*) ;; 8578e19dfac4Smrg *) 8579e19dfac4Smrg case "$finalize_rpath " in 8580e19dfac4Smrg *" $libdir "*) ;; 8581313a12fdSmrg *) func_append finalize_rpath " $libdir" ;; 8582e19dfac4Smrg esac 8583e19dfac4Smrg ;; 8584e19dfac4Smrg esac 8585e19dfac4Smrg fi # $linkmode,$pass = prog,link... 8586e19dfac4Smrg 85877cea3689Smrg if $alldeplibs && 85887cea3689Smrg { test pass_all = "$deplibs_check_method" || 85897cea3689Smrg { test yes = "$build_libtool_libs" && 8590e19dfac4Smrg test -n "$library_names"; }; }; then 8591e19dfac4Smrg # We only need to search for static libraries 8592e19dfac4Smrg continue 8593e19dfac4Smrg fi 8594e19dfac4Smrg fi 8595e19dfac4Smrg 8596e19dfac4Smrg link_static=no # Whether the deplib will be linked statically 8597e19dfac4Smrg use_static_libs=$prefer_static_libs 85987cea3689Smrg if test built = "$use_static_libs" && test yes = "$installed"; then 8599e19dfac4Smrg use_static_libs=no 8600e19dfac4Smrg fi 8601e19dfac4Smrg if test -n "$library_names" && 86027cea3689Smrg { test no = "$use_static_libs" || test -z "$old_library"; }; then 8603ae545d91Smrg case $host_os in 8604ae545d91Smrg cygwin* | mingw* | windows* | cegcc* | os2*) 8605e19dfac4Smrg # No point in relinking DLLs because paths are not encoded 8606313a12fdSmrg func_append notinst_deplibs " $lib" 8607e19dfac4Smrg need_relink=no 8608e19dfac4Smrg ;; 8609e19dfac4Smrg *) 86107cea3689Smrg if test no = "$installed"; then 8611313a12fdSmrg func_append notinst_deplibs " $lib" 8612e19dfac4Smrg need_relink=yes 8613e19dfac4Smrg fi 8614e19dfac4Smrg ;; 8615e19dfac4Smrg esac 8616e19dfac4Smrg # This is a shared library 8617e19dfac4Smrg 8618e19dfac4Smrg # Warn about portability, can't link against -module's on some 8619e19dfac4Smrg # systems (darwin). Don't bleat about dlopened modules though! 86207cea3689Smrg dlopenmodule= 8621e19dfac4Smrg for dlpremoduletest in $dlprefiles; do 8622e19dfac4Smrg if test "X$dlpremoduletest" = "X$lib"; then 86237cea3689Smrg dlopenmodule=$dlpremoduletest 8624e19dfac4Smrg break 8625e19dfac4Smrg fi 8626e19dfac4Smrg done 86277cea3689Smrg if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then 8628313a12fdSmrg echo 86297cea3689Smrg if test prog = "$linkmode"; then 8630ae545d91Smrg func_warning "Linking the executable $output against the loadable module" 8631e19dfac4Smrg else 8632ae545d91Smrg func_warning "Linking the shared library $output against the loadable module" 8633e19dfac4Smrg fi 8634ae545d91Smrg func_warning "$linklib is not portable!" 8635e19dfac4Smrg fi 86367cea3689Smrg if test lib = "$linkmode" && 86377cea3689Smrg test yes = "$hardcode_into_libs"; then 8638e19dfac4Smrg # Hardcode the library path. 8639e19dfac4Smrg # Skip directories that are in the system default run-time 8640e19dfac4Smrg # search path. 8641e19dfac4Smrg case " $sys_lib_dlsearch_path " in 8642e19dfac4Smrg *" $absdir "*) ;; 8643e19dfac4Smrg *) 8644ae545d91Smrg case "$compile_rpath$compile_rpath_tail " in 8645e19dfac4Smrg *" $absdir "*) ;; 8646ae545d91Smrg *) case $absdir in 8647ae545d91Smrg "$progdir/"*) func_append compile_rpath " $absdir" ;; 8648ae545d91Smrg *) func_append compile_rpath_tail " $absdir" ;; 8649ae545d91Smrg esac 8650e19dfac4Smrg esac 8651e19dfac4Smrg ;; 8652e19dfac4Smrg esac 8653e19dfac4Smrg case " $sys_lib_dlsearch_path " in 8654e19dfac4Smrg *" $libdir "*) ;; 8655e19dfac4Smrg *) 8656e19dfac4Smrg case "$finalize_rpath " in 8657e19dfac4Smrg *" $libdir "*) ;; 8658313a12fdSmrg *) func_append finalize_rpath " $libdir" ;; 8659e19dfac4Smrg esac 8660e19dfac4Smrg ;; 8661e19dfac4Smrg esac 8662e19dfac4Smrg fi 8663e19dfac4Smrg 8664e19dfac4Smrg if test -n "$old_archive_from_expsyms_cmds"; then 8665e19dfac4Smrg # figure out the soname 8666e19dfac4Smrg set dummy $library_names 8667e19dfac4Smrg shift 86687cea3689Smrg realname=$1 8669e19dfac4Smrg shift 8670e19dfac4Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 8671e19dfac4Smrg # use dlname if we got it. it's perfectly good, no? 8672e19dfac4Smrg if test -n "$dlname"; then 86737cea3689Smrg soname=$dlname 8674e19dfac4Smrg elif test -n "$soname_spec"; then 8675e19dfac4Smrg # bleh windows 8676ae545d91Smrg case $host_os in 8677ae545d91Smrg cygwin* | mingw* | windows* | cegcc* | os2*) 8678e19dfac4Smrg func_arith $current - $age 8679e19dfac4Smrg major=$func_arith_result 86807cea3689Smrg versuffix=-$major 8681e19dfac4Smrg ;; 8682e19dfac4Smrg esac 8683e19dfac4Smrg eval soname=\"$soname_spec\" 8684e19dfac4Smrg else 86857cea3689Smrg soname=$realname 8686e19dfac4Smrg fi 8687e19dfac4Smrg 8688e19dfac4Smrg # Make a new name for the extract_expsyms_cmds to use 86897cea3689Smrg soroot=$soname 8690e19dfac4Smrg func_basename "$soroot" 86917cea3689Smrg soname=$func_basename_result 8692e19dfac4Smrg func_stripname 'lib' '.dll' "$soname" 8693e19dfac4Smrg newlib=libimp-$func_stripname_result.a 8694e19dfac4Smrg 8695e19dfac4Smrg # If the library has no export list, then create one now 8696e19dfac4Smrg if test -f "$output_objdir/$soname-def"; then : 8697e19dfac4Smrg else 86987cea3689Smrg func_verbose "extracting exported symbol list from '$soname'" 8699e19dfac4Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 8700e19dfac4Smrg fi 8701e19dfac4Smrg 8702e19dfac4Smrg # Create $newlib 8703e19dfac4Smrg if test -f "$output_objdir/$newlib"; then :; else 87047cea3689Smrg func_verbose "generating import library for '$soname'" 8705e19dfac4Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 8706e19dfac4Smrg fi 8707e19dfac4Smrg # make sure the library variables are pointing to the new library 8708e19dfac4Smrg dir=$output_objdir 8709e19dfac4Smrg linklib=$newlib 8710e19dfac4Smrg fi # test -n "$old_archive_from_expsyms_cmds" 8711e19dfac4Smrg 87127cea3689Smrg if test prog = "$linkmode" || test relink != "$opt_mode"; then 8713e19dfac4Smrg add_shlibpath= 8714e19dfac4Smrg add_dir= 8715e19dfac4Smrg add= 8716e19dfac4Smrg lib_linked=yes 8717e19dfac4Smrg case $hardcode_action in 8718e19dfac4Smrg immediate | unsupported) 87197cea3689Smrg if test no = "$hardcode_direct"; then 87207cea3689Smrg add=$dir/$linklib 8721e19dfac4Smrg case $host in 87227cea3689Smrg *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; 87237cea3689Smrg *-*-sysv4*uw2*) add_dir=-L$dir ;; 8724ae545d91Smrg *-*-emscripten*) add_dir=-L$dir ;; 8725e19dfac4Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 87267cea3689Smrg *-*-unixware7*) add_dir=-L$dir ;; 8727e19dfac4Smrg *-*-darwin* ) 87287cea3689Smrg # if the lib is a (non-dlopened) module then we cannot 8729e19dfac4Smrg # link against it, someone is ignoring the earlier warnings 8730e19dfac4Smrg if /usr/bin/file -L $add 2> /dev/null | 87317cea3689Smrg $GREP ": [^:]* bundle" >/dev/null; then 8732e19dfac4Smrg if test "X$dlopenmodule" != "X$lib"; then 8733ae545d91Smrg func_warning "lib $linklib is a module, not a shared library" 87347cea3689Smrg if test -z "$old_library"; then 8735ae545d91Smrg func_warning "And there doesn't seem to be a static archive available" 8736ae545d91Smrg func_warning "The link will probably fail, sorry" 8737e19dfac4Smrg else 87387cea3689Smrg add=$dir/$old_library 8739e19dfac4Smrg fi 8740e19dfac4Smrg elif test -n "$old_library"; then 87417cea3689Smrg add=$dir/$old_library 8742e19dfac4Smrg fi 8743e19dfac4Smrg fi 8744e19dfac4Smrg esac 87457cea3689Smrg elif test no = "$hardcode_minus_L"; then 8746e19dfac4Smrg case $host in 87477cea3689Smrg *-*-sunos*) add_shlibpath=$dir ;; 8748e19dfac4Smrg esac 87497cea3689Smrg add_dir=-L$dir 87507cea3689Smrg add=-l$name 87517cea3689Smrg elif test no = "$hardcode_shlibpath_var"; then 87527cea3689Smrg add_shlibpath=$dir 87537cea3689Smrg add=-l$name 8754e19dfac4Smrg else 8755e19dfac4Smrg lib_linked=no 8756e19dfac4Smrg fi 8757e19dfac4Smrg ;; 8758e19dfac4Smrg relink) 87597cea3689Smrg if test yes = "$hardcode_direct" && 87607cea3689Smrg test no = "$hardcode_direct_absolute"; then 87617cea3689Smrg add=$dir/$linklib 87627cea3689Smrg elif test yes = "$hardcode_minus_L"; then 87637cea3689Smrg add_dir=-L$absdir 8764e19dfac4Smrg # Try looking first in the location we're being installed to. 8765e19dfac4Smrg if test -n "$inst_prefix_dir"; then 8766e19dfac4Smrg case $libdir in 8767e19dfac4Smrg [\\/]*) 8768313a12fdSmrg func_append add_dir " -L$inst_prefix_dir$libdir" 8769e19dfac4Smrg ;; 8770e19dfac4Smrg esac 8771e19dfac4Smrg fi 87727cea3689Smrg add=-l$name 87737cea3689Smrg elif test yes = "$hardcode_shlibpath_var"; then 87747cea3689Smrg add_shlibpath=$dir 87757cea3689Smrg add=-l$name 8776e19dfac4Smrg else 8777e19dfac4Smrg lib_linked=no 8778e19dfac4Smrg fi 8779e19dfac4Smrg ;; 8780e19dfac4Smrg *) lib_linked=no ;; 8781e19dfac4Smrg esac 8782e19dfac4Smrg 87837cea3689Smrg if test yes != "$lib_linked"; then 8784e19dfac4Smrg func_fatal_configuration "unsupported hardcode properties" 8785e19dfac4Smrg fi 8786e19dfac4Smrg 8787e19dfac4Smrg if test -n "$add_shlibpath"; then 8788e19dfac4Smrg case :$compile_shlibpath: in 8789e19dfac4Smrg *":$add_shlibpath:"*) ;; 8790313a12fdSmrg *) func_append compile_shlibpath "$add_shlibpath:" ;; 8791e19dfac4Smrg esac 8792e19dfac4Smrg fi 87937cea3689Smrg if test prog = "$linkmode"; then 8794e19dfac4Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 8795e19dfac4Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 8796e19dfac4Smrg else 8797e19dfac4Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 8798e19dfac4Smrg test -n "$add" && deplibs="$add $deplibs" 87997cea3689Smrg if test yes != "$hardcode_direct" && 88007cea3689Smrg test yes != "$hardcode_minus_L" && 88017cea3689Smrg test yes = "$hardcode_shlibpath_var"; then 8802e19dfac4Smrg case :$finalize_shlibpath: in 8803e19dfac4Smrg *":$libdir:"*) ;; 8804313a12fdSmrg *) func_append finalize_shlibpath "$libdir:" ;; 8805e19dfac4Smrg esac 8806e19dfac4Smrg fi 8807e19dfac4Smrg fi 8808e19dfac4Smrg fi 8809e19dfac4Smrg 88107cea3689Smrg if test prog = "$linkmode" || test relink = "$opt_mode"; then 8811e19dfac4Smrg add_shlibpath= 8812e19dfac4Smrg add_dir= 8813e19dfac4Smrg add= 8814e19dfac4Smrg # Finalize command for both is simple: just hardcode it. 88157cea3689Smrg if test yes = "$hardcode_direct" && 88167cea3689Smrg test no = "$hardcode_direct_absolute"; then 88177cea3689Smrg add=$libdir/$linklib 88187cea3689Smrg elif test yes = "$hardcode_minus_L"; then 8819ae545d91Smrg add_dir=-L$lt_sysroot$libdir 88207cea3689Smrg add=-l$name 88217cea3689Smrg elif test yes = "$hardcode_shlibpath_var"; then 8822e19dfac4Smrg case :$finalize_shlibpath: in 8823e19dfac4Smrg *":$libdir:"*) ;; 8824313a12fdSmrg *) func_append finalize_shlibpath "$libdir:" ;; 8825e19dfac4Smrg esac 88267cea3689Smrg add=-l$name 88277cea3689Smrg elif test yes = "$hardcode_automatic"; then 8828e19dfac4Smrg if test -n "$inst_prefix_dir" && 88297cea3689Smrg test -f "$inst_prefix_dir$libdir/$linklib"; then 88307cea3689Smrg add=$inst_prefix_dir$libdir/$linklib 8831e19dfac4Smrg else 88327cea3689Smrg add=$libdir/$linklib 8833e19dfac4Smrg fi 8834e19dfac4Smrg else 8835e19dfac4Smrg # We cannot seem to hardcode it, guess we'll fake it. 8836ae545d91Smrg add_dir=-L$lt_sysroot$libdir 8837e19dfac4Smrg # Try looking first in the location we're being installed to. 8838e19dfac4Smrg if test -n "$inst_prefix_dir"; then 8839e19dfac4Smrg case $libdir in 8840e19dfac4Smrg [\\/]*) 8841313a12fdSmrg func_append add_dir " -L$inst_prefix_dir$libdir" 8842e19dfac4Smrg ;; 8843e19dfac4Smrg esac 8844e19dfac4Smrg fi 88457cea3689Smrg add=-l$name 8846e19dfac4Smrg fi 8847e19dfac4Smrg 88487cea3689Smrg if test prog = "$linkmode"; then 8849e19dfac4Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 8850e19dfac4Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 8851e19dfac4Smrg else 8852e19dfac4Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 8853e19dfac4Smrg test -n "$add" && deplibs="$add $deplibs" 8854e19dfac4Smrg fi 8855e19dfac4Smrg fi 88567cea3689Smrg elif test prog = "$linkmode"; then 8857e19dfac4Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 8858e19dfac4Smrg # is not unsupported. This is valid on all known static and 8859e19dfac4Smrg # shared platforms. 88607cea3689Smrg if test unsupported != "$hardcode_direct"; then 88617cea3689Smrg test -n "$old_library" && linklib=$old_library 8862e19dfac4Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 8863e19dfac4Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 8864e19dfac4Smrg else 8865e19dfac4Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 8866e19dfac4Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 8867e19dfac4Smrg fi 88687cea3689Smrg elif test yes = "$build_libtool_libs"; then 8869e19dfac4Smrg # Not a shared library 88707cea3689Smrg if test pass_all != "$deplibs_check_method"; then 8871e19dfac4Smrg # We're trying link a shared library against a static one 8872e19dfac4Smrg # but the system doesn't support it. 8873e19dfac4Smrg 8874e19dfac4Smrg # Just print a warning and add the library to dependency_libs so 8875e19dfac4Smrg # that the program can be linked against the static library. 8876ae545d91Smrg func_warning "This system cannot link to static lib archive $lib." 8877ae545d91Smrg func_warning "I have the capability to make that library automatically link in when" 8878ae545d91Smrg func_warning "you link to this library. But I can only do this if you have a" 8879ae545d91Smrg func_warning "shared version of the library, which you do not appear to have." 88807cea3689Smrg if test yes = "$module"; then 8881ae545d91Smrg func_warning "But as you try to build a module library, libtool will still create " 8882ae545d91Smrg func_warning "a static module, that should work as long as the dlopening application" 8883ae545d91Smrg func_warning "is linked with the -dlopen flag to resolve symbols at runtime." 8884e19dfac4Smrg if test -z "$global_symbol_pipe"; then 8885ae545d91Smrg func_warning "However, this would only work if libtool was able to extract symbol" 8886ae545d91Smrg func_warning "lists from a program, using 'nm' or equivalent, but libtool could" 8887ae545d91Smrg func_warning "not find such a program. So, this module is probably useless." 8888ae545d91Smrg func_warning "'nm' from GNU binutils and a full rebuild may help." 8889e19dfac4Smrg fi 88907cea3689Smrg if test no = "$build_old_libs"; then 8891e19dfac4Smrg build_libtool_libs=module 8892e19dfac4Smrg build_old_libs=yes 8893e19dfac4Smrg else 8894e19dfac4Smrg build_libtool_libs=no 8895e19dfac4Smrg fi 8896e19dfac4Smrg fi 8897e19dfac4Smrg else 8898e19dfac4Smrg deplibs="$dir/$old_library $deplibs" 8899e19dfac4Smrg link_static=yes 8900e19dfac4Smrg fi 8901e19dfac4Smrg fi # link shared/static library? 8902e19dfac4Smrg 89037cea3689Smrg if test lib = "$linkmode"; then 8904e19dfac4Smrg if test -n "$dependency_libs" && 89057cea3689Smrg { test yes != "$hardcode_into_libs" || 89067cea3689Smrg test yes = "$build_old_libs" || 89077cea3689Smrg test yes = "$link_static"; }; then 8908e19dfac4Smrg # Extract -R from dependency_libs 8909e19dfac4Smrg temp_deplibs= 8910e19dfac4Smrg for libdir in $dependency_libs; do 8911e19dfac4Smrg case $libdir in 8912e19dfac4Smrg -R*) func_stripname '-R' '' "$libdir" 8913e19dfac4Smrg temp_xrpath=$func_stripname_result 8914e19dfac4Smrg case " $xrpath " in 8915e19dfac4Smrg *" $temp_xrpath "*) ;; 8916313a12fdSmrg *) func_append xrpath " $temp_xrpath";; 8917e19dfac4Smrg esac;; 8918313a12fdSmrg *) func_append temp_deplibs " $libdir";; 8919e19dfac4Smrg esac 8920e19dfac4Smrg done 89217cea3689Smrg dependency_libs=$temp_deplibs 8922e19dfac4Smrg fi 8923e19dfac4Smrg 8924313a12fdSmrg func_append newlib_search_path " $absdir" 8925e19dfac4Smrg # Link against this library 89267cea3689Smrg test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 8927e19dfac4Smrg # ... and its dependency_libs 8928e19dfac4Smrg tmp_libs= 8929e19dfac4Smrg for deplib in $dependency_libs; do 8930e19dfac4Smrg newdependency_libs="$deplib $newdependency_libs" 8931313a12fdSmrg case $deplib in 8932313a12fdSmrg -L*) func_stripname '-L' '' "$deplib" 8933313a12fdSmrg func_resolve_sysroot "$func_stripname_result";; 8934313a12fdSmrg *) func_resolve_sysroot "$deplib" ;; 8935313a12fdSmrg esac 89367cea3689Smrg if $opt_preserve_dup_deps; then 8937e19dfac4Smrg case "$tmp_libs " in 8938313a12fdSmrg *" $func_resolve_sysroot_result "*) 8939313a12fdSmrg func_append specialdeplibs " $func_resolve_sysroot_result" ;; 8940e19dfac4Smrg esac 8941e19dfac4Smrg fi 8942313a12fdSmrg func_append tmp_libs " $func_resolve_sysroot_result" 8943e19dfac4Smrg done 8944e19dfac4Smrg 89457cea3689Smrg if test no != "$link_all_deplibs"; then 8946e19dfac4Smrg # Add the search paths of all dependency libraries 8947e19dfac4Smrg for deplib in $dependency_libs; do 894800084f2cSmrg path= 8949e19dfac4Smrg case $deplib in 89507cea3689Smrg -L*) path=$deplib ;; 8951e19dfac4Smrg *.la) 8952313a12fdSmrg func_resolve_sysroot "$deplib" 8953313a12fdSmrg deplib=$func_resolve_sysroot_result 8954e19dfac4Smrg func_dirname "$deplib" "" "." 8955313a12fdSmrg dir=$func_dirname_result 8956e19dfac4Smrg # We need an absolute path. 8957e19dfac4Smrg case $dir in 89587cea3689Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; 8959e19dfac4Smrg *) 8960e19dfac4Smrg absdir=`cd "$dir" && pwd` 8961e19dfac4Smrg if test -z "$absdir"; then 89627cea3689Smrg func_warning "cannot determine absolute directory name of '$dir'" 89637cea3689Smrg absdir=$dir 8964e19dfac4Smrg fi 8965e19dfac4Smrg ;; 8966e19dfac4Smrg esac 8967e19dfac4Smrg if $GREP "^installed=no" $deplib > /dev/null; then 8968e19dfac4Smrg case $host in 8969e19dfac4Smrg *-*-darwin*) 8970e19dfac4Smrg depdepl= 89717cea3689Smrg eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 89727cea3689Smrg if test -n "$deplibrary_names"; then 89737cea3689Smrg for tmp in $deplibrary_names; do 8974e19dfac4Smrg depdepl=$tmp 8975e19dfac4Smrg done 89767cea3689Smrg if test -f "$absdir/$objdir/$depdepl"; then 89777cea3689Smrg depdepl=$absdir/$objdir/$depdepl 89787cea3689Smrg darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8979e19dfac4Smrg if test -z "$darwin_install_name"; then 89807cea3689Smrg darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8981e19dfac4Smrg fi 89827cea3689Smrg func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" 89837cea3689Smrg func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" 8984e19dfac4Smrg path= 8985e19dfac4Smrg fi 8986e19dfac4Smrg fi 8987e19dfac4Smrg ;; 8988e19dfac4Smrg *) 89897cea3689Smrg path=-L$absdir/$objdir 8990e19dfac4Smrg ;; 8991e19dfac4Smrg esac 8992e19dfac4Smrg else 89937cea3689Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 8994e19dfac4Smrg test -z "$libdir" && \ 89957cea3689Smrg func_fatal_error "'$deplib' is not a valid libtool archive" 8996e19dfac4Smrg test "$absdir" != "$libdir" && \ 89977cea3689Smrg func_warning "'$deplib' seems to be moved" 8998e19dfac4Smrg 89997cea3689Smrg path=-L$absdir 9000e19dfac4Smrg fi 9001e19dfac4Smrg ;; 9002e19dfac4Smrg esac 9003e19dfac4Smrg case " $deplibs " in 9004e19dfac4Smrg *" $path "*) ;; 9005e19dfac4Smrg *) deplibs="$path $deplibs" ;; 9006e19dfac4Smrg esac 9007e19dfac4Smrg done 9008e19dfac4Smrg fi # link_all_deplibs != no 9009e19dfac4Smrg fi # linkmode = lib 9010e19dfac4Smrg done # for deplib in $libs 9011ae545d91Smrg 9012ae545d91Smrg func_append temp_rpath "$temp_rpath_tail" 9013ae545d91Smrg func_append compile_rpath "$compile_rpath_tail" 9014ae545d91Smrg 90157cea3689Smrg if test link = "$pass"; then 90167cea3689Smrg if test prog = "$linkmode"; then 9017e19dfac4Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 9018e19dfac4Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 9019e19dfac4Smrg else 9020313a12fdSmrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9021e19dfac4Smrg fi 9022e19dfac4Smrg fi 90237cea3689Smrg dependency_libs=$newdependency_libs 90247cea3689Smrg if test dlpreopen = "$pass"; then 9025e19dfac4Smrg # Link the dlpreopened libraries before other libraries 9026e19dfac4Smrg for deplib in $save_deplibs; do 9027e19dfac4Smrg deplibs="$deplib $deplibs" 9028e19dfac4Smrg done 9029e19dfac4Smrg fi 90307cea3689Smrg if test dlopen != "$pass"; then 90317cea3689Smrg test conv = "$pass" || { 9032e19dfac4Smrg # Make sure lib_search_path contains only unique directories. 9033e19dfac4Smrg lib_search_path= 9034e19dfac4Smrg for dir in $newlib_search_path; do 9035e19dfac4Smrg case "$lib_search_path " in 9036e19dfac4Smrg *" $dir "*) ;; 9037313a12fdSmrg *) func_append lib_search_path " $dir" ;; 9038e19dfac4Smrg esac 9039e19dfac4Smrg done 9040e19dfac4Smrg newlib_search_path= 90417cea3689Smrg } 9042e19dfac4Smrg 90437cea3689Smrg if test prog,link = "$linkmode,$pass"; then 9044e19dfac4Smrg vars="compile_deplibs finalize_deplibs" 90457cea3689Smrg else 90467cea3689Smrg vars=deplibs 9047e19dfac4Smrg fi 9048e19dfac4Smrg for var in $vars dependency_libs; do 9049e19dfac4Smrg # Add libraries to $var in reverse order 9050e19dfac4Smrg eval tmp_libs=\"\$$var\" 9051e19dfac4Smrg new_libs= 9052ae545d91Smrg # FIXME: Pedantically, this is the right thing to do, so 9053ae545d91Smrg # that some nasty dependency loop isn't accidentally 9054ae545d91Smrg # broken: new_libs="$deplib $new_libs" 9055e19dfac4Smrg for deplib in $tmp_libs; do 9056ae545d91Smrg if $opt_preserve_dup_deps; then 9057ae545d91Smrg new_libs="$deplib $new_libs" 9058ae545d91Smrg else 9059ae545d91Smrg # Pragmatically, this seems to cause very few problems in 9060ae545d91Smrg # practice: 9061ae545d91Smrg case $deplib in 9062ae545d91Smrg -L*) new_libs="$deplib $new_libs" ;; 9063ae545d91Smrg -R*) ;; 9064e19dfac4Smrg *) 9065ae545d91Smrg # And here is the reason: when a library appears more 9066ae545d91Smrg # than once as an explicit dependence of a library, or 9067ae545d91Smrg # is implicitly linked in more than once by the 9068ae545d91Smrg # compiler, it is considered special, and multiple 9069ae545d91Smrg # occurrences thereof are not removed. Compare this 9070ae545d91Smrg # with having the same library being listed as a 9071ae545d91Smrg # dependency of multiple other libraries: in this case, 9072ae545d91Smrg # we know (pedantically, we assume) the library does not 9073ae545d91Smrg # need to be listed more than once, so we keep only the 9074ae545d91Smrg # last copy. This is not always right, but it is rare 9075ae545d91Smrg # enough that we require users that really mean to play 9076ae545d91Smrg # such unportable linking tricks to link the library 9077ae545d91Smrg # using -Wl,-lname, so that libtool does not consider it 9078ae545d91Smrg # for duplicate removal. And if not possible for portability 9079ae545d91Smrg # reasons, then --preserve-dup-deps should be used. 9080ae545d91Smrg case " $specialdeplibs " in 9081ae545d91Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 9082ae545d91Smrg *) 9083ae545d91Smrg case " $new_libs " in 9084ae545d91Smrg *" $deplib "*) ;; 9085ae545d91Smrg *) new_libs="$deplib $new_libs" ;; 9086ae545d91Smrg esac 9087ae545d91Smrg ;; 9088ae545d91Smrg esac 9089ae545d91Smrg ;; 9090e19dfac4Smrg esac 9091ae545d91Smrg fi 9092e19dfac4Smrg done 9093e19dfac4Smrg tmp_libs= 9094e19dfac4Smrg for deplib in $new_libs; do 9095e19dfac4Smrg case $deplib in 9096e19dfac4Smrg -L*) 9097e19dfac4Smrg case " $tmp_libs " in 9098e19dfac4Smrg *" $deplib "*) ;; 9099313a12fdSmrg *) func_append tmp_libs " $deplib" ;; 9100e19dfac4Smrg esac 9101e19dfac4Smrg ;; 9102313a12fdSmrg *) func_append tmp_libs " $deplib" ;; 9103e19dfac4Smrg esac 9104e19dfac4Smrg done 9105e19dfac4Smrg eval $var=\"$tmp_libs\" 9106e19dfac4Smrg done # for var 9107e19dfac4Smrg fi 91087cea3689Smrg 91097cea3689Smrg # Add Sun CC postdeps if required: 91107cea3689Smrg test CXX = "$tagname" && { 91117cea3689Smrg case $host_os in 91127cea3689Smrg linux*) 911395b7a5c8Smrg case `$CC -V 2>&1 | $SED 5q` in 91147cea3689Smrg *Sun\ C*) # Sun C++ 5.9 91157cea3689Smrg func_suncc_cstd_abi 91167cea3689Smrg 91177cea3689Smrg if test no != "$suncc_use_cstd_abi"; then 91187cea3689Smrg func_append postdeps ' -library=Cstd -library=Crun' 91197cea3689Smrg fi 91207cea3689Smrg ;; 91217cea3689Smrg esac 91227cea3689Smrg ;; 91237cea3689Smrg 91247cea3689Smrg solaris*) 91257cea3689Smrg func_cc_basename "$CC" 91267cea3689Smrg case $func_cc_basename_result in 91277cea3689Smrg CC* | sunCC*) 91287cea3689Smrg func_suncc_cstd_abi 91297cea3689Smrg 91307cea3689Smrg if test no != "$suncc_use_cstd_abi"; then 91317cea3689Smrg func_append postdeps ' -library=Cstd -library=Crun' 91327cea3689Smrg fi 91337cea3689Smrg ;; 91347cea3689Smrg esac 91357cea3689Smrg ;; 91367cea3689Smrg esac 91377cea3689Smrg } 91387cea3689Smrg 9139e19dfac4Smrg # Last step: remove runtime libs from dependency_libs 9140e19dfac4Smrg # (they stay in deplibs) 9141e19dfac4Smrg tmp_libs= 91427cea3689Smrg for i in $dependency_libs; do 9143e19dfac4Smrg case " $predeps $postdeps $compiler_lib_search_path " in 9144e19dfac4Smrg *" $i "*) 91457cea3689Smrg i= 9146e19dfac4Smrg ;; 9147e19dfac4Smrg esac 91487cea3689Smrg if test -n "$i"; then 9149313a12fdSmrg func_append tmp_libs " $i" 9150e19dfac4Smrg fi 9151e19dfac4Smrg done 9152e19dfac4Smrg dependency_libs=$tmp_libs 9153e19dfac4Smrg done # for pass 91547cea3689Smrg if test prog = "$linkmode"; then 91557cea3689Smrg dlfiles=$newdlfiles 9156e19dfac4Smrg fi 91577cea3689Smrg if test prog = "$linkmode" || test lib = "$linkmode"; then 91587cea3689Smrg dlprefiles=$newdlprefiles 9159e19dfac4Smrg fi 9160e19dfac4Smrg 9161e19dfac4Smrg case $linkmode in 9162e19dfac4Smrg oldlib) 91637cea3689Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 91647cea3689Smrg func_warning "'-dlopen' is ignored for archives" 9165e19dfac4Smrg fi 9166e19dfac4Smrg 9167e19dfac4Smrg case " $deplibs" in 9168e19dfac4Smrg *\ -l* | *\ -L*) 91697cea3689Smrg func_warning "'-l' and '-L' are ignored for archives" ;; 9170e19dfac4Smrg esac 9171e19dfac4Smrg 9172e19dfac4Smrg test -n "$rpath" && \ 91737cea3689Smrg func_warning "'-rpath' is ignored for archives" 9174e19dfac4Smrg 9175e19dfac4Smrg test -n "$xrpath" && \ 91767cea3689Smrg func_warning "'-R' is ignored for archives" 9177e19dfac4Smrg 9178e19dfac4Smrg test -n "$vinfo" && \ 91797cea3689Smrg func_warning "'-version-info/-version-number' is ignored for archives" 9180e19dfac4Smrg 9181e19dfac4Smrg test -n "$release" && \ 91827cea3689Smrg func_warning "'-release' is ignored for archives" 9183e19dfac4Smrg 9184e19dfac4Smrg test -n "$export_symbols$export_symbols_regex" && \ 91857cea3689Smrg func_warning "'-export-symbols' is ignored for archives" 9186e19dfac4Smrg 9187e19dfac4Smrg # Now set the variables for building old libraries. 9188e19dfac4Smrg build_libtool_libs=no 91897cea3689Smrg oldlibs=$output 9190313a12fdSmrg func_append objs "$old_deplibs" 9191e19dfac4Smrg ;; 9192e19dfac4Smrg 9193e19dfac4Smrg lib) 91947cea3689Smrg # Make sure we only generate libraries of the form 'libNAME.la'. 9195e19dfac4Smrg case $outputname in 9196e19dfac4Smrg lib*) 9197e19dfac4Smrg func_stripname 'lib' '.la' "$outputname" 9198e19dfac4Smrg name=$func_stripname_result 9199e19dfac4Smrg eval shared_ext=\"$shrext_cmds\" 9200e19dfac4Smrg eval libname=\"$libname_spec\" 9201e19dfac4Smrg ;; 9202e19dfac4Smrg *) 92037cea3689Smrg test no = "$module" \ 92047cea3689Smrg && func_fatal_help "libtool library '$output' must begin with 'lib'" 9205e19dfac4Smrg 92067cea3689Smrg if test no != "$need_lib_prefix"; then 9207e19dfac4Smrg # Add the "lib" prefix for modules if required 9208e19dfac4Smrg func_stripname '' '.la' "$outputname" 9209e19dfac4Smrg name=$func_stripname_result 9210e19dfac4Smrg eval shared_ext=\"$shrext_cmds\" 9211e19dfac4Smrg eval libname=\"$libname_spec\" 9212e19dfac4Smrg else 9213e19dfac4Smrg func_stripname '' '.la' "$outputname" 9214e19dfac4Smrg libname=$func_stripname_result 9215e19dfac4Smrg fi 9216e19dfac4Smrg ;; 9217e19dfac4Smrg esac 9218e19dfac4Smrg 9219e19dfac4Smrg if test -n "$objs"; then 92207cea3689Smrg if test pass_all != "$deplibs_check_method"; then 92217cea3689Smrg func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" 9222e19dfac4Smrg else 9223ae545d91Smrg func_warning "Linking the shared library $output against the non-libtool objects $objs is not portable!" 9224313a12fdSmrg func_append libobjs " $objs" 9225e19dfac4Smrg fi 9226e19dfac4Smrg fi 9227e19dfac4Smrg 92287cea3689Smrg test no = "$dlself" \ 92297cea3689Smrg || func_warning "'-dlopen self' is ignored for libtool libraries" 9230e19dfac4Smrg 9231e19dfac4Smrg set dummy $rpath 9232e19dfac4Smrg shift 92337cea3689Smrg test 1 -lt "$#" \ 92347cea3689Smrg && func_warning "ignoring multiple '-rpath's for a libtool library" 9235e19dfac4Smrg 92367cea3689Smrg install_libdir=$1 9237e19dfac4Smrg 9238e19dfac4Smrg oldlibs= 9239e19dfac4Smrg if test -z "$rpath"; then 92407cea3689Smrg if test yes = "$build_libtool_libs"; then 9241e19dfac4Smrg # Building a libtool convenience library. 92427cea3689Smrg # Some compilers have problems with a '.al' extension so 9243e19dfac4Smrg # convenience libraries should have the same extension an 9244e19dfac4Smrg # archive normally would. 9245e19dfac4Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 9246e19dfac4Smrg build_libtool_libs=convenience 9247e19dfac4Smrg build_old_libs=yes 9248e19dfac4Smrg fi 9249e19dfac4Smrg 9250e19dfac4Smrg test -n "$vinfo" && \ 92517cea3689Smrg func_warning "'-version-info/-version-number' is ignored for convenience libraries" 9252e19dfac4Smrg 9253e19dfac4Smrg test -n "$release" && \ 92547cea3689Smrg func_warning "'-release' is ignored for convenience libraries" 9255e19dfac4Smrg else 9256e19dfac4Smrg 9257e19dfac4Smrg # Parse the version information argument. 92587cea3689Smrg save_ifs=$IFS; IFS=: 9259e19dfac4Smrg set dummy $vinfo 0 0 0 9260e19dfac4Smrg shift 92617cea3689Smrg IFS=$save_ifs 9262e19dfac4Smrg 9263e19dfac4Smrg test -n "$7" && \ 92647cea3689Smrg func_fatal_help "too many parameters to '-version-info'" 9265e19dfac4Smrg 9266e19dfac4Smrg # convert absolute version numbers to libtool ages 9267e19dfac4Smrg # this retains compatibility with .la files and attempts 9268e19dfac4Smrg # to make the code below a bit more comprehensible 9269e19dfac4Smrg 9270e19dfac4Smrg case $vinfo_number in 9271e19dfac4Smrg yes) 92727cea3689Smrg number_major=$1 92737cea3689Smrg number_minor=$2 92747cea3689Smrg number_revision=$3 9275e19dfac4Smrg # 9276e19dfac4Smrg # There are really only two kinds -- those that 9277e19dfac4Smrg # use the current revision as the major version 9278e19dfac4Smrg # and those that subtract age and use age as 9279e19dfac4Smrg # a minor version. But, then there is irix 92807cea3689Smrg # that has an extra 1 added just for fun 9281e19dfac4Smrg # 9282e19dfac4Smrg case $version_type in 9283313a12fdSmrg # correct linux to gnu/linux during the next big refactor 9284ae545d91Smrg darwin|freebsd-elf|linux|midnightbsd-elf|osf|qnx|windows|none) 9285e19dfac4Smrg func_arith $number_major + $number_minor 9286e19dfac4Smrg current=$func_arith_result 92877cea3689Smrg age=$number_minor 92887cea3689Smrg revision=$number_revision 9289e19dfac4Smrg ;; 9290ae545d91Smrg freebsd-aout|sco|sunos) 92917cea3689Smrg current=$number_major 92927cea3689Smrg revision=$number_minor 92937cea3689Smrg age=0 9294e19dfac4Smrg ;; 9295e19dfac4Smrg irix|nonstopux) 9296e19dfac4Smrg func_arith $number_major + $number_minor 9297e19dfac4Smrg current=$func_arith_result 92987cea3689Smrg age=$number_minor 92997cea3689Smrg revision=$number_minor 9300e19dfac4Smrg lt_irix_increment=no 9301e19dfac4Smrg ;; 9302ae545d91Smrg *) 9303ae545d91Smrg func_fatal_configuration "$modename: unknown library version type '$version_type'" 9304ae545d91Smrg ;; 9305e19dfac4Smrg esac 9306e19dfac4Smrg ;; 9307e19dfac4Smrg no) 93087cea3689Smrg current=$1 93097cea3689Smrg revision=$2 93107cea3689Smrg age=$3 9311e19dfac4Smrg ;; 9312e19dfac4Smrg esac 9313e19dfac4Smrg 9314e19dfac4Smrg # Check that each of the things are valid numbers. 9315e19dfac4Smrg case $current in 9316e19dfac4Smrg 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]) ;; 9317e19dfac4Smrg *) 93187cea3689Smrg func_error "CURRENT '$current' must be a nonnegative integer" 93197cea3689Smrg func_fatal_error "'$vinfo' is not valid version information" 9320e19dfac4Smrg ;; 9321e19dfac4Smrg esac 9322e19dfac4Smrg 9323e19dfac4Smrg case $revision in 9324e19dfac4Smrg 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]) ;; 9325e19dfac4Smrg *) 93267cea3689Smrg func_error "REVISION '$revision' must be a nonnegative integer" 93277cea3689Smrg func_fatal_error "'$vinfo' is not valid version information" 9328e19dfac4Smrg ;; 9329e19dfac4Smrg esac 9330e19dfac4Smrg 9331e19dfac4Smrg case $age in 9332e19dfac4Smrg 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]) ;; 9333e19dfac4Smrg *) 93347cea3689Smrg func_error "AGE '$age' must be a nonnegative integer" 93357cea3689Smrg func_fatal_error "'$vinfo' is not valid version information" 9336e19dfac4Smrg ;; 9337e19dfac4Smrg esac 9338e19dfac4Smrg 9339e19dfac4Smrg if test "$age" -gt "$current"; then 93407cea3689Smrg func_error "AGE '$age' is greater than the current interface number '$current'" 93417cea3689Smrg func_fatal_error "'$vinfo' is not valid version information" 9342e19dfac4Smrg fi 9343e19dfac4Smrg 9344e19dfac4Smrg # Calculate the version variables. 9345e19dfac4Smrg major= 9346e19dfac4Smrg versuffix= 9347e19dfac4Smrg verstring= 9348e19dfac4Smrg case $version_type in 9349e19dfac4Smrg none) ;; 9350e19dfac4Smrg 9351e19dfac4Smrg darwin) 9352e19dfac4Smrg # Like Linux, but with the current version available in 9353e19dfac4Smrg # verstring for coding it into the library header 9354e19dfac4Smrg func_arith $current - $age 9355e19dfac4Smrg major=.$func_arith_result 93567cea3689Smrg versuffix=$major.$age.$revision 9357e19dfac4Smrg # Darwin ld doesn't like 0 for these options... 9358e19dfac4Smrg func_arith $current + 1 9359e19dfac4Smrg minor_current=$func_arith_result 93607cea3689Smrg xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 9361e19dfac4Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 93627cea3689Smrg # On Darwin other compilers 93637cea3689Smrg case $CC in 93647cea3689Smrg nagfor*) 93657cea3689Smrg verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 93667cea3689Smrg ;; 93677cea3689Smrg *) 93687cea3689Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 93697cea3689Smrg ;; 93707cea3689Smrg esac 9371e19dfac4Smrg ;; 9372e19dfac4Smrg 9373e19dfac4Smrg freebsd-aout) 93747cea3689Smrg major=.$current 93757cea3689Smrg versuffix=.$current.$revision 9376e19dfac4Smrg ;; 9377e19dfac4Smrg 937895b7a5c8Smrg freebsd-elf | midnightbsd-elf) 93797cea3689Smrg func_arith $current - $age 93807cea3689Smrg major=.$func_arith_result 93817cea3689Smrg versuffix=$major.$age.$revision 9382e19dfac4Smrg ;; 9383e19dfac4Smrg 9384e19dfac4Smrg irix | nonstopux) 93857cea3689Smrg if test no = "$lt_irix_increment"; then 9386e19dfac4Smrg func_arith $current - $age 9387e19dfac4Smrg else 9388e19dfac4Smrg func_arith $current - $age + 1 9389e19dfac4Smrg fi 9390e19dfac4Smrg major=$func_arith_result 9391e19dfac4Smrg 9392e19dfac4Smrg case $version_type in 9393e19dfac4Smrg nonstopux) verstring_prefix=nonstopux ;; 9394e19dfac4Smrg *) verstring_prefix=sgi ;; 9395e19dfac4Smrg esac 93967cea3689Smrg verstring=$verstring_prefix$major.$revision 9397e19dfac4Smrg 9398e19dfac4Smrg # Add in all the interfaces that we are compatible with. 9399e19dfac4Smrg loop=$revision 94007cea3689Smrg while test 0 -ne "$loop"; do 9401e19dfac4Smrg func_arith $revision - $loop 9402e19dfac4Smrg iface=$func_arith_result 9403e19dfac4Smrg func_arith $loop - 1 9404e19dfac4Smrg loop=$func_arith_result 94057cea3689Smrg verstring=$verstring_prefix$major.$iface:$verstring 9406e19dfac4Smrg done 9407e19dfac4Smrg 94087cea3689Smrg # Before this point, $major must not contain '.'. 9409e19dfac4Smrg major=.$major 94107cea3689Smrg versuffix=$major.$revision 9411e19dfac4Smrg ;; 9412e19dfac4Smrg 9413313a12fdSmrg linux) # correct to gnu/linux during the next big refactor 9414e19dfac4Smrg func_arith $current - $age 9415e19dfac4Smrg major=.$func_arith_result 94167cea3689Smrg versuffix=$major.$age.$revision 9417e19dfac4Smrg ;; 9418e19dfac4Smrg 9419e19dfac4Smrg osf) 9420e19dfac4Smrg func_arith $current - $age 9421e19dfac4Smrg major=.$func_arith_result 94227cea3689Smrg versuffix=.$current.$age.$revision 94237cea3689Smrg verstring=$current.$age.$revision 9424e19dfac4Smrg 9425e19dfac4Smrg # Add in all the interfaces that we are compatible with. 9426e19dfac4Smrg loop=$age 94277cea3689Smrg while test 0 -ne "$loop"; do 9428e19dfac4Smrg func_arith $current - $loop 9429e19dfac4Smrg iface=$func_arith_result 9430e19dfac4Smrg func_arith $loop - 1 9431e19dfac4Smrg loop=$func_arith_result 94327cea3689Smrg verstring=$verstring:$iface.0 9433e19dfac4Smrg done 9434e19dfac4Smrg 9435e19dfac4Smrg # Make executables depend on our current version. 94367cea3689Smrg func_append verstring ":$current.0" 9437e19dfac4Smrg ;; 9438e19dfac4Smrg 9439e19dfac4Smrg qnx) 9440ae545d91Smrg func_arith $current - $age 9441ae545d91Smrg major=.$func_arith_result 9442ae545d91Smrg versuffix=$major.$age.$revision 94437cea3689Smrg ;; 94447cea3689Smrg 94457cea3689Smrg sco) 94467cea3689Smrg major=.$current 94477cea3689Smrg versuffix=.$current 9448e19dfac4Smrg ;; 9449e19dfac4Smrg 9450e19dfac4Smrg sunos) 94517cea3689Smrg major=.$current 94527cea3689Smrg versuffix=.$current.$revision 9453e19dfac4Smrg ;; 9454e19dfac4Smrg 9455e19dfac4Smrg windows) 9456e19dfac4Smrg # Use '-' rather than '.', since we only want one 94577cea3689Smrg # extension on DOS 8.3 file systems. 9458e19dfac4Smrg func_arith $current - $age 9459e19dfac4Smrg major=$func_arith_result 94607cea3689Smrg versuffix=-$major 9461e19dfac4Smrg ;; 9462e19dfac4Smrg 9463e19dfac4Smrg *) 94647cea3689Smrg func_fatal_configuration "unknown library version type '$version_type'" 9465e19dfac4Smrg ;; 9466e19dfac4Smrg esac 9467e19dfac4Smrg 9468e19dfac4Smrg # Clear the version info if we defaulted, and they specified a release. 9469e19dfac4Smrg if test -z "$vinfo" && test -n "$release"; then 9470e19dfac4Smrg major= 9471e19dfac4Smrg case $version_type in 9472e19dfac4Smrg darwin) 9473e19dfac4Smrg # we can't check for "0.0" in archive_cmds due to quoting 9474e19dfac4Smrg # problems, so we reset it completely 9475e19dfac4Smrg verstring= 9476e19dfac4Smrg ;; 9477e19dfac4Smrg *) 94787cea3689Smrg verstring=0.0 9479e19dfac4Smrg ;; 9480e19dfac4Smrg esac 94817cea3689Smrg if test no = "$need_version"; then 9482e19dfac4Smrg versuffix= 9483e19dfac4Smrg else 94847cea3689Smrg versuffix=.0.0 9485e19dfac4Smrg fi 9486e19dfac4Smrg fi 9487e19dfac4Smrg 9488e19dfac4Smrg # Remove version info from name if versioning should be avoided 94897cea3689Smrg if test yes,no = "$avoid_version,$need_version"; then 9490e19dfac4Smrg major= 9491e19dfac4Smrg versuffix= 94927cea3689Smrg verstring= 9493e19dfac4Smrg fi 9494e19dfac4Smrg 9495e19dfac4Smrg # Check to see if the archive will have undefined symbols. 94967cea3689Smrg if test yes = "$allow_undefined"; then 94977cea3689Smrg if test unsupported = "$allow_undefined_flag"; then 94987cea3689Smrg if test yes = "$build_old_libs"; then 94997cea3689Smrg func_warning "undefined symbols not allowed in $host shared libraries; building static only" 95007cea3689Smrg build_libtool_libs=no 95017cea3689Smrg else 95027cea3689Smrg func_fatal_error "can't build $host shared library unless -no-undefined is specified" 95037cea3689Smrg fi 9504e19dfac4Smrg fi 9505e19dfac4Smrg else 9506e19dfac4Smrg # Don't allow undefined symbols. 95077cea3689Smrg allow_undefined_flag=$no_undefined_flag 9508e19dfac4Smrg fi 9509e19dfac4Smrg 9510e19dfac4Smrg fi 9511e19dfac4Smrg 95127cea3689Smrg func_generate_dlsyms "$libname" "$libname" : 9513313a12fdSmrg func_append libobjs " $symfileobj" 95147cea3689Smrg test " " = "$libobjs" && libobjs= 9515e19dfac4Smrg 95167cea3689Smrg if test relink != "$opt_mode"; then 9517e19dfac4Smrg # Remove our outputs, but don't remove object files since they 9518e19dfac4Smrg # may have been created when compiling PIC objects. 9519e19dfac4Smrg removelist= 9520e19dfac4Smrg tempremovelist=`$ECHO "$output_objdir/*"` 9521e19dfac4Smrg for p in $tempremovelist; do 9522e19dfac4Smrg case $p in 9523e19dfac4Smrg *.$objext | *.gcno) 9524e19dfac4Smrg ;; 95257cea3689Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) 95267cea3689Smrg if test -n "$precious_files_regex"; then 9527e19dfac4Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 9528e19dfac4Smrg then 9529e19dfac4Smrg continue 9530e19dfac4Smrg fi 9531e19dfac4Smrg fi 9532313a12fdSmrg func_append removelist " $p" 9533e19dfac4Smrg ;; 9534e19dfac4Smrg *) ;; 9535e19dfac4Smrg esac 9536e19dfac4Smrg done 9537e19dfac4Smrg test -n "$removelist" && \ 9538e19dfac4Smrg func_show_eval "${RM}r \$removelist" 9539e19dfac4Smrg fi 9540e19dfac4Smrg 9541e19dfac4Smrg # Now set the variables for building old libraries. 95427cea3689Smrg if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then 9543313a12fdSmrg func_append oldlibs " $output_objdir/$libname.$libext" 9544e19dfac4Smrg 9545e19dfac4Smrg # Transform .lo files to .o files. 95467cea3689Smrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` 9547e19dfac4Smrg fi 9548e19dfac4Smrg 9549e19dfac4Smrg # Eliminate all temporary directories. 9550e19dfac4Smrg #for path in $notinst_path; do 9551313a12fdSmrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 9552313a12fdSmrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 9553313a12fdSmrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 9554e19dfac4Smrg #done 9555e19dfac4Smrg 9556e19dfac4Smrg if test -n "$xrpath"; then 9557e19dfac4Smrg # If the user specified any rpath flags, then add them. 9558e19dfac4Smrg temp_xrpath= 9559e19dfac4Smrg for libdir in $xrpath; do 9560313a12fdSmrg func_replace_sysroot "$libdir" 9561313a12fdSmrg func_append temp_xrpath " -R$func_replace_sysroot_result" 9562e19dfac4Smrg case "$finalize_rpath " in 9563e19dfac4Smrg *" $libdir "*) ;; 9564313a12fdSmrg *) func_append finalize_rpath " $libdir" ;; 9565e19dfac4Smrg esac 9566e19dfac4Smrg done 95677cea3689Smrg if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then 9568e19dfac4Smrg dependency_libs="$temp_xrpath $dependency_libs" 9569e19dfac4Smrg fi 9570e19dfac4Smrg fi 9571e19dfac4Smrg 9572e19dfac4Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 95737cea3689Smrg old_dlfiles=$dlfiles 9574e19dfac4Smrg dlfiles= 9575e19dfac4Smrg for lib in $old_dlfiles; do 9576e19dfac4Smrg case " $dlprefiles $dlfiles " in 9577e19dfac4Smrg *" $lib "*) ;; 9578313a12fdSmrg *) func_append dlfiles " $lib" ;; 9579e19dfac4Smrg esac 9580e19dfac4Smrg done 9581e19dfac4Smrg 9582e19dfac4Smrg # Make sure dlprefiles contains only unique files 95837cea3689Smrg old_dlprefiles=$dlprefiles 9584e19dfac4Smrg dlprefiles= 9585e19dfac4Smrg for lib in $old_dlprefiles; do 9586e19dfac4Smrg case "$dlprefiles " in 9587e19dfac4Smrg *" $lib "*) ;; 9588313a12fdSmrg *) func_append dlprefiles " $lib" ;; 9589e19dfac4Smrg esac 9590e19dfac4Smrg done 9591e19dfac4Smrg 95927cea3689Smrg if test yes = "$build_libtool_libs"; then 9593e19dfac4Smrg if test -n "$rpath"; then 9594e19dfac4Smrg case $host in 9595ae545d91Smrg *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 9596e19dfac4Smrg # these systems don't actually have a c library (as such)! 9597e19dfac4Smrg ;; 9598e19dfac4Smrg *-*-rhapsody* | *-*-darwin1.[012]) 9599e19dfac4Smrg # Rhapsody C library is in the System framework 9600313a12fdSmrg func_append deplibs " System.ltframework" 9601e19dfac4Smrg ;; 9602e19dfac4Smrg *-*-netbsd*) 9603e19dfac4Smrg # Don't link with libc until the a.out ld.so is fixed. 9604e19dfac4Smrg ;; 960595b7a5c8Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) 9606e19dfac4Smrg # Do not include libc due to us having libc/libc_r. 9607e19dfac4Smrg ;; 9608e19dfac4Smrg *-*-sco3.2v5* | *-*-sco5v6*) 9609e19dfac4Smrg # Causes problems with __ctype 9610e19dfac4Smrg ;; 9611e19dfac4Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 9612e19dfac4Smrg # Compiler inserts libc in the correct place for threads to work 9613e19dfac4Smrg ;; 9614e19dfac4Smrg *) 9615e19dfac4Smrg # Add libc to deplibs on all other systems if necessary. 96167cea3689Smrg if test yes = "$build_libtool_need_lc"; then 9617313a12fdSmrg func_append deplibs " -lc" 9618e19dfac4Smrg fi 9619e19dfac4Smrg ;; 9620e19dfac4Smrg esac 9621e19dfac4Smrg fi 9622e19dfac4Smrg 9623e19dfac4Smrg # Transform deplibs into only deplibs that can be linked in shared. 9624e19dfac4Smrg name_save=$name 9625e19dfac4Smrg libname_save=$libname 9626e19dfac4Smrg release_save=$release 9627e19dfac4Smrg versuffix_save=$versuffix 9628e19dfac4Smrg major_save=$major 9629e19dfac4Smrg # I'm not sure if I'm treating the release correctly. I think 9630e19dfac4Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 9631e19dfac4Smrg # add it in twice. Is that correct? 96327cea3689Smrg release= 96337cea3689Smrg versuffix= 96347cea3689Smrg major= 9635e19dfac4Smrg newdeplibs= 9636e19dfac4Smrg droppeddeps=no 9637e19dfac4Smrg case $deplibs_check_method in 9638e19dfac4Smrg pass_all) 9639e19dfac4Smrg # Don't check for shared/static. Everything works. 9640e19dfac4Smrg # This might be a little naive. We might want to check 9641e19dfac4Smrg # whether the library exists or not. But this is on 9642e19dfac4Smrg # osf3 & osf4 and I'm not really sure... Just 9643e19dfac4Smrg # implementing what was already the behavior. 9644e19dfac4Smrg newdeplibs=$deplibs 9645e19dfac4Smrg ;; 9646e19dfac4Smrg file_magic*) 9647e19dfac4Smrg set dummy $deplibs_check_method; shift 9648e19dfac4Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9649e19dfac4Smrg for a_deplib in $deplibs; do 9650e19dfac4Smrg case $a_deplib in 9651e19dfac4Smrg -l*) 9652e19dfac4Smrg func_stripname -l '' "$a_deplib" 9653e19dfac4Smrg name=$func_stripname_result 96547cea3689Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9655e19dfac4Smrg case " $predeps $postdeps " in 9656e19dfac4Smrg *" $a_deplib "*) 9657313a12fdSmrg func_append newdeplibs " $a_deplib" 96587cea3689Smrg a_deplib= 9659e19dfac4Smrg ;; 9660e19dfac4Smrg esac 9661e19dfac4Smrg fi 96627cea3689Smrg if test -n "$a_deplib"; then 9663e19dfac4Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 9664313a12fdSmrg if test -n "$file_magic_glob"; then 9665313a12fdSmrg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 9666313a12fdSmrg else 9667313a12fdSmrg libnameglob=$libname 9668313a12fdSmrg fi 96697cea3689Smrg test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` 9670e19dfac4Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 96717cea3689Smrg if test yes = "$want_nocaseglob"; then 9672313a12fdSmrg shopt -s nocaseglob 9673313a12fdSmrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9674313a12fdSmrg $nocaseglob 9675313a12fdSmrg else 9676313a12fdSmrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9677313a12fdSmrg fi 9678e19dfac4Smrg for potent_lib in $potential_libs; do 9679e19dfac4Smrg # Follow soft links. 9680e19dfac4Smrg if ls -lLd "$potent_lib" 2>/dev/null | 9681e19dfac4Smrg $GREP " -> " >/dev/null; then 9682e19dfac4Smrg continue 9683e19dfac4Smrg fi 9684e19dfac4Smrg # The statement above tries to avoid entering an 9685e19dfac4Smrg # endless loop below, in case of cyclic links. 9686e19dfac4Smrg # We might still enter an endless loop, since a link 9687e19dfac4Smrg # loop can be closed while we follow links, 9688e19dfac4Smrg # but so what? 96897cea3689Smrg potlib=$potent_lib 9690e19dfac4Smrg while test -h "$potlib" 2>/dev/null; do 96917cea3689Smrg potliblink=`ls -ld $potlib | $SED 's/.* -> //'` 9692e19dfac4Smrg case $potliblink in 96937cea3689Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; 96947cea3689Smrg *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; 9695e19dfac4Smrg esac 9696e19dfac4Smrg done 9697e19dfac4Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 9698e19dfac4Smrg $SED -e 10q | 9699e19dfac4Smrg $EGREP "$file_magic_regex" > /dev/null; then 9700313a12fdSmrg func_append newdeplibs " $a_deplib" 97017cea3689Smrg a_deplib= 9702e19dfac4Smrg break 2 9703e19dfac4Smrg fi 9704e19dfac4Smrg done 9705e19dfac4Smrg done 9706e19dfac4Smrg fi 97077cea3689Smrg if test -n "$a_deplib"; then 9708e19dfac4Smrg droppeddeps=yes 9709ae545d91Smrg func_warning "Linker path does not have real file for library $a_deplib." 9710ae545d91Smrg func_warning "I have the capability to make that library automatically link in when" 9711ae545d91Smrg func_warning "you link to this library. But I can only do this if you have a" 9712ae545d91Smrg func_warning "shared version of the library, which you do not appear to have" 9713ae545d91Smrg func_warning "because I did check the linker path looking for a file starting" 97147cea3689Smrg if test -z "$potlib"; then 9715ae545d91Smrg func_warning "with $libname but no candidates were found. (...for file magic test)" 9716e19dfac4Smrg else 9717ae545d91Smrg func_warning "with $libname and none of the candidates passed a file format test" 9718ae545d91Smrg func_warning "using a file magic. Last file checked: $potlib" 9719e19dfac4Smrg fi 9720e19dfac4Smrg fi 9721e19dfac4Smrg ;; 9722e19dfac4Smrg *) 9723e19dfac4Smrg # Add a -L argument. 9724313a12fdSmrg func_append newdeplibs " $a_deplib" 9725e19dfac4Smrg ;; 9726e19dfac4Smrg esac 9727e19dfac4Smrg done # Gone through all deplibs. 9728e19dfac4Smrg ;; 9729e19dfac4Smrg match_pattern*) 9730e19dfac4Smrg set dummy $deplibs_check_method; shift 9731e19dfac4Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9732e19dfac4Smrg for a_deplib in $deplibs; do 9733e19dfac4Smrg case $a_deplib in 9734e19dfac4Smrg -l*) 9735e19dfac4Smrg func_stripname -l '' "$a_deplib" 9736e19dfac4Smrg name=$func_stripname_result 97377cea3689Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9738e19dfac4Smrg case " $predeps $postdeps " in 9739e19dfac4Smrg *" $a_deplib "*) 9740313a12fdSmrg func_append newdeplibs " $a_deplib" 97417cea3689Smrg a_deplib= 9742e19dfac4Smrg ;; 9743e19dfac4Smrg esac 9744e19dfac4Smrg fi 97457cea3689Smrg if test -n "$a_deplib"; then 9746e19dfac4Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 9747e19dfac4Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9748e19dfac4Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 9749e19dfac4Smrg for potent_lib in $potential_libs; do 97507cea3689Smrg potlib=$potent_lib # see symlink-check above in file_magic test 9751313a12fdSmrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 9752e19dfac4Smrg $EGREP "$match_pattern_regex" > /dev/null; then 9753313a12fdSmrg func_append newdeplibs " $a_deplib" 97547cea3689Smrg a_deplib= 9755e19dfac4Smrg break 2 9756e19dfac4Smrg fi 9757e19dfac4Smrg done 9758e19dfac4Smrg done 9759e19dfac4Smrg fi 97607cea3689Smrg if test -n "$a_deplib"; then 9761e19dfac4Smrg droppeddeps=yes 9762ae545d91Smrg func_warning "Linker path does not have real file for library $a_deplib." 9763ae545d91Smrg func_warning "I have the capability to make that library automatically link in when" 9764ae545d91Smrg func_warning "you link to this library. But I can only do this if you have a" 9765ae545d91Smrg func_warning "shared version of the library, which you do not appear to have" 9766ae545d91Smrg func_warning "because I did check the linker path looking for a file starting" 97677cea3689Smrg if test -z "$potlib"; then 9768ae545d91Smrg func_warning "with $libname but no candidates were found. (...for regex pattern test)" 9769e19dfac4Smrg else 9770ae545d91Smrg func_warning "with $libname and none of the candidates passed a file format test" 9771ae545d91Smrg func_warning "using a regex pattern. Last file checked: $potlib" 9772e19dfac4Smrg fi 9773e19dfac4Smrg fi 9774e19dfac4Smrg ;; 9775e19dfac4Smrg *) 9776e19dfac4Smrg # Add a -L argument. 9777313a12fdSmrg func_append newdeplibs " $a_deplib" 9778e19dfac4Smrg ;; 9779e19dfac4Smrg esac 9780e19dfac4Smrg done # Gone through all deplibs. 9781e19dfac4Smrg ;; 9782e19dfac4Smrg none | unknown | *) 97837cea3689Smrg newdeplibs= 9784313a12fdSmrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 97857cea3689Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 97867cea3689Smrg for i in $predeps $postdeps; do 9787e19dfac4Smrg # can't use Xsed below, because $i might contain '/' 97887cea3689Smrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` 9789e19dfac4Smrg done 9790e19dfac4Smrg fi 9791313a12fdSmrg case $tmp_deplibs in 9792313a12fdSmrg *[!\ \ ]*) 9793313a12fdSmrg echo 97947cea3689Smrg if test none = "$deplibs_check_method"; then 9795ae545d91Smrg func_warning "Inter-library dependencies are not supported in this platform." 9796e19dfac4Smrg else 9797ae545d91Smrg func_warning "Inter-library dependencies are not known to be supported." 9798e19dfac4Smrg fi 9799ae545d91Smrg func_warning "All declared inter-library dependencies are being dropped." 9800e19dfac4Smrg droppeddeps=yes 9801313a12fdSmrg ;; 9802313a12fdSmrg esac 9803e19dfac4Smrg ;; 9804e19dfac4Smrg esac 9805e19dfac4Smrg versuffix=$versuffix_save 9806e19dfac4Smrg major=$major_save 9807e19dfac4Smrg release=$release_save 9808e19dfac4Smrg libname=$libname_save 9809e19dfac4Smrg name=$name_save 9810e19dfac4Smrg 9811e19dfac4Smrg case $host in 9812e19dfac4Smrg *-*-rhapsody* | *-*-darwin1.[012]) 9813e19dfac4Smrg # On Rhapsody replace the C library with the System framework 9814313a12fdSmrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 9815e19dfac4Smrg ;; 9816e19dfac4Smrg esac 9817e19dfac4Smrg 98187cea3689Smrg if test yes = "$droppeddeps"; then 98197cea3689Smrg if test yes = "$module"; then 9820ae545d91Smrg func_warning "libtool could not satisfy all declared inter-library" 9821ae545d91Smrg func_warning "dependencies of module $libname. Therefore, libtool will create" 9822ae545d91Smrg func_warning "a static module, that should work as long as the dlopening" 9823ae545d91Smrg func_warning "application is linked with the -dlopen flag." 9824e19dfac4Smrg if test -z "$global_symbol_pipe"; then 9825ae545d91Smrg func_warning "However, this would only work if libtool was able to extract symbol" 9826ae545d91Smrg func_warning "lists from a program, using 'nm' or equivalent, but libtool could" 9827ae545d91Smrg func_warning "not find such a program. So, this module is probably useless." 9828ae545d91Smrg func_warning "'nm' from GNU binutils and a full rebuild may help." 9829e19dfac4Smrg fi 98307cea3689Smrg if test no = "$build_old_libs"; then 98317cea3689Smrg oldlibs=$output_objdir/$libname.$libext 9832e19dfac4Smrg build_libtool_libs=module 9833e19dfac4Smrg build_old_libs=yes 9834e19dfac4Smrg else 9835e19dfac4Smrg build_libtool_libs=no 9836e19dfac4Smrg fi 9837e19dfac4Smrg else 9838313a12fdSmrg echo "*** The inter-library dependencies that have been dropped here will be" 9839313a12fdSmrg echo "*** automatically added whenever a program is linked with this library" 9840313a12fdSmrg echo "*** or is declared to -dlopen it." 9841e19dfac4Smrg 98427cea3689Smrg if test no = "$allow_undefined"; then 9843313a12fdSmrg echo 9844313a12fdSmrg echo "*** Since this library must not contain undefined symbols," 9845313a12fdSmrg echo "*** because either the platform does not support them or" 9846313a12fdSmrg echo "*** it was explicitly requested with -no-undefined," 9847313a12fdSmrg echo "*** libtool will only create a static version of it." 98487cea3689Smrg if test no = "$build_old_libs"; then 98497cea3689Smrg oldlibs=$output_objdir/$libname.$libext 9850e19dfac4Smrg build_libtool_libs=module 9851e19dfac4Smrg build_old_libs=yes 9852e19dfac4Smrg else 9853e19dfac4Smrg build_libtool_libs=no 9854e19dfac4Smrg fi 9855e19dfac4Smrg fi 9856e19dfac4Smrg fi 9857e19dfac4Smrg fi 9858e19dfac4Smrg # Done checking deplibs! 9859e19dfac4Smrg deplibs=$newdeplibs 9860e19dfac4Smrg fi 9861e19dfac4Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 9862e19dfac4Smrg case $host in 9863e19dfac4Smrg *-*-darwin*) 9864313a12fdSmrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9865313a12fdSmrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9866313a12fdSmrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9867e19dfac4Smrg ;; 9868e19dfac4Smrg esac 9869e19dfac4Smrg 9870e19dfac4Smrg # move library search paths that coincide with paths to not yet 9871e19dfac4Smrg # installed libraries to the beginning of the library search list 9872e19dfac4Smrg new_libs= 9873e19dfac4Smrg for path in $notinst_path; do 9874e19dfac4Smrg case " $new_libs " in 9875e19dfac4Smrg *" -L$path/$objdir "*) ;; 9876e19dfac4Smrg *) 9877e19dfac4Smrg case " $deplibs " in 9878e19dfac4Smrg *" -L$path/$objdir "*) 9879313a12fdSmrg func_append new_libs " -L$path/$objdir" ;; 9880e19dfac4Smrg esac 9881e19dfac4Smrg ;; 9882e19dfac4Smrg esac 9883e19dfac4Smrg done 9884e19dfac4Smrg for deplib in $deplibs; do 9885e19dfac4Smrg case $deplib in 9886e19dfac4Smrg -L*) 9887e19dfac4Smrg case " $new_libs " in 9888e19dfac4Smrg *" $deplib "*) ;; 9889313a12fdSmrg *) func_append new_libs " $deplib" ;; 9890e19dfac4Smrg esac 9891e19dfac4Smrg ;; 9892313a12fdSmrg *) func_append new_libs " $deplib" ;; 9893e19dfac4Smrg esac 9894e19dfac4Smrg done 98957cea3689Smrg deplibs=$new_libs 9896e19dfac4Smrg 9897e19dfac4Smrg # All the library-specific variables (install_libdir is set above). 9898e19dfac4Smrg library_names= 9899e19dfac4Smrg old_library= 9900e19dfac4Smrg dlname= 9901e19dfac4Smrg 9902e19dfac4Smrg # Test again, we may have decided not to build it any more 99037cea3689Smrg if test yes = "$build_libtool_libs"; then 99047cea3689Smrg # Remove $wl instances when linking with ld. 9905313a12fdSmrg # FIXME: should test the right _cmds variable. 9906313a12fdSmrg case $archive_cmds in 9907313a12fdSmrg *\$LD\ *) wl= ;; 9908313a12fdSmrg esac 99097cea3689Smrg if test yes = "$hardcode_into_libs"; then 9910e19dfac4Smrg # Hardcode the library paths 9911e19dfac4Smrg hardcode_libdirs= 9912e19dfac4Smrg dep_rpath= 99137cea3689Smrg rpath=$finalize_rpath 99147cea3689Smrg test relink = "$opt_mode" || rpath=$compile_rpath$rpath 9915e19dfac4Smrg for libdir in $rpath; do 9916e19dfac4Smrg if test -n "$hardcode_libdir_flag_spec"; then 9917e19dfac4Smrg if test -n "$hardcode_libdir_separator"; then 9918313a12fdSmrg func_replace_sysroot "$libdir" 9919313a12fdSmrg libdir=$func_replace_sysroot_result 9920e19dfac4Smrg if test -z "$hardcode_libdirs"; then 99217cea3689Smrg hardcode_libdirs=$libdir 9922e19dfac4Smrg else 9923e19dfac4Smrg # Just accumulate the unique libdirs. 9924e19dfac4Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 9925e19dfac4Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 9926e19dfac4Smrg ;; 9927e19dfac4Smrg *) 9928313a12fdSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 9929e19dfac4Smrg ;; 9930e19dfac4Smrg esac 9931e19dfac4Smrg fi 9932e19dfac4Smrg else 9933e19dfac4Smrg eval flag=\"$hardcode_libdir_flag_spec\" 9934313a12fdSmrg func_append dep_rpath " $flag" 9935e19dfac4Smrg fi 9936e19dfac4Smrg elif test -n "$runpath_var"; then 9937e19dfac4Smrg case "$perm_rpath " in 9938e19dfac4Smrg *" $libdir "*) ;; 9939313a12fdSmrg *) func_append perm_rpath " $libdir" ;; 9940e19dfac4Smrg esac 9941e19dfac4Smrg fi 9942e19dfac4Smrg done 9943e19dfac4Smrg # Substitute the hardcoded libdirs into the rpath. 9944e19dfac4Smrg if test -n "$hardcode_libdir_separator" && 9945e19dfac4Smrg test -n "$hardcode_libdirs"; then 99467cea3689Smrg libdir=$hardcode_libdirs 9947313a12fdSmrg eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 9948e19dfac4Smrg fi 9949e19dfac4Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 9950e19dfac4Smrg # We should set the runpath_var. 9951e19dfac4Smrg rpath= 9952e19dfac4Smrg for dir in $perm_rpath; do 9953313a12fdSmrg func_append rpath "$dir:" 9954e19dfac4Smrg done 9955e19dfac4Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 9956e19dfac4Smrg fi 9957e19dfac4Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 9958e19dfac4Smrg fi 995927702724Smrg 99607cea3689Smrg shlibpath=$finalize_shlibpath 99617cea3689Smrg test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath 9962e19dfac4Smrg if test -n "$shlibpath"; then 9963e19dfac4Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 9964e19dfac4Smrg fi 996527702724Smrg 9966e19dfac4Smrg # Get the real and link names of the library. 9967e19dfac4Smrg eval shared_ext=\"$shrext_cmds\" 9968e19dfac4Smrg eval library_names=\"$library_names_spec\" 9969e19dfac4Smrg set dummy $library_names 9970e19dfac4Smrg shift 99717cea3689Smrg realname=$1 9972e19dfac4Smrg shift 997327702724Smrg 9974e19dfac4Smrg if test -n "$soname_spec"; then 9975e19dfac4Smrg eval soname=\"$soname_spec\" 9976e19dfac4Smrg else 99777cea3689Smrg soname=$realname 9978e19dfac4Smrg fi 9979e19dfac4Smrg if test -z "$dlname"; then 9980e19dfac4Smrg dlname=$soname 9981e19dfac4Smrg fi 998227702724Smrg 99837cea3689Smrg lib=$output_objdir/$realname 9984e19dfac4Smrg linknames= 9985e19dfac4Smrg for link 9986e19dfac4Smrg do 9987313a12fdSmrg func_append linknames " $link" 9988e19dfac4Smrg done 998927702724Smrg 9990e19dfac4Smrg # Use standard objects if they are pic 9991313a12fdSmrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 9992e19dfac4Smrg test "X$libobjs" = "X " && libobjs= 999327702724Smrg 9994e19dfac4Smrg delfiles= 9995e19dfac4Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 9996e19dfac4Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 99977cea3689Smrg export_symbols=$output_objdir/$libname.uexp 9998313a12fdSmrg func_append delfiles " $export_symbols" 9999e19dfac4Smrg fi 1000027702724Smrg 10001e19dfac4Smrg orig_export_symbols= 10002e19dfac4Smrg case $host_os in 10003ae545d91Smrg cygwin* | mingw* | windows* | cegcc*) 10004e19dfac4Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 10005e19dfac4Smrg # exporting using user supplied symfile 100067cea3689Smrg func_dll_def_p "$export_symbols" || { 10007e19dfac4Smrg # and it's NOT already a .def file. Must figure out 10008e19dfac4Smrg # which of the given symbols are data symbols and tag 10009e19dfac4Smrg # them as such. So, trigger use of export_symbols_cmds. 10010e19dfac4Smrg # export_symbols gets reassigned inside the "prepare 10011e19dfac4Smrg # the list of exported symbols" if statement, so the 10012e19dfac4Smrg # include_expsyms logic still works. 100137cea3689Smrg orig_export_symbols=$export_symbols 10014e19dfac4Smrg export_symbols= 10015e19dfac4Smrg always_export_symbols=yes 100167cea3689Smrg } 10017e19dfac4Smrg fi 10018e19dfac4Smrg ;; 10019e19dfac4Smrg esac 1002027702724Smrg 10021e19dfac4Smrg # Prepare the list of exported symbols 10022e19dfac4Smrg if test -z "$export_symbols"; then 100237cea3689Smrg if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then 100247cea3689Smrg func_verbose "generating symbol list for '$libname.la'" 100257cea3689Smrg export_symbols=$output_objdir/$libname.exp 10026e19dfac4Smrg $opt_dry_run || $RM $export_symbols 10027e19dfac4Smrg cmds=$export_symbols_cmds 100287cea3689Smrg save_ifs=$IFS; IFS='~' 10029313a12fdSmrg for cmd1 in $cmds; do 100307cea3689Smrg IFS=$save_ifs 10031313a12fdSmrg # Take the normal branch if the nm_file_list_spec branch 10032313a12fdSmrg # doesn't work or if tool conversion is not needed. 10033313a12fdSmrg case $nm_file_list_spec~$to_tool_file_cmd in 10034313a12fdSmrg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 10035313a12fdSmrg try_normal_branch=yes 10036313a12fdSmrg eval cmd=\"$cmd1\" 10037313a12fdSmrg func_len " $cmd" 10038313a12fdSmrg len=$func_len_result 10039313a12fdSmrg ;; 10040313a12fdSmrg *) 10041313a12fdSmrg try_normal_branch=no 10042313a12fdSmrg ;; 10043313a12fdSmrg esac 100447cea3689Smrg if test yes = "$try_normal_branch" \ 10045313a12fdSmrg && { test "$len" -lt "$max_cmd_len" \ 10046313a12fdSmrg || test "$max_cmd_len" -le -1; } 10047313a12fdSmrg then 10048313a12fdSmrg func_show_eval "$cmd" 'exit $?' 10049313a12fdSmrg skipped_export=false 10050313a12fdSmrg elif test -n "$nm_file_list_spec"; then 10051313a12fdSmrg func_basename "$output" 10052313a12fdSmrg output_la=$func_basename_result 10053313a12fdSmrg save_libobjs=$libobjs 10054313a12fdSmrg save_output=$output 100557cea3689Smrg output=$output_objdir/$output_la.nm 10056313a12fdSmrg func_to_tool_file "$output" 10057313a12fdSmrg libobjs=$nm_file_list_spec$func_to_tool_file_result 10058313a12fdSmrg func_append delfiles " $output" 10059313a12fdSmrg func_verbose "creating $NM input file list: $output" 10060313a12fdSmrg for obj in $save_libobjs; do 10061313a12fdSmrg func_to_tool_file "$obj" 10062313a12fdSmrg $ECHO "$func_to_tool_file_result" 10063313a12fdSmrg done > "$output" 10064313a12fdSmrg eval cmd=\"$cmd1\" 10065e19dfac4Smrg func_show_eval "$cmd" 'exit $?' 10066313a12fdSmrg output=$save_output 10067313a12fdSmrg libobjs=$save_libobjs 10068e19dfac4Smrg skipped_export=false 10069e19dfac4Smrg else 10070e19dfac4Smrg # The command line is too long to execute in one step. 10071e19dfac4Smrg func_verbose "using reloadable object file for export list..." 10072e19dfac4Smrg skipped_export=: 10073e19dfac4Smrg # Break out early, otherwise skipped_export may be 10074e19dfac4Smrg # set to false by a later but shorter cmd. 10075e19dfac4Smrg break 10076e19dfac4Smrg fi 10077e19dfac4Smrg done 100787cea3689Smrg IFS=$save_ifs 100797cea3689Smrg if test -n "$export_symbols_regex" && test : != "$skipped_export"; then 10080e19dfac4Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 10081e19dfac4Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 10082e19dfac4Smrg fi 10083e19dfac4Smrg fi 10084e19dfac4Smrg fi 1008527702724Smrg 10086e19dfac4Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 100877cea3689Smrg tmp_export_symbols=$export_symbols 100887cea3689Smrg test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 10089313a12fdSmrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 10090e19dfac4Smrg fi 1009127702724Smrg 100927cea3689Smrg if test : != "$skipped_export" && test -n "$orig_export_symbols"; then 10093e19dfac4Smrg # The given exports_symbols file has to be filtered, so filter it. 100947cea3689Smrg func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 10095e19dfac4Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 100967cea3689Smrg # 's' commands, which not all seds can handle. GNU sed should be fine 10097e19dfac4Smrg # though. Also, the filter scales superlinearly with the number of 10098e19dfac4Smrg # global variables. join(1) would be nice here, but unfortunately 10099e19dfac4Smrg # isn't a blessed tool. 10100e19dfac4Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 10101313a12fdSmrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 10102e19dfac4Smrg export_symbols=$output_objdir/$libname.def 10103e19dfac4Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 1010427702724Smrg fi 1010527702724Smrg 10106e19dfac4Smrg tmp_deplibs= 10107e19dfac4Smrg for test_deplib in $deplibs; do 10108e19dfac4Smrg case " $convenience " in 10109e19dfac4Smrg *" $test_deplib "*) ;; 10110e19dfac4Smrg *) 10111313a12fdSmrg func_append tmp_deplibs " $test_deplib" 10112e19dfac4Smrg ;; 10113e19dfac4Smrg esac 10114e19dfac4Smrg done 101157cea3689Smrg deplibs=$tmp_deplibs 1011627702724Smrg 10117e19dfac4Smrg if test -n "$convenience"; then 10118e19dfac4Smrg if test -n "$whole_archive_flag_spec" && 101197cea3689Smrg test yes = "$compiler_needs_object" && 10120e19dfac4Smrg test -z "$libobjs"; then 10121e19dfac4Smrg # extract the archives, so we have objects to list. 10122e19dfac4Smrg # TODO: could optimize this to just extract one archive. 10123e19dfac4Smrg whole_archive_flag_spec= 10124e19dfac4Smrg fi 10125e19dfac4Smrg if test -n "$whole_archive_flag_spec"; then 10126e19dfac4Smrg save_libobjs=$libobjs 10127e19dfac4Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 10128e19dfac4Smrg test "X$libobjs" = "X " && libobjs= 10129e19dfac4Smrg else 101307cea3689Smrg gentop=$output_objdir/${outputname}x 10131313a12fdSmrg func_append generated " $gentop" 1013227702724Smrg 10133e19dfac4Smrg func_extract_archives $gentop $convenience 10134313a12fdSmrg func_append libobjs " $func_extract_archives_result" 10135e19dfac4Smrg test "X$libobjs" = "X " && libobjs= 10136e19dfac4Smrg fi 10137e19dfac4Smrg fi 1013827702724Smrg 101397cea3689Smrg if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then 10140e19dfac4Smrg eval flag=\"$thread_safe_flag_spec\" 10141313a12fdSmrg func_append linker_flags " $flag" 10142e19dfac4Smrg fi 1014327702724Smrg 10144e19dfac4Smrg # Make a backup of the uninstalled library when relinking 101457cea3689Smrg if test relink = "$opt_mode"; then 10146e19dfac4Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 1014727702724Smrg fi 1014827702724Smrg 10149e19dfac4Smrg # Do each of the archive commands. 101507cea3689Smrg if test yes = "$module" && test -n "$module_cmds"; then 10151e19dfac4Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 10152e19dfac4Smrg eval test_cmds=\"$module_expsym_cmds\" 10153e19dfac4Smrg cmds=$module_expsym_cmds 10154e19dfac4Smrg else 10155e19dfac4Smrg eval test_cmds=\"$module_cmds\" 10156e19dfac4Smrg cmds=$module_cmds 10157e19dfac4Smrg fi 10158e19dfac4Smrg else 10159e19dfac4Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 10160e19dfac4Smrg eval test_cmds=\"$archive_expsym_cmds\" 10161e19dfac4Smrg cmds=$archive_expsym_cmds 10162e19dfac4Smrg else 10163e19dfac4Smrg eval test_cmds=\"$archive_cmds\" 10164e19dfac4Smrg cmds=$archive_cmds 10165e19dfac4Smrg fi 1016627702724Smrg fi 1016727702724Smrg 101687cea3689Smrg if test : != "$skipped_export" && 10169e19dfac4Smrg func_len " $test_cmds" && 10170e19dfac4Smrg len=$func_len_result && 10171e19dfac4Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 10172e19dfac4Smrg : 10173e19dfac4Smrg else 10174e19dfac4Smrg # The command line is too long to link in one step, link piecewise 10175e19dfac4Smrg # or, if using GNU ld and skipped_export is not :, use a linker 10176e19dfac4Smrg # script. 1017727702724Smrg 10178e19dfac4Smrg # Save the value of $output and $libobjs because we want to 10179e19dfac4Smrg # use them later. If we have whole_archive_flag_spec, we 10180e19dfac4Smrg # want to use save_libobjs as it was before 10181e19dfac4Smrg # whole_archive_flag_spec was expanded, because we can't 10182e19dfac4Smrg # assume the linker understands whole_archive_flag_spec. 10183e19dfac4Smrg # This may have to be revisited, in case too many 10184e19dfac4Smrg # convenience libraries get linked in and end up exceeding 10185e19dfac4Smrg # the spec. 10186e19dfac4Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 10187e19dfac4Smrg save_libobjs=$libobjs 10188e19dfac4Smrg fi 10189e19dfac4Smrg save_output=$output 10190313a12fdSmrg func_basename "$output" 10191313a12fdSmrg output_la=$func_basename_result 1019227702724Smrg 10193e19dfac4Smrg # Clear the reloadable object creation command queue and 10194e19dfac4Smrg # initialize k to one. 10195e19dfac4Smrg test_cmds= 10196e19dfac4Smrg concat_cmds= 10197e19dfac4Smrg objlist= 10198e19dfac4Smrg last_robj= 10199e19dfac4Smrg k=1 1020027702724Smrg 10201ae545d91Smrg if test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then 102027cea3689Smrg output=$output_objdir/$output_la.lnk 10203e19dfac4Smrg func_verbose "creating linker input file list: $output" 10204e19dfac4Smrg : > $output 10205e19dfac4Smrg set x $save_libobjs 10206e19dfac4Smrg shift 10207e19dfac4Smrg firstobj= 102087cea3689Smrg if test yes = "$compiler_needs_object"; then 10209e19dfac4Smrg firstobj="$1 " 10210e19dfac4Smrg shift 10211e19dfac4Smrg fi 10212e19dfac4Smrg for obj 10213e19dfac4Smrg do 10214313a12fdSmrg func_to_tool_file "$obj" 10215313a12fdSmrg $ECHO "$func_to_tool_file_result" >> $output 10216e19dfac4Smrg done 10217313a12fdSmrg func_append delfiles " $output" 10218313a12fdSmrg func_to_tool_file "$output" 10219313a12fdSmrg output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 10220ae545d91Smrg elif test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then 10221ae545d91Smrg output=$output_objdir/$output_la.lnkscript 10222ae545d91Smrg func_verbose "creating GNU ld script: $output" 10223ae545d91Smrg echo 'INPUT (' > $output 10224ae545d91Smrg for obj in $save_libobjs 10225ae545d91Smrg do 10226ae545d91Smrg func_to_tool_file "$obj" 10227ae545d91Smrg $ECHO "$func_to_tool_file_result" >> $output 10228ae545d91Smrg done 10229ae545d91Smrg echo ')' >> $output 10230ae545d91Smrg func_append delfiles " $output" 10231ae545d91Smrg func_to_tool_file "$output" 10232ae545d91Smrg output=$func_to_tool_file_result 10233e19dfac4Smrg else 10234e19dfac4Smrg if test -n "$save_libobjs"; then 10235e19dfac4Smrg func_verbose "creating reloadable object files..." 102367cea3689Smrg output=$output_objdir/$output_la-$k.$objext 10237e19dfac4Smrg eval test_cmds=\"$reload_cmds\" 10238e19dfac4Smrg func_len " $test_cmds" 10239e19dfac4Smrg len0=$func_len_result 10240e19dfac4Smrg len=$len0 10241e19dfac4Smrg 10242e19dfac4Smrg # Loop over the list of objects to be linked. 10243e19dfac4Smrg for obj in $save_libobjs 10244e19dfac4Smrg do 10245e19dfac4Smrg func_len " $obj" 10246e19dfac4Smrg func_arith $len + $func_len_result 10247e19dfac4Smrg len=$func_arith_result 102487cea3689Smrg if test -z "$objlist" || 10249e19dfac4Smrg test "$len" -lt "$max_cmd_len"; then 10250e19dfac4Smrg func_append objlist " $obj" 10251e19dfac4Smrg else 10252e19dfac4Smrg # The command $test_cmds is almost too long, add a 10253e19dfac4Smrg # command to the queue. 102547cea3689Smrg if test 1 -eq "$k"; then 10255e19dfac4Smrg # The first file doesn't have a previous command to add. 10256313a12fdSmrg reload_objs=$objlist 10257313a12fdSmrg eval concat_cmds=\"$reload_cmds\" 10258e19dfac4Smrg else 10259e19dfac4Smrg # All subsequent reloadable object files will link in 10260e19dfac4Smrg # the last one created. 10261313a12fdSmrg reload_objs="$objlist $last_robj" 10262313a12fdSmrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 10263e19dfac4Smrg fi 102647cea3689Smrg last_robj=$output_objdir/$output_la-$k.$objext 10265e19dfac4Smrg func_arith $k + 1 10266e19dfac4Smrg k=$func_arith_result 102677cea3689Smrg output=$output_objdir/$output_la-$k.$objext 10268313a12fdSmrg objlist=" $obj" 10269e19dfac4Smrg func_len " $last_robj" 10270e19dfac4Smrg func_arith $len0 + $func_len_result 10271e19dfac4Smrg len=$func_arith_result 10272e19dfac4Smrg fi 10273e19dfac4Smrg done 10274e19dfac4Smrg # Handle the remaining objects by creating one last 10275e19dfac4Smrg # reloadable object file. All subsequent reloadable object 10276e19dfac4Smrg # files will link in the last one created. 10277e19dfac4Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 10278313a12fdSmrg reload_objs="$objlist $last_robj" 102797cea3689Smrg eval concat_cmds=\"\$concat_cmds$reload_cmds\" 10280e19dfac4Smrg if test -n "$last_robj"; then 102817cea3689Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 10282e19dfac4Smrg fi 10283313a12fdSmrg func_append delfiles " $output" 1028427702724Smrg 10285e19dfac4Smrg else 10286e19dfac4Smrg output= 10287e19dfac4Smrg fi 1028827702724Smrg 102897cea3689Smrg ${skipped_export-false} && { 102907cea3689Smrg func_verbose "generating symbol list for '$libname.la'" 102917cea3689Smrg export_symbols=$output_objdir/$libname.exp 10292e19dfac4Smrg $opt_dry_run || $RM $export_symbols 10293e19dfac4Smrg libobjs=$output 10294e19dfac4Smrg # Append the command to create the export file. 10295e19dfac4Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 10296e19dfac4Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 10297e19dfac4Smrg if test -n "$last_robj"; then 10298e19dfac4Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 10299e19dfac4Smrg fi 103007cea3689Smrg } 1030127702724Smrg 10302e19dfac4Smrg test -n "$save_libobjs" && 10303e19dfac4Smrg func_verbose "creating a temporary reloadable object file: $output" 1030427702724Smrg 10305e19dfac4Smrg # Loop through the commands generated above and execute them. 103067cea3689Smrg save_ifs=$IFS; IFS='~' 10307e19dfac4Smrg for cmd in $concat_cmds; do 103087cea3689Smrg IFS=$save_ifs 103097cea3689Smrg $opt_quiet || { 1031095b7a5c8Smrg func_quote_arg expand,pretty "$cmd" 1031195b7a5c8Smrg eval "func_echo $func_quote_arg_result" 10312e19dfac4Smrg } 10313e19dfac4Smrg $opt_dry_run || eval "$cmd" || { 10314e19dfac4Smrg lt_exit=$? 10315e19dfac4Smrg 10316e19dfac4Smrg # Restore the uninstalled library and exit 103177cea3689Smrg if test relink = "$opt_mode"; then 10318e19dfac4Smrg ( cd "$output_objdir" && \ 10319e19dfac4Smrg $RM "${realname}T" && \ 10320e19dfac4Smrg $MV "${realname}U" "$realname" ) 10321e19dfac4Smrg fi 1032227702724Smrg 10323e19dfac4Smrg exit $lt_exit 10324e19dfac4Smrg } 10325e19dfac4Smrg done 103267cea3689Smrg IFS=$save_ifs 10327e19dfac4Smrg 10328e19dfac4Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 10329e19dfac4Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 10330e19dfac4Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 1033127702724Smrg fi 1033227702724Smrg fi 1033327702724Smrg 103347cea3689Smrg ${skipped_export-false} && { 10335e19dfac4Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 103367cea3689Smrg tmp_export_symbols=$export_symbols 103377cea3689Smrg test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 10338313a12fdSmrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 10339e19dfac4Smrg fi 1034027702724Smrg 10341e19dfac4Smrg if test -n "$orig_export_symbols"; then 10342e19dfac4Smrg # The given exports_symbols file has to be filtered, so filter it. 103437cea3689Smrg func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 10344e19dfac4Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 103457cea3689Smrg # 's' commands, which not all seds can handle. GNU sed should be fine 10346e19dfac4Smrg # though. Also, the filter scales superlinearly with the number of 10347e19dfac4Smrg # global variables. join(1) would be nice here, but unfortunately 10348e19dfac4Smrg # isn't a blessed tool. 10349e19dfac4Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 10350313a12fdSmrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 10351e19dfac4Smrg export_symbols=$output_objdir/$libname.def 10352e19dfac4Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 10353e19dfac4Smrg fi 103547cea3689Smrg } 1035527702724Smrg 10356e19dfac4Smrg libobjs=$output 10357e19dfac4Smrg # Restore the value of output. 10358e19dfac4Smrg output=$save_output 1035927702724Smrg 10360e19dfac4Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 10361e19dfac4Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 10362e19dfac4Smrg test "X$libobjs" = "X " && libobjs= 10363e19dfac4Smrg fi 10364e19dfac4Smrg # Expand the library linking commands again to reset the 10365e19dfac4Smrg # value of $libobjs for piecewise linking. 10366e19dfac4Smrg 10367e19dfac4Smrg # Do each of the archive commands. 103687cea3689Smrg if test yes = "$module" && test -n "$module_cmds"; then 10369e19dfac4Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 10370e19dfac4Smrg cmds=$module_expsym_cmds 1037127702724Smrg else 10372e19dfac4Smrg cmds=$module_cmds 1037327702724Smrg fi 1037427702724Smrg else 10375e19dfac4Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 10376e19dfac4Smrg cmds=$archive_expsym_cmds 10377e19dfac4Smrg else 10378e19dfac4Smrg cmds=$archive_cmds 10379e19dfac4Smrg fi 1038027702724Smrg fi 1038127702724Smrg fi 1038227702724Smrg 10383e19dfac4Smrg if test -n "$delfiles"; then 10384e19dfac4Smrg # Append the command to remove temporary files to $cmds. 10385e19dfac4Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 10386e19dfac4Smrg fi 1038727702724Smrg 10388e19dfac4Smrg # Add any objects from preloaded convenience libraries 10389e19dfac4Smrg if test -n "$dlprefiles"; then 103907cea3689Smrg gentop=$output_objdir/${outputname}x 10391313a12fdSmrg func_append generated " $gentop" 1039227702724Smrg 10393e19dfac4Smrg func_extract_archives $gentop $dlprefiles 10394313a12fdSmrg func_append libobjs " $func_extract_archives_result" 10395e19dfac4Smrg test "X$libobjs" = "X " && libobjs= 1039627702724Smrg fi 1039727702724Smrg 103987cea3689Smrg save_ifs=$IFS; IFS='~' 10399e19dfac4Smrg for cmd in $cmds; do 104007cea3689Smrg IFS=$sp$nl 10401e19dfac4Smrg eval cmd=\"$cmd\" 104027cea3689Smrg IFS=$save_ifs 104037cea3689Smrg $opt_quiet || { 1040495b7a5c8Smrg func_quote_arg expand,pretty "$cmd" 1040595b7a5c8Smrg eval "func_echo $func_quote_arg_result" 10406e19dfac4Smrg } 10407e19dfac4Smrg $opt_dry_run || eval "$cmd" || { 10408e19dfac4Smrg lt_exit=$? 1040927702724Smrg 10410e19dfac4Smrg # Restore the uninstalled library and exit 104117cea3689Smrg if test relink = "$opt_mode"; then 10412e19dfac4Smrg ( cd "$output_objdir" && \ 10413e19dfac4Smrg $RM "${realname}T" && \ 10414e19dfac4Smrg $MV "${realname}U" "$realname" ) 10415e19dfac4Smrg fi 10416e19dfac4Smrg 10417e19dfac4Smrg exit $lt_exit 10418e19dfac4Smrg } 10419e19dfac4Smrg done 104207cea3689Smrg IFS=$save_ifs 10421e19dfac4Smrg 10422e19dfac4Smrg # Restore the uninstalled library and exit 104237cea3689Smrg if test relink = "$opt_mode"; then 10424e19dfac4Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 10425e19dfac4Smrg 10426e19dfac4Smrg if test -n "$convenience"; then 10427e19dfac4Smrg if test -z "$whole_archive_flag_spec"; then 10428e19dfac4Smrg func_show_eval '${RM}r "$gentop"' 1042927702724Smrg fi 1043027702724Smrg fi 1043127702724Smrg 10432e19dfac4Smrg exit $EXIT_SUCCESS 10433e19dfac4Smrg fi 1043427702724Smrg 10435e19dfac4Smrg # Create links to the real library. 10436e19dfac4Smrg for linkname in $linknames; do 10437e19dfac4Smrg if test "$realname" != "$linkname"; then 10438e19dfac4Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 10439e19dfac4Smrg fi 10440e19dfac4Smrg done 10441e19dfac4Smrg 10442e19dfac4Smrg # If -module or -export-dynamic was specified, set the dlname. 104437cea3689Smrg if test yes = "$module" || test yes = "$export_dynamic"; then 10444e19dfac4Smrg # On all known operating systems, these are identical. 104457cea3689Smrg dlname=$soname 10446e19dfac4Smrg fi 10447e19dfac4Smrg fi 10448e19dfac4Smrg ;; 10449e19dfac4Smrg 10450e19dfac4Smrg obj) 104517cea3689Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 104527cea3689Smrg func_warning "'-dlopen' is ignored for objects" 10453e19dfac4Smrg fi 10454e19dfac4Smrg 10455e19dfac4Smrg case " $deplibs" in 10456e19dfac4Smrg *\ -l* | *\ -L*) 104577cea3689Smrg func_warning "'-l' and '-L' are ignored for objects" ;; 10458e19dfac4Smrg esac 10459e19dfac4Smrg 10460e19dfac4Smrg test -n "$rpath" && \ 104617cea3689Smrg func_warning "'-rpath' is ignored for objects" 10462e19dfac4Smrg 10463e19dfac4Smrg test -n "$xrpath" && \ 104647cea3689Smrg func_warning "'-R' is ignored for objects" 10465e19dfac4Smrg 10466e19dfac4Smrg test -n "$vinfo" && \ 104677cea3689Smrg func_warning "'-version-info' is ignored for objects" 10468e19dfac4Smrg 10469e19dfac4Smrg test -n "$release" && \ 104707cea3689Smrg func_warning "'-release' is ignored for objects" 10471e19dfac4Smrg 10472e19dfac4Smrg case $output in 10473e19dfac4Smrg *.lo) 10474e19dfac4Smrg test -n "$objs$old_deplibs" && \ 104757cea3689Smrg func_fatal_error "cannot build library object '$output' from non-libtool objects" 10476e19dfac4Smrg 10477e19dfac4Smrg libobj=$output 10478e19dfac4Smrg func_lo2o "$libobj" 10479e19dfac4Smrg obj=$func_lo2o_result 10480e19dfac4Smrg ;; 10481e19dfac4Smrg *) 10482e19dfac4Smrg libobj= 104837cea3689Smrg obj=$output 10484e19dfac4Smrg ;; 10485e19dfac4Smrg esac 10486e19dfac4Smrg 10487e19dfac4Smrg # Delete the old objects. 10488e19dfac4Smrg $opt_dry_run || $RM $obj $libobj 10489e19dfac4Smrg 10490e19dfac4Smrg # Objects from convenience libraries. This assumes 10491e19dfac4Smrg # single-version convenience libraries. Whenever we create 10492e19dfac4Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 10493e19dfac4Smrg # the extraction. 10494e19dfac4Smrg reload_conv_objs= 10495e19dfac4Smrg gentop= 104967cea3689Smrg # if reload_cmds runs $LD directly, get rid of -Wl from 104977cea3689Smrg # whole_archive_flag_spec and hope we can get by with turning comma 104987cea3689Smrg # into space. 104997cea3689Smrg case $reload_cmds in 105007cea3689Smrg *\$LD[\ \$]*) wl= ;; 105017cea3689Smrg esac 10502e19dfac4Smrg if test -n "$convenience"; then 10503e19dfac4Smrg if test -n "$whole_archive_flag_spec"; then 10504e19dfac4Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 105057cea3689Smrg test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 105067cea3689Smrg reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags 10507e19dfac4Smrg else 105087cea3689Smrg gentop=$output_objdir/${obj}x 10509313a12fdSmrg func_append generated " $gentop" 10510e19dfac4Smrg 10511e19dfac4Smrg func_extract_archives $gentop $convenience 10512e19dfac4Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 10513e19dfac4Smrg fi 10514e19dfac4Smrg fi 1051527702724Smrg 10516313a12fdSmrg # If we're not building shared, we need to use non_pic_objs 105177cea3689Smrg test yes = "$build_libtool_libs" || libobjs=$non_pic_objects 10518313a12fdSmrg 10519e19dfac4Smrg # Create the old-style object. 105207cea3689Smrg reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs 1052127702724Smrg 105227cea3689Smrg output=$obj 10523e19dfac4Smrg func_execute_cmds "$reload_cmds" 'exit $?' 1052427702724Smrg 10525e19dfac4Smrg # Exit if we aren't doing a library object file. 10526e19dfac4Smrg if test -z "$libobj"; then 10527e19dfac4Smrg if test -n "$gentop"; then 10528e19dfac4Smrg func_show_eval '${RM}r "$gentop"' 10529e19dfac4Smrg fi 1053027702724Smrg 10531e19dfac4Smrg exit $EXIT_SUCCESS 10532e19dfac4Smrg fi 1053327702724Smrg 105347cea3689Smrg test yes = "$build_libtool_libs" || { 10535e19dfac4Smrg if test -n "$gentop"; then 10536e19dfac4Smrg func_show_eval '${RM}r "$gentop"' 10537e19dfac4Smrg fi 1053827702724Smrg 10539e19dfac4Smrg # Create an invalid libtool object if no PIC, so that we don't 10540e19dfac4Smrg # accidentally link it into a program. 10541e19dfac4Smrg # $show "echo timestamp > $libobj" 10542e19dfac4Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 10543e19dfac4Smrg exit $EXIT_SUCCESS 105447cea3689Smrg } 1054527702724Smrg 105467cea3689Smrg if test -n "$pic_flag" || test default != "$pic_mode"; then 10547e19dfac4Smrg # Only do commands if we really have different PIC objects. 10548e19dfac4Smrg reload_objs="$libobjs $reload_conv_objs" 105497cea3689Smrg output=$libobj 10550e19dfac4Smrg func_execute_cmds "$reload_cmds" 'exit $?' 1055127702724Smrg fi 1055227702724Smrg 10553e19dfac4Smrg if test -n "$gentop"; then 10554e19dfac4Smrg func_show_eval '${RM}r "$gentop"' 10555e19dfac4Smrg fi 1055627702724Smrg 10557e19dfac4Smrg exit $EXIT_SUCCESS 10558e19dfac4Smrg ;; 1055927702724Smrg 10560e19dfac4Smrg prog) 10561e19dfac4Smrg case $host in 10562e19dfac4Smrg *cygwin*) func_stripname '' '.exe' "$output" 10563e19dfac4Smrg output=$func_stripname_result.exe;; 1056427702724Smrg esac 10565e19dfac4Smrg test -n "$vinfo" && \ 105667cea3689Smrg func_warning "'-version-info' is ignored for programs" 1056727702724Smrg 10568e19dfac4Smrg test -n "$release" && \ 105697cea3689Smrg func_warning "'-release' is ignored for programs" 1057027702724Smrg 105717cea3689Smrg $preload \ 105727cea3689Smrg && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ 105737cea3689Smrg && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." 1057427702724Smrg 10575e19dfac4Smrg case $host in 10576e19dfac4Smrg *-*-rhapsody* | *-*-darwin1.[012]) 10577e19dfac4Smrg # On Rhapsody replace the C library is the System framework 10578313a12fdSmrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 10579313a12fdSmrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 1058027702724Smrg ;; 1058127702724Smrg esac 1058227702724Smrg 10583e19dfac4Smrg case $host in 10584e19dfac4Smrg *-*-darwin*) 10585e19dfac4Smrg # Don't allow lazy linking, it breaks C++ global constructors 10586e19dfac4Smrg # But is supposedly fixed on 10.4 or later (yay!). 105877cea3689Smrg if test CXX = "$tagname"; then 10588e19dfac4Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10589e19dfac4Smrg 10.[0123]) 105907cea3689Smrg func_append compile_command " $wl-bind_at_load" 105917cea3689Smrg func_append finalize_command " $wl-bind_at_load" 10592e19dfac4Smrg ;; 10593e19dfac4Smrg esac 10594e19dfac4Smrg fi 10595e19dfac4Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 10596313a12fdSmrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10597313a12fdSmrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 1059827702724Smrg ;; 1059927702724Smrg esac 1060027702724Smrg 1060127702724Smrg 10602e19dfac4Smrg # move library search paths that coincide with paths to not yet 10603e19dfac4Smrg # installed libraries to the beginning of the library search list 10604e19dfac4Smrg new_libs= 10605e19dfac4Smrg for path in $notinst_path; do 10606e19dfac4Smrg case " $new_libs " in 10607e19dfac4Smrg *" -L$path/$objdir "*) ;; 1060827702724Smrg *) 10609e19dfac4Smrg case " $compile_deplibs " in 10610e19dfac4Smrg *" -L$path/$objdir "*) 10611313a12fdSmrg func_append new_libs " -L$path/$objdir" ;; 10612e19dfac4Smrg esac 1061327702724Smrg ;; 1061427702724Smrg esac 1061527702724Smrg done 10616e19dfac4Smrg for deplib in $compile_deplibs; do 10617e19dfac4Smrg case $deplib in 10618e19dfac4Smrg -L*) 10619e19dfac4Smrg case " $new_libs " in 10620e19dfac4Smrg *" $deplib "*) ;; 10621313a12fdSmrg *) func_append new_libs " $deplib" ;; 10622e19dfac4Smrg esac 10623e19dfac4Smrg ;; 10624313a12fdSmrg *) func_append new_libs " $deplib" ;; 10625e19dfac4Smrg esac 10626e19dfac4Smrg done 106277cea3689Smrg compile_deplibs=$new_libs 1062827702724Smrg 1062927702724Smrg 10630313a12fdSmrg func_append compile_command " $compile_deplibs" 10631313a12fdSmrg func_append finalize_command " $finalize_deplibs" 1063227702724Smrg 10633e19dfac4Smrg if test -n "$rpath$xrpath"; then 10634e19dfac4Smrg # If the user specified any rpath flags, then add them. 10635e19dfac4Smrg for libdir in $rpath $xrpath; do 10636e19dfac4Smrg # This is the magic to use -rpath. 10637e19dfac4Smrg case "$finalize_rpath " in 10638e19dfac4Smrg *" $libdir "*) ;; 10639313a12fdSmrg *) func_append finalize_rpath " $libdir" ;; 10640e19dfac4Smrg esac 10641e19dfac4Smrg done 10642e19dfac4Smrg fi 1064327702724Smrg 10644e19dfac4Smrg # Now hardcode the library paths 10645e19dfac4Smrg rpath= 10646e19dfac4Smrg hardcode_libdirs= 10647e19dfac4Smrg for libdir in $compile_rpath $finalize_rpath; do 10648e19dfac4Smrg if test -n "$hardcode_libdir_flag_spec"; then 10649e19dfac4Smrg if test -n "$hardcode_libdir_separator"; then 10650e19dfac4Smrg if test -z "$hardcode_libdirs"; then 106517cea3689Smrg hardcode_libdirs=$libdir 10652e19dfac4Smrg else 10653e19dfac4Smrg # Just accumulate the unique libdirs. 10654e19dfac4Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10655e19dfac4Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10656e19dfac4Smrg ;; 10657e19dfac4Smrg *) 10658313a12fdSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10659e19dfac4Smrg ;; 10660e19dfac4Smrg esac 10661e19dfac4Smrg fi 10662e19dfac4Smrg else 10663e19dfac4Smrg eval flag=\"$hardcode_libdir_flag_spec\" 10664313a12fdSmrg func_append rpath " $flag" 10665e19dfac4Smrg fi 10666e19dfac4Smrg elif test -n "$runpath_var"; then 10667e19dfac4Smrg case "$perm_rpath " in 1066827702724Smrg *" $libdir "*) ;; 10669313a12fdSmrg *) func_append perm_rpath " $libdir" ;; 1067027702724Smrg esac 10671e19dfac4Smrg fi 10672e19dfac4Smrg case $host in 10673ae545d91Smrg *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-cegcc*) 106747cea3689Smrg testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` 10675e19dfac4Smrg case :$dllsearchpath: in 10676e19dfac4Smrg *":$libdir:"*) ;; 10677e19dfac4Smrg ::) dllsearchpath=$libdir;; 10678313a12fdSmrg *) func_append dllsearchpath ":$libdir";; 10679e19dfac4Smrg esac 10680e19dfac4Smrg case :$dllsearchpath: in 10681e19dfac4Smrg *":$testbindir:"*) ;; 10682e19dfac4Smrg ::) dllsearchpath=$testbindir;; 10683313a12fdSmrg *) func_append dllsearchpath ":$testbindir";; 10684e19dfac4Smrg esac 10685e19dfac4Smrg ;; 10686e19dfac4Smrg esac 10687e19dfac4Smrg done 10688e19dfac4Smrg # Substitute the hardcoded libdirs into the rpath. 10689e19dfac4Smrg if test -n "$hardcode_libdir_separator" && 10690e19dfac4Smrg test -n "$hardcode_libdirs"; then 106917cea3689Smrg libdir=$hardcode_libdirs 10692e19dfac4Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 10693e19dfac4Smrg fi 106947cea3689Smrg compile_rpath=$rpath 10695e19dfac4Smrg 10696e19dfac4Smrg rpath= 10697e19dfac4Smrg hardcode_libdirs= 10698e19dfac4Smrg for libdir in $finalize_rpath; do 10699e19dfac4Smrg if test -n "$hardcode_libdir_flag_spec"; then 10700e19dfac4Smrg if test -n "$hardcode_libdir_separator"; then 10701e19dfac4Smrg if test -z "$hardcode_libdirs"; then 107027cea3689Smrg hardcode_libdirs=$libdir 10703e19dfac4Smrg else 10704e19dfac4Smrg # Just accumulate the unique libdirs. 10705e19dfac4Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10706e19dfac4Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10707e19dfac4Smrg ;; 10708e19dfac4Smrg *) 10709313a12fdSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10710e19dfac4Smrg ;; 10711e19dfac4Smrg esac 10712e19dfac4Smrg fi 10713e19dfac4Smrg else 10714e19dfac4Smrg eval flag=\"$hardcode_libdir_flag_spec\" 10715313a12fdSmrg func_append rpath " $flag" 10716e19dfac4Smrg fi 10717e19dfac4Smrg elif test -n "$runpath_var"; then 10718e19dfac4Smrg case "$finalize_perm_rpath " in 1071927702724Smrg *" $libdir "*) ;; 10720313a12fdSmrg *) func_append finalize_perm_rpath " $libdir" ;; 1072127702724Smrg esac 1072227702724Smrg fi 10723e19dfac4Smrg done 10724e19dfac4Smrg # Substitute the hardcoded libdirs into the rpath. 10725e19dfac4Smrg if test -n "$hardcode_libdir_separator" && 10726e19dfac4Smrg test -n "$hardcode_libdirs"; then 107277cea3689Smrg libdir=$hardcode_libdirs 10728e19dfac4Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 10729e19dfac4Smrg fi 107307cea3689Smrg finalize_rpath=$rpath 1073127702724Smrg 107327cea3689Smrg if test -n "$libobjs" && test yes = "$build_old_libs"; then 10733e19dfac4Smrg # Transform all the library objects into standard objects. 10734313a12fdSmrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10735313a12fdSmrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10736e19dfac4Smrg fi 1073727702724Smrg 107387cea3689Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" false 1073927702724Smrg 10740e19dfac4Smrg # template prelinking step 10741e19dfac4Smrg if test -n "$prelink_cmds"; then 10742e19dfac4Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 10743e19dfac4Smrg fi 1074427702724Smrg 107457cea3689Smrg wrappers_required=: 10746e19dfac4Smrg case $host in 10747313a12fdSmrg *cegcc* | *mingw32ce*) 10748313a12fdSmrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 107497cea3689Smrg wrappers_required=false 10750313a12fdSmrg ;; 10751ae545d91Smrg *cygwin* | *mingw* | *windows* ) 107527cea3689Smrg test yes = "$build_libtool_libs" || wrappers_required=false 10753e19dfac4Smrg ;; 10754e19dfac4Smrg *) 107557cea3689Smrg if test no = "$need_relink" || test yes != "$build_libtool_libs"; then 107567cea3689Smrg wrappers_required=false 10757e19dfac4Smrg fi 10758e19dfac4Smrg ;; 10759e19dfac4Smrg esac 107607cea3689Smrg $wrappers_required || { 10761e19dfac4Smrg # Replace the output file specification. 10762313a12fdSmrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 107637cea3689Smrg link_command=$compile_command$compile_rpath 1076427702724Smrg 10765e19dfac4Smrg # We have no uninstalled library dependencies, so finalize right now. 10766e19dfac4Smrg exit_status=0 10767e19dfac4Smrg func_show_eval "$link_command" 'exit_status=$?' 1076827702724Smrg 10769313a12fdSmrg if test -n "$postlink_cmds"; then 10770313a12fdSmrg func_to_tool_file "$output" 10771313a12fdSmrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10772313a12fdSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 10773313a12fdSmrg fi 10774313a12fdSmrg 10775e19dfac4Smrg # Delete the generated files. 107767cea3689Smrg if test -f "$output_objdir/${outputname}S.$objext"; then 107777cea3689Smrg func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' 10778e19dfac4Smrg fi 1077927702724Smrg 10780e19dfac4Smrg exit $exit_status 107817cea3689Smrg } 1078227702724Smrg 10783e19dfac4Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 10784e19dfac4Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 10785e19dfac4Smrg fi 10786e19dfac4Smrg if test -n "$finalize_shlibpath"; then 10787e19dfac4Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 10788e19dfac4Smrg fi 1078927702724Smrg 10790e19dfac4Smrg compile_var= 10791e19dfac4Smrg finalize_var= 10792e19dfac4Smrg if test -n "$runpath_var"; then 10793e19dfac4Smrg if test -n "$perm_rpath"; then 10794e19dfac4Smrg # We should set the runpath_var. 10795e19dfac4Smrg rpath= 10796e19dfac4Smrg for dir in $perm_rpath; do 10797313a12fdSmrg func_append rpath "$dir:" 1079827702724Smrg done 10799e19dfac4Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 1080027702724Smrg fi 10801e19dfac4Smrg if test -n "$finalize_perm_rpath"; then 10802e19dfac4Smrg # We should set the runpath_var. 10803e19dfac4Smrg rpath= 10804e19dfac4Smrg for dir in $finalize_perm_rpath; do 10805313a12fdSmrg func_append rpath "$dir:" 10806e19dfac4Smrg done 10807e19dfac4Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 10808e19dfac4Smrg fi 10809e19dfac4Smrg fi 1081027702724Smrg 108117cea3689Smrg if test yes = "$no_install"; then 10812e19dfac4Smrg # We don't need to create a wrapper script. 108137cea3689Smrg link_command=$compile_var$compile_command$compile_rpath 10814e19dfac4Smrg # Replace the output file specification. 10815313a12fdSmrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10816e19dfac4Smrg # Delete the old output file. 10817e19dfac4Smrg $opt_dry_run || $RM $output 10818e19dfac4Smrg # Link the executable and exit 10819e19dfac4Smrg func_show_eval "$link_command" 'exit $?' 10820313a12fdSmrg 10821313a12fdSmrg if test -n "$postlink_cmds"; then 10822313a12fdSmrg func_to_tool_file "$output" 10823313a12fdSmrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10824313a12fdSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 10825313a12fdSmrg fi 10826313a12fdSmrg 10827e19dfac4Smrg exit $EXIT_SUCCESS 10828e19dfac4Smrg fi 1082927702724Smrg 108307cea3689Smrg case $hardcode_action,$fast_install in 108317cea3689Smrg relink,*) 108327cea3689Smrg # Fast installation is not supported 108337cea3689Smrg link_command=$compile_var$compile_command$compile_rpath 108347cea3689Smrg relink_command=$finalize_var$finalize_command$finalize_rpath 1083527702724Smrg 108367cea3689Smrg func_warning "this platform does not like uninstalled shared libraries" 108377cea3689Smrg func_warning "'$output' will be relinked during installation" 108387cea3689Smrg ;; 108397cea3689Smrg *,yes) 108407cea3689Smrg link_command=$finalize_var$compile_command$finalize_rpath 108417cea3689Smrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 108427cea3689Smrg ;; 108437cea3689Smrg *,no) 108447cea3689Smrg link_command=$compile_var$compile_command$compile_rpath 108457cea3689Smrg relink_command=$finalize_var$finalize_command$finalize_rpath 108467cea3689Smrg ;; 108477cea3689Smrg *,needless) 108487cea3689Smrg link_command=$finalize_var$compile_command$finalize_rpath 108497cea3689Smrg relink_command= 108507cea3689Smrg ;; 108517cea3689Smrg esac 1085227702724Smrg 10853e19dfac4Smrg # Replace the output file specification. 10854313a12fdSmrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 1085527702724Smrg 10856e19dfac4Smrg # Delete the old output files. 10857e19dfac4Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 1085827702724Smrg 10859e19dfac4Smrg func_show_eval "$link_command" 'exit $?' 1086027702724Smrg 10861313a12fdSmrg if test -n "$postlink_cmds"; then 10862313a12fdSmrg func_to_tool_file "$output_objdir/$outputname" 10863313a12fdSmrg 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'` 10864313a12fdSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 10865313a12fdSmrg fi 10866313a12fdSmrg 10867e19dfac4Smrg # Now create the wrapper script. 10868e19dfac4Smrg func_verbose "creating $output" 1086927702724Smrg 10870e19dfac4Smrg # Quote the relink command for shipping. 10871e19dfac4Smrg if test -n "$relink_command"; then 10872e19dfac4Smrg # Preserve any variables that may affect compiler behavior 10873e19dfac4Smrg for var in $variables_saved_for_relink; do 10874e19dfac4Smrg if eval test -z \"\${$var+set}\"; then 10875e19dfac4Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 10876e19dfac4Smrg elif eval var_value=\$$var; test -z "$var_value"; then 10877e19dfac4Smrg relink_command="$var=; export $var; $relink_command" 10878e19dfac4Smrg else 1087995b7a5c8Smrg func_quote_arg pretty "$var_value" 1088095b7a5c8Smrg relink_command="$var=$func_quote_arg_result; export $var; $relink_command" 10881e19dfac4Smrg fi 10882e19dfac4Smrg done 1088395b7a5c8Smrg func_quote eval cd "`pwd`" 1088495b7a5c8Smrg func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)" 1088595b7a5c8Smrg relink_command=$func_quote_arg_unquoted_result 10886e19dfac4Smrg fi 1088727702724Smrg 10888e19dfac4Smrg # Only actually do things if not in dry run mode. 10889e19dfac4Smrg $opt_dry_run || { 10890e19dfac4Smrg # win32 will think the script is a binary if it has 10891e19dfac4Smrg # a .exe suffix, so we strip it off here. 10892e19dfac4Smrg case $output in 10893e19dfac4Smrg *.exe) func_stripname '' '.exe' "$output" 10894e19dfac4Smrg output=$func_stripname_result ;; 10895e19dfac4Smrg esac 10896e19dfac4Smrg # test for cygwin because mv fails w/o .exe extensions 1089727702724Smrg case $host in 10898e19dfac4Smrg *cygwin*) 10899e19dfac4Smrg exeext=.exe 10900e19dfac4Smrg func_stripname '' '.exe' "$outputname" 10901e19dfac4Smrg outputname=$func_stripname_result ;; 10902e19dfac4Smrg *) exeext= ;; 1090327702724Smrg esac 10904e19dfac4Smrg case $host in 10905ae545d91Smrg *cygwin* | *mingw* | windows* ) 10906e19dfac4Smrg func_dirname_and_basename "$output" "" "." 10907e19dfac4Smrg output_name=$func_basename_result 10908e19dfac4Smrg output_path=$func_dirname_result 109097cea3689Smrg cwrappersource=$output_path/$objdir/lt-$output_name.c 109107cea3689Smrg cwrapper=$output_path/$output_name.exe 10911e19dfac4Smrg $RM $cwrappersource $cwrapper 10912e19dfac4Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 10913e19dfac4Smrg 10914e19dfac4Smrg func_emit_cwrapperexe_src > $cwrappersource 10915e19dfac4Smrg 10916e19dfac4Smrg # The wrapper executable is built using the $host compiler, 10917e19dfac4Smrg # because it contains $host paths and files. If cross- 10918e19dfac4Smrg # compiling, it, like the target executable, must be 10919e19dfac4Smrg # executed on the $host or under an emulation environment. 10920e19dfac4Smrg $opt_dry_run || { 10921e19dfac4Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 10922e19dfac4Smrg $STRIP $cwrapper 10923e19dfac4Smrg } 1092427702724Smrg 10925e19dfac4Smrg # Now, create the wrapper script for func_source use: 10926e19dfac4Smrg func_ltwrapper_scriptname $cwrapper 10927e19dfac4Smrg $RM $func_ltwrapper_scriptname_result 10928e19dfac4Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 10929e19dfac4Smrg $opt_dry_run || { 10930e19dfac4Smrg # note: this script will not be executed, so do not chmod. 109317cea3689Smrg if test "x$build" = "x$host"; then 10932e19dfac4Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 1093327702724Smrg else 10934e19dfac4Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 1093527702724Smrg fi 10936e19dfac4Smrg } 10937e19dfac4Smrg ;; 10938e19dfac4Smrg * ) 10939e19dfac4Smrg $RM $output 10940e19dfac4Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 1094127702724Smrg 10942e19dfac4Smrg func_emit_wrapper no > $output 10943e19dfac4Smrg chmod +x $output 1094427702724Smrg ;; 1094527702724Smrg esac 10946e19dfac4Smrg } 10947e19dfac4Smrg exit $EXIT_SUCCESS 10948e19dfac4Smrg ;; 10949e19dfac4Smrg esac 1095027702724Smrg 10951e19dfac4Smrg # See if we need to build an old-fashioned archive. 10952e19dfac4Smrg for oldlib in $oldlibs; do 1095327702724Smrg 109547cea3689Smrg case $build_libtool_libs in 109557cea3689Smrg convenience) 109567cea3689Smrg oldobjs="$libobjs_save $symfileobj" 109577cea3689Smrg addlibs=$convenience 10958e19dfac4Smrg build_libtool_libs=no 109597cea3689Smrg ;; 109607cea3689Smrg module) 109617cea3689Smrg oldobjs=$libobjs_save 109627cea3689Smrg addlibs=$old_convenience 109637cea3689Smrg build_libtool_libs=no 109647cea3689Smrg ;; 109657cea3689Smrg *) 10966e19dfac4Smrg oldobjs="$old_deplibs $non_pic_objects" 109677cea3689Smrg $preload && test -f "$symfileobj" \ 109687cea3689Smrg && func_append oldobjs " $symfileobj" 109697cea3689Smrg addlibs=$old_convenience 109707cea3689Smrg ;; 109717cea3689Smrg esac 1097227702724Smrg 10973e19dfac4Smrg if test -n "$addlibs"; then 109747cea3689Smrg gentop=$output_objdir/${outputname}x 10975313a12fdSmrg func_append generated " $gentop" 1097627702724Smrg 10977e19dfac4Smrg func_extract_archives $gentop $addlibs 10978313a12fdSmrg func_append oldobjs " $func_extract_archives_result" 10979e19dfac4Smrg fi 1098027702724Smrg 10981e19dfac4Smrg # Do each command in the archive commands. 109827cea3689Smrg if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then 10983e19dfac4Smrg cmds=$old_archive_from_new_cmds 10984e19dfac4Smrg else 1098527702724Smrg 10986e19dfac4Smrg # Add any objects from preloaded convenience libraries 10987e19dfac4Smrg if test -n "$dlprefiles"; then 109887cea3689Smrg gentop=$output_objdir/${outputname}x 10989313a12fdSmrg func_append generated " $gentop" 1099027702724Smrg 10991e19dfac4Smrg func_extract_archives $gentop $dlprefiles 10992313a12fdSmrg func_append oldobjs " $func_extract_archives_result" 10993e19dfac4Smrg fi 1099427702724Smrg 10995e19dfac4Smrg # POSIX demands no paths to be encoded in archives. We have 10996e19dfac4Smrg # to avoid creating archives with duplicate basenames if we 10997e19dfac4Smrg # might have to extract them afterwards, e.g., when creating a 10998e19dfac4Smrg # static archive out of a convenience library, or when linking 10999e19dfac4Smrg # the entirety of a libtool archive into another (currently 11000e19dfac4Smrg # not supported by libtool). 11001e19dfac4Smrg if (for obj in $oldobjs 11002e19dfac4Smrg do 11003e19dfac4Smrg func_basename "$obj" 11004e19dfac4Smrg $ECHO "$func_basename_result" 11005e19dfac4Smrg done | sort | sort -uc >/dev/null 2>&1); then 11006e19dfac4Smrg : 11007e19dfac4Smrg else 11008313a12fdSmrg echo "copying selected object files to avoid basename conflicts..." 110097cea3689Smrg gentop=$output_objdir/${outputname}x 11010313a12fdSmrg func_append generated " $gentop" 11011e19dfac4Smrg func_mkdir_p "$gentop" 11012e19dfac4Smrg save_oldobjs=$oldobjs 11013e19dfac4Smrg oldobjs= 11014e19dfac4Smrg counter=1 11015e19dfac4Smrg for obj in $save_oldobjs 11016e19dfac4Smrg do 11017e19dfac4Smrg func_basename "$obj" 110187cea3689Smrg objbase=$func_basename_result 11019e19dfac4Smrg case " $oldobjs " in 11020e19dfac4Smrg " ") oldobjs=$obj ;; 11021e19dfac4Smrg *[\ /]"$objbase "*) 11022e19dfac4Smrg while :; do 11023e19dfac4Smrg # Make sure we don't pick an alternate name that also 11024e19dfac4Smrg # overlaps. 11025e19dfac4Smrg newobj=lt$counter-$objbase 11026e19dfac4Smrg func_arith $counter + 1 11027e19dfac4Smrg counter=$func_arith_result 11028e19dfac4Smrg case " $oldobjs " in 11029e19dfac4Smrg *[\ /]"$newobj "*) ;; 11030e19dfac4Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 11031e19dfac4Smrg esac 11032e19dfac4Smrg done 11033e19dfac4Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 11034313a12fdSmrg func_append oldobjs " $gentop/$newobj" 11035e19dfac4Smrg ;; 11036313a12fdSmrg *) func_append oldobjs " $obj" ;; 11037e19dfac4Smrg esac 1103827702724Smrg done 1103927702724Smrg fi 11040313a12fdSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 11041313a12fdSmrg tool_oldlib=$func_to_tool_file_result 11042e19dfac4Smrg eval cmds=\"$old_archive_cmds\" 1104327702724Smrg 11044e19dfac4Smrg func_len " $cmds" 11045e19dfac4Smrg len=$func_len_result 11046e19dfac4Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 11047e19dfac4Smrg cmds=$old_archive_cmds 11048313a12fdSmrg elif test -n "$archiver_list_spec"; then 11049313a12fdSmrg func_verbose "using command file archive linking..." 11050313a12fdSmrg for obj in $oldobjs 11051313a12fdSmrg do 11052313a12fdSmrg func_to_tool_file "$obj" 11053313a12fdSmrg $ECHO "$func_to_tool_file_result" 11054313a12fdSmrg done > $output_objdir/$libname.libcmd 11055313a12fdSmrg func_to_tool_file "$output_objdir/$libname.libcmd" 11056313a12fdSmrg oldobjs=" $archiver_list_spec$func_to_tool_file_result" 11057313a12fdSmrg cmds=$old_archive_cmds 11058e19dfac4Smrg else 11059e19dfac4Smrg # the command line is too long to link in one step, link in parts 11060e19dfac4Smrg func_verbose "using piecewise archive linking..." 11061e19dfac4Smrg save_RANLIB=$RANLIB 11062e19dfac4Smrg RANLIB=: 11063e19dfac4Smrg objlist= 11064e19dfac4Smrg concat_cmds= 11065e19dfac4Smrg save_oldobjs=$oldobjs 11066e19dfac4Smrg oldobjs= 11067e19dfac4Smrg # Is there a better way of finding the last object in the list? 11068e19dfac4Smrg for obj in $save_oldobjs 11069e19dfac4Smrg do 11070e19dfac4Smrg last_oldobj=$obj 11071e19dfac4Smrg done 11072e19dfac4Smrg eval test_cmds=\"$old_archive_cmds\" 11073e19dfac4Smrg func_len " $test_cmds" 11074e19dfac4Smrg len0=$func_len_result 11075e19dfac4Smrg len=$len0 11076e19dfac4Smrg for obj in $save_oldobjs 11077e19dfac4Smrg do 11078e19dfac4Smrg func_len " $obj" 11079e19dfac4Smrg func_arith $len + $func_len_result 11080e19dfac4Smrg len=$func_arith_result 11081e19dfac4Smrg func_append objlist " $obj" 11082e19dfac4Smrg if test "$len" -lt "$max_cmd_len"; then 11083e19dfac4Smrg : 11084e19dfac4Smrg else 11085e19dfac4Smrg # the above command should be used before it gets too long 11086e19dfac4Smrg oldobjs=$objlist 110877cea3689Smrg if test "$obj" = "$last_oldobj"; then 11088e19dfac4Smrg RANLIB=$save_RANLIB 11089e19dfac4Smrg fi 11090e19dfac4Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 110917cea3689Smrg eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" 11092e19dfac4Smrg objlist= 11093e19dfac4Smrg len=$len0 11094e19dfac4Smrg fi 11095e19dfac4Smrg done 11096e19dfac4Smrg RANLIB=$save_RANLIB 11097e19dfac4Smrg oldobjs=$objlist 110987cea3689Smrg if test -z "$oldobjs"; then 11099e19dfac4Smrg eval cmds=\"\$concat_cmds\" 11100e19dfac4Smrg else 11101e19dfac4Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 11102e19dfac4Smrg fi 11103e19dfac4Smrg fi 11104e19dfac4Smrg fi 11105e19dfac4Smrg func_execute_cmds "$cmds" 'exit $?' 1110627702724Smrg done 1110727702724Smrg 11108e19dfac4Smrg test -n "$generated" && \ 11109e19dfac4Smrg func_show_eval "${RM}r$generated" 1111027702724Smrg 11111e19dfac4Smrg # Now create the libtool archive. 11112e19dfac4Smrg case $output in 11113e19dfac4Smrg *.la) 11114e19dfac4Smrg old_library= 111157cea3689Smrg test yes = "$build_old_libs" && old_library=$libname.$libext 11116e19dfac4Smrg func_verbose "creating $output" 1111727702724Smrg 11118e19dfac4Smrg # Preserve any variables that may affect compiler behavior 11119e19dfac4Smrg for var in $variables_saved_for_relink; do 11120e19dfac4Smrg if eval test -z \"\${$var+set}\"; then 11121e19dfac4Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 11122e19dfac4Smrg elif eval var_value=\$$var; test -z "$var_value"; then 11123e19dfac4Smrg relink_command="$var=; export $var; $relink_command" 1112427702724Smrg else 1112595b7a5c8Smrg func_quote_arg pretty,unquoted "$var_value" 1112695b7a5c8Smrg relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command" 1112727702724Smrg fi 11128e19dfac4Smrg done 11129e19dfac4Smrg # Quote the link command for shipping. 1113095b7a5c8Smrg func_quote eval cd "`pwd`" 1113195b7a5c8Smrg relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 1113295b7a5c8Smrg func_quote_arg pretty,unquoted "$relink_command" 1113395b7a5c8Smrg relink_command=$func_quote_arg_unquoted_result 111347cea3689Smrg if test yes = "$hardcode_automatic"; then 11135e19dfac4Smrg relink_command= 11136e19dfac4Smrg fi 1113727702724Smrg 11138e19dfac4Smrg # Only create the output if not a dry run. 11139e19dfac4Smrg $opt_dry_run || { 11140e19dfac4Smrg for installed in no yes; do 111417cea3689Smrg if test yes = "$installed"; then 11142e19dfac4Smrg if test -z "$install_libdir"; then 11143e19dfac4Smrg break 11144e19dfac4Smrg fi 111457cea3689Smrg output=$output_objdir/${outputname}i 11146e19dfac4Smrg # Replace all uninstalled libtool libraries with the installed ones 11147e19dfac4Smrg newdependency_libs= 11148e19dfac4Smrg for deplib in $dependency_libs; do 11149e19dfac4Smrg case $deplib in 11150e19dfac4Smrg *.la) 11151e19dfac4Smrg func_basename "$deplib" 111527cea3689Smrg name=$func_basename_result 11153313a12fdSmrg func_resolve_sysroot "$deplib" 111547cea3689Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 11155e19dfac4Smrg test -z "$libdir" && \ 111567cea3689Smrg func_fatal_error "'$deplib' is not a valid libtool archive" 11157313a12fdSmrg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 11158313a12fdSmrg ;; 11159313a12fdSmrg -L*) 11160313a12fdSmrg func_stripname -L '' "$deplib" 11161313a12fdSmrg func_replace_sysroot "$func_stripname_result" 11162313a12fdSmrg func_append newdependency_libs " -L$func_replace_sysroot_result" 11163e19dfac4Smrg ;; 11164313a12fdSmrg -R*) 11165313a12fdSmrg func_stripname -R '' "$deplib" 11166313a12fdSmrg func_replace_sysroot "$func_stripname_result" 11167313a12fdSmrg func_append newdependency_libs " -R$func_replace_sysroot_result" 11168313a12fdSmrg ;; 11169313a12fdSmrg *) func_append newdependency_libs " $deplib" ;; 11170e19dfac4Smrg esac 11171e19dfac4Smrg done 111727cea3689Smrg dependency_libs=$newdependency_libs 11173e19dfac4Smrg newdlfiles= 11174e19dfac4Smrg 11175e19dfac4Smrg for lib in $dlfiles; do 11176e19dfac4Smrg case $lib in 11177e19dfac4Smrg *.la) 11178e19dfac4Smrg func_basename "$lib" 111797cea3689Smrg name=$func_basename_result 111807cea3689Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 11181e19dfac4Smrg test -z "$libdir" && \ 111827cea3689Smrg func_fatal_error "'$lib' is not a valid libtool archive" 11183313a12fdSmrg func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 11184e19dfac4Smrg ;; 11185313a12fdSmrg *) func_append newdlfiles " $lib" ;; 11186e19dfac4Smrg esac 11187e19dfac4Smrg done 111887cea3689Smrg dlfiles=$newdlfiles 11189e19dfac4Smrg newdlprefiles= 11190e19dfac4Smrg for lib in $dlprefiles; do 11191e19dfac4Smrg case $lib in 11192e19dfac4Smrg *.la) 11193e19dfac4Smrg # Only pass preopened files to the pseudo-archive (for 11194e19dfac4Smrg # eventual linking with the app. that links it) if we 11195e19dfac4Smrg # didn't already link the preopened objects directly into 11196e19dfac4Smrg # the library: 11197e19dfac4Smrg func_basename "$lib" 111987cea3689Smrg name=$func_basename_result 111997cea3689Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 11200e19dfac4Smrg test -z "$libdir" && \ 112017cea3689Smrg func_fatal_error "'$lib' is not a valid libtool archive" 11202313a12fdSmrg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 11203e19dfac4Smrg ;; 11204e19dfac4Smrg esac 11205e19dfac4Smrg done 112067cea3689Smrg dlprefiles=$newdlprefiles 11207e19dfac4Smrg else 11208e19dfac4Smrg newdlfiles= 11209e19dfac4Smrg for lib in $dlfiles; do 11210e19dfac4Smrg case $lib in 112117cea3689Smrg [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 11212e19dfac4Smrg *) abs=`pwd`"/$lib" ;; 11213e19dfac4Smrg esac 11214313a12fdSmrg func_append newdlfiles " $abs" 11215e19dfac4Smrg done 112167cea3689Smrg dlfiles=$newdlfiles 11217e19dfac4Smrg newdlprefiles= 11218e19dfac4Smrg for lib in $dlprefiles; do 11219e19dfac4Smrg case $lib in 112207cea3689Smrg [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 11221e19dfac4Smrg *) abs=`pwd`"/$lib" ;; 11222e19dfac4Smrg esac 11223313a12fdSmrg func_append newdlprefiles " $abs" 11224e19dfac4Smrg done 112257cea3689Smrg dlprefiles=$newdlprefiles 11226e19dfac4Smrg fi 11227e19dfac4Smrg $RM $output 11228e19dfac4Smrg # place dlname in correct position for cygwin 11229313a12fdSmrg # In fact, it would be nice if we could use this code for all target 11230313a12fdSmrg # systems that can't hard-code library paths into their executables 11231313a12fdSmrg # and that have no shared library path variable independent of PATH, 11232313a12fdSmrg # but it turns out we can't easily determine that from inspecting 11233313a12fdSmrg # libtool variables, so we have to hard-code the OSs to which it 11234313a12fdSmrg # applies here; at the moment, that means platforms that use the PE 11235313a12fdSmrg # object format with DLL files. See the long comment at the top of 11236313a12fdSmrg # tests/bindir.at for full details. 11237e19dfac4Smrg tdlname=$dlname 11238e19dfac4Smrg case $host,$output,$installed,$module,$dlname in 11239ae545d91Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *windows*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 11240313a12fdSmrg # If a -bindir argument was supplied, place the dll there. 112417cea3689Smrg if test -n "$bindir"; then 11242313a12fdSmrg func_relative_path "$install_libdir" "$bindir" 112437cea3689Smrg tdlname=$func_relative_path_result/$dlname 11244313a12fdSmrg else 11245313a12fdSmrg # Otherwise fall back on heuristic. 11246313a12fdSmrg tdlname=../bin/$dlname 11247313a12fdSmrg fi 11248313a12fdSmrg ;; 11249e19dfac4Smrg esac 11250e19dfac4Smrg $ECHO > $output "\ 11251e19dfac4Smrg# $outputname - a libtool library file 112527cea3689Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 11253e19dfac4Smrg# 11254e19dfac4Smrg# Please DO NOT delete this file! 11255e19dfac4Smrg# It is necessary for linking the library. 1125627702724Smrg 11257e19dfac4Smrg# The name that we can dlopen(3). 11258e19dfac4Smrgdlname='$tdlname' 1125927702724Smrg 11260e19dfac4Smrg# Names of this library. 11261e19dfac4Smrglibrary_names='$library_names' 1126227702724Smrg 11263e19dfac4Smrg# The name of the static archive. 11264e19dfac4Smrgold_library='$old_library' 1126527702724Smrg 112667cea3689Smrg# Linker flags that cannot go in dependency_libs. 11267e19dfac4Smrginherited_linker_flags='$new_inherited_linker_flags' 1126827702724Smrg 11269e19dfac4Smrg# Libraries that this one depends upon. 11270e19dfac4Smrgdependency_libs='$dependency_libs' 1127127702724Smrg 11272e19dfac4Smrg# Names of additional weak libraries provided by this library 11273e19dfac4Smrgweak_library_names='$weak_libs' 1127427702724Smrg 11275e19dfac4Smrg# Version information for $libname. 11276e19dfac4Smrgcurrent=$current 11277e19dfac4Smrgage=$age 11278e19dfac4Smrgrevision=$revision 1127927702724Smrg 11280e19dfac4Smrg# Is this an already installed library? 11281e19dfac4Smrginstalled=$installed 1128227702724Smrg 11283e19dfac4Smrg# Should we warn about portability when linking against -modules? 11284e19dfac4Smrgshouldnotlink=$module 1128527702724Smrg 11286e19dfac4Smrg# Files to dlopen/dlpreopen 11287e19dfac4Smrgdlopen='$dlfiles' 11288e19dfac4Smrgdlpreopen='$dlprefiles' 1128927702724Smrg 11290e19dfac4Smrg# Directory that this library needs to be installed in: 11291e19dfac4Smrglibdir='$install_libdir'" 112927cea3689Smrg if test no,yes = "$installed,$need_relink"; then 11293e19dfac4Smrg $ECHO >> $output "\ 11294e19dfac4Smrgrelink_command=\"$relink_command\"" 11295e19dfac4Smrg fi 11296e19dfac4Smrg done 11297e19dfac4Smrg } 1129827702724Smrg 11299e19dfac4Smrg # Do a symbolic link so that the libtool archive can be found in 11300e19dfac4Smrg # LD_LIBRARY_PATH before the program is installed. 11301e19dfac4Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 11302e19dfac4Smrg ;; 11303e19dfac4Smrg esac 11304e19dfac4Smrg exit $EXIT_SUCCESS 11305e19dfac4Smrg} 1130627702724Smrg 113077cea3689Smrgif test link = "$opt_mode" || test relink = "$opt_mode"; then 113087cea3689Smrg func_mode_link ${1+"$@"} 113097cea3689Smrgfi 1131027702724Smrg 1131127702724Smrg 11312e19dfac4Smrg# func_mode_uninstall arg... 11313e19dfac4Smrgfunc_mode_uninstall () 11314e19dfac4Smrg{ 113157cea3689Smrg $debug_cmd 113167cea3689Smrg 113177cea3689Smrg RM=$nonopt 1131827702724Smrg files= 113197cea3689Smrg rmforce=false 1132027702724Smrg exit_status=0 1132127702724Smrg 1132227702724Smrg # This variable tells wrapper scripts just to set variables rather 1132327702724Smrg # than running their programs. 113247cea3689Smrg libtool_install_magic=$magic 1132527702724Smrg 1132627702724Smrg for arg 1132727702724Smrg do 1132827702724Smrg case $arg in 113297cea3689Smrg -f) func_append RM " $arg"; rmforce=: ;; 11330313a12fdSmrg -*) func_append RM " $arg" ;; 11331313a12fdSmrg *) func_append files " $arg" ;; 1133227702724Smrg esac 1133327702724Smrg done 1133427702724Smrg 11335e19dfac4Smrg test -z "$RM" && \ 11336e19dfac4Smrg func_fatal_help "you must specify an RM program" 1133727702724Smrg 1133827702724Smrg rmdirs= 1133927702724Smrg 1134027702724Smrg for file in $files; do 11341e19dfac4Smrg func_dirname "$file" "" "." 113427cea3689Smrg dir=$func_dirname_result 113437cea3689Smrg if test . = "$dir"; then 113447cea3689Smrg odir=$objdir 1134527702724Smrg else 113467cea3689Smrg odir=$dir/$objdir 1134727702724Smrg fi 11348e19dfac4Smrg func_basename "$file" 113497cea3689Smrg name=$func_basename_result 113507cea3689Smrg test uninstall = "$opt_mode" && odir=$dir 1135127702724Smrg 11352313a12fdSmrg # Remember odir for removal later, being careful to avoid duplicates 113537cea3689Smrg if test clean = "$opt_mode"; then 1135427702724Smrg case " $rmdirs " in 11355313a12fdSmrg *" $odir "*) ;; 11356313a12fdSmrg *) func_append rmdirs " $odir" ;; 1135727702724Smrg esac 1135827702724Smrg fi 1135927702724Smrg 1136027702724Smrg # Don't error if the file doesn't exist and rm -f was used. 11361e19dfac4Smrg if { test -L "$file"; } >/dev/null 2>&1 || 11362e19dfac4Smrg { test -h "$file"; } >/dev/null 2>&1 || 11363e19dfac4Smrg test -f "$file"; then 1136427702724Smrg : 1136527702724Smrg elif test -d "$file"; then 1136627702724Smrg exit_status=1 1136727702724Smrg continue 113687cea3689Smrg elif $rmforce; then 1136927702724Smrg continue 1137027702724Smrg fi 1137127702724Smrg 113727cea3689Smrg rmfiles=$file 1137327702724Smrg 1137427702724Smrg case $name in 1137527702724Smrg *.la) 1137627702724Smrg # Possibly a libtool archive, so verify it. 11377e19dfac4Smrg if func_lalib_p "$file"; then 11378e19dfac4Smrg func_source $dir/$name 1137927702724Smrg 1138027702724Smrg # Delete the libtool libraries and symlinks. 1138127702724Smrg for n in $library_names; do 11382313a12fdSmrg func_append rmfiles " $odir/$n" 1138327702724Smrg done 11384313a12fdSmrg test -n "$old_library" && func_append rmfiles " $odir/$old_library" 1138527702724Smrg 113867cea3689Smrg case $opt_mode in 1138727702724Smrg clean) 11388313a12fdSmrg case " $library_names " in 1138927702724Smrg *" $dlname "*) ;; 11390313a12fdSmrg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 1139127702724Smrg esac 11392313a12fdSmrg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 1139327702724Smrg ;; 1139427702724Smrg uninstall) 1139527702724Smrg if test -n "$library_names"; then 1139627702724Smrg # Do each command in the postuninstall commands. 113977cea3689Smrg func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' 1139827702724Smrg fi 1139927702724Smrg 1140027702724Smrg if test -n "$old_library"; then 1140127702724Smrg # Do each command in the old_postuninstall commands. 114027cea3689Smrg func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' 1140327702724Smrg fi 1140427702724Smrg # FIXME: should reinstall the best remaining shared library. 1140527702724Smrg ;; 1140627702724Smrg esac 1140727702724Smrg fi 1140827702724Smrg ;; 1140927702724Smrg 1141027702724Smrg *.lo) 1141127702724Smrg # Possibly a libtool object, so verify it. 11412e19dfac4Smrg if func_lalib_p "$file"; then 1141327702724Smrg 1141427702724Smrg # Read the .lo file 11415e19dfac4Smrg func_source $dir/$name 1141627702724Smrg 1141727702724Smrg # Add PIC object to the list of files to remove. 114187cea3689Smrg if test -n "$pic_object" && test none != "$pic_object"; then 11419313a12fdSmrg func_append rmfiles " $dir/$pic_object" 1142027702724Smrg fi 1142127702724Smrg 1142227702724Smrg # Add non-PIC object to the list of files to remove. 114237cea3689Smrg if test -n "$non_pic_object" && test none != "$non_pic_object"; then 11424313a12fdSmrg func_append rmfiles " $dir/$non_pic_object" 1142527702724Smrg fi 1142627702724Smrg fi 1142727702724Smrg ;; 1142827702724Smrg 1142927702724Smrg *) 114307cea3689Smrg if test clean = "$opt_mode"; then 1143127702724Smrg noexename=$name 1143227702724Smrg case $file in 1143327702724Smrg *.exe) 11434e19dfac4Smrg func_stripname '' '.exe' "$file" 11435e19dfac4Smrg file=$func_stripname_result 11436e19dfac4Smrg func_stripname '' '.exe' "$name" 11437e19dfac4Smrg noexename=$func_stripname_result 1143827702724Smrg # $file with .exe has already been added to rmfiles, 1143927702724Smrg # add $file without .exe 11440313a12fdSmrg func_append rmfiles " $file" 1144127702724Smrg ;; 1144227702724Smrg esac 1144327702724Smrg # Do a test to see if this is a libtool program. 11444e19dfac4Smrg if func_ltwrapper_p "$file"; then 11445e19dfac4Smrg if func_ltwrapper_executable_p "$file"; then 11446e19dfac4Smrg func_ltwrapper_scriptname "$file" 11447e19dfac4Smrg relink_command= 11448e19dfac4Smrg func_source $func_ltwrapper_scriptname_result 11449313a12fdSmrg func_append rmfiles " $func_ltwrapper_scriptname_result" 11450e19dfac4Smrg else 11451e19dfac4Smrg relink_command= 11452e19dfac4Smrg func_source $dir/$noexename 11453e19dfac4Smrg fi 1145427702724Smrg 1145527702724Smrg # note $name still contains .exe if it was in $file originally 1145627702724Smrg # as does the version of $file that was added into $rmfiles 114577cea3689Smrg func_append rmfiles " $odir/$name $odir/${name}S.$objext" 114587cea3689Smrg if test yes = "$fast_install" && test -n "$relink_command"; then 11459313a12fdSmrg func_append rmfiles " $odir/lt-$name" 1146027702724Smrg fi 114617cea3689Smrg if test "X$noexename" != "X$name"; then 114627cea3689Smrg func_append rmfiles " $odir/lt-$noexename.c" 1146327702724Smrg fi 1146427702724Smrg fi 1146527702724Smrg fi 1146627702724Smrg ;; 1146727702724Smrg esac 11468e19dfac4Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 1146927702724Smrg done 1147027702724Smrg 114717cea3689Smrg # Try to remove the $objdir's in the directories where we deleted files 1147227702724Smrg for dir in $rmdirs; do 1147327702724Smrg if test -d "$dir"; then 11474e19dfac4Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 1147527702724Smrg fi 1147627702724Smrg done 1147727702724Smrg 1147827702724Smrg exit $exit_status 11479e19dfac4Smrg} 1148027702724Smrg 114817cea3689Smrgif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then 114827cea3689Smrg func_mode_uninstall ${1+"$@"} 114837cea3689Smrgfi 1148427702724Smrg 11485313a12fdSmrgtest -z "$opt_mode" && { 114867cea3689Smrg help=$generic_help 11487e19dfac4Smrg func_fatal_help "you must specify a MODE" 11488e19dfac4Smrg} 11489e19dfac4Smrg 11490e19dfac4Smrgtest -z "$exec_cmd" && \ 114917cea3689Smrg func_fatal_help "invalid operation mode '$opt_mode'" 1149227702724Smrg 1149327702724Smrgif test -n "$exec_cmd"; then 11494e19dfac4Smrg eval exec "$exec_cmd" 1149527702724Smrg exit $EXIT_FAILURE 1149627702724Smrgfi 1149727702724Smrg 11498e19dfac4Smrgexit $exit_status 1149927702724Smrg 1150027702724Smrg 1150127702724Smrg# The TAGs below are defined such that we never get into a situation 115027cea3689Smrg# where we disable both kinds of libraries. Given conflicting 1150327702724Smrg# choices, we go for a static library, that is the most portable, 1150427702724Smrg# since we can't tell whether shared libraries were disabled because 1150527702724Smrg# the user asked for that or because the platform doesn't support 1150627702724Smrg# them. This is particularly important on AIX, because we don't 1150727702724Smrg# support having both static and shared libraries enabled at the same 1150827702724Smrg# time on that platform, so we default to a shared-only configuration. 1150927702724Smrg# If a disable-shared tag is given, we'll fallback to a static-only 1151027702724Smrg# configuration. But we'll never go from static-only to shared-only. 1151127702724Smrg 1151227702724Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 11513e19dfac4Smrgbuild_libtool_libs=no 11514e19dfac4Smrgbuild_old_libs=yes 1151527702724Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 1151627702724Smrg 1151727702724Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 11518e19dfac4Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 1151927702724Smrg# ### END LIBTOOL TAG CONFIG: disable-static 1152027702724Smrg 1152127702724Smrg# Local Variables: 1152227702724Smrg# mode:shell-script 1152327702724Smrg# sh-indentation:2 1152427702724Smrg# End: 11525