ltmain.sh revision 95b7a5c8
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 595b7a5c8Smrg# libtool (GNU libtool) 2.4.7 67cea3689Smrg# Provide generalized library-building support services. 7e19dfac4Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 8e19dfac4Smrg 995b7a5c8Smrg# Copyright (C) 1996-2019, 2021-2022 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 3495b7a5c8SmrgVERSION=2.4.7 3595b7a5c8Smrgpackage_revision=2.4.7 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# 7595b7a5c8Smrg# Copyright (C) 2004-2019, 2021 Bootstrap Authors 7695b7a5c8Smrg# 7795b7a5c8Smrg# This file is dual licensed under the terms of the MIT license 7895b7a5c8Smrg# <https://opensource.org/license/MIT>, and GPL version 2 or later 7995b7a5c8Smrg# <http://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 1467cea3689Smrg# There are apparently some retarded 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 5927cea3689Smrg # useable 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. 7427cea3689Smrg# value retuned 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 900e19dfac4Smrg # list incase 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# 153995b7a5c8Smrg# Copyright (C) 2010-2019, 2021 Bootstrap Authors 154095b7a5c8Smrg# 154195b7a5c8Smrg# This file is dual licensed under the terms of the MIT license 154295b7a5c8Smrg# <https://opensource.org/license/MIT>, and GPL version 2 or later 154395b7a5c8Smrg# <http://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. 221895b7a5c8Smrgscriptversion='(GNU libtool) 2.4.7' 221927702724Smrg 222027702724Smrg 22217cea3689Smrg# func_echo ARG... 22227cea3689Smrg# ---------------- 22237cea3689Smrg# Libtool also displays the current mode in messages, so override 22247cea3689Smrg# funclib.sh func_echo with this custom definition. 22257cea3689Smrgfunc_echo () 2226313a12fdSmrg{ 22277cea3689Smrg $debug_cmd 2228313a12fdSmrg 22297cea3689Smrg _G_message=$* 2230313a12fdSmrg 22317cea3689Smrg func_echo_IFS=$IFS 22327cea3689Smrg IFS=$nl 22337cea3689Smrg for _G_line in $_G_message; do 22347cea3689Smrg IFS=$func_echo_IFS 22357cea3689Smrg $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" 22367cea3689Smrg done 22377cea3689Smrg IFS=$func_echo_IFS 22387cea3689Smrg} 2239313a12fdSmrg 22407cea3689Smrg 22417cea3689Smrg# func_warning ARG... 22427cea3689Smrg# ------------------- 22437cea3689Smrg# Libtool warnings are not categorized, so override funclib.sh 22447cea3689Smrg# func_warning with this simpler definition. 22457cea3689Smrgfunc_warning () 2246313a12fdSmrg{ 22477cea3689Smrg $debug_cmd 2248313a12fdSmrg 22497cea3689Smrg $warning_func ${1+"$@"} 22507cea3689Smrg} 2251313a12fdSmrg 2252313a12fdSmrg 22537cea3689Smrg## ---------------- ## 22547cea3689Smrg## Options parsing. ## 22557cea3689Smrg## ---------------- ## 22567cea3689Smrg 22577cea3689Smrg# Hook in the functions to make sure our own options are parsed during 22587cea3689Smrg# the option parsing loop. 22597cea3689Smrg 22607cea3689Smrgusage='$progpath [OPTION]... [MODE-ARG]...' 22617cea3689Smrg 22627cea3689Smrg# Short help message in response to '-h'. 22637cea3689Smrgusage_message="Options: 22647cea3689Smrg --config show all configuration variables 22657cea3689Smrg --debug enable verbose shell tracing 22667cea3689Smrg -n, --dry-run display commands without modifying any files 22677cea3689Smrg --features display basic configuration information and exit 22687cea3689Smrg --mode=MODE use operation mode MODE 22697cea3689Smrg --no-warnings equivalent to '-Wnone' 22707cea3689Smrg --preserve-dup-deps don't remove duplicate dependency libraries 22717cea3689Smrg --quiet, --silent don't print informational messages 22727cea3689Smrg --tag=TAG use configuration variables from tag TAG 22737cea3689Smrg -v, --verbose print more informational messages than default 22747cea3689Smrg --version print version information 22757cea3689Smrg -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] 22767cea3689Smrg -h, --help, --help-all print short, long, or detailed help message 22777cea3689Smrg" 2278313a12fdSmrg 22797cea3689Smrg# Additional text appended to 'usage_message' in response to '--help'. 22807cea3689Smrgfunc_help () 2281313a12fdSmrg{ 22827cea3689Smrg $debug_cmd 22837cea3689Smrg 22847cea3689Smrg func_usage_message 22857cea3689Smrg $ECHO "$long_help_message 22867cea3689Smrg 22877cea3689SmrgMODE must be one of the following: 22887cea3689Smrg 22897cea3689Smrg clean remove files from the build directory 22907cea3689Smrg compile compile a source file into a libtool object 22917cea3689Smrg execute automatically set library path, then run a program 22927cea3689Smrg finish complete the installation of libtool libraries 22937cea3689Smrg install install libraries or executables 22947cea3689Smrg link create a library or an executable 22957cea3689Smrg uninstall remove libraries from an installed directory 22967cea3689Smrg 22977cea3689SmrgMODE-ARGS vary depending on the MODE. When passed as first option, 22987cea3689Smrg'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. 22997cea3689SmrgTry '$progname --help --mode=MODE' for a more detailed description of MODE. 23007cea3689Smrg 23017cea3689SmrgWhen reporting a bug, please describe a test case to reproduce it and 23027cea3689Smrginclude the following information: 23037cea3689Smrg 23047cea3689Smrg host-triplet: $host 23057cea3689Smrg shell: $SHELL 23067cea3689Smrg compiler: $LTCC 23077cea3689Smrg compiler flags: $LTCFLAGS 23087cea3689Smrg linker: $LD (gnu? $with_gnu_ld) 230995b7a5c8Smrg version: $progname (GNU libtool) 2.4.7 23107cea3689Smrg automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` 23117cea3689Smrg autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` 23127cea3689Smrg 23137cea3689SmrgReport bugs to <bug-libtool@gnu.org>. 231495b7a5c8SmrgGNU libtool home page: <http://www.gnu.org/software/libtool/>. 23157cea3689SmrgGeneral help using GNU software: <http://www.gnu.org/gethelp/>." 23167cea3689Smrg exit 0 23177cea3689Smrg} 2318313a12fdSmrg 2319313a12fdSmrg 23207cea3689Smrg# func_lo2o OBJECT-NAME 23217cea3689Smrg# --------------------- 23227cea3689Smrg# Transform OBJECT-NAME from a '.lo' suffix to the platform specific 23237cea3689Smrg# object suffix. 23247cea3689Smrg 23257cea3689Smrglo2o=s/\\.lo\$/.$objext/ 23267cea3689Smrgo2lo=s/\\.$objext\$/.lo/ 23277cea3689Smrg 23287cea3689Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 23297cea3689Smrg eval 'func_lo2o () 23307cea3689Smrg { 23317cea3689Smrg case $1 in 23327cea3689Smrg *.lo) func_lo2o_result=${1%.lo}.$objext ;; 23337cea3689Smrg * ) func_lo2o_result=$1 ;; 23347cea3689Smrg esac 23357cea3689Smrg }' 23367cea3689Smrg 23377cea3689Smrg # func_xform LIBOBJ-OR-SOURCE 23387cea3689Smrg # --------------------------- 23397cea3689Smrg # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) 23407cea3689Smrg # suffix to a '.lo' libtool-object suffix. 23417cea3689Smrg eval 'func_xform () 23427cea3689Smrg { 23437cea3689Smrg func_xform_result=${1%.*}.lo 23447cea3689Smrg }' 23457cea3689Smrgelse 23467cea3689Smrg # ...otherwise fall back to using sed. 23477cea3689Smrg func_lo2o () 23487cea3689Smrg { 23497cea3689Smrg func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` 23507cea3689Smrg } 23517cea3689Smrg 23527cea3689Smrg func_xform () 23537cea3689Smrg { 23547cea3689Smrg func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` 23557cea3689Smrg } 23567cea3689Smrgfi 2357313a12fdSmrg 2358313a12fdSmrg 23597cea3689Smrg# func_fatal_configuration ARG... 23607cea3689Smrg# ------------------------------- 2361e19dfac4Smrg# Echo program name prefixed message to standard error, followed by 2362e19dfac4Smrg# a configuration failure hint, and exit. 2363e19dfac4Smrgfunc_fatal_configuration () 2364e19dfac4Smrg{ 236595b7a5c8Smrg func_fatal_error ${1+"$@"} \ 23667cea3689Smrg "See the $PACKAGE documentation for more information." \ 23677cea3689Smrg "Fatal configuration error." 2368e19dfac4Smrg} 2369e19dfac4Smrg 2370e19dfac4Smrg 2371e19dfac4Smrg# func_config 23727cea3689Smrg# ----------- 2373e19dfac4Smrg# Display the configuration for all the tags in this script. 2374e19dfac4Smrgfunc_config () 2375e19dfac4Smrg{ 2376e19dfac4Smrg re_begincf='^# ### BEGIN LIBTOOL' 2377e19dfac4Smrg re_endcf='^# ### END LIBTOOL' 2378e19dfac4Smrg 2379e19dfac4Smrg # Default configuration. 2380e19dfac4Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 238127702724Smrg 238227702724Smrg # Now print the configurations for the tags. 238327702724Smrg for tagname in $taglist; do 2384e19dfac4Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 238527702724Smrg done 238627702724Smrg 2387e19dfac4Smrg exit $? 2388e19dfac4Smrg} 238927702724Smrg 23907cea3689Smrg 2391e19dfac4Smrg# func_features 23927cea3689Smrg# ------------- 2393e19dfac4Smrg# Display the features supported by this script. 2394e19dfac4Smrgfunc_features () 2395e19dfac4Smrg{ 2396313a12fdSmrg echo "host: $host" 23977cea3689Smrg if test yes = "$build_libtool_libs"; then 2398313a12fdSmrg echo "enable shared libraries" 239927702724Smrg else 2400313a12fdSmrg echo "disable shared libraries" 240127702724Smrg fi 24027cea3689Smrg if test yes = "$build_old_libs"; then 2403313a12fdSmrg echo "enable static libraries" 240427702724Smrg else 2405313a12fdSmrg echo "disable static libraries" 240627702724Smrg fi 2407e19dfac4Smrg 240827702724Smrg exit $? 2409e19dfac4Smrg} 2410e19dfac4Smrg 24117cea3689Smrg 24127cea3689Smrg# func_enable_tag TAGNAME 24137cea3689Smrg# ----------------------- 2414e19dfac4Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 2415e19dfac4Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 2416e19dfac4Smrg# variable here. 2417e19dfac4Smrgfunc_enable_tag () 2418e19dfac4Smrg{ 24197cea3689Smrg # Global variable: 24207cea3689Smrg tagname=$1 242127702724Smrg 24227cea3689Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 24237cea3689Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 24247cea3689Smrg sed_extractcf=/$re_begincf/,/$re_endcf/p 242527702724Smrg 24267cea3689Smrg # Validate tagname. 24277cea3689Smrg case $tagname in 24287cea3689Smrg *[!-_A-Za-z0-9,/]*) 24297cea3689Smrg func_fatal_error "invalid tag name: $tagname" 24307cea3689Smrg ;; 24317cea3689Smrg esac 243227702724Smrg 24337cea3689Smrg # Don't test for the "default" C tag, as we know it's 24347cea3689Smrg # there but not specially marked. 24357cea3689Smrg case $tagname in 24367cea3689Smrg CC) ;; 2437e19dfac4Smrg *) 24387cea3689Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 24397cea3689Smrg taglist="$taglist $tagname" 24407cea3689Smrg 24417cea3689Smrg # Evaluate the configuration. Be careful to quote the path 24427cea3689Smrg # and the sed script, to avoid splitting on whitespace, but 24437cea3689Smrg # also don't use non-portable quotes within backquotes within 24447cea3689Smrg # quotes we have to do it in 2 steps: 24457cea3689Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 24467cea3689Smrg eval "$extractedcf" 24477cea3689Smrg else 24487cea3689Smrg func_error "ignoring unknown tag $tagname" 24497cea3689Smrg fi 24507cea3689Smrg ;; 24517cea3689Smrg esac 2452e19dfac4Smrg} 245327702724Smrg 24547cea3689Smrg 2455313a12fdSmrg# func_check_version_match 24567cea3689Smrg# ------------------------ 2457313a12fdSmrg# Ensure that we are using m4 macros, and libtool script from the same 2458313a12fdSmrg# release of libtool. 2459313a12fdSmrgfunc_check_version_match () 2460e19dfac4Smrg{ 24617cea3689Smrg if test "$package_revision" != "$macro_revision"; then 24627cea3689Smrg if test "$VERSION" != "$macro_version"; then 24637cea3689Smrg if test -z "$macro_version"; then 24647cea3689Smrg cat >&2 <<_LT_EOF 2465313a12fdSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2466313a12fdSmrg$progname: definition of this LT_INIT comes from an older release. 2467313a12fdSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2468313a12fdSmrg$progname: and run autoconf again. 2469313a12fdSmrg_LT_EOF 24707cea3689Smrg else 24717cea3689Smrg cat >&2 <<_LT_EOF 2472313a12fdSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2473313a12fdSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 2474313a12fdSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2475313a12fdSmrg$progname: and run autoconf again. 2476313a12fdSmrg_LT_EOF 24777cea3689Smrg fi 24787cea3689Smrg else 24797cea3689Smrg cat >&2 <<_LT_EOF 2480313a12fdSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 2481313a12fdSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 2482313a12fdSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 2483313a12fdSmrg$progname: of $PACKAGE $VERSION and run autoconf again. 2484313a12fdSmrg_LT_EOF 24857cea3689Smrg fi 2486313a12fdSmrg 24877cea3689Smrg exit $EXIT_MISMATCH 24887cea3689Smrg fi 2489313a12fdSmrg} 2490313a12fdSmrg 2491313a12fdSmrg 24927cea3689Smrg# libtool_options_prep [ARG]... 24937cea3689Smrg# ----------------------------- 24947cea3689Smrg# Preparation for options parsed by libtool. 24957cea3689Smrglibtool_options_prep () 24967cea3689Smrg{ 24977cea3689Smrg $debug_mode 249827702724Smrg 24997cea3689Smrg # Option defaults: 25007cea3689Smrg opt_config=false 25017cea3689Smrg opt_dlopen= 25027cea3689Smrg opt_dry_run=false 25037cea3689Smrg opt_help=false 25047cea3689Smrg opt_mode= 25057cea3689Smrg opt_preserve_dup_deps=false 25067cea3689Smrg opt_quiet=false 250727702724Smrg 25087cea3689Smrg nonopt= 25097cea3689Smrg preserve_args= 2510313a12fdSmrg 251195b7a5c8Smrg _G_rc_lt_options_prep=: 251295b7a5c8Smrg 25137cea3689Smrg # Shorthand for --mode=foo, only valid as the first argument 25147cea3689Smrg case $1 in 25157cea3689Smrg clean|clea|cle|cl) 25167cea3689Smrg shift; set dummy --mode clean ${1+"$@"}; shift 25177cea3689Smrg ;; 25187cea3689Smrg compile|compil|compi|comp|com|co|c) 25197cea3689Smrg shift; set dummy --mode compile ${1+"$@"}; shift 25207cea3689Smrg ;; 25217cea3689Smrg execute|execut|execu|exec|exe|ex|e) 25227cea3689Smrg shift; set dummy --mode execute ${1+"$@"}; shift 25237cea3689Smrg ;; 25247cea3689Smrg finish|finis|fini|fin|fi|f) 25257cea3689Smrg shift; set dummy --mode finish ${1+"$@"}; shift 25267cea3689Smrg ;; 25277cea3689Smrg install|instal|insta|inst|ins|in|i) 25287cea3689Smrg shift; set dummy --mode install ${1+"$@"}; shift 25297cea3689Smrg ;; 25307cea3689Smrg link|lin|li|l) 25317cea3689Smrg shift; set dummy --mode link ${1+"$@"}; shift 25327cea3689Smrg ;; 25337cea3689Smrg uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 25347cea3689Smrg shift; set dummy --mode uninstall ${1+"$@"}; shift 25357cea3689Smrg ;; 253695b7a5c8Smrg *) 253795b7a5c8Smrg _G_rc_lt_options_prep=false 253895b7a5c8Smrg ;; 25397cea3689Smrg esac 25407cea3689Smrg 254195b7a5c8Smrg if $_G_rc_lt_options_prep; then 254295b7a5c8Smrg # Pass back the list of options. 254395b7a5c8Smrg func_quote eval ${1+"$@"} 254495b7a5c8Smrg libtool_options_prep_result=$func_quote_result 254595b7a5c8Smrg fi 25467cea3689Smrg} 25477cea3689Smrgfunc_add_hook func_options_prep libtool_options_prep 2548313a12fdSmrg 2549313a12fdSmrg 25507cea3689Smrg# libtool_parse_options [ARG]... 25517cea3689Smrg# --------------------------------- 25527cea3689Smrg# Provide handling for libtool specific options. 25537cea3689Smrglibtool_parse_options () 2554313a12fdSmrg{ 25557cea3689Smrg $debug_cmd 2556e19dfac4Smrg 255795b7a5c8Smrg _G_rc_lt_parse_options=false 255895b7a5c8Smrg 25597cea3689Smrg # Perform our own loop to consume as many options as possible in 25607cea3689Smrg # each iteration. 25617cea3689Smrg while test $# -gt 0; do 256295b7a5c8Smrg _G_match_lt_parse_options=: 25637cea3689Smrg _G_opt=$1 25647cea3689Smrg shift 25657cea3689Smrg case $_G_opt in 25667cea3689Smrg --dry-run|--dryrun|-n) 25677cea3689Smrg opt_dry_run=: 25687cea3689Smrg ;; 25697cea3689Smrg 25707cea3689Smrg --config) func_config ;; 25717cea3689Smrg 25727cea3689Smrg --dlopen|-dlopen) 25737cea3689Smrg opt_dlopen="${opt_dlopen+$opt_dlopen 25747cea3689Smrg}$1" 25757cea3689Smrg shift 25767cea3689Smrg ;; 25777cea3689Smrg 25787cea3689Smrg --preserve-dup-deps) 25797cea3689Smrg opt_preserve_dup_deps=: ;; 25807cea3689Smrg 25817cea3689Smrg --features) func_features ;; 25827cea3689Smrg 25837cea3689Smrg --finish) set dummy --mode finish ${1+"$@"}; shift ;; 25847cea3689Smrg 25857cea3689Smrg --help) opt_help=: ;; 25867cea3689Smrg 25877cea3689Smrg --help-all) opt_help=': help-all' ;; 25887cea3689Smrg 25897cea3689Smrg --mode) test $# = 0 && func_missing_arg $_G_opt && break 25907cea3689Smrg opt_mode=$1 25917cea3689Smrg case $1 in 25927cea3689Smrg # Valid mode arguments: 25937cea3689Smrg clean|compile|execute|finish|install|link|relink|uninstall) ;; 25947cea3689Smrg 25957cea3689Smrg # Catch anything else as an error 25967cea3689Smrg *) func_error "invalid argument for $_G_opt" 25977cea3689Smrg exit_cmd=exit 25987cea3689Smrg break 25997cea3689Smrg ;; 26007cea3689Smrg esac 26017cea3689Smrg shift 26027cea3689Smrg ;; 26037cea3689Smrg 26047cea3689Smrg --no-silent|--no-quiet) 26057cea3689Smrg opt_quiet=false 26067cea3689Smrg func_append preserve_args " $_G_opt" 26077cea3689Smrg ;; 26087cea3689Smrg 26097cea3689Smrg --no-warnings|--no-warning|--no-warn) 26107cea3689Smrg opt_warning=false 26117cea3689Smrg func_append preserve_args " $_G_opt" 26127cea3689Smrg ;; 26137cea3689Smrg 26147cea3689Smrg --no-verbose) 26157cea3689Smrg opt_verbose=false 26167cea3689Smrg func_append preserve_args " $_G_opt" 26177cea3689Smrg ;; 26187cea3689Smrg 26197cea3689Smrg --silent|--quiet) 26207cea3689Smrg opt_quiet=: 26217cea3689Smrg opt_verbose=false 26227cea3689Smrg func_append preserve_args " $_G_opt" 26237cea3689Smrg ;; 26247cea3689Smrg 26257cea3689Smrg --tag) test $# = 0 && func_missing_arg $_G_opt && break 26267cea3689Smrg opt_tag=$1 26277cea3689Smrg func_append preserve_args " $_G_opt $1" 26287cea3689Smrg func_enable_tag "$1" 26297cea3689Smrg shift 26307cea3689Smrg ;; 26317cea3689Smrg 26327cea3689Smrg --verbose|-v) opt_quiet=false 26337cea3689Smrg opt_verbose=: 26347cea3689Smrg func_append preserve_args " $_G_opt" 26357cea3689Smrg ;; 26367cea3689Smrg 263795b7a5c8Smrg # An option not handled by this hook function: 263895b7a5c8Smrg *) set dummy "$_G_opt" ${1+"$@"} ; shift 263995b7a5c8Smrg _G_match_lt_parse_options=false 264095b7a5c8Smrg break 264195b7a5c8Smrg ;; 26427cea3689Smrg esac 264395b7a5c8Smrg $_G_match_lt_parse_options && _G_rc_lt_parse_options=: 26447cea3689Smrg done 2645313a12fdSmrg 264695b7a5c8Smrg if $_G_rc_lt_parse_options; then 264795b7a5c8Smrg # save modified positional parameters for caller 264895b7a5c8Smrg func_quote eval ${1+"$@"} 264995b7a5c8Smrg libtool_parse_options_result=$func_quote_result 265095b7a5c8Smrg fi 26517cea3689Smrg} 26527cea3689Smrgfunc_add_hook func_parse_options libtool_parse_options 2653e19dfac4Smrg 265427702724Smrg 2655e19dfac4Smrg 26567cea3689Smrg# libtool_validate_options [ARG]... 26577cea3689Smrg# --------------------------------- 26587cea3689Smrg# Perform any sanity checks on option settings and/or unconsumed 26597cea3689Smrg# arguments. 26607cea3689Smrglibtool_validate_options () 26617cea3689Smrg{ 26627cea3689Smrg # save first non-option argument 26637cea3689Smrg if test 0 -lt $#; then 26647cea3689Smrg nonopt=$1 26657cea3689Smrg shift 2666e19dfac4Smrg fi 2667e19dfac4Smrg 26687cea3689Smrg # preserve --debug 26697cea3689Smrg test : = "$debug_cmd" || func_append preserve_args " --debug" 2670e19dfac4Smrg 26717cea3689Smrg case $host in 26727cea3689Smrg # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 26737cea3689Smrg # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 26747cea3689Smrg *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) 26757cea3689Smrg # don't eliminate duplications in $postdeps and $predeps 26767cea3689Smrg opt_duplicate_compiler_generated_deps=: 26777cea3689Smrg ;; 26787cea3689Smrg *) 26797cea3689Smrg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 26807cea3689Smrg ;; 26817cea3689Smrg esac 268227702724Smrg 26837cea3689Smrg $opt_help || { 26847cea3689Smrg # Sanity checks first: 26857cea3689Smrg func_check_version_match 26867cea3689Smrg 26877cea3689Smrg test yes != "$build_libtool_libs" \ 26887cea3689Smrg && test yes != "$build_old_libs" \ 26897cea3689Smrg && func_fatal_configuration "not configured to build any kind of library" 26907cea3689Smrg 26917cea3689Smrg # Darwin sucks 26927cea3689Smrg eval std_shrext=\"$shrext_cmds\" 26937cea3689Smrg 26947cea3689Smrg # Only execute mode is allowed to have -dlopen flags. 26957cea3689Smrg if test -n "$opt_dlopen" && test execute != "$opt_mode"; then 26967cea3689Smrg func_error "unrecognized option '-dlopen'" 26977cea3689Smrg $ECHO "$help" 1>&2 26987cea3689Smrg exit $EXIT_FAILURE 26997cea3689Smrg fi 2700e19dfac4Smrg 27017cea3689Smrg # Change the help message to a mode-specific one. 27027cea3689Smrg generic_help=$help 27037cea3689Smrg help="Try '$progname --help --mode=$opt_mode' for more information." 27047cea3689Smrg } 2705e19dfac4Smrg 27067cea3689Smrg # Pass back the unparsed argument list 270795b7a5c8Smrg func_quote eval ${1+"$@"} 270895b7a5c8Smrg libtool_validate_options_result=$func_quote_result 2709313a12fdSmrg} 27107cea3689Smrgfunc_add_hook func_validate_options libtool_validate_options 2711e19dfac4Smrg 2712e19dfac4Smrg 27137cea3689Smrg# Process options as early as possible so that --help and --version 27147cea3689Smrg# can return quickly. 27157cea3689Smrgfunc_options ${1+"$@"} 27167cea3689Smrgeval set dummy "$func_options_result"; shift 27177cea3689Smrg 271827702724Smrg 271927702724Smrg 2720313a12fdSmrg## ----------- ## 2721313a12fdSmrg## Main. ## 2722313a12fdSmrg## ----------- ## 272327702724Smrg 27247cea3689Smrgmagic='%%%MAGIC variable%%%' 27257cea3689Smrgmagic_exe='%%%MAGIC EXE variable%%%' 27267cea3689Smrg 27277cea3689Smrg# Global variables. 27287cea3689Smrgextracted_archives= 27297cea3689Smrgextracted_serial=0 27307cea3689Smrg 27317cea3689Smrg# If this variable is set in any of the actions, the command in it 27327cea3689Smrg# will be execed at the end. This prevents here-documents from being 27337cea3689Smrg# left over by shells. 27347cea3689Smrgexec_cmd= 27357cea3689Smrg 27367cea3689Smrg 27377cea3689Smrg# A function that is used when there is no print builtin or printf. 27387cea3689Smrgfunc_fallback_echo () 27397cea3689Smrg{ 27407cea3689Smrg eval 'cat <<_LTECHO_EOF 27417cea3689Smrg$1 27427cea3689Smrg_LTECHO_EOF' 27437cea3689Smrg} 27447cea3689Smrg 27457cea3689Smrg# func_generated_by_libtool 27467cea3689Smrg# True iff stdin has been generated by Libtool. This function is only 27477cea3689Smrg# a basic sanity check; it will hardly flush out determined imposters. 27487cea3689Smrgfunc_generated_by_libtool_p () 27497cea3689Smrg{ 27507cea3689Smrg $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 27517cea3689Smrg} 27527cea3689Smrg 2753e19dfac4Smrg# func_lalib_p file 27547cea3689Smrg# True iff FILE is a libtool '.la' library or '.lo' object file. 2755e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out 2756e19dfac4Smrg# determined imposters. 2757e19dfac4Smrgfunc_lalib_p () 2758e19dfac4Smrg{ 2759e19dfac4Smrg test -f "$1" && 27607cea3689Smrg $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p 2761e19dfac4Smrg} 276227702724Smrg 2763e19dfac4Smrg# func_lalib_unsafe_p file 27647cea3689Smrg# True iff FILE is a libtool '.la' library or '.lo' object file. 2765e19dfac4Smrg# This function implements the same check as func_lalib_p without 2766e19dfac4Smrg# resorting to external programs. To this end, it redirects stdin and 2767e19dfac4Smrg# closes it afterwards, without saving the original file descriptor. 2768e19dfac4Smrg# As a safety measure, use it only where a negative result would be 27697cea3689Smrg# fatal anyway. Works if 'file' does not exist. 2770e19dfac4Smrgfunc_lalib_unsafe_p () 2771e19dfac4Smrg{ 2772e19dfac4Smrg lalib_p=no 2773e19dfac4Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 2774e19dfac4Smrg for lalib_p_l in 1 2 3 4 2775e19dfac4Smrg do 2776e19dfac4Smrg read lalib_p_line 27777cea3689Smrg case $lalib_p_line in 2778e19dfac4Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 2779e19dfac4Smrg esac 2780e19dfac4Smrg done 2781e19dfac4Smrg exec 0<&5 5<&- 2782e19dfac4Smrg fi 27837cea3689Smrg test yes = "$lalib_p" 2784e19dfac4Smrg} 278527702724Smrg 2786e19dfac4Smrg# func_ltwrapper_script_p file 2787e19dfac4Smrg# True iff FILE is a libtool wrapper script 2788e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out 2789e19dfac4Smrg# determined imposters. 2790e19dfac4Smrgfunc_ltwrapper_script_p () 2791e19dfac4Smrg{ 27927cea3689Smrg test -f "$1" && 27937cea3689Smrg $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p 2794e19dfac4Smrg} 279527702724Smrg 2796e19dfac4Smrg# func_ltwrapper_executable_p file 2797e19dfac4Smrg# True iff FILE is a libtool wrapper executable 2798e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out 2799e19dfac4Smrg# determined imposters. 2800e19dfac4Smrgfunc_ltwrapper_executable_p () 2801e19dfac4Smrg{ 2802e19dfac4Smrg func_ltwrapper_exec_suffix= 2803e19dfac4Smrg case $1 in 2804e19dfac4Smrg *.exe) ;; 2805e19dfac4Smrg *) func_ltwrapper_exec_suffix=.exe ;; 2806e19dfac4Smrg esac 2807e19dfac4Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 2808e19dfac4Smrg} 280927702724Smrg 2810e19dfac4Smrg# func_ltwrapper_scriptname file 2811e19dfac4Smrg# Assumes file is an ltwrapper_executable 2812e19dfac4Smrg# uses $file to determine the appropriate filename for a 2813e19dfac4Smrg# temporary ltwrapper_script. 2814e19dfac4Smrgfunc_ltwrapper_scriptname () 2815e19dfac4Smrg{ 2816313a12fdSmrg func_dirname_and_basename "$1" "" "." 2817313a12fdSmrg func_stripname '' '.exe' "$func_basename_result" 28187cea3689Smrg func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper 2819e19dfac4Smrg} 282027702724Smrg 2821e19dfac4Smrg# func_ltwrapper_p file 2822e19dfac4Smrg# True iff FILE is a libtool wrapper script or wrapper executable 2823e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out 2824e19dfac4Smrg# determined imposters. 2825e19dfac4Smrgfunc_ltwrapper_p () 2826e19dfac4Smrg{ 2827e19dfac4Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 2828e19dfac4Smrg} 282927702724Smrg 283027702724Smrg 2831e19dfac4Smrg# func_execute_cmds commands fail_cmd 2832e19dfac4Smrg# Execute tilde-delimited COMMANDS. 2833e19dfac4Smrg# If FAIL_CMD is given, eval that upon failure. 2834e19dfac4Smrg# FAIL_CMD may read-access the current command in variable CMD! 2835e19dfac4Smrgfunc_execute_cmds () 2836e19dfac4Smrg{ 28377cea3689Smrg $debug_cmd 28387cea3689Smrg 2839e19dfac4Smrg save_ifs=$IFS; IFS='~' 2840e19dfac4Smrg for cmd in $1; do 28417cea3689Smrg IFS=$sp$nl 2842e19dfac4Smrg eval cmd=\"$cmd\" 28437cea3689Smrg IFS=$save_ifs 2844e19dfac4Smrg func_show_eval "$cmd" "${2-:}" 2845e19dfac4Smrg done 2846e19dfac4Smrg IFS=$save_ifs 2847e19dfac4Smrg} 2848e19dfac4Smrg 2849e19dfac4Smrg 2850e19dfac4Smrg# func_source file 2851e19dfac4Smrg# Source FILE, adding directory component if necessary. 2852e19dfac4Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 2853e19dfac4Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 2854e19dfac4Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 28557cea3689Smrg# 'FILE.' does not work on cygwin managed mounts. 2856e19dfac4Smrgfunc_source () 2857e19dfac4Smrg{ 28587cea3689Smrg $debug_cmd 28597cea3689Smrg 2860e19dfac4Smrg case $1 in 2861e19dfac4Smrg */* | *\\*) . "$1" ;; 2862e19dfac4Smrg *) . "./$1" ;; 2863e19dfac4Smrg esac 2864e19dfac4Smrg} 2865e19dfac4Smrg 2866e19dfac4Smrg 2867313a12fdSmrg# func_resolve_sysroot PATH 2868313a12fdSmrg# Replace a leading = in PATH with a sysroot. Store the result into 2869313a12fdSmrg# func_resolve_sysroot_result 2870313a12fdSmrgfunc_resolve_sysroot () 2871313a12fdSmrg{ 2872313a12fdSmrg func_resolve_sysroot_result=$1 2873313a12fdSmrg case $func_resolve_sysroot_result in 2874313a12fdSmrg =*) 2875313a12fdSmrg func_stripname '=' '' "$func_resolve_sysroot_result" 2876313a12fdSmrg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 2877313a12fdSmrg ;; 2878313a12fdSmrg esac 2879313a12fdSmrg} 2880313a12fdSmrg 2881313a12fdSmrg# func_replace_sysroot PATH 2882313a12fdSmrg# If PATH begins with the sysroot, replace it with = and 2883313a12fdSmrg# store the result into func_replace_sysroot_result. 2884313a12fdSmrgfunc_replace_sysroot () 2885313a12fdSmrg{ 28867cea3689Smrg case $lt_sysroot:$1 in 2887313a12fdSmrg ?*:"$lt_sysroot"*) 2888313a12fdSmrg func_stripname "$lt_sysroot" '' "$1" 28897cea3689Smrg func_replace_sysroot_result='='$func_stripname_result 2890313a12fdSmrg ;; 2891313a12fdSmrg *) 2892313a12fdSmrg # Including no sysroot. 2893313a12fdSmrg func_replace_sysroot_result=$1 2894313a12fdSmrg ;; 2895313a12fdSmrg esac 2896313a12fdSmrg} 2897313a12fdSmrg 2898e19dfac4Smrg# func_infer_tag arg 2899e19dfac4Smrg# Infer tagged configuration to use if any are available and 2900e19dfac4Smrg# if one wasn't chosen via the "--tag" command line option. 2901e19dfac4Smrg# Only attempt this if the compiler in the base compile 2902e19dfac4Smrg# command doesn't match the default compiler. 2903e19dfac4Smrg# arg is usually of the form 'gcc ...' 2904e19dfac4Smrgfunc_infer_tag () 2905e19dfac4Smrg{ 29067cea3689Smrg $debug_cmd 29077cea3689Smrg 2908e19dfac4Smrg if test -n "$available_tags" && test -z "$tagname"; then 2909e19dfac4Smrg CC_quoted= 2910e19dfac4Smrg for arg in $CC; do 2911313a12fdSmrg func_append_quoted CC_quoted "$arg" 2912e19dfac4Smrg done 2913313a12fdSmrg CC_expanded=`func_echo_all $CC` 2914313a12fdSmrg CC_quoted_expanded=`func_echo_all $CC_quoted` 2915e19dfac4Smrg case $@ in 2916e19dfac4Smrg # Blanks in the command may have been stripped by the calling shell, 2917e19dfac4Smrg # but not from the CC environment variable when configure was run. 2918313a12fdSmrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2919313a12fdSmrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 2920e19dfac4Smrg # Blanks at the start of $base_compile will cause this to fail 2921e19dfac4Smrg # if we don't check for them as well. 2922e19dfac4Smrg *) 2923e19dfac4Smrg for z in $available_tags; do 2924e19dfac4Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 2925e19dfac4Smrg # Evaluate the configuration. 29267cea3689Smrg eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 2927e19dfac4Smrg CC_quoted= 2928e19dfac4Smrg for arg in $CC; do 2929e19dfac4Smrg # Double-quote args containing other shell metacharacters. 2930313a12fdSmrg func_append_quoted CC_quoted "$arg" 2931e19dfac4Smrg done 2932313a12fdSmrg CC_expanded=`func_echo_all $CC` 2933313a12fdSmrg CC_quoted_expanded=`func_echo_all $CC_quoted` 2934e19dfac4Smrg case "$@ " in 2935313a12fdSmrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2936313a12fdSmrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 2937e19dfac4Smrg # The compiler in the base compile command matches 2938e19dfac4Smrg # the one in the tagged configuration. 2939e19dfac4Smrg # Assume this is the tagged configuration we want. 2940e19dfac4Smrg tagname=$z 2941e19dfac4Smrg break 2942e19dfac4Smrg ;; 294327702724Smrg esac 2944e19dfac4Smrg fi 2945e19dfac4Smrg done 2946e19dfac4Smrg # If $tagname still isn't set, then no tagged configuration 2947e19dfac4Smrg # was found and let the user know that the "--tag" command 2948e19dfac4Smrg # line option must be used. 2949e19dfac4Smrg if test -z "$tagname"; then 2950e19dfac4Smrg func_echo "unable to infer tagged configuration" 29517cea3689Smrg func_fatal_error "specify a tag with '--tag'" 2952e19dfac4Smrg# else 2953e19dfac4Smrg# func_verbose "using $tagname tagged configuration" 2954e19dfac4Smrg fi 2955e19dfac4Smrg ;; 2956e19dfac4Smrg esac 2957e19dfac4Smrg fi 2958e19dfac4Smrg} 2959e19dfac4Smrg 2960e19dfac4Smrg 2961e19dfac4Smrg 2962e19dfac4Smrg# func_write_libtool_object output_name pic_name nonpic_name 2963e19dfac4Smrg# Create a libtool object file (analogous to a ".la" file), 2964e19dfac4Smrg# but don't create it if we're doing a dry run. 2965e19dfac4Smrgfunc_write_libtool_object () 2966e19dfac4Smrg{ 29677cea3689Smrg write_libobj=$1 29687cea3689Smrg if test yes = "$build_libtool_libs"; then 29697cea3689Smrg write_lobj=\'$2\' 2970e19dfac4Smrg else 2971e19dfac4Smrg write_lobj=none 2972e19dfac4Smrg fi 2973e19dfac4Smrg 29747cea3689Smrg if test yes = "$build_old_libs"; then 29757cea3689Smrg write_oldobj=\'$3\' 2976e19dfac4Smrg else 2977e19dfac4Smrg write_oldobj=none 2978e19dfac4Smrg fi 2979e19dfac4Smrg 2980e19dfac4Smrg $opt_dry_run || { 2981e19dfac4Smrg cat >${write_libobj}T <<EOF 2982e19dfac4Smrg# $write_libobj - a libtool object file 29837cea3689Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 2984e19dfac4Smrg# 2985e19dfac4Smrg# Please DO NOT delete this file! 2986e19dfac4Smrg# It is necessary for linking the library. 2987e19dfac4Smrg 2988e19dfac4Smrg# Name of the PIC object. 2989e19dfac4Smrgpic_object=$write_lobj 2990e19dfac4Smrg 2991e19dfac4Smrg# Name of the non-PIC object 2992e19dfac4Smrgnon_pic_object=$write_oldobj 2993e19dfac4Smrg 2994e19dfac4SmrgEOF 29957cea3689Smrg $MV "${write_libobj}T" "$write_libobj" 2996e19dfac4Smrg } 2997e19dfac4Smrg} 2998e19dfac4Smrg 2999313a12fdSmrg 3000313a12fdSmrg################################################## 3001313a12fdSmrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 3002313a12fdSmrg################################################## 3003313a12fdSmrg 3004313a12fdSmrg# func_convert_core_file_wine_to_w32 ARG 3005313a12fdSmrg# Helper function used by file name conversion functions when $build is *nix, 3006313a12fdSmrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a 3007313a12fdSmrg# correctly configured wine environment available, with the winepath program 3008313a12fdSmrg# in $build's $PATH. 3009313a12fdSmrg# 3010313a12fdSmrg# ARG is the $build file name to be converted to w32 format. 3011313a12fdSmrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will 3012313a12fdSmrg# be empty on error (or when ARG is empty) 3013313a12fdSmrgfunc_convert_core_file_wine_to_w32 () 3014313a12fdSmrg{ 30157cea3689Smrg $debug_cmd 30167cea3689Smrg 30177cea3689Smrg func_convert_core_file_wine_to_w32_result=$1 3018313a12fdSmrg if test -n "$1"; then 3019313a12fdSmrg # Unfortunately, winepath does not exit with a non-zero error code, so we 3020313a12fdSmrg # are forced to check the contents of stdout. On the other hand, if the 3021313a12fdSmrg # command is not found, the shell will set an exit code of 127 and print 3022313a12fdSmrg # *an error message* to stdout. So we must check for both error code of 3023313a12fdSmrg # zero AND non-empty stdout, which explains the odd construction: 3024313a12fdSmrg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 30257cea3689Smrg if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then 3026313a12fdSmrg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 30277cea3689Smrg $SED -e "$sed_naive_backslashify"` 3028313a12fdSmrg else 3029313a12fdSmrg func_convert_core_file_wine_to_w32_result= 3030313a12fdSmrg fi 3031313a12fdSmrg fi 3032313a12fdSmrg} 3033313a12fdSmrg# end: func_convert_core_file_wine_to_w32 3034313a12fdSmrg 3035313a12fdSmrg 3036313a12fdSmrg# func_convert_core_path_wine_to_w32 ARG 3037313a12fdSmrg# Helper function used by path conversion functions when $build is *nix, and 3038313a12fdSmrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 3039313a12fdSmrg# configured wine environment available, with the winepath program in $build's 3040313a12fdSmrg# $PATH. Assumes ARG has no leading or trailing path separator characters. 3041313a12fdSmrg# 3042313a12fdSmrg# ARG is path to be converted from $build format to win32. 3043313a12fdSmrg# Result is available in $func_convert_core_path_wine_to_w32_result. 3044313a12fdSmrg# Unconvertible file (directory) names in ARG are skipped; if no directory names 3045313a12fdSmrg# are convertible, then the result may be empty. 3046313a12fdSmrgfunc_convert_core_path_wine_to_w32 () 3047313a12fdSmrg{ 30487cea3689Smrg $debug_cmd 30497cea3689Smrg 3050313a12fdSmrg # unfortunately, winepath doesn't convert paths, only file names 30517cea3689Smrg func_convert_core_path_wine_to_w32_result= 3052313a12fdSmrg if test -n "$1"; then 3053313a12fdSmrg oldIFS=$IFS 3054313a12fdSmrg IFS=: 3055313a12fdSmrg for func_convert_core_path_wine_to_w32_f in $1; do 3056313a12fdSmrg IFS=$oldIFS 3057313a12fdSmrg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 30587cea3689Smrg if test -n "$func_convert_core_file_wine_to_w32_result"; then 3059313a12fdSmrg if test -z "$func_convert_core_path_wine_to_w32_result"; then 30607cea3689Smrg func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result 3061313a12fdSmrg else 3062313a12fdSmrg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 3063313a12fdSmrg fi 3064313a12fdSmrg fi 3065313a12fdSmrg done 3066313a12fdSmrg IFS=$oldIFS 3067313a12fdSmrg fi 3068313a12fdSmrg} 3069313a12fdSmrg# end: func_convert_core_path_wine_to_w32 3070313a12fdSmrg 3071313a12fdSmrg 3072313a12fdSmrg# func_cygpath ARGS... 3073313a12fdSmrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 3074313a12fdSmrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 3075313a12fdSmrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 3076313a12fdSmrg# (2), returns the Cygwin file name or path in func_cygpath_result (input 3077313a12fdSmrg# file name or path is assumed to be in w32 format, as previously converted 3078313a12fdSmrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name 3079313a12fdSmrg# or path in func_cygpath_result (input file name or path is assumed to be in 3080313a12fdSmrg# Cygwin format). Returns an empty string on error. 3081313a12fdSmrg# 3082313a12fdSmrg# ARGS are passed to cygpath, with the last one being the file name or path to 3083313a12fdSmrg# be converted. 3084313a12fdSmrg# 3085313a12fdSmrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 3086313a12fdSmrg# environment variable; do not put it in $PATH. 3087313a12fdSmrgfunc_cygpath () 3088313a12fdSmrg{ 30897cea3689Smrg $debug_cmd 30907cea3689Smrg 3091313a12fdSmrg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 3092313a12fdSmrg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 3093313a12fdSmrg if test "$?" -ne 0; then 3094313a12fdSmrg # on failure, ensure result is empty 3095313a12fdSmrg func_cygpath_result= 3096313a12fdSmrg fi 3097313a12fdSmrg else 3098313a12fdSmrg func_cygpath_result= 30997cea3689Smrg func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" 3100313a12fdSmrg fi 3101313a12fdSmrg} 3102313a12fdSmrg#end: func_cygpath 3103313a12fdSmrg 3104313a12fdSmrg 3105313a12fdSmrg# func_convert_core_msys_to_w32 ARG 3106313a12fdSmrg# Convert file name or path ARG from MSYS format to w32 format. Return 3107313a12fdSmrg# result in func_convert_core_msys_to_w32_result. 3108313a12fdSmrgfunc_convert_core_msys_to_w32 () 3109313a12fdSmrg{ 31107cea3689Smrg $debug_cmd 31117cea3689Smrg 3112313a12fdSmrg # awkward: cmd appends spaces to result 3113313a12fdSmrg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 31147cea3689Smrg $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` 3115313a12fdSmrg} 3116313a12fdSmrg#end: func_convert_core_msys_to_w32 3117313a12fdSmrg 3118313a12fdSmrg 3119313a12fdSmrg# func_convert_file_check ARG1 ARG2 3120313a12fdSmrg# Verify that ARG1 (a file name in $build format) was converted to $host 3121313a12fdSmrg# format in ARG2. Otherwise, emit an error message, but continue (resetting 3122313a12fdSmrg# func_to_host_file_result to ARG1). 3123313a12fdSmrgfunc_convert_file_check () 3124313a12fdSmrg{ 31257cea3689Smrg $debug_cmd 31267cea3689Smrg 31277cea3689Smrg if test -z "$2" && test -n "$1"; then 3128313a12fdSmrg func_error "Could not determine host file name corresponding to" 31297cea3689Smrg func_error " '$1'" 3130313a12fdSmrg func_error "Continuing, but uninstalled executables may not work." 3131313a12fdSmrg # Fallback: 31327cea3689Smrg func_to_host_file_result=$1 3133313a12fdSmrg fi 3134313a12fdSmrg} 3135313a12fdSmrg# end func_convert_file_check 3136313a12fdSmrg 3137313a12fdSmrg 3138313a12fdSmrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 3139313a12fdSmrg# Verify that FROM_PATH (a path in $build format) was converted to $host 3140313a12fdSmrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 3141313a12fdSmrg# func_to_host_file_result to a simplistic fallback value (see below). 3142313a12fdSmrgfunc_convert_path_check () 3143313a12fdSmrg{ 31447cea3689Smrg $debug_cmd 31457cea3689Smrg 3146313a12fdSmrg if test -z "$4" && test -n "$3"; then 3147313a12fdSmrg func_error "Could not determine the host path corresponding to" 31487cea3689Smrg func_error " '$3'" 3149313a12fdSmrg func_error "Continuing, but uninstalled executables may not work." 3150313a12fdSmrg # Fallback. This is a deliberately simplistic "conversion" and 3151313a12fdSmrg # should not be "improved". See libtool.info. 3152313a12fdSmrg if test "x$1" != "x$2"; then 3153313a12fdSmrg lt_replace_pathsep_chars="s|$1|$2|g" 3154313a12fdSmrg func_to_host_path_result=`echo "$3" | 3155313a12fdSmrg $SED -e "$lt_replace_pathsep_chars"` 3156313a12fdSmrg else 31577cea3689Smrg func_to_host_path_result=$3 3158313a12fdSmrg fi 3159313a12fdSmrg fi 3160313a12fdSmrg} 3161313a12fdSmrg# end func_convert_path_check 3162313a12fdSmrg 3163313a12fdSmrg 3164313a12fdSmrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 3165313a12fdSmrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 3166313a12fdSmrg# and appending REPL if ORIG matches BACKPAT. 3167313a12fdSmrgfunc_convert_path_front_back_pathsep () 3168313a12fdSmrg{ 31697cea3689Smrg $debug_cmd 31707cea3689Smrg 3171313a12fdSmrg case $4 in 31727cea3689Smrg $1 ) func_to_host_path_result=$3$func_to_host_path_result 3173313a12fdSmrg ;; 3174313a12fdSmrg esac 3175313a12fdSmrg case $4 in 3176313a12fdSmrg $2 ) func_append func_to_host_path_result "$3" 3177313a12fdSmrg ;; 3178313a12fdSmrg esac 3179313a12fdSmrg} 3180313a12fdSmrg# end func_convert_path_front_back_pathsep 3181313a12fdSmrg 3182313a12fdSmrg 3183313a12fdSmrg################################################## 3184313a12fdSmrg# $build to $host FILE NAME CONVERSION FUNCTIONS # 3185313a12fdSmrg################################################## 31867cea3689Smrg# invoked via '$to_host_file_cmd ARG' 3187313a12fdSmrg# 3188313a12fdSmrg# In each case, ARG is the path to be converted from $build to $host format. 3189313a12fdSmrg# Result will be available in $func_to_host_file_result. 3190313a12fdSmrg 3191313a12fdSmrg 3192313a12fdSmrg# func_to_host_file ARG 3193313a12fdSmrg# Converts the file name ARG from $build format to $host format. Return result 3194313a12fdSmrg# in func_to_host_file_result. 3195313a12fdSmrgfunc_to_host_file () 3196313a12fdSmrg{ 31977cea3689Smrg $debug_cmd 31987cea3689Smrg 3199313a12fdSmrg $to_host_file_cmd "$1" 3200313a12fdSmrg} 3201313a12fdSmrg# end func_to_host_file 3202313a12fdSmrg 3203313a12fdSmrg 3204313a12fdSmrg# func_to_tool_file ARG LAZY 3205313a12fdSmrg# converts the file name ARG from $build format to toolchain format. Return 3206313a12fdSmrg# result in func_to_tool_file_result. If the conversion in use is listed 3207313a12fdSmrg# in (the comma separated) LAZY, no conversion takes place. 3208313a12fdSmrgfunc_to_tool_file () 3209313a12fdSmrg{ 32107cea3689Smrg $debug_cmd 32117cea3689Smrg 3212313a12fdSmrg case ,$2, in 3213313a12fdSmrg *,"$to_tool_file_cmd",*) 3214313a12fdSmrg func_to_tool_file_result=$1 3215313a12fdSmrg ;; 3216313a12fdSmrg *) 3217313a12fdSmrg $to_tool_file_cmd "$1" 3218313a12fdSmrg func_to_tool_file_result=$func_to_host_file_result 3219313a12fdSmrg ;; 3220313a12fdSmrg esac 3221313a12fdSmrg} 3222313a12fdSmrg# end func_to_tool_file 3223313a12fdSmrg 3224313a12fdSmrg 3225313a12fdSmrg# func_convert_file_noop ARG 3226313a12fdSmrg# Copy ARG to func_to_host_file_result. 3227313a12fdSmrgfunc_convert_file_noop () 3228313a12fdSmrg{ 32297cea3689Smrg func_to_host_file_result=$1 3230313a12fdSmrg} 3231313a12fdSmrg# end func_convert_file_noop 3232313a12fdSmrg 3233313a12fdSmrg 3234313a12fdSmrg# func_convert_file_msys_to_w32 ARG 3235313a12fdSmrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 3236313a12fdSmrg# conversion to w32 is not available inside the cwrapper. Returns result in 3237313a12fdSmrg# func_to_host_file_result. 3238313a12fdSmrgfunc_convert_file_msys_to_w32 () 3239313a12fdSmrg{ 32407cea3689Smrg $debug_cmd 32417cea3689Smrg 32427cea3689Smrg func_to_host_file_result=$1 3243313a12fdSmrg if test -n "$1"; then 3244313a12fdSmrg func_convert_core_msys_to_w32 "$1" 32457cea3689Smrg func_to_host_file_result=$func_convert_core_msys_to_w32_result 3246313a12fdSmrg fi 3247313a12fdSmrg func_convert_file_check "$1" "$func_to_host_file_result" 3248313a12fdSmrg} 3249313a12fdSmrg# end func_convert_file_msys_to_w32 3250313a12fdSmrg 3251313a12fdSmrg 3252313a12fdSmrg# func_convert_file_cygwin_to_w32 ARG 3253313a12fdSmrg# Convert file name ARG from Cygwin to w32 format. Returns result in 3254313a12fdSmrg# func_to_host_file_result. 3255313a12fdSmrgfunc_convert_file_cygwin_to_w32 () 3256313a12fdSmrg{ 32577cea3689Smrg $debug_cmd 32587cea3689Smrg 32597cea3689Smrg func_to_host_file_result=$1 3260313a12fdSmrg if test -n "$1"; then 3261313a12fdSmrg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 3262313a12fdSmrg # LT_CYGPATH in this case. 3263313a12fdSmrg func_to_host_file_result=`cygpath -m "$1"` 3264313a12fdSmrg fi 3265313a12fdSmrg func_convert_file_check "$1" "$func_to_host_file_result" 3266313a12fdSmrg} 3267313a12fdSmrg# end func_convert_file_cygwin_to_w32 3268313a12fdSmrg 3269313a12fdSmrg 3270313a12fdSmrg# func_convert_file_nix_to_w32 ARG 3271313a12fdSmrg# Convert file name ARG from *nix to w32 format. Requires a wine environment 3272313a12fdSmrg# and a working winepath. Returns result in func_to_host_file_result. 3273313a12fdSmrgfunc_convert_file_nix_to_w32 () 3274313a12fdSmrg{ 32757cea3689Smrg $debug_cmd 32767cea3689Smrg 32777cea3689Smrg func_to_host_file_result=$1 3278313a12fdSmrg if test -n "$1"; then 3279313a12fdSmrg func_convert_core_file_wine_to_w32 "$1" 32807cea3689Smrg func_to_host_file_result=$func_convert_core_file_wine_to_w32_result 3281313a12fdSmrg fi 3282313a12fdSmrg func_convert_file_check "$1" "$func_to_host_file_result" 3283313a12fdSmrg} 3284313a12fdSmrg# end func_convert_file_nix_to_w32 3285313a12fdSmrg 3286313a12fdSmrg 3287313a12fdSmrg# func_convert_file_msys_to_cygwin ARG 3288313a12fdSmrg# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3289313a12fdSmrg# Returns result in func_to_host_file_result. 3290313a12fdSmrgfunc_convert_file_msys_to_cygwin () 3291313a12fdSmrg{ 32927cea3689Smrg $debug_cmd 32937cea3689Smrg 32947cea3689Smrg func_to_host_file_result=$1 3295313a12fdSmrg if test -n "$1"; then 3296313a12fdSmrg func_convert_core_msys_to_w32 "$1" 3297313a12fdSmrg func_cygpath -u "$func_convert_core_msys_to_w32_result" 32987cea3689Smrg func_to_host_file_result=$func_cygpath_result 3299313a12fdSmrg fi 3300313a12fdSmrg func_convert_file_check "$1" "$func_to_host_file_result" 3301313a12fdSmrg} 3302313a12fdSmrg# end func_convert_file_msys_to_cygwin 3303313a12fdSmrg 3304313a12fdSmrg 3305313a12fdSmrg# func_convert_file_nix_to_cygwin ARG 3306313a12fdSmrg# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 3307313a12fdSmrg# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 3308313a12fdSmrg# in func_to_host_file_result. 3309313a12fdSmrgfunc_convert_file_nix_to_cygwin () 3310313a12fdSmrg{ 33117cea3689Smrg $debug_cmd 33127cea3689Smrg 33137cea3689Smrg func_to_host_file_result=$1 3314313a12fdSmrg if test -n "$1"; then 3315313a12fdSmrg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 3316313a12fdSmrg func_convert_core_file_wine_to_w32 "$1" 3317313a12fdSmrg func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 33187cea3689Smrg func_to_host_file_result=$func_cygpath_result 3319313a12fdSmrg fi 3320313a12fdSmrg func_convert_file_check "$1" "$func_to_host_file_result" 3321313a12fdSmrg} 3322313a12fdSmrg# end func_convert_file_nix_to_cygwin 3323313a12fdSmrg 3324313a12fdSmrg 3325313a12fdSmrg############################################# 3326313a12fdSmrg# $build to $host PATH CONVERSION FUNCTIONS # 3327313a12fdSmrg############################################# 33287cea3689Smrg# invoked via '$to_host_path_cmd ARG' 3329313a12fdSmrg# 3330313a12fdSmrg# In each case, ARG is the path to be converted from $build to $host format. 3331313a12fdSmrg# The result will be available in $func_to_host_path_result. 3332313a12fdSmrg# 3333313a12fdSmrg# Path separators are also converted from $build format to $host format. If 3334313a12fdSmrg# ARG begins or ends with a path separator character, it is preserved (but 3335313a12fdSmrg# converted to $host format) on output. 3336313a12fdSmrg# 3337313a12fdSmrg# All path conversion functions are named using the following convention: 3338313a12fdSmrg# file name conversion function : func_convert_file_X_to_Y () 3339313a12fdSmrg# path conversion function : func_convert_path_X_to_Y () 3340313a12fdSmrg# where, for any given $build/$host combination the 'X_to_Y' value is the 3341313a12fdSmrg# same. If conversion functions are added for new $build/$host combinations, 3342313a12fdSmrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd 3343313a12fdSmrg# will break. 3344313a12fdSmrg 3345313a12fdSmrg 3346313a12fdSmrg# func_init_to_host_path_cmd 3347313a12fdSmrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the 3348313a12fdSmrg# appropriate value, based on the value of $to_host_file_cmd. 3349313a12fdSmrgto_host_path_cmd= 3350313a12fdSmrgfunc_init_to_host_path_cmd () 3351313a12fdSmrg{ 33527cea3689Smrg $debug_cmd 33537cea3689Smrg 3354313a12fdSmrg if test -z "$to_host_path_cmd"; then 3355313a12fdSmrg func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 33567cea3689Smrg to_host_path_cmd=func_convert_path_$func_stripname_result 3357313a12fdSmrg fi 3358313a12fdSmrg} 3359313a12fdSmrg 3360313a12fdSmrg 3361313a12fdSmrg# func_to_host_path ARG 3362313a12fdSmrg# Converts the path ARG from $build format to $host format. Return result 3363313a12fdSmrg# in func_to_host_path_result. 3364313a12fdSmrgfunc_to_host_path () 3365313a12fdSmrg{ 33667cea3689Smrg $debug_cmd 33677cea3689Smrg 3368313a12fdSmrg func_init_to_host_path_cmd 3369313a12fdSmrg $to_host_path_cmd "$1" 3370313a12fdSmrg} 3371313a12fdSmrg# end func_to_host_path 3372313a12fdSmrg 3373313a12fdSmrg 3374313a12fdSmrg# func_convert_path_noop ARG 3375313a12fdSmrg# Copy ARG to func_to_host_path_result. 3376313a12fdSmrgfunc_convert_path_noop () 3377313a12fdSmrg{ 33787cea3689Smrg func_to_host_path_result=$1 3379313a12fdSmrg} 3380313a12fdSmrg# end func_convert_path_noop 3381313a12fdSmrg 3382313a12fdSmrg 3383313a12fdSmrg# func_convert_path_msys_to_w32 ARG 3384313a12fdSmrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 3385313a12fdSmrg# conversion to w32 is not available inside the cwrapper. Returns result in 3386313a12fdSmrg# func_to_host_path_result. 3387313a12fdSmrgfunc_convert_path_msys_to_w32 () 3388313a12fdSmrg{ 33897cea3689Smrg $debug_cmd 33907cea3689Smrg 33917cea3689Smrg func_to_host_path_result=$1 3392313a12fdSmrg if test -n "$1"; then 3393313a12fdSmrg # Remove leading and trailing path separator characters from ARG. MSYS 3394313a12fdSmrg # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 3395313a12fdSmrg # and winepath ignores them completely. 3396313a12fdSmrg func_stripname : : "$1" 3397313a12fdSmrg func_to_host_path_tmp1=$func_stripname_result 3398313a12fdSmrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 33997cea3689Smrg func_to_host_path_result=$func_convert_core_msys_to_w32_result 3400313a12fdSmrg func_convert_path_check : ";" \ 3401313a12fdSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3402313a12fdSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3403313a12fdSmrg fi 3404313a12fdSmrg} 3405313a12fdSmrg# end func_convert_path_msys_to_w32 3406313a12fdSmrg 3407313a12fdSmrg 3408313a12fdSmrg# func_convert_path_cygwin_to_w32 ARG 3409313a12fdSmrg# Convert path ARG from Cygwin to w32 format. Returns result in 3410313a12fdSmrg# func_to_host_file_result. 3411313a12fdSmrgfunc_convert_path_cygwin_to_w32 () 3412313a12fdSmrg{ 34137cea3689Smrg $debug_cmd 34147cea3689Smrg 34157cea3689Smrg func_to_host_path_result=$1 3416313a12fdSmrg if test -n "$1"; then 3417313a12fdSmrg # See func_convert_path_msys_to_w32: 3418313a12fdSmrg func_stripname : : "$1" 3419313a12fdSmrg func_to_host_path_tmp1=$func_stripname_result 3420313a12fdSmrg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 3421313a12fdSmrg func_convert_path_check : ";" \ 3422313a12fdSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3423313a12fdSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3424313a12fdSmrg fi 3425313a12fdSmrg} 3426313a12fdSmrg# end func_convert_path_cygwin_to_w32 3427313a12fdSmrg 3428313a12fdSmrg 3429313a12fdSmrg# func_convert_path_nix_to_w32 ARG 3430313a12fdSmrg# Convert path ARG from *nix to w32 format. Requires a wine environment and 3431313a12fdSmrg# a working winepath. Returns result in func_to_host_file_result. 3432313a12fdSmrgfunc_convert_path_nix_to_w32 () 3433313a12fdSmrg{ 34347cea3689Smrg $debug_cmd 34357cea3689Smrg 34367cea3689Smrg func_to_host_path_result=$1 3437313a12fdSmrg if test -n "$1"; then 3438313a12fdSmrg # See func_convert_path_msys_to_w32: 3439313a12fdSmrg func_stripname : : "$1" 3440313a12fdSmrg func_to_host_path_tmp1=$func_stripname_result 3441313a12fdSmrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 34427cea3689Smrg func_to_host_path_result=$func_convert_core_path_wine_to_w32_result 3443313a12fdSmrg func_convert_path_check : ";" \ 3444313a12fdSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3445313a12fdSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3446313a12fdSmrg fi 3447313a12fdSmrg} 3448313a12fdSmrg# end func_convert_path_nix_to_w32 3449313a12fdSmrg 3450313a12fdSmrg 3451313a12fdSmrg# func_convert_path_msys_to_cygwin ARG 3452313a12fdSmrg# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3453313a12fdSmrg# Returns result in func_to_host_file_result. 3454313a12fdSmrgfunc_convert_path_msys_to_cygwin () 3455313a12fdSmrg{ 34567cea3689Smrg $debug_cmd 34577cea3689Smrg 34587cea3689Smrg func_to_host_path_result=$1 3459313a12fdSmrg if test -n "$1"; then 3460313a12fdSmrg # See func_convert_path_msys_to_w32: 3461313a12fdSmrg func_stripname : : "$1" 3462313a12fdSmrg func_to_host_path_tmp1=$func_stripname_result 3463313a12fdSmrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 3464313a12fdSmrg func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 34657cea3689Smrg func_to_host_path_result=$func_cygpath_result 3466313a12fdSmrg func_convert_path_check : : \ 3467313a12fdSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3468313a12fdSmrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3469313a12fdSmrg fi 3470313a12fdSmrg} 3471313a12fdSmrg# end func_convert_path_msys_to_cygwin 3472313a12fdSmrg 3473313a12fdSmrg 3474313a12fdSmrg# func_convert_path_nix_to_cygwin ARG 3475313a12fdSmrg# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 3476313a12fdSmrg# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 3477313a12fdSmrg# func_to_host_file_result. 3478313a12fdSmrgfunc_convert_path_nix_to_cygwin () 3479313a12fdSmrg{ 34807cea3689Smrg $debug_cmd 34817cea3689Smrg 34827cea3689Smrg func_to_host_path_result=$1 3483313a12fdSmrg if test -n "$1"; then 3484313a12fdSmrg # Remove leading and trailing path separator characters from 3485313a12fdSmrg # ARG. msys behavior is inconsistent here, cygpath turns them 3486313a12fdSmrg # into '.;' and ';.', and winepath ignores them completely. 3487313a12fdSmrg func_stripname : : "$1" 3488313a12fdSmrg func_to_host_path_tmp1=$func_stripname_result 3489313a12fdSmrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 3490313a12fdSmrg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 34917cea3689Smrg func_to_host_path_result=$func_cygpath_result 3492313a12fdSmrg func_convert_path_check : : \ 3493313a12fdSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3494313a12fdSmrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3495313a12fdSmrg fi 3496313a12fdSmrg} 3497313a12fdSmrg# end func_convert_path_nix_to_cygwin 3498313a12fdSmrg 3499313a12fdSmrg 35007cea3689Smrg# func_dll_def_p FILE 35017cea3689Smrg# True iff FILE is a Windows DLL '.def' file. 35027cea3689Smrg# Keep in sync with _LT_DLL_DEF_P in libtool.m4 35037cea3689Smrgfunc_dll_def_p () 35047cea3689Smrg{ 35057cea3689Smrg $debug_cmd 35067cea3689Smrg 35077cea3689Smrg func_dll_def_p_tmp=`$SED -n \ 35087cea3689Smrg -e 's/^[ ]*//' \ 35097cea3689Smrg -e '/^\(;.*\)*$/d' \ 35107cea3689Smrg -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ 35117cea3689Smrg -e q \ 35127cea3689Smrg "$1"` 35137cea3689Smrg test DEF = "$func_dll_def_p_tmp" 35147cea3689Smrg} 35157cea3689Smrg 35167cea3689Smrg 3517e19dfac4Smrg# func_mode_compile arg... 3518e19dfac4Smrgfunc_mode_compile () 3519e19dfac4Smrg{ 35207cea3689Smrg $debug_cmd 35217cea3689Smrg 3522e19dfac4Smrg # Get the compilation command and the source file. 3523e19dfac4Smrg base_compile= 35247cea3689Smrg srcfile=$nonopt # always keep a non-empty value in "srcfile" 3525e19dfac4Smrg suppress_opt=yes 3526e19dfac4Smrg suppress_output= 3527e19dfac4Smrg arg_mode=normal 3528e19dfac4Smrg libobj= 3529e19dfac4Smrg later= 3530e19dfac4Smrg pie_flag= 3531e19dfac4Smrg 3532e19dfac4Smrg for arg 3533e19dfac4Smrg do 3534e19dfac4Smrg case $arg_mode in 3535e19dfac4Smrg arg ) 3536e19dfac4Smrg # do not "continue". Instead, add this to base_compile 35377cea3689Smrg lastarg=$arg 3538e19dfac4Smrg arg_mode=normal 3539e19dfac4Smrg ;; 3540e19dfac4Smrg 3541e19dfac4Smrg target ) 35427cea3689Smrg libobj=$arg 3543e19dfac4Smrg arg_mode=normal 3544e19dfac4Smrg continue 3545e19dfac4Smrg ;; 3546e19dfac4Smrg 3547e19dfac4Smrg normal ) 3548e19dfac4Smrg # Accept any command-line options. 3549e19dfac4Smrg case $arg in 3550e19dfac4Smrg -o) 3551e19dfac4Smrg test -n "$libobj" && \ 35527cea3689Smrg func_fatal_error "you cannot specify '-o' more than once" 3553e19dfac4Smrg arg_mode=target 3554e19dfac4Smrg continue 3555e19dfac4Smrg ;; 3556e19dfac4Smrg 3557e19dfac4Smrg -pie | -fpie | -fPIE) 3558313a12fdSmrg func_append pie_flag " $arg" 3559e19dfac4Smrg continue 3560e19dfac4Smrg ;; 3561e19dfac4Smrg 3562e19dfac4Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 3563313a12fdSmrg func_append later " $arg" 3564e19dfac4Smrg continue 3565e19dfac4Smrg ;; 3566e19dfac4Smrg 3567e19dfac4Smrg -no-suppress) 3568e19dfac4Smrg suppress_opt=no 3569e19dfac4Smrg continue 3570e19dfac4Smrg ;; 3571e19dfac4Smrg 3572e19dfac4Smrg -Xcompiler) 3573e19dfac4Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 3574e19dfac4Smrg continue # The current "srcfile" will either be retained or 3575e19dfac4Smrg ;; # replaced later. I would guess that would be a bug. 3576e19dfac4Smrg 3577e19dfac4Smrg -Wc,*) 3578e19dfac4Smrg func_stripname '-Wc,' '' "$arg" 3579e19dfac4Smrg args=$func_stripname_result 3580e19dfac4Smrg lastarg= 35817cea3689Smrg save_ifs=$IFS; IFS=, 3582e19dfac4Smrg for arg in $args; do 35837cea3689Smrg IFS=$save_ifs 3584313a12fdSmrg func_append_quoted lastarg "$arg" 358527702724Smrg done 35867cea3689Smrg IFS=$save_ifs 3587e19dfac4Smrg func_stripname ' ' '' "$lastarg" 3588e19dfac4Smrg lastarg=$func_stripname_result 358927702724Smrg 359027702724Smrg # Add the arguments to base_compile. 3591313a12fdSmrg func_append base_compile " $lastarg" 359227702724Smrg continue 359327702724Smrg ;; 359427702724Smrg 3595e19dfac4Smrg *) 359627702724Smrg # Accept the current argument as the source file. 359727702724Smrg # The previous "srcfile" becomes the current argument. 359827702724Smrg # 35997cea3689Smrg lastarg=$srcfile 36007cea3689Smrg srcfile=$arg 360127702724Smrg ;; 360227702724Smrg esac # case $arg 360327702724Smrg ;; 360427702724Smrg esac # case $arg_mode 360527702724Smrg 360627702724Smrg # Aesthetically quote the previous argument. 3607313a12fdSmrg func_append_quoted base_compile "$lastarg" 360827702724Smrg done # for arg 360927702724Smrg 361027702724Smrg case $arg_mode in 361127702724Smrg arg) 3612e19dfac4Smrg func_fatal_error "you must specify an argument for -Xcompile" 361327702724Smrg ;; 361427702724Smrg target) 36157cea3689Smrg func_fatal_error "you must specify a target with '-o'" 361627702724Smrg ;; 361727702724Smrg *) 361827702724Smrg # Get the name of the library object. 3619e19dfac4Smrg test -z "$libobj" && { 3620e19dfac4Smrg func_basename "$srcfile" 36217cea3689Smrg libobj=$func_basename_result 3622e19dfac4Smrg } 362327702724Smrg ;; 362427702724Smrg esac 362527702724Smrg 362627702724Smrg # Recognize several different file suffixes. 362727702724Smrg # If the user specifies -o file.o, it is replaced with file.lo 362827702724Smrg case $libobj in 3629e19dfac4Smrg *.[cCFSifmso] | \ 3630e19dfac4Smrg *.ada | *.adb | *.ads | *.asm | \ 3631e19dfac4Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 3632313a12fdSmrg *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 3633e19dfac4Smrg func_xform "$libobj" 3634e19dfac4Smrg libobj=$func_xform_result 3635e19dfac4Smrg ;; 363627702724Smrg esac 363727702724Smrg 363827702724Smrg case $libobj in 3639e19dfac4Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 364027702724Smrg *) 36417cea3689Smrg func_fatal_error "cannot determine name of library object from '$libobj'" 364227702724Smrg ;; 364327702724Smrg esac 364427702724Smrg 364527702724Smrg func_infer_tag $base_compile 364627702724Smrg 364727702724Smrg for arg in $later; do 364827702724Smrg case $arg in 3649e19dfac4Smrg -shared) 36507cea3689Smrg test yes = "$build_libtool_libs" \ 36517cea3689Smrg || func_fatal_configuration "cannot build a shared library" 3652e19dfac4Smrg build_old_libs=no 3653e19dfac4Smrg continue 3654e19dfac4Smrg ;; 3655e19dfac4Smrg 365627702724Smrg -static) 3657e19dfac4Smrg build_libtool_libs=no 365827702724Smrg build_old_libs=yes 365927702724Smrg continue 366027702724Smrg ;; 366127702724Smrg 366227702724Smrg -prefer-pic) 366327702724Smrg pic_mode=yes 366427702724Smrg continue 366527702724Smrg ;; 366627702724Smrg 366727702724Smrg -prefer-non-pic) 366827702724Smrg pic_mode=no 366927702724Smrg continue 367027702724Smrg ;; 367127702724Smrg esac 367227702724Smrg done 367327702724Smrg 367495b7a5c8Smrg func_quote_arg pretty "$libobj" 367595b7a5c8Smrg test "X$libobj" != "X$func_quote_arg_result" \ 3676e19dfac4Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 36777cea3689Smrg && func_warning "libobj name '$libobj' may not contain shell special characters." 3678e19dfac4Smrg func_dirname_and_basename "$obj" "/" "" 36797cea3689Smrg objname=$func_basename_result 36807cea3689Smrg xdir=$func_dirname_result 36817cea3689Smrg lobj=$xdir$objdir/$objname 368227702724Smrg 3683e19dfac4Smrg test -z "$base_compile" && \ 3684e19dfac4Smrg func_fatal_help "you must specify a compilation command" 368527702724Smrg 368627702724Smrg # Delete any leftover library objects. 36877cea3689Smrg if test yes = "$build_old_libs"; then 368827702724Smrg removelist="$obj $lobj $libobj ${libobj}T" 368927702724Smrg else 369027702724Smrg removelist="$lobj $libobj ${libobj}T" 369127702724Smrg fi 369227702724Smrg 369327702724Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 369427702724Smrg case $host_os in 3695e19dfac4Smrg cygwin* | mingw* | pw32* | os2* | cegcc*) 369627702724Smrg pic_mode=default 369727702724Smrg ;; 369827702724Smrg esac 36997cea3689Smrg if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then 370027702724Smrg # non-PIC code in shared libraries is not supported 370127702724Smrg pic_mode=default 370227702724Smrg fi 370327702724Smrg 370427702724Smrg # Calculate the filename of the output object if compiler does 370527702724Smrg # not support -o with -c 37067cea3689Smrg if test no = "$compiler_c_o"; then 37077cea3689Smrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext 37087cea3689Smrg lockfile=$output_obj.lock 370927702724Smrg else 371027702724Smrg output_obj= 371127702724Smrg need_locks=no 371227702724Smrg lockfile= 371327702724Smrg fi 371427702724Smrg 371527702724Smrg # Lock this critical section if it is needed 371627702724Smrg # We use this script file to make the link, it avoids creating a new file 37177cea3689Smrg if test yes = "$need_locks"; then 3718e19dfac4Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 3719e19dfac4Smrg func_echo "Waiting for $lockfile to be removed" 372027702724Smrg sleep 2 372127702724Smrg done 37227cea3689Smrg elif test warn = "$need_locks"; then 372327702724Smrg if test -f "$lockfile"; then 3724e19dfac4Smrg $ECHO "\ 372527702724Smrg*** ERROR, $lockfile exists and contains: 372627702724Smrg`cat $lockfile 2>/dev/null` 372727702724Smrg 372827702724SmrgThis indicates that another process is trying to use the same 372927702724Smrgtemporary object file, and libtool could not work around it because 37307cea3689Smrgyour compiler does not support '-c' and '-o' together. If you 373127702724Smrgrepeat this compilation, it may succeed, by chance, but you had better 373227702724Smrgavoid parallel builds (make -j) in this platform, or get a better 373327702724Smrgcompiler." 373427702724Smrg 3735e19dfac4Smrg $opt_dry_run || $RM $removelist 373627702724Smrg exit $EXIT_FAILURE 373727702724Smrg fi 3738313a12fdSmrg func_append removelist " $output_obj" 3739e19dfac4Smrg $ECHO "$srcfile" > "$lockfile" 374027702724Smrg fi 374127702724Smrg 3742e19dfac4Smrg $opt_dry_run || $RM $removelist 3743313a12fdSmrg func_append removelist " $lockfile" 3744e19dfac4Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 3745e19dfac4Smrg 3746313a12fdSmrg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 3747313a12fdSmrg srcfile=$func_to_tool_file_result 374895b7a5c8Smrg func_quote_arg pretty "$srcfile" 374995b7a5c8Smrg qsrcfile=$func_quote_arg_result 375027702724Smrg 375127702724Smrg # Only build a PIC object if we are building libtool libraries. 37527cea3689Smrg if test yes = "$build_libtool_libs"; then 375327702724Smrg # Without this assignment, base_compile gets emptied. 375427702724Smrg fbsd_hideous_sh_bug=$base_compile 375527702724Smrg 37567cea3689Smrg if test no != "$pic_mode"; then 375727702724Smrg command="$base_compile $qsrcfile $pic_flag" 375827702724Smrg else 375927702724Smrg # Don't build PIC code 376027702724Smrg command="$base_compile $qsrcfile" 376127702724Smrg fi 376227702724Smrg 3763e19dfac4Smrg func_mkdir_p "$xdir$objdir" 376427702724Smrg 376527702724Smrg if test -z "$output_obj"; then 376627702724Smrg # Place PIC objects in $objdir 3767313a12fdSmrg func_append command " -o $lobj" 376827702724Smrg fi 376927702724Smrg 3770e19dfac4Smrg func_show_eval_locale "$command" \ 3771e19dfac4Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 377227702724Smrg 37737cea3689Smrg if test warn = "$need_locks" && 377427702724Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3775e19dfac4Smrg $ECHO "\ 377627702724Smrg*** ERROR, $lockfile contains: 377727702724Smrg`cat $lockfile 2>/dev/null` 377827702724Smrg 377927702724Smrgbut it should contain: 378027702724Smrg$srcfile 378127702724Smrg 378227702724SmrgThis indicates that another process is trying to use the same 378327702724Smrgtemporary object file, and libtool could not work around it because 37847cea3689Smrgyour compiler does not support '-c' and '-o' together. If you 378527702724Smrgrepeat this compilation, it may succeed, by chance, but you had better 378627702724Smrgavoid parallel builds (make -j) in this platform, or get a better 378727702724Smrgcompiler." 378827702724Smrg 3789e19dfac4Smrg $opt_dry_run || $RM $removelist 379027702724Smrg exit $EXIT_FAILURE 379127702724Smrg fi 379227702724Smrg 379327702724Smrg # Just move the object if needed, then go on to compile the next one 379427702724Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 3795e19dfac4Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 3796e19dfac4Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 379727702724Smrg fi 379827702724Smrg 379927702724Smrg # Allow error messages only from the first compilation. 38007cea3689Smrg if test yes = "$suppress_opt"; then 3801e19dfac4Smrg suppress_output=' >/dev/null 2>&1' 380227702724Smrg fi 380327702724Smrg fi 380427702724Smrg 380527702724Smrg # Only build a position-dependent object if we build old libraries. 38067cea3689Smrg if test yes = "$build_old_libs"; then 38077cea3689Smrg if test yes != "$pic_mode"; then 380827702724Smrg # Don't build PIC code 3809e19dfac4Smrg command="$base_compile $qsrcfile$pie_flag" 381027702724Smrg else 381127702724Smrg command="$base_compile $qsrcfile $pic_flag" 381227702724Smrg fi 38137cea3689Smrg if test yes = "$compiler_c_o"; then 3814313a12fdSmrg func_append command " -o $obj" 381527702724Smrg fi 381627702724Smrg 381727702724Smrg # Suppress compiler output if we already did a PIC compilation. 3818313a12fdSmrg func_append command "$suppress_output" 3819e19dfac4Smrg func_show_eval_locale "$command" \ 3820e19dfac4Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 382127702724Smrg 38227cea3689Smrg if test warn = "$need_locks" && 382327702724Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3824e19dfac4Smrg $ECHO "\ 382527702724Smrg*** ERROR, $lockfile contains: 382627702724Smrg`cat $lockfile 2>/dev/null` 382727702724Smrg 382827702724Smrgbut it should contain: 382927702724Smrg$srcfile 383027702724Smrg 383127702724SmrgThis indicates that another process is trying to use the same 383227702724Smrgtemporary object file, and libtool could not work around it because 38337cea3689Smrgyour compiler does not support '-c' and '-o' together. If you 383427702724Smrgrepeat this compilation, it may succeed, by chance, but you had better 383527702724Smrgavoid parallel builds (make -j) in this platform, or get a better 383627702724Smrgcompiler." 383727702724Smrg 3838e19dfac4Smrg $opt_dry_run || $RM $removelist 383927702724Smrg exit $EXIT_FAILURE 384027702724Smrg fi 384127702724Smrg 384227702724Smrg # Just move the object if needed 384327702724Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 3844e19dfac4Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 3845e19dfac4Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 384627702724Smrg fi 384727702724Smrg fi 384827702724Smrg 3849e19dfac4Smrg $opt_dry_run || { 3850e19dfac4Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 385127702724Smrg 3852e19dfac4Smrg # Unlock the critical section if it was locked 38537cea3689Smrg if test no != "$need_locks"; then 3854e19dfac4Smrg removelist=$lockfile 3855e19dfac4Smrg $RM "$lockfile" 3856e19dfac4Smrg fi 3857e19dfac4Smrg } 385827702724Smrg 385927702724Smrg exit $EXIT_SUCCESS 3860e19dfac4Smrg} 386127702724Smrg 3862e19dfac4Smrg$opt_help || { 38637cea3689Smrg test compile = "$opt_mode" && func_mode_compile ${1+"$@"} 3864e19dfac4Smrg} 386527702724Smrg 3866e19dfac4Smrgfunc_mode_help () 3867e19dfac4Smrg{ 3868e19dfac4Smrg # We need to display help for each of the modes. 3869313a12fdSmrg case $opt_mode in 3870e19dfac4Smrg "") 3871e19dfac4Smrg # Generic help is extracted from the usage comments 3872e19dfac4Smrg # at the start of this file. 3873e19dfac4Smrg func_help 3874e19dfac4Smrg ;; 387527702724Smrg 3876e19dfac4Smrg clean) 3877e19dfac4Smrg $ECHO \ 3878e19dfac4Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 387927702724Smrg 3880e19dfac4SmrgRemove files from the build directory. 388127702724Smrg 3882e19dfac4SmrgRM is the name of the program to use to delete files associated with each FILE 38837cea3689Smrg(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 3884e19dfac4Smrgto RM. 388527702724Smrg 3886e19dfac4SmrgIf FILE is a libtool library, object or program, all the files associated 3887e19dfac4Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 3888e19dfac4Smrg ;; 388927702724Smrg 3890e19dfac4Smrg compile) 3891e19dfac4Smrg $ECHO \ 3892e19dfac4Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 389327702724Smrg 3894e19dfac4SmrgCompile a source file into a libtool library object. 389527702724Smrg 3896e19dfac4SmrgThis mode accepts the following additional options: 389727702724Smrg 3898e19dfac4Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 3899e19dfac4Smrg -no-suppress do not suppress compiler output for multiple passes 3900313a12fdSmrg -prefer-pic try to build PIC objects only 3901313a12fdSmrg -prefer-non-pic try to build non-PIC objects only 39027cea3689Smrg -shared do not build a '.o' file suitable for static linking 39037cea3689Smrg -static only build a '.o' file suitable for static linking 390495b7a5c8Smrg -Wc,FLAG 390595b7a5c8Smrg -Xcompiler FLAG pass FLAG directly to the compiler 390627702724Smrg 39077cea3689SmrgCOMPILE-COMMAND is a command to be used in creating a 'standard' object file 3908e19dfac4Smrgfrom the given SOURCEFILE. 390927702724Smrg 3910e19dfac4SmrgThe output file name is determined by removing the directory component from 39117cea3689SmrgSOURCEFILE, then substituting the C source code suffix '.c' with the 39127cea3689Smrglibrary object suffix, '.lo'." 3913e19dfac4Smrg ;; 391427702724Smrg 3915e19dfac4Smrg execute) 3916e19dfac4Smrg $ECHO \ 3917e19dfac4Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 391827702724Smrg 3919e19dfac4SmrgAutomatically set library path, then run a program. 392027702724Smrg 3921e19dfac4SmrgThis mode accepts the following additional options: 392227702724Smrg 3923e19dfac4Smrg -dlopen FILE add the directory containing FILE to the library path 392427702724Smrg 39257cea3689SmrgThis mode sets the library path environment variable according to '-dlopen' 3926e19dfac4Smrgflags. 392727702724Smrg 3928e19dfac4SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 3929e19dfac4Smrginto their corresponding uninstalled binary, and any of their required library 3930e19dfac4Smrgdirectories are added to the library path. 393127702724Smrg 3932e19dfac4SmrgThen, COMMAND is executed, with ARGS as arguments." 3933e19dfac4Smrg ;; 393427702724Smrg 3935e19dfac4Smrg finish) 3936e19dfac4Smrg $ECHO \ 3937e19dfac4Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 393827702724Smrg 3939e19dfac4SmrgComplete the installation of libtool libraries. 394027702724Smrg 3941e19dfac4SmrgEach LIBDIR is a directory that contains libtool libraries. 394227702724Smrg 3943e19dfac4SmrgThe commands that this mode executes may require superuser privileges. Use 39447cea3689Smrgthe '--dry-run' option if you just want to see what would be executed." 3945e19dfac4Smrg ;; 394627702724Smrg 3947e19dfac4Smrg install) 3948e19dfac4Smrg $ECHO \ 3949e19dfac4Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 395027702724Smrg 3951e19dfac4SmrgInstall executables or libraries. 395227702724Smrg 3953e19dfac4SmrgINSTALL-COMMAND is the installation command. The first component should be 39547cea3689Smrgeither the 'install' or 'cp' program. 395527702724Smrg 3956e19dfac4SmrgThe following components of INSTALL-COMMAND are treated specially: 395727702724Smrg 3958313a12fdSmrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 395927702724Smrg 3960e19dfac4SmrgThe rest of the components are interpreted as arguments to that command (only 3961e19dfac4SmrgBSD-compatible install options are recognized)." 3962e19dfac4Smrg ;; 396327702724Smrg 3964e19dfac4Smrg link) 3965e19dfac4Smrg $ECHO \ 3966e19dfac4Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 396727702724Smrg 3968e19dfac4SmrgLink object files or libraries together to form another library, or to 3969e19dfac4Smrgcreate an executable program. 397027702724Smrg 3971e19dfac4SmrgLINK-COMMAND is a command using the C compiler that you would use to create 3972e19dfac4Smrga program from several object files. 397327702724Smrg 3974e19dfac4SmrgThe following components of LINK-COMMAND are treated specially: 397527702724Smrg 3976e19dfac4Smrg -all-static do not do any dynamic linking at all 3977e19dfac4Smrg -avoid-version do not add a version suffix if possible 3978313a12fdSmrg -bindir BINDIR specify path to binaries directory (for systems where 3979313a12fdSmrg libraries must be found in the PATH setting at runtime) 39807cea3689Smrg -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime 3981e19dfac4Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 3982e19dfac4Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 3983e19dfac4Smrg -export-symbols SYMFILE 3984e19dfac4Smrg try to export only the symbols listed in SYMFILE 3985e19dfac4Smrg -export-symbols-regex REGEX 3986e19dfac4Smrg try to export only the symbols matching REGEX 3987e19dfac4Smrg -LLIBDIR search LIBDIR for required installed libraries 3988e19dfac4Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 3989e19dfac4Smrg -module build a library that can dlopened 3990e19dfac4Smrg -no-fast-install disable the fast-install mode 3991e19dfac4Smrg -no-install link a not-installable executable 3992e19dfac4Smrg -no-undefined declare that a library does not refer to external symbols 3993e19dfac4Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 39947cea3689Smrg -objectlist FILE use a list of object files found in FILE to specify objects 39957cea3689Smrg -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) 3996e19dfac4Smrg -precious-files-regex REGEX 3997e19dfac4Smrg don't remove output files matching REGEX 3998e19dfac4Smrg -release RELEASE specify package release information 3999e19dfac4Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 4000e19dfac4Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 4001e19dfac4Smrg -shared only do dynamic linking of libtool libraries 4002e19dfac4Smrg -shrext SUFFIX override the standard shared library file extension 4003e19dfac4Smrg -static do not do any dynamic linking of uninstalled libtool libraries 4004e19dfac4Smrg -static-libtool-libs 4005e19dfac4Smrg do not do any dynamic linking of libtool libraries 4006e19dfac4Smrg -version-info CURRENT[:REVISION[:AGE]] 4007e19dfac4Smrg specify library version info [each variable defaults to 0] 4008e19dfac4Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 4009313a12fdSmrg -Wc,FLAG 4010313a12fdSmrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 401195b7a5c8Smrg -Wa,FLAG 401295b7a5c8Smrg -Xassembler FLAG pass linker-specific FLAG directly to the assembler 4013313a12fdSmrg -Wl,FLAG 4014313a12fdSmrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 4015313a12fdSmrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 401627702724Smrg 40177cea3689SmrgAll other options (arguments beginning with '-') are ignored. 401827702724Smrg 40197cea3689SmrgEvery other argument is treated as a filename. Files ending in '.la' are 4020e19dfac4Smrgtreated as uninstalled libtool libraries, other files are standard or library 4021e19dfac4Smrgobject files. 402227702724Smrg 40237cea3689SmrgIf the OUTPUT-FILE ends in '.la', then a libtool library is created, 40247cea3689Smrgonly library objects ('.lo' files) may be specified, and '-rpath' is 4025e19dfac4Smrgrequired, except when creating a convenience library. 402627702724Smrg 40277cea3689SmrgIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created 40287cea3689Smrgusing 'ar' and 'ranlib', or on Windows using 'lib'. 402927702724Smrg 40307cea3689SmrgIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file 4031e19dfac4Smrgis created, otherwise an executable program is created." 403227702724Smrg ;; 403327702724Smrg 4034e19dfac4Smrg uninstall) 4035e19dfac4Smrg $ECHO \ 4036e19dfac4Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 403727702724Smrg 4038e19dfac4SmrgRemove libraries from an installation directory. 403927702724Smrg 4040e19dfac4SmrgRM is the name of the program to use to delete files associated with each FILE 40417cea3689Smrg(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 4042e19dfac4Smrgto RM. 404327702724Smrg 4044e19dfac4SmrgIf FILE is a libtool library, all the files associated with it are deleted. 4045e19dfac4SmrgOtherwise, only FILE itself is deleted using RM." 4046e19dfac4Smrg ;; 404727702724Smrg 4048e19dfac4Smrg *) 40497cea3689Smrg func_fatal_help "invalid operation mode '$opt_mode'" 4050e19dfac4Smrg ;; 4051e19dfac4Smrg esac 405227702724Smrg 4053313a12fdSmrg echo 40547cea3689Smrg $ECHO "Try '$progname --help' for more information about other modes." 4055e19dfac4Smrg} 405627702724Smrg 4057313a12fdSmrg# Now that we've collected a possible --mode arg, show help if necessary 4058313a12fdSmrgif $opt_help; then 40597cea3689Smrg if test : = "$opt_help"; then 4060313a12fdSmrg func_mode_help 4061313a12fdSmrg else 4062313a12fdSmrg { 4063313a12fdSmrg func_help noexit 4064313a12fdSmrg for opt_mode in compile link execute install finish uninstall clean; do 4065313a12fdSmrg func_mode_help 4066313a12fdSmrg done 40677cea3689Smrg } | $SED -n '1p; 2,$s/^Usage:/ or: /p' 4068313a12fdSmrg { 4069313a12fdSmrg func_help noexit 4070313a12fdSmrg for opt_mode in compile link execute install finish uninstall clean; do 4071313a12fdSmrg echo 4072313a12fdSmrg func_mode_help 4073313a12fdSmrg done 4074313a12fdSmrg } | 40757cea3689Smrg $SED '1d 4076313a12fdSmrg /^When reporting/,/^Report/{ 4077313a12fdSmrg H 4078313a12fdSmrg d 4079313a12fdSmrg } 4080313a12fdSmrg $x 4081313a12fdSmrg /information about other modes/d 4082313a12fdSmrg /more detailed .*MODE/d 4083313a12fdSmrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 4084313a12fdSmrg fi 4085313a12fdSmrg exit $? 4086313a12fdSmrgfi 408727702724Smrg 408827702724Smrg 4089e19dfac4Smrg# func_mode_execute arg... 4090e19dfac4Smrgfunc_mode_execute () 4091e19dfac4Smrg{ 40927cea3689Smrg $debug_cmd 40937cea3689Smrg 4094e19dfac4Smrg # The first argument is the command name. 40957cea3689Smrg cmd=$nonopt 4096e19dfac4Smrg test -z "$cmd" && \ 4097e19dfac4Smrg func_fatal_help "you must specify a COMMAND" 409827702724Smrg 4099e19dfac4Smrg # Handle -dlopen flags immediately. 4100313a12fdSmrg for file in $opt_dlopen; do 4101e19dfac4Smrg test -f "$file" \ 41027cea3689Smrg || func_fatal_help "'$file' is not a file" 410327702724Smrg 4104e19dfac4Smrg dir= 4105e19dfac4Smrg case $file in 4106e19dfac4Smrg *.la) 4107313a12fdSmrg func_resolve_sysroot "$file" 4108313a12fdSmrg file=$func_resolve_sysroot_result 4109313a12fdSmrg 4110e19dfac4Smrg # Check to see that this really is a libtool archive. 4111e19dfac4Smrg func_lalib_unsafe_p "$file" \ 41127cea3689Smrg || func_fatal_help "'$lib' is not a valid libtool archive" 411327702724Smrg 4114e19dfac4Smrg # Read the libtool library. 4115e19dfac4Smrg dlname= 4116e19dfac4Smrg library_names= 4117e19dfac4Smrg func_source "$file" 411827702724Smrg 4119e19dfac4Smrg # Skip this library if it cannot be dlopened. 4120e19dfac4Smrg if test -z "$dlname"; then 4121e19dfac4Smrg # Warn if it was a shared library. 4122e19dfac4Smrg test -n "$library_names" && \ 41237cea3689Smrg func_warning "'$file' was not linked with '-export-dynamic'" 4124e19dfac4Smrg continue 4125e19dfac4Smrg fi 412627702724Smrg 4127e19dfac4Smrg func_dirname "$file" "" "." 41287cea3689Smrg dir=$func_dirname_result 412927702724Smrg 4130e19dfac4Smrg if test -f "$dir/$objdir/$dlname"; then 4131313a12fdSmrg func_append dir "/$objdir" 4132e19dfac4Smrg else 4133e19dfac4Smrg if test ! -f "$dir/$dlname"; then 41347cea3689Smrg func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" 4135e19dfac4Smrg fi 4136e19dfac4Smrg fi 413727702724Smrg ;; 413827702724Smrg 4139e19dfac4Smrg *.lo) 4140e19dfac4Smrg # Just add the directory containing the .lo file. 4141e19dfac4Smrg func_dirname "$file" "" "." 41427cea3689Smrg dir=$func_dirname_result 414327702724Smrg ;; 414427702724Smrg 4145e19dfac4Smrg *) 41467cea3689Smrg func_warning "'-dlopen' is ignored for non-libtool libraries and objects" 414727702724Smrg continue 414827702724Smrg ;; 4149e19dfac4Smrg esac 415027702724Smrg 4151e19dfac4Smrg # Get the absolute pathname. 4152e19dfac4Smrg absdir=`cd "$dir" && pwd` 41537cea3689Smrg test -n "$absdir" && dir=$absdir 415427702724Smrg 4155e19dfac4Smrg # Now add the directory to shlibpath_var. 4156e19dfac4Smrg if eval "test -z \"\$$shlibpath_var\""; then 4157e19dfac4Smrg eval "$shlibpath_var=\"\$dir\"" 4158e19dfac4Smrg else 4159e19dfac4Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 4160e19dfac4Smrg fi 4161e19dfac4Smrg done 416227702724Smrg 4163e19dfac4Smrg # This variable tells wrapper scripts just to set shlibpath_var 4164e19dfac4Smrg # rather than running their programs. 41657cea3689Smrg libtool_execute_magic=$magic 416627702724Smrg 4167e19dfac4Smrg # Check if any of the arguments is a wrapper script. 4168e19dfac4Smrg args= 4169e19dfac4Smrg for file 4170e19dfac4Smrg do 4171e19dfac4Smrg case $file in 4172313a12fdSmrg -* | *.la | *.lo ) ;; 4173e19dfac4Smrg *) 4174e19dfac4Smrg # Do a test to see if this is really a libtool program. 4175e19dfac4Smrg if func_ltwrapper_script_p "$file"; then 4176e19dfac4Smrg func_source "$file" 4177e19dfac4Smrg # Transform arg to wrapped name. 41787cea3689Smrg file=$progdir/$program 4179e19dfac4Smrg elif func_ltwrapper_executable_p "$file"; then 4180e19dfac4Smrg func_ltwrapper_scriptname "$file" 4181e19dfac4Smrg func_source "$func_ltwrapper_scriptname_result" 4182e19dfac4Smrg # Transform arg to wrapped name. 41837cea3689Smrg file=$progdir/$program 4184e19dfac4Smrg fi 4185e19dfac4Smrg ;; 4186e19dfac4Smrg esac 4187e19dfac4Smrg # Quote arguments (to preserve shell metacharacters). 4188313a12fdSmrg func_append_quoted args "$file" 4189e19dfac4Smrg done 419027702724Smrg 41917cea3689Smrg if $opt_dry_run; then 41927cea3689Smrg # Display what would be done. 41937cea3689Smrg if test -n "$shlibpath_var"; then 41947cea3689Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 41957cea3689Smrg echo "export $shlibpath_var" 41967cea3689Smrg fi 41977cea3689Smrg $ECHO "$cmd$args" 41987cea3689Smrg exit $EXIT_SUCCESS 41997cea3689Smrg else 4200e19dfac4Smrg if test -n "$shlibpath_var"; then 4201e19dfac4Smrg # Export the shlibpath_var. 4202e19dfac4Smrg eval "export $shlibpath_var" 4203e19dfac4Smrg fi 420427702724Smrg 4205e19dfac4Smrg # Restore saved environment variables 4206e19dfac4Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 4207e19dfac4Smrg do 4208e19dfac4Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 4209e19dfac4Smrg $lt_var=\$save_$lt_var; export $lt_var 4210e19dfac4Smrg else 4211e19dfac4Smrg $lt_unset $lt_var 4212e19dfac4Smrg fi" 4213e19dfac4Smrg done 421427702724Smrg 4215e19dfac4Smrg # Now prepare to actually exec the command. 42167cea3689Smrg exec_cmd=\$cmd$args 4217e19dfac4Smrg fi 4218e19dfac4Smrg} 421927702724Smrg 42207cea3689Smrgtest execute = "$opt_mode" && func_mode_execute ${1+"$@"} 422127702724Smrg 422227702724Smrg 4223e19dfac4Smrg# func_mode_finish arg... 4224e19dfac4Smrgfunc_mode_finish () 4225e19dfac4Smrg{ 42267cea3689Smrg $debug_cmd 42277cea3689Smrg 4228313a12fdSmrg libs= 4229313a12fdSmrg libdirs= 4230e19dfac4Smrg admincmds= 423127702724Smrg 4232313a12fdSmrg for opt in "$nonopt" ${1+"$@"} 4233313a12fdSmrg do 4234313a12fdSmrg if test -d "$opt"; then 4235313a12fdSmrg func_append libdirs " $opt" 4236313a12fdSmrg 4237313a12fdSmrg elif test -f "$opt"; then 4238313a12fdSmrg if func_lalib_unsafe_p "$opt"; then 4239313a12fdSmrg func_append libs " $opt" 4240313a12fdSmrg else 42417cea3689Smrg func_warning "'$opt' is not a valid libtool archive" 4242313a12fdSmrg fi 4243313a12fdSmrg 4244313a12fdSmrg else 42457cea3689Smrg func_fatal_error "invalid argument '$opt'" 4246313a12fdSmrg fi 4247313a12fdSmrg done 4248313a12fdSmrg 4249313a12fdSmrg if test -n "$libs"; then 4250313a12fdSmrg if test -n "$lt_sysroot"; then 4251313a12fdSmrg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 4252313a12fdSmrg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 4253313a12fdSmrg else 4254313a12fdSmrg sysroot_cmd= 4255313a12fdSmrg fi 4256313a12fdSmrg 4257313a12fdSmrg # Remove sysroot references 4258313a12fdSmrg if $opt_dry_run; then 4259313a12fdSmrg for lib in $libs; do 42607cea3689Smrg echo "removing references to $lt_sysroot and '=' prefixes from $lib" 4261313a12fdSmrg done 4262313a12fdSmrg else 4263313a12fdSmrg tmpdir=`func_mktempdir` 4264313a12fdSmrg for lib in $libs; do 42657cea3689Smrg $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 4266313a12fdSmrg > $tmpdir/tmp-la 4267313a12fdSmrg mv -f $tmpdir/tmp-la $lib 4268313a12fdSmrg done 4269313a12fdSmrg ${RM}r "$tmpdir" 4270313a12fdSmrg fi 4271313a12fdSmrg fi 427227702724Smrg 4273313a12fdSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4274e19dfac4Smrg for libdir in $libdirs; do 4275e19dfac4Smrg if test -n "$finish_cmds"; then 4276e19dfac4Smrg # Do each command in the finish commands. 4277e19dfac4Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 4278e19dfac4Smrg'"$cmd"'"' 4279e19dfac4Smrg fi 4280e19dfac4Smrg if test -n "$finish_eval"; then 4281e19dfac4Smrg # Do the single finish_eval. 4282e19dfac4Smrg eval cmds=\"$finish_eval\" 4283313a12fdSmrg $opt_dry_run || eval "$cmds" || func_append admincmds " 4284e19dfac4Smrg $cmds" 4285e19dfac4Smrg fi 4286e19dfac4Smrg done 4287e19dfac4Smrg fi 428827702724Smrg 4289e19dfac4Smrg # Exit here if they wanted silent mode. 42907cea3689Smrg $opt_quiet && exit $EXIT_SUCCESS 429127702724Smrg 4292313a12fdSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4293313a12fdSmrg echo "----------------------------------------------------------------------" 4294313a12fdSmrg echo "Libraries have been installed in:" 4295313a12fdSmrg for libdir in $libdirs; do 4296313a12fdSmrg $ECHO " $libdir" 4297313a12fdSmrg done 4298313a12fdSmrg echo 4299313a12fdSmrg echo "If you ever happen to want to link against installed libraries" 4300313a12fdSmrg echo "in a given directory, LIBDIR, you must either use libtool, and" 43017cea3689Smrg echo "specify the full pathname of the library, or use the '-LLIBDIR'" 4302313a12fdSmrg echo "flag during linking and do at least one of the following:" 4303313a12fdSmrg if test -n "$shlibpath_var"; then 43047cea3689Smrg echo " - add LIBDIR to the '$shlibpath_var' environment variable" 4305313a12fdSmrg echo " during execution" 4306313a12fdSmrg fi 4307313a12fdSmrg if test -n "$runpath_var"; then 43087cea3689Smrg echo " - add LIBDIR to the '$runpath_var' environment variable" 4309313a12fdSmrg echo " during linking" 4310313a12fdSmrg fi 4311313a12fdSmrg if test -n "$hardcode_libdir_flag_spec"; then 4312313a12fdSmrg libdir=LIBDIR 4313313a12fdSmrg eval flag=\"$hardcode_libdir_flag_spec\" 4314313a12fdSmrg 43157cea3689Smrg $ECHO " - use the '$flag' linker flag" 4316313a12fdSmrg fi 4317313a12fdSmrg if test -n "$admincmds"; then 4318313a12fdSmrg $ECHO " - have your system administrator run these commands:$admincmds" 4319313a12fdSmrg fi 4320313a12fdSmrg if test -f /etc/ld.so.conf; then 43217cea3689Smrg echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" 4322313a12fdSmrg fi 4323313a12fdSmrg echo 432427702724Smrg 4325313a12fdSmrg echo "See any operating system documentation about shared libraries for" 4326313a12fdSmrg case $host in 4327313a12fdSmrg solaris2.[6789]|solaris2.1[0-9]) 4328313a12fdSmrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 4329313a12fdSmrg echo "pages." 4330313a12fdSmrg ;; 4331313a12fdSmrg *) 4332313a12fdSmrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 4333313a12fdSmrg ;; 4334313a12fdSmrg esac 4335313a12fdSmrg echo "----------------------------------------------------------------------" 4336e19dfac4Smrg fi 4337e19dfac4Smrg exit $EXIT_SUCCESS 4338e19dfac4Smrg} 433927702724Smrg 43407cea3689Smrgtest finish = "$opt_mode" && func_mode_finish ${1+"$@"} 434127702724Smrg 434227702724Smrg 4343e19dfac4Smrg# func_mode_install arg... 4344e19dfac4Smrgfunc_mode_install () 4345e19dfac4Smrg{ 43467cea3689Smrg $debug_cmd 43477cea3689Smrg 4348e19dfac4Smrg # There may be an optional sh(1) argument at the beginning of 4349e19dfac4Smrg # install_prog (especially on Windows NT). 43507cea3689Smrg if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || 4351e19dfac4Smrg # Allow the use of GNU shtool's install command. 43527cea3689Smrg case $nonopt in *shtool*) :;; *) false;; esac 43537cea3689Smrg then 4354e19dfac4Smrg # Aesthetically quote it. 435595b7a5c8Smrg func_quote_arg pretty "$nonopt" 435695b7a5c8Smrg install_prog="$func_quote_arg_result " 4357e19dfac4Smrg arg=$1 4358e19dfac4Smrg shift 4359e19dfac4Smrg else 4360e19dfac4Smrg install_prog= 4361e19dfac4Smrg arg=$nonopt 4362e19dfac4Smrg fi 436327702724Smrg 4364e19dfac4Smrg # The real first argument should be the name of the installation program. 4365e19dfac4Smrg # Aesthetically quote it. 436695b7a5c8Smrg func_quote_arg pretty "$arg" 436795b7a5c8Smrg func_append install_prog "$func_quote_arg_result" 4368313a12fdSmrg install_shared_prog=$install_prog 4369313a12fdSmrg case " $install_prog " in 4370313a12fdSmrg *[\\\ /]cp\ *) install_cp=: ;; 4371313a12fdSmrg *) install_cp=false ;; 4372313a12fdSmrg esac 4373e19dfac4Smrg 4374e19dfac4Smrg # We need to accept at least all the BSD install flags. 4375e19dfac4Smrg dest= 4376e19dfac4Smrg files= 4377e19dfac4Smrg opts= 4378e19dfac4Smrg prev= 4379e19dfac4Smrg install_type= 43807cea3689Smrg isdir=false 4381e19dfac4Smrg stripme= 4382313a12fdSmrg no_mode=: 4383e19dfac4Smrg for arg 4384e19dfac4Smrg do 4385313a12fdSmrg arg2= 4386e19dfac4Smrg if test -n "$dest"; then 4387313a12fdSmrg func_append files " $dest" 4388e19dfac4Smrg dest=$arg 4389e19dfac4Smrg continue 439027702724Smrg fi 439127702724Smrg 4392e19dfac4Smrg case $arg in 43937cea3689Smrg -d) isdir=: ;; 4394e19dfac4Smrg -f) 4395313a12fdSmrg if $install_cp; then :; else 4396313a12fdSmrg prev=$arg 4397313a12fdSmrg fi 4398e19dfac4Smrg ;; 4399e19dfac4Smrg -g | -m | -o) 4400e19dfac4Smrg prev=$arg 4401e19dfac4Smrg ;; 4402e19dfac4Smrg -s) 4403e19dfac4Smrg stripme=" -s" 4404e19dfac4Smrg continue 4405e19dfac4Smrg ;; 4406e19dfac4Smrg -*) 4407e19dfac4Smrg ;; 4408e19dfac4Smrg *) 4409e19dfac4Smrg # If the previous option needed an argument, then skip it. 4410e19dfac4Smrg if test -n "$prev"; then 44117cea3689Smrg if test X-m = "X$prev" && test -n "$install_override_mode"; then 4412313a12fdSmrg arg2=$install_override_mode 4413313a12fdSmrg no_mode=false 4414313a12fdSmrg fi 4415e19dfac4Smrg prev= 4416e19dfac4Smrg else 4417e19dfac4Smrg dest=$arg 4418e19dfac4Smrg continue 4419e19dfac4Smrg fi 4420e19dfac4Smrg ;; 4421e19dfac4Smrg esac 442227702724Smrg 4423e19dfac4Smrg # Aesthetically quote the argument. 442495b7a5c8Smrg func_quote_arg pretty "$arg" 442595b7a5c8Smrg func_append install_prog " $func_quote_arg_result" 4426313a12fdSmrg if test -n "$arg2"; then 442795b7a5c8Smrg func_quote_arg pretty "$arg2" 4428313a12fdSmrg fi 442995b7a5c8Smrg func_append install_shared_prog " $func_quote_arg_result" 4430e19dfac4Smrg done 443127702724Smrg 4432e19dfac4Smrg test -z "$install_prog" && \ 4433e19dfac4Smrg func_fatal_help "you must specify an install program" 443427702724Smrg 4435e19dfac4Smrg test -n "$prev" && \ 44367cea3689Smrg func_fatal_help "the '$prev' option requires an argument" 443727702724Smrg 4438313a12fdSmrg if test -n "$install_override_mode" && $no_mode; then 4439313a12fdSmrg if $install_cp; then :; else 444095b7a5c8Smrg func_quote_arg pretty "$install_override_mode" 444195b7a5c8Smrg func_append install_shared_prog " -m $func_quote_arg_result" 4442313a12fdSmrg fi 4443313a12fdSmrg fi 4444313a12fdSmrg 4445e19dfac4Smrg if test -z "$files"; then 4446e19dfac4Smrg if test -z "$dest"; then 4447e19dfac4Smrg func_fatal_help "no file or destination specified" 4448e19dfac4Smrg else 4449e19dfac4Smrg func_fatal_help "you must specify a destination" 445027702724Smrg fi 445127702724Smrg fi 445227702724Smrg 4453e19dfac4Smrg # Strip any trailing slash from the destination. 4454e19dfac4Smrg func_stripname '' '/' "$dest" 4455e19dfac4Smrg dest=$func_stripname_result 445627702724Smrg 4457e19dfac4Smrg # Check to see that the destination is a directory. 44587cea3689Smrg test -d "$dest" && isdir=: 44597cea3689Smrg if $isdir; then 44607cea3689Smrg destdir=$dest 4461e19dfac4Smrg destname= 4462e19dfac4Smrg else 4463e19dfac4Smrg func_dirname_and_basename "$dest" "" "." 44647cea3689Smrg destdir=$func_dirname_result 44657cea3689Smrg destname=$func_basename_result 4466e19dfac4Smrg 4467e19dfac4Smrg # Not a directory, so check to see that there is only one file specified. 4468e19dfac4Smrg set dummy $files; shift 4469e19dfac4Smrg test "$#" -gt 1 && \ 44707cea3689Smrg func_fatal_help "'$dest' is not a directory" 4471e19dfac4Smrg fi 4472e19dfac4Smrg case $destdir in 4473e19dfac4Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 447427702724Smrg *) 4475e19dfac4Smrg for file in $files; do 4476e19dfac4Smrg case $file in 4477e19dfac4Smrg *.lo) ;; 4478e19dfac4Smrg *) 44797cea3689Smrg func_fatal_help "'$destdir' must be an absolute directory name" 4480e19dfac4Smrg ;; 4481e19dfac4Smrg esac 4482e19dfac4Smrg done 448327702724Smrg ;; 448427702724Smrg esac 448527702724Smrg 4486e19dfac4Smrg # This variable tells wrapper scripts just to set variables rather 4487e19dfac4Smrg # than running their programs. 44887cea3689Smrg libtool_install_magic=$magic 448927702724Smrg 4490e19dfac4Smrg staticlibs= 4491e19dfac4Smrg future_libdirs= 4492e19dfac4Smrg current_libdirs= 4493e19dfac4Smrg for file in $files; do 449427702724Smrg 4495e19dfac4Smrg # Do each installation. 4496e19dfac4Smrg case $file in 4497e19dfac4Smrg *.$libext) 4498e19dfac4Smrg # Do the static libraries later. 4499313a12fdSmrg func_append staticlibs " $file" 4500e19dfac4Smrg ;; 4501e19dfac4Smrg 4502e19dfac4Smrg *.la) 4503313a12fdSmrg func_resolve_sysroot "$file" 4504313a12fdSmrg file=$func_resolve_sysroot_result 4505313a12fdSmrg 4506e19dfac4Smrg # Check to see that this really is a libtool archive. 4507e19dfac4Smrg func_lalib_unsafe_p "$file" \ 45087cea3689Smrg || func_fatal_help "'$file' is not a valid libtool archive" 4509e19dfac4Smrg 4510e19dfac4Smrg library_names= 4511e19dfac4Smrg old_library= 4512e19dfac4Smrg relink_command= 4513e19dfac4Smrg func_source "$file" 4514e19dfac4Smrg 4515e19dfac4Smrg # Add the libdir to current_libdirs if it is the destination. 4516e19dfac4Smrg if test "X$destdir" = "X$libdir"; then 4517e19dfac4Smrg case "$current_libdirs " in 4518e19dfac4Smrg *" $libdir "*) ;; 4519313a12fdSmrg *) func_append current_libdirs " $libdir" ;; 452027702724Smrg esac 4521e19dfac4Smrg else 4522e19dfac4Smrg # Note the libdir as a future libdir. 4523e19dfac4Smrg case "$future_libdirs " in 4524e19dfac4Smrg *" $libdir "*) ;; 4525313a12fdSmrg *) func_append future_libdirs " $libdir" ;; 4526e19dfac4Smrg esac 4527e19dfac4Smrg fi 452827702724Smrg 4529e19dfac4Smrg func_dirname "$file" "/" "" 45307cea3689Smrg dir=$func_dirname_result 4531313a12fdSmrg func_append dir "$objdir" 4532e19dfac4Smrg 4533e19dfac4Smrg if test -n "$relink_command"; then 4534e19dfac4Smrg # Determine the prefix the user has applied to our future dir. 4535313a12fdSmrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 4536e19dfac4Smrg 4537e19dfac4Smrg # Don't allow the user to place us outside of our expected 4538e19dfac4Smrg # location b/c this prevents finding dependent libraries that 4539e19dfac4Smrg # are installed to the same prefix. 4540e19dfac4Smrg # At present, this check doesn't affect windows .dll's that 4541e19dfac4Smrg # are installed into $libdir/../bin (currently, that works fine) 4542e19dfac4Smrg # but it's something to keep an eye on. 4543e19dfac4Smrg test "$inst_prefix_dir" = "$destdir" && \ 45447cea3689Smrg func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" 4545e19dfac4Smrg 4546e19dfac4Smrg if test -n "$inst_prefix_dir"; then 4547e19dfac4Smrg # Stick the inst_prefix_dir data into the link command. 4548313a12fdSmrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 4549e19dfac4Smrg else 4550313a12fdSmrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 4551e19dfac4Smrg fi 4552e19dfac4Smrg 45537cea3689Smrg func_warning "relinking '$file'" 4554e19dfac4Smrg func_show_eval "$relink_command" \ 45557cea3689Smrg 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' 4556e19dfac4Smrg fi 4557e19dfac4Smrg 4558e19dfac4Smrg # See the names of the shared library. 4559e19dfac4Smrg set dummy $library_names; shift 4560e19dfac4Smrg if test -n "$1"; then 45617cea3689Smrg realname=$1 4562e19dfac4Smrg shift 4563e19dfac4Smrg 45647cea3689Smrg srcname=$realname 45657cea3689Smrg test -n "$relink_command" && srcname=${realname}T 4566e19dfac4Smrg 4567e19dfac4Smrg # Install the shared library and build the symlinks. 4568313a12fdSmrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 4569e19dfac4Smrg 'exit $?' 45707cea3689Smrg tstripme=$stripme 4571e19dfac4Smrg case $host_os in 4572e19dfac4Smrg cygwin* | mingw* | pw32* | cegcc*) 4573e19dfac4Smrg case $realname in 4574e19dfac4Smrg *.dll.a) 45757cea3689Smrg tstripme= 45767cea3689Smrg ;; 45777cea3689Smrg esac 45787cea3689Smrg ;; 45797cea3689Smrg os2*) 45807cea3689Smrg case $realname in 45817cea3689Smrg *_dll.a) 45827cea3689Smrg tstripme= 4583e19dfac4Smrg ;; 4584e19dfac4Smrg esac 458527702724Smrg ;; 458627702724Smrg esac 4587e19dfac4Smrg if test -n "$tstripme" && test -n "$striplib"; then 4588e19dfac4Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 458927702724Smrg fi 4590e19dfac4Smrg 4591e19dfac4Smrg if test "$#" -gt 0; then 4592e19dfac4Smrg # Delete the old symlinks, and create new ones. 45937cea3689Smrg # Try 'ln -sf' first, because the 'ln' binary might depend on 4594e19dfac4Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 4595e19dfac4Smrg # so we also need to try rm && ln -s. 4596e19dfac4Smrg for linkname 4597e19dfac4Smrg do 4598e19dfac4Smrg test "$linkname" != "$realname" \ 4599e19dfac4Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 460027702724Smrg done 460127702724Smrg fi 460227702724Smrg 4603e19dfac4Smrg # Do each command in the postinstall commands. 46047cea3689Smrg lib=$destdir/$realname 4605e19dfac4Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 460627702724Smrg fi 460727702724Smrg 4608e19dfac4Smrg # Install the pseudo-library for information purposes. 4609e19dfac4Smrg func_basename "$file" 46107cea3689Smrg name=$func_basename_result 46117cea3689Smrg instname=$dir/${name}i 4612e19dfac4Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 461327702724Smrg 4614e19dfac4Smrg # Maybe install the static library, too. 4615313a12fdSmrg test -n "$old_library" && func_append staticlibs " $dir/$old_library" 4616e19dfac4Smrg ;; 461727702724Smrg 4618e19dfac4Smrg *.lo) 4619e19dfac4Smrg # Install (i.e. copy) a libtool object. 462027702724Smrg 4621e19dfac4Smrg # Figure out destination file name, if it wasn't already specified. 4622e19dfac4Smrg if test -n "$destname"; then 46237cea3689Smrg destfile=$destdir/$destname 4624e19dfac4Smrg else 4625e19dfac4Smrg func_basename "$file" 46267cea3689Smrg destfile=$func_basename_result 46277cea3689Smrg destfile=$destdir/$destfile 4628e19dfac4Smrg fi 4629e19dfac4Smrg 4630e19dfac4Smrg # Deduce the name of the destination old-style object file. 4631e19dfac4Smrg case $destfile in 4632e19dfac4Smrg *.lo) 4633e19dfac4Smrg func_lo2o "$destfile" 4634e19dfac4Smrg staticdest=$func_lo2o_result 4635e19dfac4Smrg ;; 4636e19dfac4Smrg *.$objext) 46377cea3689Smrg staticdest=$destfile 4638e19dfac4Smrg destfile= 4639e19dfac4Smrg ;; 4640e19dfac4Smrg *) 46417cea3689Smrg func_fatal_help "cannot copy a libtool object to '$destfile'" 4642e19dfac4Smrg ;; 464327702724Smrg esac 464427702724Smrg 4645e19dfac4Smrg # Install the libtool object if requested. 4646e19dfac4Smrg test -n "$destfile" && \ 4647e19dfac4Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 4648e19dfac4Smrg 4649e19dfac4Smrg # Install the old object if enabled. 46507cea3689Smrg if test yes = "$build_old_libs"; then 4651e19dfac4Smrg # Deduce the name of the old-style object file. 4652e19dfac4Smrg func_lo2o "$file" 4653e19dfac4Smrg staticobj=$func_lo2o_result 4654e19dfac4Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 465527702724Smrg fi 4656e19dfac4Smrg exit $EXIT_SUCCESS 4657e19dfac4Smrg ;; 465827702724Smrg 4659e19dfac4Smrg *) 4660e19dfac4Smrg # Figure out destination file name, if it wasn't already specified. 4661e19dfac4Smrg if test -n "$destname"; then 46627cea3689Smrg destfile=$destdir/$destname 4663e19dfac4Smrg else 4664e19dfac4Smrg func_basename "$file" 46657cea3689Smrg destfile=$func_basename_result 46667cea3689Smrg destfile=$destdir/$destfile 4667e19dfac4Smrg fi 4668e19dfac4Smrg 4669e19dfac4Smrg # If the file is missing, and there is a .exe on the end, strip it 4670e19dfac4Smrg # because it is most likely a libtool script we actually want to 4671e19dfac4Smrg # install 46727cea3689Smrg stripped_ext= 4673e19dfac4Smrg case $file in 4674e19dfac4Smrg *.exe) 4675e19dfac4Smrg if test ! -f "$file"; then 4676e19dfac4Smrg func_stripname '' '.exe' "$file" 4677e19dfac4Smrg file=$func_stripname_result 46787cea3689Smrg stripped_ext=.exe 467927702724Smrg fi 4680e19dfac4Smrg ;; 4681e19dfac4Smrg esac 468227702724Smrg 4683e19dfac4Smrg # Do a test to see if this is really a libtool program. 4684e19dfac4Smrg case $host in 4685e19dfac4Smrg *cygwin* | *mingw*) 4686e19dfac4Smrg if func_ltwrapper_executable_p "$file"; then 4687e19dfac4Smrg func_ltwrapper_scriptname "$file" 4688e19dfac4Smrg wrapper=$func_ltwrapper_scriptname_result 4689e19dfac4Smrg else 4690e19dfac4Smrg func_stripname '' '.exe' "$file" 4691e19dfac4Smrg wrapper=$func_stripname_result 4692e19dfac4Smrg fi 4693e19dfac4Smrg ;; 4694e19dfac4Smrg *) 4695e19dfac4Smrg wrapper=$file 4696e19dfac4Smrg ;; 4697e19dfac4Smrg esac 4698e19dfac4Smrg if func_ltwrapper_script_p "$wrapper"; then 4699e19dfac4Smrg notinst_deplibs= 4700e19dfac4Smrg relink_command= 470127702724Smrg 4702e19dfac4Smrg func_source "$wrapper" 470327702724Smrg 4704e19dfac4Smrg # Check the variables that should have been set. 4705e19dfac4Smrg test -z "$generated_by_libtool_version" && \ 47067cea3689Smrg func_fatal_error "invalid libtool wrapper script '$wrapper'" 4707e19dfac4Smrg 47087cea3689Smrg finalize=: 4709e19dfac4Smrg for lib in $notinst_deplibs; do 4710e19dfac4Smrg # Check to see that each library is installed. 4711e19dfac4Smrg libdir= 4712e19dfac4Smrg if test -f "$lib"; then 4713e19dfac4Smrg func_source "$lib" 4714e19dfac4Smrg fi 47157cea3689Smrg libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` 4716e19dfac4Smrg if test -n "$libdir" && test ! -f "$libfile"; then 47177cea3689Smrg func_warning "'$lib' has not been installed in '$libdir'" 47187cea3689Smrg finalize=false 4719e19dfac4Smrg fi 4720e19dfac4Smrg done 4721e19dfac4Smrg 4722e19dfac4Smrg relink_command= 4723e19dfac4Smrg func_source "$wrapper" 4724e19dfac4Smrg 4725e19dfac4Smrg outputname= 47267cea3689Smrg if test no = "$fast_install" && test -n "$relink_command"; then 4727e19dfac4Smrg $opt_dry_run || { 47287cea3689Smrg if $finalize; then 4729e19dfac4Smrg tmpdir=`func_mktempdir` 4730e19dfac4Smrg func_basename "$file$stripped_ext" 47317cea3689Smrg file=$func_basename_result 47327cea3689Smrg outputname=$tmpdir/$file 4733e19dfac4Smrg # Replace the output file specification. 4734313a12fdSmrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 4735e19dfac4Smrg 47367cea3689Smrg $opt_quiet || { 473795b7a5c8Smrg func_quote_arg expand,pretty "$relink_command" 473895b7a5c8Smrg eval "func_echo $func_quote_arg_result" 4739e19dfac4Smrg } 4740e19dfac4Smrg if eval "$relink_command"; then : 4741e19dfac4Smrg else 47427cea3689Smrg func_error "error: relink '$file' with the above command before installing it" 4743e19dfac4Smrg $opt_dry_run || ${RM}r "$tmpdir" 4744e19dfac4Smrg continue 4745e19dfac4Smrg fi 47467cea3689Smrg file=$outputname 4747e19dfac4Smrg else 47487cea3689Smrg func_warning "cannot relink '$file'" 4749e19dfac4Smrg fi 4750e19dfac4Smrg } 475127702724Smrg else 4752e19dfac4Smrg # Install the binary that we compiled earlier. 4753313a12fdSmrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 475427702724Smrg fi 4755e19dfac4Smrg fi 475627702724Smrg 4757e19dfac4Smrg # remove .exe since cygwin /usr/bin/install will append another 4758e19dfac4Smrg # one anyway 4759e19dfac4Smrg case $install_prog,$host in 4760e19dfac4Smrg */usr/bin/install*,*cygwin*) 4761e19dfac4Smrg case $file:$destfile in 4762e19dfac4Smrg *.exe:*.exe) 4763e19dfac4Smrg # this is ok 4764e19dfac4Smrg ;; 4765e19dfac4Smrg *.exe:*) 4766e19dfac4Smrg destfile=$destfile.exe 4767e19dfac4Smrg ;; 4768e19dfac4Smrg *:*.exe) 4769e19dfac4Smrg func_stripname '' '.exe' "$destfile" 4770e19dfac4Smrg destfile=$func_stripname_result 4771e19dfac4Smrg ;; 4772e19dfac4Smrg esac 477327702724Smrg ;; 477427702724Smrg esac 4775e19dfac4Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 4776e19dfac4Smrg $opt_dry_run || if test -n "$outputname"; then 4777e19dfac4Smrg ${RM}r "$tmpdir" 4778e19dfac4Smrg fi 4779e19dfac4Smrg ;; 4780e19dfac4Smrg esac 4781e19dfac4Smrg done 478227702724Smrg 4783e19dfac4Smrg for file in $staticlibs; do 4784e19dfac4Smrg func_basename "$file" 47857cea3689Smrg name=$func_basename_result 478627702724Smrg 4787e19dfac4Smrg # Set up the ranlib parameters. 47887cea3689Smrg oldlib=$destdir/$name 4789313a12fdSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 4790313a12fdSmrg tool_oldlib=$func_to_tool_file_result 479127702724Smrg 4792e19dfac4Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 479327702724Smrg 4794e19dfac4Smrg if test -n "$stripme" && test -n "$old_striplib"; then 4795313a12fdSmrg func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 4796e19dfac4Smrg fi 479727702724Smrg 4798e19dfac4Smrg # Do each command in the postinstall commands. 4799e19dfac4Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 4800e19dfac4Smrg done 480127702724Smrg 4802e19dfac4Smrg test -n "$future_libdirs" && \ 48037cea3689Smrg func_warning "remember to run '$progname --finish$future_libdirs'" 480427702724Smrg 4805e19dfac4Smrg if test -n "$current_libdirs"; then 4806e19dfac4Smrg # Maybe just do a dry run. 4807e19dfac4Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 48087cea3689Smrg exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' 4809e19dfac4Smrg else 4810e19dfac4Smrg exit $EXIT_SUCCESS 4811e19dfac4Smrg fi 4812e19dfac4Smrg} 481327702724Smrg 48147cea3689Smrgtest install = "$opt_mode" && func_mode_install ${1+"$@"} 481527702724Smrg 481627702724Smrg 4817e19dfac4Smrg# func_generate_dlsyms outputname originator pic_p 4818e19dfac4Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 4819e19dfac4Smrg# a dlpreopen symbol table. 4820e19dfac4Smrgfunc_generate_dlsyms () 4821e19dfac4Smrg{ 48227cea3689Smrg $debug_cmd 48237cea3689Smrg 48247cea3689Smrg my_outputname=$1 48257cea3689Smrg my_originator=$2 48267cea3689Smrg my_pic_p=${3-false} 48277cea3689Smrg my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` 4828e19dfac4Smrg my_dlsyms= 4829e19dfac4Smrg 48307cea3689Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 4831e19dfac4Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 48327cea3689Smrg my_dlsyms=${my_outputname}S.c 4833e19dfac4Smrg else 4834e19dfac4Smrg func_error "not configured to extract global symbols from dlpreopened files" 4835e19dfac4Smrg fi 4836e19dfac4Smrg fi 483727702724Smrg 4838e19dfac4Smrg if test -n "$my_dlsyms"; then 4839e19dfac4Smrg case $my_dlsyms in 4840e19dfac4Smrg "") ;; 4841e19dfac4Smrg *.c) 4842e19dfac4Smrg # Discover the nlist of each of the dlfiles. 48437cea3689Smrg nlist=$output_objdir/$my_outputname.nm 4844e19dfac4Smrg 4845e19dfac4Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 4846e19dfac4Smrg 4847e19dfac4Smrg # Parse the name list into a source file. 4848e19dfac4Smrg func_verbose "creating $output_objdir/$my_dlsyms" 4849e19dfac4Smrg 4850e19dfac4Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 48517cea3689Smrg/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ 48527cea3689Smrg/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ 4853e19dfac4Smrg 4854e19dfac4Smrg#ifdef __cplusplus 4855e19dfac4Smrgextern \"C\" { 4856e19dfac4Smrg#endif 4857e19dfac4Smrg 48587cea3689Smrg#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 4859313a12fdSmrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 4860313a12fdSmrg#endif 4861313a12fdSmrg 4862313a12fdSmrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 48637cea3689Smrg#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE 48647cea3689Smrg/* DATA imports from DLLs on WIN32 can't be const, because runtime 4865313a12fdSmrg relocations are performed -- see ld's documentation on pseudo-relocs. */ 4866313a12fdSmrg# define LT_DLSYM_CONST 48677cea3689Smrg#elif defined __osf__ 4868313a12fdSmrg/* This system does not cope well with relocations in const data. */ 4869313a12fdSmrg# define LT_DLSYM_CONST 4870313a12fdSmrg#else 4871313a12fdSmrg# define LT_DLSYM_CONST const 4872313a12fdSmrg#endif 4873313a12fdSmrg 48747cea3689Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 48757cea3689Smrg 4876e19dfac4Smrg/* External symbol declarations for the compiler. */\ 4877e19dfac4Smrg" 4878e19dfac4Smrg 48797cea3689Smrg if test yes = "$dlself"; then 48807cea3689Smrg func_verbose "generating symbol list for '$output'" 4881e19dfac4Smrg 4882e19dfac4Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 4883e19dfac4Smrg 4884e19dfac4Smrg # Add our own program objects to the symbol list. 4885313a12fdSmrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 4886e19dfac4Smrg for progfile in $progfiles; do 4887313a12fdSmrg func_to_tool_file "$progfile" func_convert_file_msys_to_w32 48887cea3689Smrg func_verbose "extracting global C symbols from '$func_to_tool_file_result'" 4889313a12fdSmrg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 4890e19dfac4Smrg done 4891e19dfac4Smrg 4892e19dfac4Smrg if test -n "$exclude_expsyms"; then 4893e19dfac4Smrg $opt_dry_run || { 4894e19dfac4Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 4895e19dfac4Smrg eval '$MV "$nlist"T "$nlist"' 4896e19dfac4Smrg } 489727702724Smrg fi 489827702724Smrg 4899e19dfac4Smrg if test -n "$export_symbols_regex"; then 4900e19dfac4Smrg $opt_dry_run || { 4901e19dfac4Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 4902e19dfac4Smrg eval '$MV "$nlist"T "$nlist"' 4903e19dfac4Smrg } 490427702724Smrg fi 4905e19dfac4Smrg 4906e19dfac4Smrg # Prepare the list of exported symbols 4907e19dfac4Smrg if test -z "$export_symbols"; then 49087cea3689Smrg export_symbols=$output_objdir/$outputname.exp 4909e19dfac4Smrg $opt_dry_run || { 4910e19dfac4Smrg $RM $export_symbols 49117cea3689Smrg eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 4912e19dfac4Smrg case $host in 4913e19dfac4Smrg *cygwin* | *mingw* | *cegcc* ) 4914e19dfac4Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4915e19dfac4Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 4916e19dfac4Smrg ;; 491727702724Smrg esac 4918e19dfac4Smrg } 4919e19dfac4Smrg else 4920e19dfac4Smrg $opt_dry_run || { 49217cea3689Smrg eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 4922e19dfac4Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 4923e19dfac4Smrg eval '$MV "$nlist"T "$nlist"' 4924e19dfac4Smrg case $host in 4925313a12fdSmrg *cygwin* | *mingw* | *cegcc* ) 4926e19dfac4Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4927e19dfac4Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 4928e19dfac4Smrg ;; 492927702724Smrg esac 4930e19dfac4Smrg } 493127702724Smrg fi 4932e19dfac4Smrg fi 493327702724Smrg 4934e19dfac4Smrg for dlprefile in $dlprefiles; do 49357cea3689Smrg func_verbose "extracting global C symbols from '$dlprefile'" 4936e19dfac4Smrg func_basename "$dlprefile" 49377cea3689Smrg name=$func_basename_result 4938313a12fdSmrg case $host in 4939313a12fdSmrg *cygwin* | *mingw* | *cegcc* ) 4940313a12fdSmrg # if an import library, we need to obtain dlname 4941313a12fdSmrg if func_win32_import_lib_p "$dlprefile"; then 4942313a12fdSmrg func_tr_sh "$dlprefile" 4943313a12fdSmrg eval "curr_lafile=\$libfile_$func_tr_sh_result" 49447cea3689Smrg dlprefile_dlbasename= 4945313a12fdSmrg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 4946313a12fdSmrg # Use subshell, to avoid clobbering current variable values 4947313a12fdSmrg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 49487cea3689Smrg if test -n "$dlprefile_dlname"; then 4949313a12fdSmrg func_basename "$dlprefile_dlname" 49507cea3689Smrg dlprefile_dlbasename=$func_basename_result 4951313a12fdSmrg else 4952313a12fdSmrg # no lafile. user explicitly requested -dlpreopen <import library>. 4953313a12fdSmrg $sharedlib_from_linklib_cmd "$dlprefile" 4954313a12fdSmrg dlprefile_dlbasename=$sharedlib_from_linklib_result 4955313a12fdSmrg fi 4956313a12fdSmrg fi 4957313a12fdSmrg $opt_dry_run || { 49587cea3689Smrg if test -n "$dlprefile_dlbasename"; then 4959313a12fdSmrg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 4960313a12fdSmrg else 4961313a12fdSmrg func_warning "Could not compute DLL name from $name" 4962313a12fdSmrg eval '$ECHO ": $name " >> "$nlist"' 4963313a12fdSmrg fi 4964313a12fdSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4965313a12fdSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 4966313a12fdSmrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 4967313a12fdSmrg } 4968313a12fdSmrg else # not an import lib 4969313a12fdSmrg $opt_dry_run || { 4970313a12fdSmrg eval '$ECHO ": $name " >> "$nlist"' 4971313a12fdSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4972313a12fdSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 4973313a12fdSmrg } 4974313a12fdSmrg fi 4975313a12fdSmrg ;; 4976313a12fdSmrg *) 4977313a12fdSmrg $opt_dry_run || { 4978313a12fdSmrg eval '$ECHO ": $name " >> "$nlist"' 4979313a12fdSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4980313a12fdSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 4981313a12fdSmrg } 4982313a12fdSmrg ;; 4983313a12fdSmrg esac 4984e19dfac4Smrg done 498527702724Smrg 4986e19dfac4Smrg $opt_dry_run || { 4987e19dfac4Smrg # Make sure we have at least an empty file. 4988e19dfac4Smrg test -f "$nlist" || : > "$nlist" 498927702724Smrg 4990e19dfac4Smrg if test -n "$exclude_expsyms"; then 4991e19dfac4Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 4992e19dfac4Smrg $MV "$nlist"T "$nlist" 499327702724Smrg fi 499427702724Smrg 4995e19dfac4Smrg # Try sorting and uniquifying the output. 4996e19dfac4Smrg if $GREP -v "^: " < "$nlist" | 4997e19dfac4Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 4998e19dfac4Smrg sort -k 3 499927702724Smrg else 5000e19dfac4Smrg sort +2 5001e19dfac4Smrg fi | 5002e19dfac4Smrg uniq > "$nlist"S; then 5003e19dfac4Smrg : 500427702724Smrg else 5005e19dfac4Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 500627702724Smrg fi 500727702724Smrg 5008e19dfac4Smrg if test -f "$nlist"S; then 5009e19dfac4Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 501027702724Smrg else 5011313a12fdSmrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 501227702724Smrg fi 501327702724Smrg 50147cea3689Smrg func_show_eval '$RM "${nlist}I"' 50157cea3689Smrg if test -n "$global_symbol_to_import"; then 50167cea3689Smrg eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' 50177cea3689Smrg fi 50187cea3689Smrg 5019313a12fdSmrg echo >> "$output_objdir/$my_dlsyms" "\ 502027702724Smrg 5021e19dfac4Smrg/* The mapping between symbol names and symbols. */ 5022e19dfac4Smrgtypedef struct { 5023e19dfac4Smrg const char *name; 5024e19dfac4Smrg void *address; 5025e19dfac4Smrg} lt_dlsymlist; 5026313a12fdSmrgextern LT_DLSYM_CONST lt_dlsymlist 50277cea3689Smrglt_${my_prefix}_LTX_preloaded_symbols[];\ 50287cea3689Smrg" 50297cea3689Smrg 50307cea3689Smrg if test -s "$nlist"I; then 50317cea3689Smrg echo >> "$output_objdir/$my_dlsyms" "\ 50327cea3689Smrgstatic void lt_syminit(void) 50337cea3689Smrg{ 50347cea3689Smrg LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; 50357cea3689Smrg for (; symbol->name; ++symbol) 50367cea3689Smrg {" 50377cea3689Smrg $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" 50387cea3689Smrg echo >> "$output_objdir/$my_dlsyms" "\ 50397cea3689Smrg } 50407cea3689Smrg}" 50417cea3689Smrg fi 50427cea3689Smrg echo >> "$output_objdir/$my_dlsyms" "\ 5043313a12fdSmrgLT_DLSYM_CONST lt_dlsymlist 5044e19dfac4Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 50457cea3689Smrg{ {\"$my_originator\", (void *) 0}," 50467cea3689Smrg 50477cea3689Smrg if test -s "$nlist"I; then 50487cea3689Smrg echo >> "$output_objdir/$my_dlsyms" "\ 50497cea3689Smrg {\"@INIT@\", (void *) <_syminit}," 50507cea3689Smrg fi 5051e19dfac4Smrg 5052e19dfac4Smrg case $need_lib_prefix in 5053e19dfac4Smrg no) 5054e19dfac4Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 5055e19dfac4Smrg ;; 5056e19dfac4Smrg *) 5057e19dfac4Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 5058e19dfac4Smrg ;; 5059e19dfac4Smrg esac 5060313a12fdSmrg echo >> "$output_objdir/$my_dlsyms" "\ 5061e19dfac4Smrg {0, (void *) 0} 5062e19dfac4Smrg}; 5063e19dfac4Smrg 5064e19dfac4Smrg/* This works around a problem in FreeBSD linker */ 5065e19dfac4Smrg#ifdef FREEBSD_WORKAROUND 5066e19dfac4Smrgstatic const void *lt_preloaded_setup() { 5067e19dfac4Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 5068e19dfac4Smrg} 5069e19dfac4Smrg#endif 5070e19dfac4Smrg 5071e19dfac4Smrg#ifdef __cplusplus 5072e19dfac4Smrg} 5073e19dfac4Smrg#endif\ 5074e19dfac4Smrg" 5075e19dfac4Smrg } # !$opt_dry_run 5076e19dfac4Smrg 5077e19dfac4Smrg pic_flag_for_symtable= 5078e19dfac4Smrg case "$compile_command " in 5079e19dfac4Smrg *" -static "*) ;; 5080e19dfac4Smrg *) 5081e19dfac4Smrg case $host in 5082e19dfac4Smrg # compiling the symbol table file with pic_flag works around 5083e19dfac4Smrg # a FreeBSD bug that causes programs to crash when -lm is 5084e19dfac4Smrg # linked before any other PIC object. But we must not use 5085e19dfac4Smrg # pic_flag when linking with -static. The problem exists in 5086e19dfac4Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 5087313a12fdSmrg *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 5088e19dfac4Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 5089e19dfac4Smrg *-*-hpux*) 5090e19dfac4Smrg pic_flag_for_symtable=" $pic_flag" ;; 5091e19dfac4Smrg *) 50927cea3689Smrg $my_pic_p && pic_flag_for_symtable=" $pic_flag" 5093e19dfac4Smrg ;; 5094e19dfac4Smrg esac 5095e19dfac4Smrg ;; 5096e19dfac4Smrg esac 5097e19dfac4Smrg symtab_cflags= 5098e19dfac4Smrg for arg in $LTCFLAGS; do 5099e19dfac4Smrg case $arg in 5100e19dfac4Smrg -pie | -fpie | -fPIE) ;; 5101313a12fdSmrg *) func_append symtab_cflags " $arg" ;; 5102e19dfac4Smrg esac 5103e19dfac4Smrg done 510427702724Smrg 5105e19dfac4Smrg # Now compile the dynamic symbol file. 5106e19dfac4Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 510727702724Smrg 5108e19dfac4Smrg # Clean up the generated files. 51097cea3689Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' 5110e19dfac4Smrg 5111e19dfac4Smrg # Transform the symbol file into the correct name. 51127cea3689Smrg symfileobj=$output_objdir/${my_outputname}S.$objext 5113e19dfac4Smrg case $host in 5114e19dfac4Smrg *cygwin* | *mingw* | *cegcc* ) 5115e19dfac4Smrg if test -f "$output_objdir/$my_outputname.def"; then 5116313a12fdSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 5117313a12fdSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 5118e19dfac4Smrg else 5119313a12fdSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5120313a12fdSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5121e19dfac4Smrg fi 5122e19dfac4Smrg ;; 5123e19dfac4Smrg *) 5124313a12fdSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5125313a12fdSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 512627702724Smrg ;; 512727702724Smrg esac 5128e19dfac4Smrg ;; 5129e19dfac4Smrg *) 51307cea3689Smrg func_fatal_error "unknown suffix for '$my_dlsyms'" 5131e19dfac4Smrg ;; 5132e19dfac4Smrg esac 5133e19dfac4Smrg else 5134e19dfac4Smrg # We keep going just in case the user didn't refer to 5135e19dfac4Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 5136e19dfac4Smrg # really was required. 5137e19dfac4Smrg 5138e19dfac4Smrg # Nullify the symbol file. 5139313a12fdSmrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 5140313a12fdSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 514127702724Smrg fi 5142e19dfac4Smrg} 514327702724Smrg 51447cea3689Smrg# func_cygming_gnu_implib_p ARG 51457cea3689Smrg# This predicate returns with zero status (TRUE) if 51467cea3689Smrg# ARG is a GNU/binutils-style import library. Returns 51477cea3689Smrg# with nonzero status (FALSE) otherwise. 51487cea3689Smrgfunc_cygming_gnu_implib_p () 51497cea3689Smrg{ 51507cea3689Smrg $debug_cmd 51517cea3689Smrg 51527cea3689Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 51537cea3689Smrg 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)$'` 51547cea3689Smrg test -n "$func_cygming_gnu_implib_tmp" 51557cea3689Smrg} 51567cea3689Smrg 51577cea3689Smrg# func_cygming_ms_implib_p ARG 51587cea3689Smrg# This predicate returns with zero status (TRUE) if 51597cea3689Smrg# ARG is an MS-style import library. Returns 51607cea3689Smrg# with nonzero status (FALSE) otherwise. 51617cea3689Smrgfunc_cygming_ms_implib_p () 51627cea3689Smrg{ 51637cea3689Smrg $debug_cmd 51647cea3689Smrg 51657cea3689Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 51667cea3689Smrg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 51677cea3689Smrg test -n "$func_cygming_ms_implib_tmp" 51687cea3689Smrg} 51697cea3689Smrg 5170e19dfac4Smrg# func_win32_libid arg 5171e19dfac4Smrg# return the library type of file 'arg' 5172e19dfac4Smrg# 5173e19dfac4Smrg# Need a lot of goo to handle *both* DLLs and import libs 5174e19dfac4Smrg# Has to be a shell function in order to 'eat' the argument 5175e19dfac4Smrg# that is supplied when $file_magic_command is called. 5176313a12fdSmrg# Despite the name, also deal with 64 bit binaries. 5177e19dfac4Smrgfunc_win32_libid () 5178e19dfac4Smrg{ 51797cea3689Smrg $debug_cmd 51807cea3689Smrg 51817cea3689Smrg win32_libid_type=unknown 5182e19dfac4Smrg win32_fileres=`file -L $1 2>/dev/null` 5183e19dfac4Smrg case $win32_fileres in 5184e19dfac4Smrg *ar\ archive\ import\ library*) # definitely import 5185e19dfac4Smrg win32_libid_type="x86 archive import" 5186e19dfac4Smrg ;; 5187e19dfac4Smrg *ar\ archive*) # could be an import, or static 5188313a12fdSmrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 5189e19dfac4Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 5190313a12fdSmrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 51917cea3689Smrg case $nm_interface in 51927cea3689Smrg "MS dumpbin") 51937cea3689Smrg if func_cygming_ms_implib_p "$1" || 51947cea3689Smrg func_cygming_gnu_implib_p "$1" 51957cea3689Smrg then 51967cea3689Smrg win32_nmres=import 51977cea3689Smrg else 51987cea3689Smrg win32_nmres= 51997cea3689Smrg fi 52007cea3689Smrg ;; 52017cea3689Smrg *) 52027cea3689Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 52037cea3689Smrg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 52047cea3689Smrg $SED -n -e ' 5205e19dfac4Smrg 1,100{ 5206e19dfac4Smrg / I /{ 52077cea3689Smrg s|.*|import| 5208e19dfac4Smrg p 5209e19dfac4Smrg q 5210e19dfac4Smrg } 5211e19dfac4Smrg }'` 52127cea3689Smrg ;; 52137cea3689Smrg esac 5214e19dfac4Smrg case $win32_nmres in 5215e19dfac4Smrg import*) win32_libid_type="x86 archive import";; 5216e19dfac4Smrg *) win32_libid_type="x86 archive static";; 5217e19dfac4Smrg esac 5218e19dfac4Smrg fi 5219e19dfac4Smrg ;; 5220e19dfac4Smrg *DLL*) 5221e19dfac4Smrg win32_libid_type="x86 DLL" 5222e19dfac4Smrg ;; 5223e19dfac4Smrg *executable*) # but shell scripts are "executable" too... 5224e19dfac4Smrg case $win32_fileres in 5225e19dfac4Smrg *MS\ Windows\ PE\ Intel*) 5226e19dfac4Smrg win32_libid_type="x86 DLL" 5227e19dfac4Smrg ;; 5228e19dfac4Smrg esac 5229e19dfac4Smrg ;; 5230e19dfac4Smrg esac 5231e19dfac4Smrg $ECHO "$win32_libid_type" 5232e19dfac4Smrg} 523327702724Smrg 5234313a12fdSmrg# func_cygming_dll_for_implib ARG 5235313a12fdSmrg# 5236313a12fdSmrg# Platform-specific function to extract the 5237313a12fdSmrg# name of the DLL associated with the specified 5238313a12fdSmrg# import library ARG. 5239313a12fdSmrg# Invoked by eval'ing the libtool variable 5240313a12fdSmrg# $sharedlib_from_linklib_cmd 5241313a12fdSmrg# Result is available in the variable 5242313a12fdSmrg# $sharedlib_from_linklib_result 5243313a12fdSmrgfunc_cygming_dll_for_implib () 5244313a12fdSmrg{ 52457cea3689Smrg $debug_cmd 52467cea3689Smrg 5247313a12fdSmrg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 5248313a12fdSmrg} 5249313a12fdSmrg 5250313a12fdSmrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 5251313a12fdSmrg# 5252313a12fdSmrg# The is the core of a fallback implementation of a 5253313a12fdSmrg# platform-specific function to extract the name of the 5254313a12fdSmrg# DLL associated with the specified import library LIBNAME. 5255313a12fdSmrg# 5256313a12fdSmrg# SECTION_NAME is either .idata$6 or .idata$7, depending 5257313a12fdSmrg# on the platform and compiler that created the implib. 5258313a12fdSmrg# 5259313a12fdSmrg# Echos the name of the DLL associated with the 5260313a12fdSmrg# specified import library. 5261313a12fdSmrgfunc_cygming_dll_for_implib_fallback_core () 5262313a12fdSmrg{ 52637cea3689Smrg $debug_cmd 52647cea3689Smrg 5265313a12fdSmrg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 5266313a12fdSmrg $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 5267313a12fdSmrg $SED '/^Contents of section '"$match_literal"':/{ 5268313a12fdSmrg # Place marker at beginning of archive member dllname section 5269313a12fdSmrg s/.*/====MARK====/ 5270313a12fdSmrg p 5271313a12fdSmrg d 5272313a12fdSmrg } 5273313a12fdSmrg # These lines can sometimes be longer than 43 characters, but 5274313a12fdSmrg # are always uninteresting 5275313a12fdSmrg /:[ ]*file format pe[i]\{,1\}-/d 5276313a12fdSmrg /^In archive [^:]*:/d 5277313a12fdSmrg # Ensure marker is printed 5278313a12fdSmrg /^====MARK====/p 5279313a12fdSmrg # Remove all lines with less than 43 characters 5280313a12fdSmrg /^.\{43\}/!d 5281313a12fdSmrg # From remaining lines, remove first 43 characters 5282313a12fdSmrg s/^.\{43\}//' | 5283313a12fdSmrg $SED -n ' 5284313a12fdSmrg # Join marker and all lines until next marker into a single line 5285313a12fdSmrg /^====MARK====/ b para 5286313a12fdSmrg H 5287313a12fdSmrg $ b para 5288313a12fdSmrg b 5289313a12fdSmrg :para 5290313a12fdSmrg x 5291313a12fdSmrg s/\n//g 5292313a12fdSmrg # Remove the marker 5293313a12fdSmrg s/^====MARK====// 5294313a12fdSmrg # Remove trailing dots and whitespace 5295313a12fdSmrg s/[\. \t]*$// 5296313a12fdSmrg # Print 5297313a12fdSmrg /./p' | 5298313a12fdSmrg # we now have a list, one entry per line, of the stringified 5299313a12fdSmrg # contents of the appropriate section of all members of the 53007cea3689Smrg # archive that possess that section. Heuristic: eliminate 53017cea3689Smrg # all those that have a first or second character that is 5302313a12fdSmrg # a '.' (that is, objdump's representation of an unprintable 5303313a12fdSmrg # character.) This should work for all archives with less than 5304313a12fdSmrg # 0x302f exports -- but will fail for DLLs whose name actually 5305313a12fdSmrg # begins with a literal '.' or a single character followed by 5306313a12fdSmrg # a '.'. 5307313a12fdSmrg # 5308313a12fdSmrg # Of those that remain, print the first one. 5309313a12fdSmrg $SED -e '/^\./d;/^.\./d;q' 5310313a12fdSmrg} 5311313a12fdSmrg 5312313a12fdSmrg# func_cygming_dll_for_implib_fallback ARG 5313313a12fdSmrg# Platform-specific function to extract the 5314313a12fdSmrg# name of the DLL associated with the specified 5315313a12fdSmrg# import library ARG. 5316313a12fdSmrg# 5317313a12fdSmrg# This fallback implementation is for use when $DLLTOOL 5318313a12fdSmrg# does not support the --identify-strict option. 5319313a12fdSmrg# Invoked by eval'ing the libtool variable 5320313a12fdSmrg# $sharedlib_from_linklib_cmd 5321313a12fdSmrg# Result is available in the variable 5322313a12fdSmrg# $sharedlib_from_linklib_result 5323313a12fdSmrgfunc_cygming_dll_for_implib_fallback () 5324313a12fdSmrg{ 53257cea3689Smrg $debug_cmd 53267cea3689Smrg 53277cea3689Smrg if func_cygming_gnu_implib_p "$1"; then 5328313a12fdSmrg # binutils import library 5329313a12fdSmrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 53307cea3689Smrg elif func_cygming_ms_implib_p "$1"; then 5331313a12fdSmrg # ms-generated import library 5332313a12fdSmrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 5333313a12fdSmrg else 5334313a12fdSmrg # unknown 53357cea3689Smrg sharedlib_from_linklib_result= 5336313a12fdSmrg fi 5337313a12fdSmrg} 533827702724Smrg 533927702724Smrg 5340e19dfac4Smrg# func_extract_an_archive dir oldlib 5341e19dfac4Smrgfunc_extract_an_archive () 5342e19dfac4Smrg{ 53437cea3689Smrg $debug_cmd 53447cea3689Smrg 53457cea3689Smrg f_ex_an_ar_dir=$1; shift 53467cea3689Smrg f_ex_an_ar_oldlib=$1 53477cea3689Smrg if test yes = "$lock_old_archive_extraction"; then 5348313a12fdSmrg lockfile=$f_ex_an_ar_oldlib.lock 5349313a12fdSmrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 5350313a12fdSmrg func_echo "Waiting for $lockfile to be removed" 5351313a12fdSmrg sleep 2 5352313a12fdSmrg done 5353313a12fdSmrg fi 5354313a12fdSmrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 5355313a12fdSmrg 'stat=$?; rm -f "$lockfile"; exit $stat' 53567cea3689Smrg if test yes = "$lock_old_archive_extraction"; then 5357313a12fdSmrg $opt_dry_run || rm -f "$lockfile" 5358313a12fdSmrg fi 5359e19dfac4Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 5360e19dfac4Smrg : 5361e19dfac4Smrg else 5362e19dfac4Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 5363e19dfac4Smrg fi 5364e19dfac4Smrg} 536527702724Smrg 536627702724Smrg 5367e19dfac4Smrg# func_extract_archives gentop oldlib ... 5368e19dfac4Smrgfunc_extract_archives () 5369e19dfac4Smrg{ 53707cea3689Smrg $debug_cmd 53717cea3689Smrg 53727cea3689Smrg my_gentop=$1; shift 5373e19dfac4Smrg my_oldlibs=${1+"$@"} 53747cea3689Smrg my_oldobjs= 53757cea3689Smrg my_xlib= 53767cea3689Smrg my_xabs= 53777cea3689Smrg my_xdir= 537827702724Smrg 5379e19dfac4Smrg for my_xlib in $my_oldlibs; do 5380e19dfac4Smrg # Extract the objects. 5381e19dfac4Smrg case $my_xlib in 53827cea3689Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; 5383e19dfac4Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 5384e19dfac4Smrg esac 5385e19dfac4Smrg func_basename "$my_xlib" 53867cea3689Smrg my_xlib=$func_basename_result 5387e19dfac4Smrg my_xlib_u=$my_xlib 5388e19dfac4Smrg while :; do 5389e19dfac4Smrg case " $extracted_archives " in 5390e19dfac4Smrg *" $my_xlib_u "*) 5391e19dfac4Smrg func_arith $extracted_serial + 1 5392e19dfac4Smrg extracted_serial=$func_arith_result 5393e19dfac4Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 5394e19dfac4Smrg *) break ;; 5395e19dfac4Smrg esac 5396e19dfac4Smrg done 5397e19dfac4Smrg extracted_archives="$extracted_archives $my_xlib_u" 53987cea3689Smrg my_xdir=$my_gentop/$my_xlib_u 539927702724Smrg 5400e19dfac4Smrg func_mkdir_p "$my_xdir" 540127702724Smrg 5402e19dfac4Smrg case $host in 5403e19dfac4Smrg *-darwin*) 5404e19dfac4Smrg func_verbose "Extracting $my_xabs" 5405e19dfac4Smrg # Do not bother doing anything if just a dry run 5406e19dfac4Smrg $opt_dry_run || { 5407e19dfac4Smrg darwin_orig_dir=`pwd` 5408e19dfac4Smrg cd $my_xdir || exit $? 5409e19dfac4Smrg darwin_archive=$my_xabs 5410e19dfac4Smrg darwin_curdir=`pwd` 54117cea3689Smrg func_basename "$darwin_archive" 54127cea3689Smrg darwin_base_archive=$func_basename_result 5413e19dfac4Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 5414e19dfac4Smrg if test -n "$darwin_arches"; then 5415e19dfac4Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 5416e19dfac4Smrg darwin_arch= 5417e19dfac4Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 54187cea3689Smrg for darwin_arch in $darwin_arches; do 54197cea3689Smrg func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" 54207cea3689Smrg $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" 54217cea3689Smrg cd "unfat-$$/$darwin_base_archive-$darwin_arch" 54227cea3689Smrg func_extract_an_archive "`pwd`" "$darwin_base_archive" 5423e19dfac4Smrg cd "$darwin_curdir" 54247cea3689Smrg $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" 5425e19dfac4Smrg done # $darwin_arches 5426e19dfac4Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 54277cea3689Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` 5428e19dfac4Smrg darwin_file= 5429e19dfac4Smrg darwin_files= 5430e19dfac4Smrg for darwin_file in $darwin_filelist; do 5431313a12fdSmrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 5432e19dfac4Smrg $LIPO -create -output "$darwin_file" $darwin_files 5433e19dfac4Smrg done # $darwin_filelist 5434e19dfac4Smrg $RM -rf unfat-$$ 5435e19dfac4Smrg cd "$darwin_orig_dir" 5436e19dfac4Smrg else 5437e19dfac4Smrg cd $darwin_orig_dir 5438e19dfac4Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 5439e19dfac4Smrg fi # $darwin_arches 5440e19dfac4Smrg } # !$opt_dry_run 5441e19dfac4Smrg ;; 5442e19dfac4Smrg *) 5443e19dfac4Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 5444e19dfac4Smrg ;; 544527702724Smrg esac 5446313a12fdSmrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 5447e19dfac4Smrg done 544827702724Smrg 54497cea3689Smrg func_extract_archives_result=$my_oldobjs 5450e19dfac4Smrg} 545127702724Smrg 545227702724Smrg 5453313a12fdSmrg# func_emit_wrapper [arg=no] 5454313a12fdSmrg# 5455313a12fdSmrg# Emit a libtool wrapper script on stdout. 5456313a12fdSmrg# Don't directly open a file because we may want to 5457313a12fdSmrg# incorporate the script contents within a cygwin/mingw 5458313a12fdSmrg# wrapper executable. Must ONLY be called from within 5459313a12fdSmrg# func_mode_link because it depends on a number of variables 5460313a12fdSmrg# set therein. 5461e19dfac4Smrg# 5462313a12fdSmrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 5463313a12fdSmrg# variable will take. If 'yes', then the emitted script 54647cea3689Smrg# will assume that the directory where it is stored is 5465313a12fdSmrg# the $objdir directory. This is a cygwin/mingw-specific 5466313a12fdSmrg# behavior. 5467313a12fdSmrgfunc_emit_wrapper () 5468e19dfac4Smrg{ 5469313a12fdSmrg func_emit_wrapper_arg1=${1-no} 547027702724Smrg 5471e19dfac4Smrg $ECHO "\ 5472e19dfac4Smrg#! $SHELL 547327702724Smrg 5474e19dfac4Smrg# $output - temporary wrapper script for $objdir/$outputname 54757cea3689Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5476e19dfac4Smrg# 5477e19dfac4Smrg# The $output program cannot be directly executed until all the libtool 5478e19dfac4Smrg# libraries that it depends on are installed. 5479e19dfac4Smrg# 5480e19dfac4Smrg# This wrapper script should never be moved out of the build directory. 5481e19dfac4Smrg# If it is, it will not operate correctly. 548227702724Smrg 5483e19dfac4Smrg# Sed substitution that helps us do robust quoting. It backslashifies 5484e19dfac4Smrg# metacharacters that are still active within double-quoted strings. 5485e19dfac4Smrgsed_quote_subst='$sed_quote_subst' 548627702724Smrg 5487e19dfac4Smrg# Be Bourne compatible 5488e19dfac4Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 5489e19dfac4Smrg emulate sh 5490e19dfac4Smrg NULLCMD=: 5491e19dfac4Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 5492e19dfac4Smrg # is contrary to our usage. Disable this feature. 5493e19dfac4Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 5494e19dfac4Smrg setopt NO_GLOB_SUBST 5495e19dfac4Smrgelse 5496e19dfac4Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 5497e19dfac4Smrgfi 5498e19dfac4SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 5499e19dfac4SmrgDUALCASE=1; export DUALCASE # for MKS sh 550027702724Smrg 5501e19dfac4Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 5502e19dfac4Smrg# if CDPATH is set. 5503e19dfac4Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 550427702724Smrg 5505e19dfac4Smrgrelink_command=\"$relink_command\" 550627702724Smrg 5507e19dfac4Smrg# This environment variable determines our operation mode. 5508e19dfac4Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 5509e19dfac4Smrg # install mode needs the following variables: 5510e19dfac4Smrg generated_by_libtool_version='$macro_version' 5511e19dfac4Smrg notinst_deplibs='$notinst_deplibs' 5512e19dfac4Smrgelse 5513e19dfac4Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 5514e19dfac4Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 5515313a12fdSmrg file=\"\$0\"" 5516313a12fdSmrg 551795b7a5c8Smrg func_quote_arg pretty "$ECHO" 551895b7a5c8Smrg qECHO=$func_quote_arg_result 5519313a12fdSmrg $ECHO "\ 5520313a12fdSmrg 5521313a12fdSmrg# A function that is used when there is no print builtin or printf. 5522313a12fdSmrgfunc_fallback_echo () 5523313a12fdSmrg{ 5524313a12fdSmrg eval 'cat <<_LTECHO_EOF 5525313a12fdSmrg\$1 5526313a12fdSmrg_LTECHO_EOF' 5527313a12fdSmrg} 552895b7a5c8Smrg ECHO=$qECHO 5529313a12fdSmrg fi 5530313a12fdSmrg 5531313a12fdSmrg# Very basic option parsing. These options are (a) specific to 5532313a12fdSmrg# the libtool wrapper, (b) are identical between the wrapper 55337cea3689Smrg# /script/ and the wrapper /executable/ that is used only on 5534313a12fdSmrg# windows platforms, and (c) all begin with the string "--lt-" 55357cea3689Smrg# (application programs are unlikely to have options that match 5536313a12fdSmrg# this pattern). 5537313a12fdSmrg# 5538313a12fdSmrg# There are only two supported options: --lt-debug and 5539313a12fdSmrg# --lt-dump-script. There is, deliberately, no --lt-help. 5540313a12fdSmrg# 5541313a12fdSmrg# The first argument to this parsing function should be the 5542313a12fdSmrg# script's $0 value, followed by "$@". 5543313a12fdSmrglt_option_debug= 5544313a12fdSmrgfunc_parse_lt_options () 5545313a12fdSmrg{ 5546313a12fdSmrg lt_script_arg0=\$0 5547313a12fdSmrg shift 5548313a12fdSmrg for lt_opt 5549313a12fdSmrg do 5550313a12fdSmrg case \"\$lt_opt\" in 5551313a12fdSmrg --lt-debug) lt_option_debug=1 ;; 5552313a12fdSmrg --lt-dump-script) 5553313a12fdSmrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 5554313a12fdSmrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 5555313a12fdSmrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 5556313a12fdSmrg cat \"\$lt_dump_D/\$lt_dump_F\" 5557313a12fdSmrg exit 0 5558313a12fdSmrg ;; 5559313a12fdSmrg --lt-*) 5560313a12fdSmrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 5561313a12fdSmrg exit 1 5562313a12fdSmrg ;; 5563313a12fdSmrg esac 5564313a12fdSmrg done 5565313a12fdSmrg 5566313a12fdSmrg # Print the debug banner immediately: 5567313a12fdSmrg if test -n \"\$lt_option_debug\"; then 55687cea3689Smrg echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 5569313a12fdSmrg fi 5570313a12fdSmrg} 5571313a12fdSmrg 5572313a12fdSmrg# Used when --lt-debug. Prints its arguments to stdout 5573313a12fdSmrg# (redirection is the responsibility of the caller) 5574313a12fdSmrgfunc_lt_dump_args () 5575313a12fdSmrg{ 5576313a12fdSmrg lt_dump_args_N=1; 5577313a12fdSmrg for lt_arg 5578313a12fdSmrg do 55797cea3689Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" 5580313a12fdSmrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 5581313a12fdSmrg done 5582313a12fdSmrg} 5583313a12fdSmrg 5584313a12fdSmrg# Core function for launching the target application 5585313a12fdSmrgfunc_exec_program_core () 5586313a12fdSmrg{ 5587e19dfac4Smrg" 5588313a12fdSmrg case $host in 5589313a12fdSmrg # Backslashes separate directories on plain windows 5590313a12fdSmrg *-*-mingw | *-*-os2* | *-cegcc*) 5591313a12fdSmrg $ECHO "\ 5592313a12fdSmrg if test -n \"\$lt_option_debug\"; then 55937cea3689Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 5594313a12fdSmrg func_lt_dump_args \${1+\"\$@\"} 1>&2 5595313a12fdSmrg fi 5596313a12fdSmrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 5597313a12fdSmrg" 5598313a12fdSmrg ;; 5599313a12fdSmrg 5600313a12fdSmrg *) 5601313a12fdSmrg $ECHO "\ 5602313a12fdSmrg if test -n \"\$lt_option_debug\"; then 56037cea3689Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 5604313a12fdSmrg func_lt_dump_args \${1+\"\$@\"} 1>&2 5605313a12fdSmrg fi 5606313a12fdSmrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 5607313a12fdSmrg" 5608313a12fdSmrg ;; 5609313a12fdSmrg esac 5610313a12fdSmrg $ECHO "\ 5611313a12fdSmrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 5612313a12fdSmrg exit 1 5613313a12fdSmrg} 5614313a12fdSmrg 5615313a12fdSmrg# A function to encapsulate launching the target application 5616313a12fdSmrg# Strips options in the --lt-* namespace from \$@ and 5617313a12fdSmrg# launches target application with the remaining arguments. 5618313a12fdSmrgfunc_exec_program () 5619313a12fdSmrg{ 5620313a12fdSmrg case \" \$* \" in 5621313a12fdSmrg *\\ --lt-*) 5622313a12fdSmrg for lt_wr_arg 5623313a12fdSmrg do 5624313a12fdSmrg case \$lt_wr_arg in 5625313a12fdSmrg --lt-*) ;; 5626313a12fdSmrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 5627313a12fdSmrg esac 5628313a12fdSmrg shift 5629313a12fdSmrg done ;; 5630313a12fdSmrg esac 5631313a12fdSmrg func_exec_program_core \${1+\"\$@\"} 5632313a12fdSmrg} 5633313a12fdSmrg 5634313a12fdSmrg # Parse options 5635313a12fdSmrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 563627702724Smrg 5637e19dfac4Smrg # Find the directory that this script lives in. 5638313a12fdSmrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 5639e19dfac4Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 564027702724Smrg 5641e19dfac4Smrg # Follow symbolic links until we get to the real thisdir. 5642313a12fdSmrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 5643e19dfac4Smrg while test -n \"\$file\"; do 5644313a12fdSmrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 564527702724Smrg 5646e19dfac4Smrg # If there was a directory component, then change thisdir. 5647e19dfac4Smrg if test \"x\$destdir\" != \"x\$file\"; then 5648e19dfac4Smrg case \"\$destdir\" in 5649e19dfac4Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 5650e19dfac4Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 5651e19dfac4Smrg esac 5652e19dfac4Smrg fi 565327702724Smrg 5654313a12fdSmrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 5655313a12fdSmrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 5656e19dfac4Smrg done 565727702724Smrg 5658e19dfac4Smrg # Usually 'no', except on cygwin/mingw when embedded into 5659e19dfac4Smrg # the cwrapper. 5660313a12fdSmrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 5661e19dfac4Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 5662e19dfac4Smrg # special case for '.' 5663e19dfac4Smrg if test \"\$thisdir\" = \".\"; then 5664e19dfac4Smrg thisdir=\`pwd\` 5665e19dfac4Smrg fi 5666e19dfac4Smrg # remove .libs from thisdir 5667e19dfac4Smrg case \"\$thisdir\" in 5668313a12fdSmrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 5669e19dfac4Smrg $objdir ) thisdir=. ;; 5670e19dfac4Smrg esac 5671e19dfac4Smrg fi 567227702724Smrg 5673e19dfac4Smrg # Try to get the absolute directory name. 5674e19dfac4Smrg absdir=\`cd \"\$thisdir\" && pwd\` 5675e19dfac4Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 5676e19dfac4Smrg" 567727702724Smrg 56787cea3689Smrg if test yes = "$fast_install"; then 5679e19dfac4Smrg $ECHO "\ 5680e19dfac4Smrg program=lt-'$outputname'$exeext 5681e19dfac4Smrg progdir=\"\$thisdir/$objdir\" 568227702724Smrg 5683e19dfac4Smrg if test ! -f \"\$progdir/\$program\" || 56847cea3689Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ 5685e19dfac4Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 568627702724Smrg 5687e19dfac4Smrg file=\"\$\$-\$program\" 568827702724Smrg 5689e19dfac4Smrg if test ! -d \"\$progdir\"; then 5690e19dfac4Smrg $MKDIR \"\$progdir\" 5691e19dfac4Smrg else 5692e19dfac4Smrg $RM \"\$progdir/\$file\" 5693e19dfac4Smrg fi" 569427702724Smrg 5695e19dfac4Smrg $ECHO "\ 569627702724Smrg 5697e19dfac4Smrg # relink executable if necessary 5698e19dfac4Smrg if test -n \"\$relink_command\"; then 5699e19dfac4Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 5700e19dfac4Smrg else 57017cea3689Smrg \$ECHO \"\$relink_command_output\" >&2 5702e19dfac4Smrg $RM \"\$progdir/\$file\" 5703e19dfac4Smrg exit 1 5704e19dfac4Smrg fi 5705e19dfac4Smrg fi 570627702724Smrg 5707e19dfac4Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 5708e19dfac4Smrg { $RM \"\$progdir/\$program\"; 5709e19dfac4Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 5710e19dfac4Smrg $RM \"\$progdir/\$file\" 5711e19dfac4Smrg fi" 5712e19dfac4Smrg else 5713e19dfac4Smrg $ECHO "\ 5714e19dfac4Smrg program='$outputname' 5715e19dfac4Smrg progdir=\"\$thisdir/$objdir\" 5716e19dfac4Smrg" 5717e19dfac4Smrg fi 571827702724Smrg 5719e19dfac4Smrg $ECHO "\ 572027702724Smrg 5721e19dfac4Smrg if test -f \"\$progdir/\$program\"; then" 572227702724Smrg 5723313a12fdSmrg # fixup the dll searchpath if we need to. 5724313a12fdSmrg # 5725313a12fdSmrg # Fix the DLL searchpath if we need to. Do this before prepending 5726313a12fdSmrg # to shlibpath, because on Windows, both are PATH and uninstalled 5727313a12fdSmrg # libraries must come first. 5728313a12fdSmrg if test -n "$dllsearchpath"; then 5729313a12fdSmrg $ECHO "\ 5730313a12fdSmrg # Add the dll search path components to the executable PATH 5731313a12fdSmrg PATH=$dllsearchpath:\$PATH 5732313a12fdSmrg" 5733313a12fdSmrg fi 5734313a12fdSmrg 5735e19dfac4Smrg # Export our shlibpath_var if we have one. 57367cea3689Smrg if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5737e19dfac4Smrg $ECHO "\ 5738e19dfac4Smrg # Add our own library path to $shlibpath_var 5739e19dfac4Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 574027702724Smrg 5741e19dfac4Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 5742e19dfac4Smrg # The second colon is a workaround for a bug in BeOS R4 sed 5743313a12fdSmrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 574427702724Smrg 5745e19dfac4Smrg export $shlibpath_var 5746e19dfac4Smrg" 574727702724Smrg fi 574827702724Smrg 5749e19dfac4Smrg $ECHO "\ 5750e19dfac4Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 5751e19dfac4Smrg # Run the actual program with our arguments. 5752313a12fdSmrg func_exec_program \${1+\"\$@\"} 5753e19dfac4Smrg fi 5754e19dfac4Smrg else 5755e19dfac4Smrg # The program doesn't exist. 57567cea3689Smrg \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 5757e19dfac4Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 5758313a12fdSmrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 5759e19dfac4Smrg exit 1 5760e19dfac4Smrg fi 5761e19dfac4Smrgfi\ 5762e19dfac4Smrg" 5763e19dfac4Smrg} 576427702724Smrg 576527702724Smrg 5766e19dfac4Smrg# func_emit_cwrapperexe_src 5767e19dfac4Smrg# emit the source code for a wrapper executable on stdout 5768e19dfac4Smrg# Must ONLY be called from within func_mode_link because 5769e19dfac4Smrg# it depends on a number of variable set therein. 5770e19dfac4Smrgfunc_emit_cwrapperexe_src () 5771e19dfac4Smrg{ 5772e19dfac4Smrg cat <<EOF 577327702724Smrg 5774e19dfac4Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 57757cea3689Smrg Generated by $PROGRAM (GNU $PACKAGE) $VERSION 577627702724Smrg 5777e19dfac4Smrg The $output program cannot be directly executed until all the libtool 5778e19dfac4Smrg libraries that it depends on are installed. 577927702724Smrg 5780e19dfac4Smrg This wrapper executable should never be moved out of the build directory. 5781e19dfac4Smrg If it is, it will not operate correctly. 5782e19dfac4Smrg*/ 5783e19dfac4SmrgEOF 5784e19dfac4Smrg cat <<"EOF" 5785313a12fdSmrg#ifdef _MSC_VER 5786313a12fdSmrg# define _CRT_SECURE_NO_DEPRECATE 1 5787313a12fdSmrg#endif 5788e19dfac4Smrg#include <stdio.h> 5789e19dfac4Smrg#include <stdlib.h> 5790e19dfac4Smrg#ifdef _MSC_VER 5791e19dfac4Smrg# include <direct.h> 5792e19dfac4Smrg# include <process.h> 5793e19dfac4Smrg# include <io.h> 5794e19dfac4Smrg#else 5795e19dfac4Smrg# include <unistd.h> 5796e19dfac4Smrg# include <stdint.h> 5797e19dfac4Smrg# ifdef __CYGWIN__ 5798e19dfac4Smrg# include <io.h> 5799e19dfac4Smrg# endif 5800e19dfac4Smrg#endif 5801e19dfac4Smrg#include <malloc.h> 5802e19dfac4Smrg#include <stdarg.h> 5803e19dfac4Smrg#include <assert.h> 5804e19dfac4Smrg#include <string.h> 5805e19dfac4Smrg#include <ctype.h> 5806e19dfac4Smrg#include <errno.h> 5807e19dfac4Smrg#include <fcntl.h> 5808e19dfac4Smrg#include <sys/stat.h> 5809e19dfac4Smrg 58107cea3689Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 58117cea3689Smrg 5812313a12fdSmrg/* declarations of non-ANSI functions */ 58137cea3689Smrg#if defined __MINGW32__ 5814313a12fdSmrg# ifdef __STRICT_ANSI__ 5815313a12fdSmrgint _putenv (const char *); 5816313a12fdSmrg# endif 58177cea3689Smrg#elif defined __CYGWIN__ 5818313a12fdSmrg# ifdef __STRICT_ANSI__ 5819313a12fdSmrgchar *realpath (const char *, char *); 5820313a12fdSmrgint putenv (char *); 5821313a12fdSmrgint setenv (const char *, const char *, int); 5822313a12fdSmrg# endif 58237cea3689Smrg/* #elif defined other_platform || defined ... */ 5824313a12fdSmrg#endif 5825313a12fdSmrg 5826313a12fdSmrg/* portability defines, excluding path handling macros */ 58277cea3689Smrg#if defined _MSC_VER 5828313a12fdSmrg# define setmode _setmode 5829313a12fdSmrg# define stat _stat 5830313a12fdSmrg# define chmod _chmod 5831313a12fdSmrg# define getcwd _getcwd 5832313a12fdSmrg# define putenv _putenv 5833313a12fdSmrg# define S_IXUSR _S_IEXEC 58347cea3689Smrg#elif defined __MINGW32__ 5835313a12fdSmrg# define setmode _setmode 5836313a12fdSmrg# define stat _stat 5837313a12fdSmrg# define chmod _chmod 5838313a12fdSmrg# define getcwd _getcwd 5839313a12fdSmrg# define putenv _putenv 58407cea3689Smrg#elif defined __CYGWIN__ 5841313a12fdSmrg# define HAVE_SETENV 5842313a12fdSmrg# define FOPEN_WB "wb" 58437cea3689Smrg/* #elif defined other platforms ... */ 5844313a12fdSmrg#endif 5845313a12fdSmrg 58467cea3689Smrg#if defined PATH_MAX 5847e19dfac4Smrg# define LT_PATHMAX PATH_MAX 58487cea3689Smrg#elif defined MAXPATHLEN 5849e19dfac4Smrg# define LT_PATHMAX MAXPATHLEN 5850e19dfac4Smrg#else 5851e19dfac4Smrg# define LT_PATHMAX 1024 5852e19dfac4Smrg#endif 5853e19dfac4Smrg 5854e19dfac4Smrg#ifndef S_IXOTH 5855e19dfac4Smrg# define S_IXOTH 0 5856e19dfac4Smrg#endif 5857e19dfac4Smrg#ifndef S_IXGRP 5858e19dfac4Smrg# define S_IXGRP 0 5859e19dfac4Smrg#endif 5860e19dfac4Smrg 5861313a12fdSmrg/* path handling portability macros */ 5862e19dfac4Smrg#ifndef DIR_SEPARATOR 5863e19dfac4Smrg# define DIR_SEPARATOR '/' 5864e19dfac4Smrg# define PATH_SEPARATOR ':' 5865e19dfac4Smrg#endif 5866e19dfac4Smrg 58677cea3689Smrg#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ 58687cea3689Smrg defined __OS2__ 5869e19dfac4Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 5870e19dfac4Smrg# define FOPEN_WB "wb" 5871e19dfac4Smrg# ifndef DIR_SEPARATOR_2 5872e19dfac4Smrg# define DIR_SEPARATOR_2 '\\' 5873e19dfac4Smrg# endif 5874e19dfac4Smrg# ifndef PATH_SEPARATOR_2 5875e19dfac4Smrg# define PATH_SEPARATOR_2 ';' 5876e19dfac4Smrg# endif 5877e19dfac4Smrg#endif 5878e19dfac4Smrg 5879e19dfac4Smrg#ifndef DIR_SEPARATOR_2 5880e19dfac4Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 5881e19dfac4Smrg#else /* DIR_SEPARATOR_2 */ 5882e19dfac4Smrg# define IS_DIR_SEPARATOR(ch) \ 5883e19dfac4Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 5884e19dfac4Smrg#endif /* DIR_SEPARATOR_2 */ 5885e19dfac4Smrg 5886e19dfac4Smrg#ifndef PATH_SEPARATOR_2 5887e19dfac4Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 5888e19dfac4Smrg#else /* PATH_SEPARATOR_2 */ 5889e19dfac4Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 5890e19dfac4Smrg#endif /* PATH_SEPARATOR_2 */ 5891e19dfac4Smrg 5892e19dfac4Smrg#ifndef FOPEN_WB 5893e19dfac4Smrg# define FOPEN_WB "w" 5894e19dfac4Smrg#endif 5895e19dfac4Smrg#ifndef _O_BINARY 5896e19dfac4Smrg# define _O_BINARY 0 5897e19dfac4Smrg#endif 5898e19dfac4Smrg 5899e19dfac4Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 5900e19dfac4Smrg#define XFREE(stale) do { \ 59017cea3689Smrg if (stale) { free (stale); stale = 0; } \ 5902e19dfac4Smrg} while (0) 5903e19dfac4Smrg 59047cea3689Smrg#if defined LT_DEBUGWRAPPER 5905313a12fdSmrgstatic int lt_debug = 1; 5906e19dfac4Smrg#else 5907313a12fdSmrgstatic int lt_debug = 0; 5908e19dfac4Smrg#endif 5909e19dfac4Smrg 5910313a12fdSmrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 5911e19dfac4Smrg 5912e19dfac4Smrgvoid *xmalloc (size_t num); 5913e19dfac4Smrgchar *xstrdup (const char *string); 5914e19dfac4Smrgconst char *base_name (const char *name); 5915e19dfac4Smrgchar *find_executable (const char *wrapper); 5916e19dfac4Smrgchar *chase_symlinks (const char *pathspec); 5917e19dfac4Smrgint make_executable (const char *path); 5918e19dfac4Smrgint check_executable (const char *path); 5919e19dfac4Smrgchar *strendzap (char *str, const char *pat); 5920313a12fdSmrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 5921313a12fdSmrgvoid lt_fatal (const char *file, int line, const char *message, ...); 5922313a12fdSmrgstatic const char *nonnull (const char *s); 5923313a12fdSmrgstatic const char *nonempty (const char *s); 5924e19dfac4Smrgvoid lt_setenv (const char *name, const char *value); 5925e19dfac4Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 5926e19dfac4Smrgvoid lt_update_exe_path (const char *name, const char *value); 5927e19dfac4Smrgvoid lt_update_lib_path (const char *name, const char *value); 5928313a12fdSmrgchar **prepare_spawn (char **argv); 5929313a12fdSmrgvoid lt_dump_script (FILE *f); 5930e19dfac4SmrgEOF 5931e19dfac4Smrg 5932e19dfac4Smrg cat <<EOF 59337cea3689Smrg#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) 59347cea3689Smrg# define externally_visible volatile 59357cea3689Smrg#else 59367cea3689Smrg# define externally_visible __attribute__((externally_visible)) volatile 59377cea3689Smrg#endif 59387cea3689Smrgexternally_visible const char * MAGIC_EXE = "$magic_exe"; 5939e19dfac4Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 5940e19dfac4SmrgEOF 5941e19dfac4Smrg 59427cea3689Smrg if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5943313a12fdSmrg func_to_host_path "$temp_rpath" 5944e19dfac4Smrg cat <<EOF 5945313a12fdSmrgconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 594627702724SmrgEOF 594727702724Smrg else 5948e19dfac4Smrg cat <<"EOF" 5949e19dfac4Smrgconst char * LIB_PATH_VALUE = ""; 5950e19dfac4SmrgEOF 595127702724Smrg fi 5952e19dfac4Smrg 5953e19dfac4Smrg if test -n "$dllsearchpath"; then 5954313a12fdSmrg func_to_host_path "$dllsearchpath:" 5955e19dfac4Smrg cat <<EOF 5956e19dfac4Smrgconst char * EXE_PATH_VARNAME = "PATH"; 5957313a12fdSmrgconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 5958e19dfac4SmrgEOF 595927702724Smrg else 5960e19dfac4Smrg cat <<"EOF" 5961e19dfac4Smrgconst char * EXE_PATH_VARNAME = ""; 5962e19dfac4Smrgconst char * EXE_PATH_VALUE = ""; 5963e19dfac4SmrgEOF 596427702724Smrg fi 5965e19dfac4Smrg 59667cea3689Smrg if test yes = "$fast_install"; then 5967e19dfac4Smrg cat <<EOF 5968e19dfac4Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 5969e19dfac4SmrgEOF 597027702724Smrg else 5971e19dfac4Smrg cat <<EOF 5972e19dfac4Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 5973e19dfac4SmrgEOF 597427702724Smrg fi 597527702724Smrg 597627702724Smrg 5977e19dfac4Smrg cat <<"EOF" 597827702724Smrg 5979e19dfac4Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 598027702724Smrg 5981e19dfac4Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 5982e19dfac4Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 5983313a12fdSmrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 598427702724Smrg 5985e19dfac4Smrgint 5986e19dfac4Smrgmain (int argc, char *argv[]) 5987e19dfac4Smrg{ 5988e19dfac4Smrg char **newargz; 5989e19dfac4Smrg int newargc; 5990e19dfac4Smrg char *tmp_pathspec; 5991e19dfac4Smrg char *actual_cwrapper_path; 5992e19dfac4Smrg char *actual_cwrapper_name; 5993e19dfac4Smrg char *target_name; 5994e19dfac4Smrg char *lt_argv_zero; 59957cea3689Smrg int rval = 127; 599627702724Smrg 5997e19dfac4Smrg int i; 599827702724Smrg 5999e19dfac4Smrg program_name = (char *) xstrdup (base_name (argv[0])); 60007cea3689Smrg newargz = XMALLOC (char *, (size_t) argc + 1); 600127702724Smrg 6002313a12fdSmrg /* very simple arg parsing; don't want to rely on getopt 6003313a12fdSmrg * also, copy all non cwrapper options to newargz, except 6004313a12fdSmrg * argz[0], which is handled differently 6005313a12fdSmrg */ 6006313a12fdSmrg newargc=0; 6007e19dfac4Smrg for (i = 1; i < argc; i++) 6008e19dfac4Smrg { 60097cea3689Smrg if (STREQ (argv[i], dumpscript_opt)) 6010e19dfac4Smrg { 6011e19dfac4SmrgEOF 60127cea3689Smrg case $host in 6013e19dfac4Smrg *mingw* | *cygwin* ) 6014e19dfac4Smrg # make stdout use "unix" line endings 6015e19dfac4Smrg echo " setmode(1,_O_BINARY);" 6016e19dfac4Smrg ;; 6017e19dfac4Smrg esac 601827702724Smrg 6019e19dfac4Smrg cat <<"EOF" 6020313a12fdSmrg lt_dump_script (stdout); 6021e19dfac4Smrg return 0; 6022e19dfac4Smrg } 60237cea3689Smrg if (STREQ (argv[i], debug_opt)) 6024313a12fdSmrg { 6025313a12fdSmrg lt_debug = 1; 6026313a12fdSmrg continue; 6027313a12fdSmrg } 60287cea3689Smrg if (STREQ (argv[i], ltwrapper_option_prefix)) 6029313a12fdSmrg { 6030313a12fdSmrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 6031313a12fdSmrg namespace, but it is not one of the ones we know about and 6032313a12fdSmrg have already dealt with, above (inluding dump-script), then 6033313a12fdSmrg report an error. Otherwise, targets might begin to believe 6034313a12fdSmrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 6035313a12fdSmrg namespace. The first time any user complains about this, we'll 6036313a12fdSmrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 6037313a12fdSmrg or a configure.ac-settable value. 6038313a12fdSmrg */ 6039313a12fdSmrg lt_fatal (__FILE__, __LINE__, 6040313a12fdSmrg "unrecognized %s option: '%s'", 6041313a12fdSmrg ltwrapper_option_prefix, argv[i]); 6042313a12fdSmrg } 6043313a12fdSmrg /* otherwise ... */ 6044313a12fdSmrg newargz[++newargc] = xstrdup (argv[i]); 6045e19dfac4Smrg } 6046313a12fdSmrg newargz[++newargc] = NULL; 6047313a12fdSmrg 6048313a12fdSmrgEOF 6049313a12fdSmrg cat <<EOF 6050313a12fdSmrg /* The GNU banner must be the first non-error debug message */ 60517cea3689Smrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); 6052313a12fdSmrgEOF 6053313a12fdSmrg cat <<"EOF" 6054313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 6055313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 605627702724Smrg 6057e19dfac4Smrg tmp_pathspec = find_executable (argv[0]); 6058e19dfac4Smrg if (tmp_pathspec == NULL) 6059313a12fdSmrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 6060313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 6061313a12fdSmrg "(main) found exe (before symlink chase) at: %s\n", 6062313a12fdSmrg tmp_pathspec); 6063e19dfac4Smrg 6064e19dfac4Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 6065313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 6066313a12fdSmrg "(main) found exe (after symlink chase) at: %s\n", 6067313a12fdSmrg actual_cwrapper_path); 6068e19dfac4Smrg XFREE (tmp_pathspec); 6069e19dfac4Smrg 6070313a12fdSmrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 6071e19dfac4Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 6072e19dfac4Smrg 6073e19dfac4Smrg /* wrapper name transforms */ 6074e19dfac4Smrg strendzap (actual_cwrapper_name, ".exe"); 6075e19dfac4Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 6076e19dfac4Smrg XFREE (actual_cwrapper_name); 6077e19dfac4Smrg actual_cwrapper_name = tmp_pathspec; 6078e19dfac4Smrg tmp_pathspec = 0; 6079e19dfac4Smrg 6080e19dfac4Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 6081e19dfac4Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 6082e19dfac4Smrg strendzap (target_name, ".exe"); 6083e19dfac4Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 6084e19dfac4Smrg XFREE (target_name); 6085e19dfac4Smrg target_name = tmp_pathspec; 6086e19dfac4Smrg tmp_pathspec = 0; 6087e19dfac4Smrg 6088313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 6089313a12fdSmrg "(main) libtool target name: %s\n", 6090313a12fdSmrg target_name); 6091e19dfac4SmrgEOF 609227702724Smrg 6093e19dfac4Smrg cat <<EOF 6094e19dfac4Smrg newargz[0] = 6095e19dfac4Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 6096e19dfac4Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 6097e19dfac4Smrg strcpy (newargz[0], actual_cwrapper_path); 6098e19dfac4Smrg strcat (newargz[0], "$objdir"); 6099e19dfac4Smrg strcat (newargz[0], "/"); 6100e19dfac4SmrgEOF 610127702724Smrg 6102e19dfac4Smrg cat <<"EOF" 6103e19dfac4Smrg /* stop here, and copy so we don't have to do this twice */ 6104e19dfac4Smrg tmp_pathspec = xstrdup (newargz[0]); 610527702724Smrg 6106e19dfac4Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 6107e19dfac4Smrg strcat (newargz[0], actual_cwrapper_name); 610827702724Smrg 6109e19dfac4Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 6110e19dfac4Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 6111e19dfac4Smrg XFREE (tmp_pathspec); 6112e19dfac4Smrg tmp_pathspec = NULL; 6113e19dfac4SmrgEOF 611427702724Smrg 6115e19dfac4Smrg case $host_os in 6116e19dfac4Smrg mingw*) 6117e19dfac4Smrg cat <<"EOF" 6118e19dfac4Smrg { 6119e19dfac4Smrg char* p; 6120e19dfac4Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 6121e19dfac4Smrg { 6122e19dfac4Smrg *p = '/'; 6123e19dfac4Smrg } 6124e19dfac4Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 6125e19dfac4Smrg { 6126e19dfac4Smrg *p = '/'; 6127e19dfac4Smrg } 6128e19dfac4Smrg } 6129e19dfac4SmrgEOF 6130e19dfac4Smrg ;; 6131e19dfac4Smrg esac 613227702724Smrg 6133e19dfac4Smrg cat <<"EOF" 6134e19dfac4Smrg XFREE (target_name); 6135e19dfac4Smrg XFREE (actual_cwrapper_path); 6136e19dfac4Smrg XFREE (actual_cwrapper_name); 613727702724Smrg 6138e19dfac4Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 6139e19dfac4Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 6140313a12fdSmrg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 6141313a12fdSmrg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 6142313a12fdSmrg because on Windows, both *_VARNAMEs are PATH but uninstalled 6143313a12fdSmrg libraries must come first. */ 6144e19dfac4Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 6145313a12fdSmrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 614627702724Smrg 6147313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 6148313a12fdSmrg nonnull (lt_argv_zero)); 6149e19dfac4Smrg for (i = 0; i < newargc; i++) 6150e19dfac4Smrg { 6151313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 6152313a12fdSmrg i, nonnull (newargz[i])); 6153e19dfac4Smrg } 615427702724Smrg 6155e19dfac4SmrgEOF 615627702724Smrg 6157e19dfac4Smrg case $host_os in 6158e19dfac4Smrg mingw*) 6159e19dfac4Smrg cat <<"EOF" 6160e19dfac4Smrg /* execv doesn't actually work on mingw as expected on unix */ 6161313a12fdSmrg newargz = prepare_spawn (newargz); 61627cea3689Smrg rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 6163e19dfac4Smrg if (rval == -1) 6164e19dfac4Smrg { 6165e19dfac4Smrg /* failed to start process */ 6166313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 6167313a12fdSmrg "(main) failed to launch target \"%s\": %s\n", 6168313a12fdSmrg lt_argv_zero, nonnull (strerror (errno))); 6169e19dfac4Smrg return 127; 6170e19dfac4Smrg } 6171e19dfac4Smrg return rval; 6172e19dfac4SmrgEOF 6173e19dfac4Smrg ;; 6174e19dfac4Smrg *) 6175e19dfac4Smrg cat <<"EOF" 6176e19dfac4Smrg execv (lt_argv_zero, newargz); 6177e19dfac4Smrg return rval; /* =127, but avoids unused variable warning */ 6178e19dfac4SmrgEOF 6179e19dfac4Smrg ;; 6180e19dfac4Smrg esac 618127702724Smrg 6182e19dfac4Smrg cat <<"EOF" 6183e19dfac4Smrg} 618427702724Smrg 6185e19dfac4Smrgvoid * 6186e19dfac4Smrgxmalloc (size_t num) 6187e19dfac4Smrg{ 6188e19dfac4Smrg void *p = (void *) malloc (num); 6189e19dfac4Smrg if (!p) 6190313a12fdSmrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 619127702724Smrg 6192e19dfac4Smrg return p; 6193e19dfac4Smrg} 619427702724Smrg 6195e19dfac4Smrgchar * 6196e19dfac4Smrgxstrdup (const char *string) 6197e19dfac4Smrg{ 6198e19dfac4Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 6199e19dfac4Smrg string) : NULL; 6200e19dfac4Smrg} 620127702724Smrg 6202e19dfac4Smrgconst char * 6203e19dfac4Smrgbase_name (const char *name) 6204e19dfac4Smrg{ 6205e19dfac4Smrg const char *base; 620627702724Smrg 62077cea3689Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 6208e19dfac4Smrg /* Skip over the disk name in MSDOS pathnames. */ 6209e19dfac4Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 6210e19dfac4Smrg name += 2; 6211e19dfac4Smrg#endif 621227702724Smrg 6213e19dfac4Smrg for (base = name; *name; name++) 6214e19dfac4Smrg if (IS_DIR_SEPARATOR (*name)) 6215e19dfac4Smrg base = name + 1; 6216e19dfac4Smrg return base; 6217e19dfac4Smrg} 621827702724Smrg 6219e19dfac4Smrgint 6220e19dfac4Smrgcheck_executable (const char *path) 6221e19dfac4Smrg{ 6222e19dfac4Smrg struct stat st; 622327702724Smrg 6224313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 6225313a12fdSmrg nonempty (path)); 6226e19dfac4Smrg if ((!path) || (!*path)) 6227e19dfac4Smrg return 0; 622827702724Smrg 6229e19dfac4Smrg if ((stat (path, &st) >= 0) 6230e19dfac4Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 6231e19dfac4Smrg return 1; 6232e19dfac4Smrg else 6233e19dfac4Smrg return 0; 6234e19dfac4Smrg} 623527702724Smrg 6236e19dfac4Smrgint 6237e19dfac4Smrgmake_executable (const char *path) 6238e19dfac4Smrg{ 6239e19dfac4Smrg int rval = 0; 6240e19dfac4Smrg struct stat st; 624127702724Smrg 6242313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 6243313a12fdSmrg nonempty (path)); 6244e19dfac4Smrg if ((!path) || (!*path)) 6245e19dfac4Smrg return 0; 624627702724Smrg 6247e19dfac4Smrg if (stat (path, &st) >= 0) 6248e19dfac4Smrg { 6249e19dfac4Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 6250e19dfac4Smrg } 6251e19dfac4Smrg return rval; 6252e19dfac4Smrg} 625327702724Smrg 6254e19dfac4Smrg/* Searches for the full path of the wrapper. Returns 6255e19dfac4Smrg newly allocated full path name if found, NULL otherwise 6256e19dfac4Smrg Does not chase symlinks, even on platforms that support them. 6257e19dfac4Smrg*/ 6258e19dfac4Smrgchar * 6259e19dfac4Smrgfind_executable (const char *wrapper) 6260e19dfac4Smrg{ 6261e19dfac4Smrg int has_slash = 0; 6262e19dfac4Smrg const char *p; 6263e19dfac4Smrg const char *p_next; 6264e19dfac4Smrg /* static buffer for getcwd */ 6265e19dfac4Smrg char tmp[LT_PATHMAX + 1]; 62667cea3689Smrg size_t tmp_len; 6267e19dfac4Smrg char *concat_name; 626827702724Smrg 6269313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 6270313a12fdSmrg nonempty (wrapper)); 627127702724Smrg 6272e19dfac4Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 6273e19dfac4Smrg return NULL; 627427702724Smrg 6275e19dfac4Smrg /* Absolute path? */ 62767cea3689Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 6277e19dfac4Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 6278e19dfac4Smrg { 6279e19dfac4Smrg concat_name = xstrdup (wrapper); 6280e19dfac4Smrg if (check_executable (concat_name)) 6281e19dfac4Smrg return concat_name; 6282e19dfac4Smrg XFREE (concat_name); 6283e19dfac4Smrg } 6284e19dfac4Smrg else 6285e19dfac4Smrg { 6286e19dfac4Smrg#endif 6287e19dfac4Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 6288e19dfac4Smrg { 6289e19dfac4Smrg concat_name = xstrdup (wrapper); 6290e19dfac4Smrg if (check_executable (concat_name)) 6291e19dfac4Smrg return concat_name; 6292e19dfac4Smrg XFREE (concat_name); 6293e19dfac4Smrg } 62947cea3689Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 6295e19dfac4Smrg } 6296e19dfac4Smrg#endif 629727702724Smrg 6298e19dfac4Smrg for (p = wrapper; *p; p++) 6299e19dfac4Smrg if (*p == '/') 6300e19dfac4Smrg { 6301e19dfac4Smrg has_slash = 1; 6302e19dfac4Smrg break; 6303e19dfac4Smrg } 6304e19dfac4Smrg if (!has_slash) 6305e19dfac4Smrg { 6306e19dfac4Smrg /* no slashes; search PATH */ 6307e19dfac4Smrg const char *path = getenv ("PATH"); 6308e19dfac4Smrg if (path != NULL) 6309e19dfac4Smrg { 6310e19dfac4Smrg for (p = path; *p; p = p_next) 6311e19dfac4Smrg { 6312e19dfac4Smrg const char *q; 6313e19dfac4Smrg size_t p_len; 6314e19dfac4Smrg for (q = p; *q; q++) 6315e19dfac4Smrg if (IS_PATH_SEPARATOR (*q)) 6316e19dfac4Smrg break; 63177cea3689Smrg p_len = (size_t) (q - p); 6318e19dfac4Smrg p_next = (*q == '\0' ? q : q + 1); 6319e19dfac4Smrg if (p_len == 0) 6320e19dfac4Smrg { 6321e19dfac4Smrg /* empty path: current directory */ 6322e19dfac4Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 6323313a12fdSmrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6324313a12fdSmrg nonnull (strerror (errno))); 6325e19dfac4Smrg tmp_len = strlen (tmp); 6326e19dfac4Smrg concat_name = 6327e19dfac4Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6328e19dfac4Smrg memcpy (concat_name, tmp, tmp_len); 6329e19dfac4Smrg concat_name[tmp_len] = '/'; 6330e19dfac4Smrg strcpy (concat_name + tmp_len + 1, wrapper); 6331e19dfac4Smrg } 6332e19dfac4Smrg else 6333e19dfac4Smrg { 6334e19dfac4Smrg concat_name = 6335e19dfac4Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 6336e19dfac4Smrg memcpy (concat_name, p, p_len); 6337e19dfac4Smrg concat_name[p_len] = '/'; 6338e19dfac4Smrg strcpy (concat_name + p_len + 1, wrapper); 6339e19dfac4Smrg } 6340e19dfac4Smrg if (check_executable (concat_name)) 6341e19dfac4Smrg return concat_name; 6342e19dfac4Smrg XFREE (concat_name); 6343e19dfac4Smrg } 6344e19dfac4Smrg } 6345e19dfac4Smrg /* not found in PATH; assume curdir */ 6346e19dfac4Smrg } 6347e19dfac4Smrg /* Relative path | not found in path: prepend cwd */ 6348e19dfac4Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 6349313a12fdSmrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6350313a12fdSmrg nonnull (strerror (errno))); 6351e19dfac4Smrg tmp_len = strlen (tmp); 6352e19dfac4Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6353e19dfac4Smrg memcpy (concat_name, tmp, tmp_len); 6354e19dfac4Smrg concat_name[tmp_len] = '/'; 6355e19dfac4Smrg strcpy (concat_name + tmp_len + 1, wrapper); 635627702724Smrg 6357e19dfac4Smrg if (check_executable (concat_name)) 6358e19dfac4Smrg return concat_name; 6359e19dfac4Smrg XFREE (concat_name); 6360e19dfac4Smrg return NULL; 6361e19dfac4Smrg} 636227702724Smrg 6363e19dfac4Smrgchar * 6364e19dfac4Smrgchase_symlinks (const char *pathspec) 6365e19dfac4Smrg{ 6366e19dfac4Smrg#ifndef S_ISLNK 6367e19dfac4Smrg return xstrdup (pathspec); 6368e19dfac4Smrg#else 6369e19dfac4Smrg char buf[LT_PATHMAX]; 6370e19dfac4Smrg struct stat s; 6371e19dfac4Smrg char *tmp_pathspec = xstrdup (pathspec); 6372e19dfac4Smrg char *p; 6373e19dfac4Smrg int has_symlinks = 0; 6374e19dfac4Smrg while (strlen (tmp_pathspec) && !has_symlinks) 6375e19dfac4Smrg { 6376313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 6377313a12fdSmrg "checking path component for symlinks: %s\n", 6378313a12fdSmrg tmp_pathspec); 6379e19dfac4Smrg if (lstat (tmp_pathspec, &s) == 0) 6380e19dfac4Smrg { 6381e19dfac4Smrg if (S_ISLNK (s.st_mode) != 0) 6382e19dfac4Smrg { 6383e19dfac4Smrg has_symlinks = 1; 6384e19dfac4Smrg break; 6385e19dfac4Smrg } 638627702724Smrg 6387e19dfac4Smrg /* search backwards for last DIR_SEPARATOR */ 6388e19dfac4Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 6389e19dfac4Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6390e19dfac4Smrg p--; 6391e19dfac4Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6392e19dfac4Smrg { 6393e19dfac4Smrg /* no more DIR_SEPARATORS left */ 6394e19dfac4Smrg break; 6395e19dfac4Smrg } 6396e19dfac4Smrg *p = '\0'; 6397e19dfac4Smrg } 6398e19dfac4Smrg else 6399e19dfac4Smrg { 6400313a12fdSmrg lt_fatal (__FILE__, __LINE__, 6401313a12fdSmrg "error accessing file \"%s\": %s", 6402313a12fdSmrg tmp_pathspec, nonnull (strerror (errno))); 6403e19dfac4Smrg } 6404e19dfac4Smrg } 6405e19dfac4Smrg XFREE (tmp_pathspec); 640627702724Smrg 6407e19dfac4Smrg if (!has_symlinks) 6408e19dfac4Smrg { 6409e19dfac4Smrg return xstrdup (pathspec); 6410e19dfac4Smrg } 641127702724Smrg 6412e19dfac4Smrg tmp_pathspec = realpath (pathspec, buf); 6413e19dfac4Smrg if (tmp_pathspec == 0) 6414e19dfac4Smrg { 6415313a12fdSmrg lt_fatal (__FILE__, __LINE__, 6416313a12fdSmrg "could not follow symlinks for %s", pathspec); 6417e19dfac4Smrg } 6418e19dfac4Smrg return xstrdup (tmp_pathspec); 6419e19dfac4Smrg#endif 6420e19dfac4Smrg} 642127702724Smrg 6422e19dfac4Smrgchar * 6423e19dfac4Smrgstrendzap (char *str, const char *pat) 6424e19dfac4Smrg{ 6425e19dfac4Smrg size_t len, patlen; 642627702724Smrg 6427e19dfac4Smrg assert (str != NULL); 6428e19dfac4Smrg assert (pat != NULL); 642927702724Smrg 6430e19dfac4Smrg len = strlen (str); 6431e19dfac4Smrg patlen = strlen (pat); 643227702724Smrg 6433e19dfac4Smrg if (patlen <= len) 6434e19dfac4Smrg { 6435e19dfac4Smrg str += len - patlen; 64367cea3689Smrg if (STREQ (str, pat)) 6437e19dfac4Smrg *str = '\0'; 6438e19dfac4Smrg } 6439e19dfac4Smrg return str; 6440e19dfac4Smrg} 644127702724Smrg 6442313a12fdSmrgvoid 6443313a12fdSmrglt_debugprintf (const char *file, int line, const char *fmt, ...) 6444313a12fdSmrg{ 6445313a12fdSmrg va_list args; 6446313a12fdSmrg if (lt_debug) 6447313a12fdSmrg { 6448313a12fdSmrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 6449313a12fdSmrg va_start (args, fmt); 6450313a12fdSmrg (void) vfprintf (stderr, fmt, args); 6451313a12fdSmrg va_end (args); 6452313a12fdSmrg } 6453313a12fdSmrg} 6454313a12fdSmrg 6455e19dfac4Smrgstatic void 6456313a12fdSmrglt_error_core (int exit_status, const char *file, 6457313a12fdSmrg int line, const char *mode, 6458e19dfac4Smrg const char *message, va_list ap) 6459e19dfac4Smrg{ 6460313a12fdSmrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 6461e19dfac4Smrg vfprintf (stderr, message, ap); 6462e19dfac4Smrg fprintf (stderr, ".\n"); 646327702724Smrg 6464e19dfac4Smrg if (exit_status >= 0) 6465e19dfac4Smrg exit (exit_status); 6466e19dfac4Smrg} 646727702724Smrg 6468e19dfac4Smrgvoid 6469313a12fdSmrglt_fatal (const char *file, int line, const char *message, ...) 6470e19dfac4Smrg{ 6471e19dfac4Smrg va_list ap; 6472e19dfac4Smrg va_start (ap, message); 6473313a12fdSmrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 6474e19dfac4Smrg va_end (ap); 6475e19dfac4Smrg} 647627702724Smrg 6477313a12fdSmrgstatic const char * 6478313a12fdSmrgnonnull (const char *s) 6479313a12fdSmrg{ 6480313a12fdSmrg return s ? s : "(null)"; 6481313a12fdSmrg} 6482313a12fdSmrg 6483313a12fdSmrgstatic const char * 6484313a12fdSmrgnonempty (const char *s) 6485313a12fdSmrg{ 6486313a12fdSmrg return (s && !*s) ? "(empty)" : nonnull (s); 6487313a12fdSmrg} 6488313a12fdSmrg 6489e19dfac4Smrgvoid 6490e19dfac4Smrglt_setenv (const char *name, const char *value) 6491e19dfac4Smrg{ 6492313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 6493313a12fdSmrg "(lt_setenv) setting '%s' to '%s'\n", 6494313a12fdSmrg nonnull (name), nonnull (value)); 6495e19dfac4Smrg { 6496e19dfac4Smrg#ifdef HAVE_SETENV 6497e19dfac4Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 6498e19dfac4Smrg char *str = xstrdup (value); 6499e19dfac4Smrg setenv (name, str, 1); 6500e19dfac4Smrg#else 65017cea3689Smrg size_t len = strlen (name) + 1 + strlen (value) + 1; 6502e19dfac4Smrg char *str = XMALLOC (char, len); 6503e19dfac4Smrg sprintf (str, "%s=%s", name, value); 6504e19dfac4Smrg if (putenv (str) != EXIT_SUCCESS) 6505e19dfac4Smrg { 6506e19dfac4Smrg XFREE (str); 6507e19dfac4Smrg } 6508e19dfac4Smrg#endif 6509e19dfac4Smrg } 6510e19dfac4Smrg} 651127702724Smrg 6512e19dfac4Smrgchar * 6513e19dfac4Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 6514e19dfac4Smrg{ 6515e19dfac4Smrg char *new_value; 6516e19dfac4Smrg if (orig_value && *orig_value) 6517e19dfac4Smrg { 65187cea3689Smrg size_t orig_value_len = strlen (orig_value); 65197cea3689Smrg size_t add_len = strlen (add); 6520e19dfac4Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 6521e19dfac4Smrg if (to_end) 6522e19dfac4Smrg { 6523e19dfac4Smrg strcpy (new_value, orig_value); 6524e19dfac4Smrg strcpy (new_value + orig_value_len, add); 6525e19dfac4Smrg } 6526e19dfac4Smrg else 6527e19dfac4Smrg { 6528e19dfac4Smrg strcpy (new_value, add); 6529e19dfac4Smrg strcpy (new_value + add_len, orig_value); 6530e19dfac4Smrg } 6531e19dfac4Smrg } 6532e19dfac4Smrg else 6533e19dfac4Smrg { 6534e19dfac4Smrg new_value = xstrdup (add); 6535e19dfac4Smrg } 6536e19dfac4Smrg return new_value; 6537e19dfac4Smrg} 653827702724Smrg 6539e19dfac4Smrgvoid 6540e19dfac4Smrglt_update_exe_path (const char *name, const char *value) 6541e19dfac4Smrg{ 6542313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 6543313a12fdSmrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 6544313a12fdSmrg nonnull (name), nonnull (value)); 654527702724Smrg 6546e19dfac4Smrg if (name && *name && value && *value) 6547e19dfac4Smrg { 6548e19dfac4Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 6549e19dfac4Smrg /* some systems can't cope with a ':'-terminated path #' */ 65507cea3689Smrg size_t len = strlen (new_value); 65517cea3689Smrg while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 6552e19dfac4Smrg { 65537cea3689Smrg new_value[--len] = '\0'; 6554e19dfac4Smrg } 6555e19dfac4Smrg lt_setenv (name, new_value); 6556e19dfac4Smrg XFREE (new_value); 6557e19dfac4Smrg } 6558e19dfac4Smrg} 655927702724Smrg 6560e19dfac4Smrgvoid 6561e19dfac4Smrglt_update_lib_path (const char *name, const char *value) 6562e19dfac4Smrg{ 6563313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 6564313a12fdSmrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 6565313a12fdSmrg nonnull (name), nonnull (value)); 656627702724Smrg 6567e19dfac4Smrg if (name && *name && value && *value) 6568e19dfac4Smrg { 6569e19dfac4Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 6570e19dfac4Smrg lt_setenv (name, new_value); 6571e19dfac4Smrg XFREE (new_value); 6572e19dfac4Smrg } 6573e19dfac4Smrg} 657427702724Smrg 6575313a12fdSmrgEOF 6576313a12fdSmrg case $host_os in 6577313a12fdSmrg mingw*) 6578313a12fdSmrg cat <<"EOF" 6579313a12fdSmrg 6580313a12fdSmrg/* Prepares an argument vector before calling spawn(). 6581313a12fdSmrg Note that spawn() does not by itself call the command interpreter 6582313a12fdSmrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 6583313a12fdSmrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 6584313a12fdSmrg GetVersionEx(&v); 6585313a12fdSmrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 6586313a12fdSmrg }) ? "cmd.exe" : "command.com"). 6587313a12fdSmrg Instead it simply concatenates the arguments, separated by ' ', and calls 6588313a12fdSmrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 6589313a12fdSmrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 6590313a12fdSmrg special way: 6591313a12fdSmrg - Space and tab are interpreted as delimiters. They are not treated as 6592313a12fdSmrg delimiters if they are surrounded by double quotes: "...". 6593313a12fdSmrg - Unescaped double quotes are removed from the input. Their only effect is 6594313a12fdSmrg that within double quotes, space and tab are treated like normal 6595313a12fdSmrg characters. 6596313a12fdSmrg - Backslashes not followed by double quotes are not special. 6597313a12fdSmrg - But 2*n+1 backslashes followed by a double quote become 6598313a12fdSmrg n backslashes followed by a double quote (n >= 0): 6599313a12fdSmrg \" -> " 6600313a12fdSmrg \\\" -> \" 6601313a12fdSmrg \\\\\" -> \\" 6602313a12fdSmrg */ 6603313a12fdSmrg#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" 6604313a12fdSmrg#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" 6605313a12fdSmrgchar ** 6606313a12fdSmrgprepare_spawn (char **argv) 6607313a12fdSmrg{ 6608313a12fdSmrg size_t argc; 6609313a12fdSmrg char **new_argv; 6610313a12fdSmrg size_t i; 6611313a12fdSmrg 6612313a12fdSmrg /* Count number of arguments. */ 6613313a12fdSmrg for (argc = 0; argv[argc] != NULL; argc++) 6614313a12fdSmrg ; 6615313a12fdSmrg 6616313a12fdSmrg /* Allocate new argument vector. */ 6617313a12fdSmrg new_argv = XMALLOC (char *, argc + 1); 6618313a12fdSmrg 6619313a12fdSmrg /* Put quoted arguments into the new argument vector. */ 6620313a12fdSmrg for (i = 0; i < argc; i++) 6621313a12fdSmrg { 6622313a12fdSmrg const char *string = argv[i]; 6623313a12fdSmrg 6624313a12fdSmrg if (string[0] == '\0') 6625313a12fdSmrg new_argv[i] = xstrdup ("\"\""); 6626313a12fdSmrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 6627313a12fdSmrg { 6628313a12fdSmrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 6629313a12fdSmrg size_t length; 6630313a12fdSmrg unsigned int backslashes; 6631313a12fdSmrg const char *s; 6632313a12fdSmrg char *quoted_string; 6633313a12fdSmrg char *p; 6634313a12fdSmrg 6635313a12fdSmrg length = 0; 6636313a12fdSmrg backslashes = 0; 6637313a12fdSmrg if (quote_around) 6638313a12fdSmrg length++; 6639313a12fdSmrg for (s = string; *s != '\0'; s++) 6640313a12fdSmrg { 6641313a12fdSmrg char c = *s; 6642313a12fdSmrg if (c == '"') 6643313a12fdSmrg length += backslashes + 1; 6644313a12fdSmrg length++; 6645313a12fdSmrg if (c == '\\') 6646313a12fdSmrg backslashes++; 6647313a12fdSmrg else 6648313a12fdSmrg backslashes = 0; 6649313a12fdSmrg } 6650313a12fdSmrg if (quote_around) 6651313a12fdSmrg length += backslashes + 1; 6652313a12fdSmrg 6653313a12fdSmrg quoted_string = XMALLOC (char, length + 1); 6654313a12fdSmrg 6655313a12fdSmrg p = quoted_string; 6656313a12fdSmrg backslashes = 0; 6657313a12fdSmrg if (quote_around) 6658313a12fdSmrg *p++ = '"'; 6659313a12fdSmrg for (s = string; *s != '\0'; s++) 6660313a12fdSmrg { 6661313a12fdSmrg char c = *s; 6662313a12fdSmrg if (c == '"') 6663313a12fdSmrg { 6664313a12fdSmrg unsigned int j; 6665313a12fdSmrg for (j = backslashes + 1; j > 0; j--) 6666313a12fdSmrg *p++ = '\\'; 6667313a12fdSmrg } 6668313a12fdSmrg *p++ = c; 6669313a12fdSmrg if (c == '\\') 6670313a12fdSmrg backslashes++; 6671313a12fdSmrg else 6672313a12fdSmrg backslashes = 0; 6673313a12fdSmrg } 6674313a12fdSmrg if (quote_around) 6675313a12fdSmrg { 6676313a12fdSmrg unsigned int j; 6677313a12fdSmrg for (j = backslashes; j > 0; j--) 6678313a12fdSmrg *p++ = '\\'; 6679313a12fdSmrg *p++ = '"'; 6680313a12fdSmrg } 6681313a12fdSmrg *p = '\0'; 6682313a12fdSmrg 6683313a12fdSmrg new_argv[i] = quoted_string; 6684313a12fdSmrg } 6685313a12fdSmrg else 6686313a12fdSmrg new_argv[i] = (char *) string; 6687313a12fdSmrg } 6688313a12fdSmrg new_argv[argc] = NULL; 6689313a12fdSmrg 6690313a12fdSmrg return new_argv; 6691313a12fdSmrg} 6692313a12fdSmrgEOF 6693313a12fdSmrg ;; 6694313a12fdSmrg esac 669527702724Smrg 6696313a12fdSmrg cat <<"EOF" 6697313a12fdSmrgvoid lt_dump_script (FILE* f) 6698313a12fdSmrg{ 6699313a12fdSmrgEOF 6700313a12fdSmrg func_emit_wrapper yes | 6701313a12fdSmrg $SED -n -e ' 6702313a12fdSmrgs/^\(.\{79\}\)\(..*\)/\1\ 6703313a12fdSmrg\2/ 6704313a12fdSmrgh 6705313a12fdSmrgs/\([\\"]\)/\\\1/g 6706313a12fdSmrgs/$/\\n/ 6707313a12fdSmrgs/\([^\n]*\).*/ fputs ("\1", f);/p 6708313a12fdSmrgg 6709313a12fdSmrgD' 6710313a12fdSmrg cat <<"EOF" 6711313a12fdSmrg} 6712e19dfac4SmrgEOF 6713e19dfac4Smrg} 6714e19dfac4Smrg# end: func_emit_cwrapperexe_src 671527702724Smrg 6716313a12fdSmrg# func_win32_import_lib_p ARG 6717313a12fdSmrg# True if ARG is an import lib, as indicated by $file_magic_cmd 6718313a12fdSmrgfunc_win32_import_lib_p () 6719313a12fdSmrg{ 67207cea3689Smrg $debug_cmd 67217cea3689Smrg 6722313a12fdSmrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 6723313a12fdSmrg *import*) : ;; 6724313a12fdSmrg *) false ;; 6725313a12fdSmrg esac 6726313a12fdSmrg} 6727313a12fdSmrg 67287cea3689Smrg# func_suncc_cstd_abi 67297cea3689Smrg# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! 67307cea3689Smrg# Several compiler flags select an ABI that is incompatible with the 67317cea3689Smrg# Cstd library. Avoid specifying it if any are in CXXFLAGS. 67327cea3689Smrgfunc_suncc_cstd_abi () 67337cea3689Smrg{ 67347cea3689Smrg $debug_cmd 67357cea3689Smrg 67367cea3689Smrg case " $compile_command " in 67377cea3689Smrg *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) 67387cea3689Smrg suncc_use_cstd_abi=no 67397cea3689Smrg ;; 67407cea3689Smrg *) 67417cea3689Smrg suncc_use_cstd_abi=yes 67427cea3689Smrg ;; 67437cea3689Smrg esac 67447cea3689Smrg} 67457cea3689Smrg 6746e19dfac4Smrg# func_mode_link arg... 6747e19dfac4Smrgfunc_mode_link () 6748e19dfac4Smrg{ 67497cea3689Smrg $debug_cmd 67507cea3689Smrg 6751e19dfac4Smrg case $host in 6752e19dfac4Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 6753e19dfac4Smrg # It is impossible to link a dll without this setting, and 6754e19dfac4Smrg # we shouldn't force the makefile maintainer to figure out 67557cea3689Smrg # what system we are compiling for in order to pass an extra 6756e19dfac4Smrg # flag for every libtool invocation. 6757e19dfac4Smrg # allow_undefined=no 675827702724Smrg 6759e19dfac4Smrg # FIXME: Unfortunately, there are problems with the above when trying 67607cea3689Smrg # to make a dll that has undefined symbols, in which case not 6761e19dfac4Smrg # even a static library is built. For now, we need to specify 6762e19dfac4Smrg # -no-undefined on the libtool link line when we can be certain 6763e19dfac4Smrg # that all symbols are satisfied, otherwise we get a static library. 6764e19dfac4Smrg allow_undefined=yes 6765e19dfac4Smrg ;; 6766e19dfac4Smrg *) 6767e19dfac4Smrg allow_undefined=yes 6768e19dfac4Smrg ;; 6769e19dfac4Smrg esac 6770e19dfac4Smrg libtool_args=$nonopt 6771e19dfac4Smrg base_compile="$nonopt $@" 6772e19dfac4Smrg compile_command=$nonopt 6773e19dfac4Smrg finalize_command=$nonopt 677427702724Smrg 6775e19dfac4Smrg compile_rpath= 6776e19dfac4Smrg finalize_rpath= 6777e19dfac4Smrg compile_shlibpath= 6778e19dfac4Smrg finalize_shlibpath= 6779e19dfac4Smrg convenience= 6780e19dfac4Smrg old_convenience= 6781e19dfac4Smrg deplibs= 6782e19dfac4Smrg old_deplibs= 6783e19dfac4Smrg compiler_flags= 6784e19dfac4Smrg linker_flags= 6785e19dfac4Smrg dllsearchpath= 6786e19dfac4Smrg lib_search_path=`pwd` 6787e19dfac4Smrg inst_prefix_dir= 6788e19dfac4Smrg new_inherited_linker_flags= 678927702724Smrg 6790e19dfac4Smrg avoid_version=no 6791313a12fdSmrg bindir= 6792e19dfac4Smrg dlfiles= 6793e19dfac4Smrg dlprefiles= 6794e19dfac4Smrg dlself=no 6795e19dfac4Smrg export_dynamic=no 6796e19dfac4Smrg export_symbols= 6797e19dfac4Smrg export_symbols_regex= 6798e19dfac4Smrg generated= 6799e19dfac4Smrg libobjs= 6800e19dfac4Smrg ltlibs= 6801e19dfac4Smrg module=no 6802e19dfac4Smrg no_install=no 6803e19dfac4Smrg objs= 68047cea3689Smrg os2dllname= 6805e19dfac4Smrg non_pic_objects= 6806e19dfac4Smrg precious_files_regex= 6807e19dfac4Smrg prefer_static_libs=no 68087cea3689Smrg preload=false 6809e19dfac4Smrg prev= 6810e19dfac4Smrg prevarg= 6811e19dfac4Smrg release= 6812e19dfac4Smrg rpath= 6813e19dfac4Smrg xrpath= 6814e19dfac4Smrg perm_rpath= 6815e19dfac4Smrg temp_rpath= 6816e19dfac4Smrg thread_safe=no 6817e19dfac4Smrg vinfo= 6818e19dfac4Smrg vinfo_number=no 6819e19dfac4Smrg weak_libs= 68207cea3689Smrg single_module=$wl-single_module 6821e19dfac4Smrg func_infer_tag $base_compile 682227702724Smrg 6823e19dfac4Smrg # We need to know -static, to get the right output filenames. 6824e19dfac4Smrg for arg 6825e19dfac4Smrg do 6826e19dfac4Smrg case $arg in 6827e19dfac4Smrg -shared) 68287cea3689Smrg test yes != "$build_libtool_libs" \ 68297cea3689Smrg && func_fatal_configuration "cannot build a shared library" 6830e19dfac4Smrg build_old_libs=no 6831e19dfac4Smrg break 6832e19dfac4Smrg ;; 6833e19dfac4Smrg -all-static | -static | -static-libtool-libs) 6834e19dfac4Smrg case $arg in 6835e19dfac4Smrg -all-static) 68367cea3689Smrg if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then 6837e19dfac4Smrg func_warning "complete static linking is impossible in this configuration" 683827702724Smrg fi 6839e19dfac4Smrg if test -n "$link_static_flag"; then 6840e19dfac4Smrg dlopen_self=$dlopen_self_static 684127702724Smrg fi 6842e19dfac4Smrg prefer_static_libs=yes 684327702724Smrg ;; 6844e19dfac4Smrg -static) 6845e19dfac4Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 6846e19dfac4Smrg dlopen_self=$dlopen_self_static 6847e19dfac4Smrg fi 6848e19dfac4Smrg prefer_static_libs=built 6849e19dfac4Smrg ;; 6850e19dfac4Smrg -static-libtool-libs) 6851e19dfac4Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 6852e19dfac4Smrg dlopen_self=$dlopen_self_static 6853e19dfac4Smrg fi 6854e19dfac4Smrg prefer_static_libs=yes 685527702724Smrg ;; 685627702724Smrg esac 6857e19dfac4Smrg build_libtool_libs=no 6858e19dfac4Smrg build_old_libs=yes 6859e19dfac4Smrg break 6860e19dfac4Smrg ;; 6861e19dfac4Smrg esac 6862e19dfac4Smrg done 686327702724Smrg 6864e19dfac4Smrg # See if our shared archives depend on static archives. 6865e19dfac4Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 686627702724Smrg 6867e19dfac4Smrg # Go through the arguments, transforming them on the way. 6868e19dfac4Smrg while test "$#" -gt 0; do 68697cea3689Smrg arg=$1 6870e19dfac4Smrg shift 687195b7a5c8Smrg func_quote_arg pretty,unquoted "$arg" 687295b7a5c8Smrg qarg=$func_quote_arg_unquoted_result 687395b7a5c8Smrg func_append libtool_args " $func_quote_arg_result" 687427702724Smrg 6875e19dfac4Smrg # If the previous option needs an argument, assign it. 6876e19dfac4Smrg if test -n "$prev"; then 6877e19dfac4Smrg case $prev in 6878e19dfac4Smrg output) 6879e19dfac4Smrg func_append compile_command " @OUTPUT@" 6880e19dfac4Smrg func_append finalize_command " @OUTPUT@" 6881e19dfac4Smrg ;; 6882e19dfac4Smrg esac 688327702724Smrg 6884e19dfac4Smrg case $prev in 6885313a12fdSmrg bindir) 68867cea3689Smrg bindir=$arg 6887313a12fdSmrg prev= 6888313a12fdSmrg continue 6889313a12fdSmrg ;; 6890e19dfac4Smrg dlfiles|dlprefiles) 68917cea3689Smrg $preload || { 6892e19dfac4Smrg # Add the symbol object into the linking commands. 6893e19dfac4Smrg func_append compile_command " @SYMFILE@" 6894e19dfac4Smrg func_append finalize_command " @SYMFILE@" 68957cea3689Smrg preload=: 68967cea3689Smrg } 6897e19dfac4Smrg case $arg in 6898e19dfac4Smrg *.la | *.lo) ;; # We handle these cases below. 6899e19dfac4Smrg force) 69007cea3689Smrg if test no = "$dlself"; then 6901e19dfac4Smrg dlself=needless 6902e19dfac4Smrg export_dynamic=yes 6903e19dfac4Smrg fi 6904e19dfac4Smrg prev= 6905e19dfac4Smrg continue 6906e19dfac4Smrg ;; 6907e19dfac4Smrg self) 69087cea3689Smrg if test dlprefiles = "$prev"; then 6909e19dfac4Smrg dlself=yes 69107cea3689Smrg elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then 6911e19dfac4Smrg dlself=yes 6912e19dfac4Smrg else 6913e19dfac4Smrg dlself=needless 6914e19dfac4Smrg export_dynamic=yes 6915e19dfac4Smrg fi 6916e19dfac4Smrg prev= 6917e19dfac4Smrg continue 691827702724Smrg ;; 691927702724Smrg *) 69207cea3689Smrg if test dlfiles = "$prev"; then 6921313a12fdSmrg func_append dlfiles " $arg" 6922e19dfac4Smrg else 6923313a12fdSmrg func_append dlprefiles " $arg" 6924e19dfac4Smrg fi 6925e19dfac4Smrg prev= 6926e19dfac4Smrg continue 692727702724Smrg ;; 692827702724Smrg esac 6929e19dfac4Smrg ;; 6930e19dfac4Smrg expsyms) 69317cea3689Smrg export_symbols=$arg 6932e19dfac4Smrg test -f "$arg" \ 69337cea3689Smrg || func_fatal_error "symbol file '$arg' does not exist" 6934e19dfac4Smrg prev= 6935e19dfac4Smrg continue 6936e19dfac4Smrg ;; 6937e19dfac4Smrg expsyms_regex) 69387cea3689Smrg export_symbols_regex=$arg 6939e19dfac4Smrg prev= 6940e19dfac4Smrg continue 6941e19dfac4Smrg ;; 6942e19dfac4Smrg framework) 6943e19dfac4Smrg case $host in 6944e19dfac4Smrg *-*-darwin*) 6945e19dfac4Smrg case "$deplibs " in 6946e19dfac4Smrg *" $qarg.ltframework "*) ;; 6947313a12fdSmrg *) func_append deplibs " $qarg.ltframework" # this is fixed later 6948e19dfac4Smrg ;; 6949e19dfac4Smrg esac 6950e19dfac4Smrg ;; 6951e19dfac4Smrg esac 6952e19dfac4Smrg prev= 6953e19dfac4Smrg continue 6954e19dfac4Smrg ;; 6955e19dfac4Smrg inst_prefix) 69567cea3689Smrg inst_prefix_dir=$arg 69577cea3689Smrg prev= 69587cea3689Smrg continue 69597cea3689Smrg ;; 69607cea3689Smrg mllvm) 69617cea3689Smrg # Clang does not use LLVM to link, so we can simply discard any 69627cea3689Smrg # '-mllvm $arg' options when doing the link step. 6963e19dfac4Smrg prev= 6964e19dfac4Smrg continue 6965e19dfac4Smrg ;; 6966e19dfac4Smrg objectlist) 6967e19dfac4Smrg if test -f "$arg"; then 6968e19dfac4Smrg save_arg=$arg 6969e19dfac4Smrg moreargs= 6970e19dfac4Smrg for fil in `cat "$save_arg"` 6971e19dfac4Smrg do 6972313a12fdSmrg# func_append moreargs " $fil" 6973e19dfac4Smrg arg=$fil 6974e19dfac4Smrg # A libtool-controlled object. 697527702724Smrg 6976e19dfac4Smrg # Check to see that this really is a libtool object. 6977e19dfac4Smrg if func_lalib_unsafe_p "$arg"; then 6978e19dfac4Smrg pic_object= 6979e19dfac4Smrg non_pic_object= 698027702724Smrg 6981e19dfac4Smrg # Read the .lo file 6982e19dfac4Smrg func_source "$arg" 698327702724Smrg 6984e19dfac4Smrg if test -z "$pic_object" || 6985e19dfac4Smrg test -z "$non_pic_object" || 69867cea3689Smrg test none = "$pic_object" && 69877cea3689Smrg test none = "$non_pic_object"; then 69887cea3689Smrg func_fatal_error "cannot find name of object for '$arg'" 6989e19dfac4Smrg fi 699027702724Smrg 6991e19dfac4Smrg # Extract subdirectory from the argument. 6992e19dfac4Smrg func_dirname "$arg" "/" "" 69937cea3689Smrg xdir=$func_dirname_result 699427702724Smrg 69957cea3689Smrg if test none != "$pic_object"; then 6996e19dfac4Smrg # Prepend the subdirectory the object is found in. 69977cea3689Smrg pic_object=$xdir$pic_object 699827702724Smrg 69997cea3689Smrg if test dlfiles = "$prev"; then 70007cea3689Smrg if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 7001313a12fdSmrg func_append dlfiles " $pic_object" 7002e19dfac4Smrg prev= 7003e19dfac4Smrg continue 7004e19dfac4Smrg else 7005e19dfac4Smrg # If libtool objects are unsupported, then we need to preload. 7006e19dfac4Smrg prev=dlprefiles 7007e19dfac4Smrg fi 7008e19dfac4Smrg fi 700927702724Smrg 7010e19dfac4Smrg # CHECK ME: I think I busted this. -Ossama 70117cea3689Smrg if test dlprefiles = "$prev"; then 7012e19dfac4Smrg # Preload the old-style object. 7013313a12fdSmrg func_append dlprefiles " $pic_object" 7014e19dfac4Smrg prev= 7015e19dfac4Smrg fi 701627702724Smrg 7017e19dfac4Smrg # A PIC object. 7018e19dfac4Smrg func_append libobjs " $pic_object" 70197cea3689Smrg arg=$pic_object 7020e19dfac4Smrg fi 702127702724Smrg 7022e19dfac4Smrg # Non-PIC object. 70237cea3689Smrg if test none != "$non_pic_object"; then 7024e19dfac4Smrg # Prepend the subdirectory the object is found in. 70257cea3689Smrg non_pic_object=$xdir$non_pic_object 702627702724Smrg 7027e19dfac4Smrg # A standard non-PIC object 7028e19dfac4Smrg func_append non_pic_objects " $non_pic_object" 70297cea3689Smrg if test -z "$pic_object" || test none = "$pic_object"; then 70307cea3689Smrg arg=$non_pic_object 7031e19dfac4Smrg fi 7032e19dfac4Smrg else 7033e19dfac4Smrg # If the PIC object exists, use it instead. 7034e19dfac4Smrg # $xdir was prepended to $pic_object above. 70357cea3689Smrg non_pic_object=$pic_object 7036e19dfac4Smrg func_append non_pic_objects " $non_pic_object" 7037e19dfac4Smrg fi 7038e19dfac4Smrg else 7039e19dfac4Smrg # Only an error if not doing a dry-run. 7040e19dfac4Smrg if $opt_dry_run; then 7041e19dfac4Smrg # Extract subdirectory from the argument. 7042e19dfac4Smrg func_dirname "$arg" "/" "" 70437cea3689Smrg xdir=$func_dirname_result 7044e19dfac4Smrg 7045e19dfac4Smrg func_lo2o "$arg" 7046e19dfac4Smrg pic_object=$xdir$objdir/$func_lo2o_result 7047e19dfac4Smrg non_pic_object=$xdir$func_lo2o_result 7048e19dfac4Smrg func_append libobjs " $pic_object" 7049e19dfac4Smrg func_append non_pic_objects " $non_pic_object" 7050e19dfac4Smrg else 70517cea3689Smrg func_fatal_error "'$arg' is not a valid libtool object" 7052e19dfac4Smrg fi 7053e19dfac4Smrg fi 7054e19dfac4Smrg done 7055e19dfac4Smrg else 70567cea3689Smrg func_fatal_error "link input file '$arg' does not exist" 7057e19dfac4Smrg fi 7058e19dfac4Smrg arg=$save_arg 7059e19dfac4Smrg prev= 7060e19dfac4Smrg continue 7061e19dfac4Smrg ;; 70627cea3689Smrg os2dllname) 70637cea3689Smrg os2dllname=$arg 70647cea3689Smrg prev= 70657cea3689Smrg continue 70667cea3689Smrg ;; 7067e19dfac4Smrg precious_regex) 70687cea3689Smrg precious_files_regex=$arg 7069e19dfac4Smrg prev= 7070e19dfac4Smrg continue 7071e19dfac4Smrg ;; 7072e19dfac4Smrg release) 70737cea3689Smrg release=-$arg 7074e19dfac4Smrg prev= 7075e19dfac4Smrg continue 7076e19dfac4Smrg ;; 7077e19dfac4Smrg rpath | xrpath) 7078e19dfac4Smrg # We need an absolute path. 7079e19dfac4Smrg case $arg in 7080e19dfac4Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 7081e19dfac4Smrg *) 7082e19dfac4Smrg func_fatal_error "only absolute run-paths are allowed" 7083e19dfac4Smrg ;; 7084e19dfac4Smrg esac 70857cea3689Smrg if test rpath = "$prev"; then 7086e19dfac4Smrg case "$rpath " in 7087e19dfac4Smrg *" $arg "*) ;; 7088313a12fdSmrg *) func_append rpath " $arg" ;; 7089e19dfac4Smrg esac 7090e19dfac4Smrg else 7091e19dfac4Smrg case "$xrpath " in 7092e19dfac4Smrg *" $arg "*) ;; 7093313a12fdSmrg *) func_append xrpath " $arg" ;; 7094e19dfac4Smrg esac 7095e19dfac4Smrg fi 7096e19dfac4Smrg prev= 7097e19dfac4Smrg continue 7098e19dfac4Smrg ;; 7099e19dfac4Smrg shrext) 71007cea3689Smrg shrext_cmds=$arg 7101e19dfac4Smrg prev= 7102e19dfac4Smrg continue 7103e19dfac4Smrg ;; 7104e19dfac4Smrg weak) 7105313a12fdSmrg func_append weak_libs " $arg" 7106e19dfac4Smrg prev= 7107e19dfac4Smrg continue 7108e19dfac4Smrg ;; 710995b7a5c8Smrg xassembler) 711095b7a5c8Smrg func_append compiler_flags " -Xassembler $qarg" 711195b7a5c8Smrg prev= 711295b7a5c8Smrg func_append compile_command " -Xassembler $qarg" 711395b7a5c8Smrg func_append finalize_command " -Xassembler $qarg" 711495b7a5c8Smrg continue 711595b7a5c8Smrg ;; 7116e19dfac4Smrg xcclinker) 7117313a12fdSmrg func_append linker_flags " $qarg" 7118313a12fdSmrg func_append compiler_flags " $qarg" 7119e19dfac4Smrg prev= 7120e19dfac4Smrg func_append compile_command " $qarg" 7121e19dfac4Smrg func_append finalize_command " $qarg" 7122e19dfac4Smrg continue 7123e19dfac4Smrg ;; 7124e19dfac4Smrg xcompiler) 7125313a12fdSmrg func_append compiler_flags " $qarg" 7126e19dfac4Smrg prev= 7127e19dfac4Smrg func_append compile_command " $qarg" 7128e19dfac4Smrg func_append finalize_command " $qarg" 7129e19dfac4Smrg continue 7130e19dfac4Smrg ;; 7131e19dfac4Smrg xlinker) 7132313a12fdSmrg func_append linker_flags " $qarg" 7133313a12fdSmrg func_append compiler_flags " $wl$qarg" 7134e19dfac4Smrg prev= 7135e19dfac4Smrg func_append compile_command " $wl$qarg" 7136e19dfac4Smrg func_append finalize_command " $wl$qarg" 7137e19dfac4Smrg continue 7138e19dfac4Smrg ;; 7139e19dfac4Smrg *) 7140e19dfac4Smrg eval "$prev=\"\$arg\"" 7141e19dfac4Smrg prev= 7142e19dfac4Smrg continue 7143e19dfac4Smrg ;; 714427702724Smrg esac 7145e19dfac4Smrg fi # test -n "$prev" 714627702724Smrg 71477cea3689Smrg prevarg=$arg 714827702724Smrg 7149e19dfac4Smrg case $arg in 7150e19dfac4Smrg -all-static) 7151e19dfac4Smrg if test -n "$link_static_flag"; then 7152e19dfac4Smrg # See comment for -static flag below, for more details. 7153e19dfac4Smrg func_append compile_command " $link_static_flag" 7154e19dfac4Smrg func_append finalize_command " $link_static_flag" 7155e19dfac4Smrg fi 7156e19dfac4Smrg continue 7157e19dfac4Smrg ;; 715827702724Smrg 7159e19dfac4Smrg -allow-undefined) 7160e19dfac4Smrg # FIXME: remove this flag sometime in the future. 71617cea3689Smrg func_fatal_error "'-allow-undefined' must not be used because it is the default" 7162e19dfac4Smrg ;; 716327702724Smrg 7164e19dfac4Smrg -avoid-version) 7165e19dfac4Smrg avoid_version=yes 7166e19dfac4Smrg continue 7167e19dfac4Smrg ;; 716827702724Smrg 7169313a12fdSmrg -bindir) 7170313a12fdSmrg prev=bindir 7171313a12fdSmrg continue 7172313a12fdSmrg ;; 7173313a12fdSmrg 7174e19dfac4Smrg -dlopen) 7175e19dfac4Smrg prev=dlfiles 7176e19dfac4Smrg continue 7177e19dfac4Smrg ;; 717827702724Smrg 7179e19dfac4Smrg -dlpreopen) 7180e19dfac4Smrg prev=dlprefiles 7181e19dfac4Smrg continue 7182e19dfac4Smrg ;; 718327702724Smrg 7184e19dfac4Smrg -export-dynamic) 7185e19dfac4Smrg export_dynamic=yes 7186e19dfac4Smrg continue 7187e19dfac4Smrg ;; 718827702724Smrg 7189e19dfac4Smrg -export-symbols | -export-symbols-regex) 7190e19dfac4Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 7191e19dfac4Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 7192e19dfac4Smrg fi 71937cea3689Smrg if test X-export-symbols = "X$arg"; then 7194e19dfac4Smrg prev=expsyms 7195e19dfac4Smrg else 7196e19dfac4Smrg prev=expsyms_regex 7197e19dfac4Smrg fi 7198e19dfac4Smrg continue 7199e19dfac4Smrg ;; 720027702724Smrg 7201e19dfac4Smrg -framework) 7202e19dfac4Smrg prev=framework 7203e19dfac4Smrg continue 7204e19dfac4Smrg ;; 720527702724Smrg 7206e19dfac4Smrg -inst-prefix-dir) 7207e19dfac4Smrg prev=inst_prefix 7208e19dfac4Smrg continue 7209e19dfac4Smrg ;; 721027702724Smrg 7211e19dfac4Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 7212e19dfac4Smrg # so, if we see these flags be careful not to treat them like -L 7213e19dfac4Smrg -L[A-Z][A-Z]*:*) 7214e19dfac4Smrg case $with_gcc/$host in 7215e19dfac4Smrg no/*-*-irix* | /*-*-irix*) 7216e19dfac4Smrg func_append compile_command " $arg" 7217e19dfac4Smrg func_append finalize_command " $arg" 7218e19dfac4Smrg ;; 7219e19dfac4Smrg esac 7220e19dfac4Smrg continue 7221e19dfac4Smrg ;; 722227702724Smrg 7223e19dfac4Smrg -L*) 7224313a12fdSmrg func_stripname "-L" '' "$arg" 7225313a12fdSmrg if test -z "$func_stripname_result"; then 7226e19dfac4Smrg if test "$#" -gt 0; then 72277cea3689Smrg func_fatal_error "require no space between '-L' and '$1'" 7228e19dfac4Smrg else 72297cea3689Smrg func_fatal_error "need path for '-L' option" 7230e19dfac4Smrg fi 7231e19dfac4Smrg fi 7232313a12fdSmrg func_resolve_sysroot "$func_stripname_result" 7233313a12fdSmrg dir=$func_resolve_sysroot_result 7234e19dfac4Smrg # We need an absolute path. 7235e19dfac4Smrg case $dir in 7236e19dfac4Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 7237e19dfac4Smrg *) 7238e19dfac4Smrg absdir=`cd "$dir" && pwd` 7239e19dfac4Smrg test -z "$absdir" && \ 72407cea3689Smrg func_fatal_error "cannot determine absolute directory name of '$dir'" 72417cea3689Smrg dir=$absdir 7242e19dfac4Smrg ;; 7243e19dfac4Smrg esac 7244e19dfac4Smrg case "$deplibs " in 7245313a12fdSmrg *" -L$dir "* | *" $arg "*) 7246313a12fdSmrg # Will only happen for absolute or sysroot arguments 7247313a12fdSmrg ;; 7248e19dfac4Smrg *) 7249313a12fdSmrg # Preserve sysroot, but never include relative directories 7250313a12fdSmrg case $dir in 7251313a12fdSmrg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 7252313a12fdSmrg *) func_append deplibs " -L$dir" ;; 7253313a12fdSmrg esac 7254313a12fdSmrg func_append lib_search_path " $dir" 7255e19dfac4Smrg ;; 7256e19dfac4Smrg esac 7257e19dfac4Smrg case $host in 7258e19dfac4Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 7259313a12fdSmrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 7260e19dfac4Smrg case :$dllsearchpath: in 7261e19dfac4Smrg *":$dir:"*) ;; 7262e19dfac4Smrg ::) dllsearchpath=$dir;; 7263313a12fdSmrg *) func_append dllsearchpath ":$dir";; 7264e19dfac4Smrg esac 7265e19dfac4Smrg case :$dllsearchpath: in 7266e19dfac4Smrg *":$testbindir:"*) ;; 7267e19dfac4Smrg ::) dllsearchpath=$testbindir;; 7268313a12fdSmrg *) func_append dllsearchpath ":$testbindir";; 7269e19dfac4Smrg esac 7270e19dfac4Smrg ;; 7271e19dfac4Smrg esac 7272e19dfac4Smrg continue 7273e19dfac4Smrg ;; 727427702724Smrg 7275e19dfac4Smrg -l*) 72767cea3689Smrg if test X-lc = "X$arg" || test X-lm = "X$arg"; then 7277e19dfac4Smrg case $host in 7278313a12fdSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 7279e19dfac4Smrg # These systems don't actually have a C or math library (as such) 7280e19dfac4Smrg continue 7281e19dfac4Smrg ;; 7282e19dfac4Smrg *-*-os2*) 7283e19dfac4Smrg # These systems don't actually have a C library (as such) 72847cea3689Smrg test X-lc = "X$arg" && continue 7285e19dfac4Smrg ;; 728695b7a5c8Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) 7287e19dfac4Smrg # Do not include libc due to us having libc/libc_r. 72887cea3689Smrg test X-lc = "X$arg" && continue 7289e19dfac4Smrg ;; 7290e19dfac4Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7291e19dfac4Smrg # Rhapsody C and math libraries are in the System framework 7292313a12fdSmrg func_append deplibs " System.ltframework" 7293e19dfac4Smrg continue 7294e19dfac4Smrg ;; 7295e19dfac4Smrg *-*-sco3.2v5* | *-*-sco5v6*) 7296e19dfac4Smrg # Causes problems with __ctype 72977cea3689Smrg test X-lc = "X$arg" && continue 7298e19dfac4Smrg ;; 7299e19dfac4Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7300e19dfac4Smrg # Compiler inserts libc in the correct place for threads to work 73017cea3689Smrg test X-lc = "X$arg" && continue 7302e19dfac4Smrg ;; 7303e19dfac4Smrg esac 73047cea3689Smrg elif test X-lc_r = "X$arg"; then 7305e19dfac4Smrg case $host in 730695b7a5c8Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) 7307e19dfac4Smrg # Do not include libc_r directly, use -pthread flag. 7308e19dfac4Smrg continue 7309e19dfac4Smrg ;; 7310e19dfac4Smrg esac 7311e19dfac4Smrg fi 7312313a12fdSmrg func_append deplibs " $arg" 7313e19dfac4Smrg continue 7314e19dfac4Smrg ;; 731527702724Smrg 73167cea3689Smrg -mllvm) 73177cea3689Smrg prev=mllvm 73187cea3689Smrg continue 73197cea3689Smrg ;; 73207cea3689Smrg 7321e19dfac4Smrg -module) 7322e19dfac4Smrg module=yes 7323e19dfac4Smrg continue 7324e19dfac4Smrg ;; 732527702724Smrg 7326e19dfac4Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 7327e19dfac4Smrg # classes, name mangling, and exception handling. 7328e19dfac4Smrg # Darwin uses the -arch flag to determine output architecture. 7329313a12fdSmrg -model|-arch|-isysroot|--sysroot) 7330313a12fdSmrg func_append compiler_flags " $arg" 7331e19dfac4Smrg func_append compile_command " $arg" 7332e19dfac4Smrg func_append finalize_command " $arg" 7333e19dfac4Smrg prev=xcompiler 7334e19dfac4Smrg continue 7335e19dfac4Smrg ;; 733695b7a5c8Smrg # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199. 733795b7a5c8Smrg -pthread) 733895b7a5c8Smrg case $host in 733995b7a5c8Smrg *solaris2*) ;; 734095b7a5c8Smrg *) 734195b7a5c8Smrg case "$new_inherited_linker_flags " in 734295b7a5c8Smrg *" $arg "*) ;; 734395b7a5c8Smrg * ) func_append new_inherited_linker_flags " $arg" ;; 734495b7a5c8Smrg esac 734595b7a5c8Smrg ;; 734695b7a5c8Smrg esac 734795b7a5c8Smrg continue 734895b7a5c8Smrg ;; 734995b7a5c8Smrg -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \ 7350313a12fdSmrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 7351313a12fdSmrg func_append compiler_flags " $arg" 7352e19dfac4Smrg func_append compile_command " $arg" 7353e19dfac4Smrg func_append finalize_command " $arg" 7354e19dfac4Smrg case "$new_inherited_linker_flags " in 7355e19dfac4Smrg *" $arg "*) ;; 7356313a12fdSmrg * ) func_append new_inherited_linker_flags " $arg" ;; 7357e19dfac4Smrg esac 7358e19dfac4Smrg continue 7359e19dfac4Smrg ;; 736027702724Smrg 7361e19dfac4Smrg -multi_module) 73627cea3689Smrg single_module=$wl-multi_module 7363e19dfac4Smrg continue 7364e19dfac4Smrg ;; 736527702724Smrg 7366e19dfac4Smrg -no-fast-install) 7367e19dfac4Smrg fast_install=no 7368e19dfac4Smrg continue 7369e19dfac4Smrg ;; 737027702724Smrg 7371e19dfac4Smrg -no-install) 7372e19dfac4Smrg case $host in 7373e19dfac4Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 7374e19dfac4Smrg # The PATH hackery in wrapper scripts is required on Windows 7375e19dfac4Smrg # and Darwin in order for the loader to find any dlls it needs. 73767cea3689Smrg func_warning "'-no-install' is ignored for $host" 73777cea3689Smrg func_warning "assuming '-no-fast-install' instead" 7378e19dfac4Smrg fast_install=no 7379e19dfac4Smrg ;; 7380e19dfac4Smrg *) no_install=yes ;; 7381e19dfac4Smrg esac 7382e19dfac4Smrg continue 7383e19dfac4Smrg ;; 738427702724Smrg 7385e19dfac4Smrg -no-undefined) 7386e19dfac4Smrg allow_undefined=no 7387e19dfac4Smrg continue 7388e19dfac4Smrg ;; 738927702724Smrg 7390e19dfac4Smrg -objectlist) 7391e19dfac4Smrg prev=objectlist 7392e19dfac4Smrg continue 7393e19dfac4Smrg ;; 739427702724Smrg 73957cea3689Smrg -os2dllname) 73967cea3689Smrg prev=os2dllname 73977cea3689Smrg continue 73987cea3689Smrg ;; 73997cea3689Smrg 7400e19dfac4Smrg -o) prev=output ;; 740127702724Smrg 7402e19dfac4Smrg -precious-files-regex) 7403e19dfac4Smrg prev=precious_regex 7404e19dfac4Smrg continue 7405e19dfac4Smrg ;; 740627702724Smrg 7407e19dfac4Smrg -release) 7408e19dfac4Smrg prev=release 7409e19dfac4Smrg continue 7410e19dfac4Smrg ;; 741127702724Smrg 7412e19dfac4Smrg -rpath) 7413e19dfac4Smrg prev=rpath 7414e19dfac4Smrg continue 7415e19dfac4Smrg ;; 741627702724Smrg 7417e19dfac4Smrg -R) 7418e19dfac4Smrg prev=xrpath 7419e19dfac4Smrg continue 7420e19dfac4Smrg ;; 742127702724Smrg 7422e19dfac4Smrg -R*) 7423e19dfac4Smrg func_stripname '-R' '' "$arg" 7424e19dfac4Smrg dir=$func_stripname_result 7425e19dfac4Smrg # We need an absolute path. 7426e19dfac4Smrg case $dir in 7427e19dfac4Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 7428313a12fdSmrg =*) 7429313a12fdSmrg func_stripname '=' '' "$dir" 7430313a12fdSmrg dir=$lt_sysroot$func_stripname_result 7431313a12fdSmrg ;; 7432e19dfac4Smrg *) 7433e19dfac4Smrg func_fatal_error "only absolute run-paths are allowed" 7434e19dfac4Smrg ;; 7435e19dfac4Smrg esac 7436e19dfac4Smrg case "$xrpath " in 7437e19dfac4Smrg *" $dir "*) ;; 7438313a12fdSmrg *) func_append xrpath " $dir" ;; 7439e19dfac4Smrg esac 7440e19dfac4Smrg continue 7441e19dfac4Smrg ;; 744227702724Smrg 7443e19dfac4Smrg -shared) 7444e19dfac4Smrg # The effects of -shared are defined in a previous loop. 7445e19dfac4Smrg continue 7446e19dfac4Smrg ;; 744727702724Smrg 7448e19dfac4Smrg -shrext) 7449e19dfac4Smrg prev=shrext 7450e19dfac4Smrg continue 7451e19dfac4Smrg ;; 745227702724Smrg 7453e19dfac4Smrg -static | -static-libtool-libs) 7454e19dfac4Smrg # The effects of -static are defined in a previous loop. 7455e19dfac4Smrg # We used to do the same as -all-static on platforms that 7456e19dfac4Smrg # didn't have a PIC flag, but the assumption that the effects 7457e19dfac4Smrg # would be equivalent was wrong. It would break on at least 7458e19dfac4Smrg # Digital Unix and AIX. 7459e19dfac4Smrg continue 7460e19dfac4Smrg ;; 746127702724Smrg 7462e19dfac4Smrg -thread-safe) 7463e19dfac4Smrg thread_safe=yes 7464e19dfac4Smrg continue 7465e19dfac4Smrg ;; 746627702724Smrg 7467e19dfac4Smrg -version-info) 7468e19dfac4Smrg prev=vinfo 7469e19dfac4Smrg continue 7470e19dfac4Smrg ;; 747127702724Smrg 7472e19dfac4Smrg -version-number) 7473e19dfac4Smrg prev=vinfo 7474e19dfac4Smrg vinfo_number=yes 7475e19dfac4Smrg continue 7476e19dfac4Smrg ;; 747727702724Smrg 7478e19dfac4Smrg -weak) 7479e19dfac4Smrg prev=weak 7480e19dfac4Smrg continue 7481e19dfac4Smrg ;; 748227702724Smrg 7483e19dfac4Smrg -Wc,*) 7484e19dfac4Smrg func_stripname '-Wc,' '' "$arg" 7485e19dfac4Smrg args=$func_stripname_result 7486e19dfac4Smrg arg= 74877cea3689Smrg save_ifs=$IFS; IFS=, 7488e19dfac4Smrg for flag in $args; do 74897cea3689Smrg IFS=$save_ifs 749095b7a5c8Smrg func_quote_arg pretty "$flag" 749195b7a5c8Smrg func_append arg " $func_quote_arg_result" 749295b7a5c8Smrg func_append compiler_flags " $func_quote_arg_result" 7493e19dfac4Smrg done 74947cea3689Smrg IFS=$save_ifs 7495e19dfac4Smrg func_stripname ' ' '' "$arg" 7496e19dfac4Smrg arg=$func_stripname_result 7497e19dfac4Smrg ;; 749827702724Smrg 7499e19dfac4Smrg -Wl,*) 7500e19dfac4Smrg func_stripname '-Wl,' '' "$arg" 7501e19dfac4Smrg args=$func_stripname_result 7502e19dfac4Smrg arg= 75037cea3689Smrg save_ifs=$IFS; IFS=, 7504e19dfac4Smrg for flag in $args; do 75057cea3689Smrg IFS=$save_ifs 750695b7a5c8Smrg func_quote_arg pretty "$flag" 750795b7a5c8Smrg func_append arg " $wl$func_quote_arg_result" 750895b7a5c8Smrg func_append compiler_flags " $wl$func_quote_arg_result" 750995b7a5c8Smrg func_append linker_flags " $func_quote_arg_result" 7510e19dfac4Smrg done 75117cea3689Smrg IFS=$save_ifs 7512e19dfac4Smrg func_stripname ' ' '' "$arg" 7513e19dfac4Smrg arg=$func_stripname_result 7514e19dfac4Smrg ;; 751527702724Smrg 751695b7a5c8Smrg -Xassembler) 751795b7a5c8Smrg prev=xassembler 751895b7a5c8Smrg continue 751995b7a5c8Smrg ;; 752095b7a5c8Smrg 7521e19dfac4Smrg -Xcompiler) 7522e19dfac4Smrg prev=xcompiler 7523e19dfac4Smrg continue 7524e19dfac4Smrg ;; 752527702724Smrg 7526e19dfac4Smrg -Xlinker) 7527e19dfac4Smrg prev=xlinker 7528e19dfac4Smrg continue 7529e19dfac4Smrg ;; 753027702724Smrg 7531e19dfac4Smrg -XCClinker) 7532e19dfac4Smrg prev=xcclinker 7533e19dfac4Smrg continue 7534e19dfac4Smrg ;; 753527702724Smrg 7536e19dfac4Smrg # -msg_* for osf cc 7537e19dfac4Smrg -msg_*) 753895b7a5c8Smrg func_quote_arg pretty "$arg" 753995b7a5c8Smrg arg=$func_quote_arg_result 7540e19dfac4Smrg ;; 754127702724Smrg 7542313a12fdSmrg # Flags to be passed through unchanged, with rationale: 7543313a12fdSmrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 7544313a12fdSmrg # -r[0-9][0-9]* specify processor for the SGI compiler 7545313a12fdSmrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 7546313a12fdSmrg # +DA*, +DD* enable 64-bit mode for the HP compiler 7547313a12fdSmrg # -q* compiler args for the IBM compiler 7548313a12fdSmrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 7549313a12fdSmrg # -F/path path to uninstalled frameworks, gcc on darwin 7550313a12fdSmrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 75517cea3689Smrg # -fstack-protector* stack protector flags for GCC 7552313a12fdSmrg # @file GCC response files 7553313a12fdSmrg # -tp=* Portland pgcc target processor selection 7554313a12fdSmrg # --sysroot=* for sysroot support 75557cea3689Smrg # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 755695b7a5c8Smrg # -specs=* GCC specs files 75577cea3689Smrg # -stdlib=* select c++ std lib with clang 755895b7a5c8Smrg # -fsanitize=* Clang/GCC memory and address sanitizer 755995b7a5c8Smrg # -fuse-ld=* Linker select flags for GCC 756095b7a5c8Smrg # -Wa,* Pass flags directly to the assembler 7561e19dfac4Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 7562313a12fdSmrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 756395b7a5c8Smrg -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ 756495b7a5c8Smrg -specs=*|-fsanitize=*|-fuse-ld=*|-Wa,*) 756595b7a5c8Smrg func_quote_arg pretty "$arg" 756695b7a5c8Smrg arg=$func_quote_arg_result 7567e19dfac4Smrg func_append compile_command " $arg" 7568e19dfac4Smrg func_append finalize_command " $arg" 7569313a12fdSmrg func_append compiler_flags " $arg" 7570e19dfac4Smrg continue 7571e19dfac4Smrg ;; 757227702724Smrg 75737cea3689Smrg -Z*) 75747cea3689Smrg if test os2 = "`expr $host : '.*\(os2\)'`"; then 75757cea3689Smrg # OS/2 uses -Zxxx to specify OS/2-specific options 75767cea3689Smrg compiler_flags="$compiler_flags $arg" 75777cea3689Smrg func_append compile_command " $arg" 75787cea3689Smrg func_append finalize_command " $arg" 75797cea3689Smrg case $arg in 75807cea3689Smrg -Zlinker | -Zstack) 75817cea3689Smrg prev=xcompiler 75827cea3689Smrg ;; 75837cea3689Smrg esac 75847cea3689Smrg continue 75857cea3689Smrg else 75867cea3689Smrg # Otherwise treat like 'Some other compiler flag' below 758795b7a5c8Smrg func_quote_arg pretty "$arg" 758895b7a5c8Smrg arg=$func_quote_arg_result 75897cea3689Smrg fi 75907cea3689Smrg ;; 75917cea3689Smrg 7592e19dfac4Smrg # Some other compiler flag. 7593e19dfac4Smrg -* | +*) 759495b7a5c8Smrg func_quote_arg pretty "$arg" 759595b7a5c8Smrg arg=$func_quote_arg_result 7596e19dfac4Smrg ;; 759727702724Smrg 7598e19dfac4Smrg *.$objext) 7599e19dfac4Smrg # A standard object. 7600313a12fdSmrg func_append objs " $arg" 7601e19dfac4Smrg ;; 760227702724Smrg 7603e19dfac4Smrg *.lo) 7604e19dfac4Smrg # A libtool-controlled object. 760527702724Smrg 7606e19dfac4Smrg # Check to see that this really is a libtool object. 7607e19dfac4Smrg if func_lalib_unsafe_p "$arg"; then 7608e19dfac4Smrg pic_object= 7609e19dfac4Smrg non_pic_object= 7610e19dfac4Smrg 7611e19dfac4Smrg # Read the .lo file 7612e19dfac4Smrg func_source "$arg" 7613e19dfac4Smrg 7614e19dfac4Smrg if test -z "$pic_object" || 7615e19dfac4Smrg test -z "$non_pic_object" || 76167cea3689Smrg test none = "$pic_object" && 76177cea3689Smrg test none = "$non_pic_object"; then 76187cea3689Smrg func_fatal_error "cannot find name of object for '$arg'" 7619e19dfac4Smrg fi 7620e19dfac4Smrg 7621e19dfac4Smrg # Extract subdirectory from the argument. 7622e19dfac4Smrg func_dirname "$arg" "/" "" 76237cea3689Smrg xdir=$func_dirname_result 7624e19dfac4Smrg 76257cea3689Smrg test none = "$pic_object" || { 7626e19dfac4Smrg # Prepend the subdirectory the object is found in. 76277cea3689Smrg pic_object=$xdir$pic_object 7628e19dfac4Smrg 76297cea3689Smrg if test dlfiles = "$prev"; then 76307cea3689Smrg if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 7631313a12fdSmrg func_append dlfiles " $pic_object" 7632e19dfac4Smrg prev= 7633e19dfac4Smrg continue 7634e19dfac4Smrg else 7635e19dfac4Smrg # If libtool objects are unsupported, then we need to preload. 7636e19dfac4Smrg prev=dlprefiles 7637e19dfac4Smrg fi 7638e19dfac4Smrg fi 7639e19dfac4Smrg 7640e19dfac4Smrg # CHECK ME: I think I busted this. -Ossama 76417cea3689Smrg if test dlprefiles = "$prev"; then 7642e19dfac4Smrg # Preload the old-style object. 7643313a12fdSmrg func_append dlprefiles " $pic_object" 7644e19dfac4Smrg prev= 7645e19dfac4Smrg fi 7646e19dfac4Smrg 7647e19dfac4Smrg # A PIC object. 7648e19dfac4Smrg func_append libobjs " $pic_object" 76497cea3689Smrg arg=$pic_object 76507cea3689Smrg } 7651e19dfac4Smrg 7652e19dfac4Smrg # Non-PIC object. 76537cea3689Smrg if test none != "$non_pic_object"; then 7654e19dfac4Smrg # Prepend the subdirectory the object is found in. 76557cea3689Smrg non_pic_object=$xdir$non_pic_object 7656e19dfac4Smrg 7657e19dfac4Smrg # A standard non-PIC object 7658e19dfac4Smrg func_append non_pic_objects " $non_pic_object" 76597cea3689Smrg if test -z "$pic_object" || test none = "$pic_object"; then 76607cea3689Smrg arg=$non_pic_object 7661e19dfac4Smrg fi 7662e19dfac4Smrg else 7663e19dfac4Smrg # If the PIC object exists, use it instead. 7664e19dfac4Smrg # $xdir was prepended to $pic_object above. 76657cea3689Smrg non_pic_object=$pic_object 7666e19dfac4Smrg func_append non_pic_objects " $non_pic_object" 7667e19dfac4Smrg fi 7668e19dfac4Smrg else 7669e19dfac4Smrg # Only an error if not doing a dry-run. 7670e19dfac4Smrg if $opt_dry_run; then 7671e19dfac4Smrg # Extract subdirectory from the argument. 7672e19dfac4Smrg func_dirname "$arg" "/" "" 76737cea3689Smrg xdir=$func_dirname_result 7674e19dfac4Smrg 7675e19dfac4Smrg func_lo2o "$arg" 7676e19dfac4Smrg pic_object=$xdir$objdir/$func_lo2o_result 7677e19dfac4Smrg non_pic_object=$xdir$func_lo2o_result 7678e19dfac4Smrg func_append libobjs " $pic_object" 7679e19dfac4Smrg func_append non_pic_objects " $non_pic_object" 7680e19dfac4Smrg else 76817cea3689Smrg func_fatal_error "'$arg' is not a valid libtool object" 7682e19dfac4Smrg fi 7683e19dfac4Smrg fi 7684e19dfac4Smrg ;; 7685e19dfac4Smrg 7686e19dfac4Smrg *.$libext) 7687e19dfac4Smrg # An archive. 7688313a12fdSmrg func_append deplibs " $arg" 7689313a12fdSmrg func_append old_deplibs " $arg" 7690e19dfac4Smrg continue 7691e19dfac4Smrg ;; 7692e19dfac4Smrg 7693e19dfac4Smrg *.la) 7694e19dfac4Smrg # A libtool-controlled library. 7695e19dfac4Smrg 7696313a12fdSmrg func_resolve_sysroot "$arg" 76977cea3689Smrg if test dlfiles = "$prev"; then 7698e19dfac4Smrg # This library was specified with -dlopen. 7699313a12fdSmrg func_append dlfiles " $func_resolve_sysroot_result" 7700e19dfac4Smrg prev= 77017cea3689Smrg elif test dlprefiles = "$prev"; then 7702e19dfac4Smrg # The library was specified with -dlpreopen. 7703313a12fdSmrg func_append dlprefiles " $func_resolve_sysroot_result" 7704e19dfac4Smrg prev= 7705e19dfac4Smrg else 7706313a12fdSmrg func_append deplibs " $func_resolve_sysroot_result" 7707e19dfac4Smrg fi 7708e19dfac4Smrg continue 7709e19dfac4Smrg ;; 7710e19dfac4Smrg 7711e19dfac4Smrg # Some other compiler argument. 7712e19dfac4Smrg *) 7713e19dfac4Smrg # Unknown arguments in both finalize_command and compile_command need 7714e19dfac4Smrg # to be aesthetically quoted because they are evaled later. 771595b7a5c8Smrg func_quote_arg pretty "$arg" 771695b7a5c8Smrg arg=$func_quote_arg_result 7717e19dfac4Smrg ;; 7718e19dfac4Smrg esac # arg 7719e19dfac4Smrg 7720e19dfac4Smrg # Now actually substitute the argument into the commands. 7721e19dfac4Smrg if test -n "$arg"; then 7722e19dfac4Smrg func_append compile_command " $arg" 7723e19dfac4Smrg func_append finalize_command " $arg" 7724e19dfac4Smrg fi 7725e19dfac4Smrg done # argument parsing loop 7726e19dfac4Smrg 7727e19dfac4Smrg test -n "$prev" && \ 77287cea3689Smrg func_fatal_help "the '$prevarg' option requires an argument" 7729e19dfac4Smrg 77307cea3689Smrg if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then 7731e19dfac4Smrg eval arg=\"$export_dynamic_flag_spec\" 7732e19dfac4Smrg func_append compile_command " $arg" 7733e19dfac4Smrg func_append finalize_command " $arg" 7734e19dfac4Smrg fi 7735e19dfac4Smrg 7736e19dfac4Smrg oldlibs= 7737e19dfac4Smrg # calculate the name of the file, without its directory 7738e19dfac4Smrg func_basename "$output" 77397cea3689Smrg outputname=$func_basename_result 77407cea3689Smrg libobjs_save=$libobjs 7741e19dfac4Smrg 7742e19dfac4Smrg if test -n "$shlibpath_var"; then 7743e19dfac4Smrg # get the directories listed in $shlibpath_var 77447cea3689Smrg eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` 774527702724Smrg else 7746e19dfac4Smrg shlib_search_path= 774727702724Smrg fi 7748e19dfac4Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 7749e19dfac4Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 775027702724Smrg 77517cea3689Smrg # Definition is injected by LT_CONFIG during libtool generation. 77527cea3689Smrg func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" 77537cea3689Smrg 7754e19dfac4Smrg func_dirname "$output" "/" "" 77557cea3689Smrg output_objdir=$func_dirname_result$objdir 7756313a12fdSmrg func_to_tool_file "$output_objdir/" 7757313a12fdSmrg tool_output_objdir=$func_to_tool_file_result 7758e19dfac4Smrg # Create the object directory. 7759e19dfac4Smrg func_mkdir_p "$output_objdir" 776027702724Smrg 7761e19dfac4Smrg # Determine the type of output 7762e19dfac4Smrg case $output in 7763e19dfac4Smrg "") 7764e19dfac4Smrg func_fatal_help "you must specify an output file" 7765e19dfac4Smrg ;; 7766e19dfac4Smrg *.$libext) linkmode=oldlib ;; 7767e19dfac4Smrg *.lo | *.$objext) linkmode=obj ;; 7768e19dfac4Smrg *.la) linkmode=lib ;; 7769e19dfac4Smrg *) linkmode=prog ;; # Anything else should be a program. 7770e19dfac4Smrg esac 7771e19dfac4Smrg 7772e19dfac4Smrg specialdeplibs= 7773e19dfac4Smrg 7774e19dfac4Smrg libs= 7775e19dfac4Smrg # Find all interdependent deplibs by searching for libraries 7776e19dfac4Smrg # that are linked more than once (e.g. -la -lb -la) 7777e19dfac4Smrg for deplib in $deplibs; do 77787cea3689Smrg if $opt_preserve_dup_deps; then 7779e19dfac4Smrg case "$libs " in 7780313a12fdSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 7781e19dfac4Smrg esac 7782e19dfac4Smrg fi 7783313a12fdSmrg func_append libs " $deplib" 7784e19dfac4Smrg done 7785e19dfac4Smrg 77867cea3689Smrg if test lib = "$linkmode"; then 7787e19dfac4Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 7788e19dfac4Smrg 7789e19dfac4Smrg # Compute libraries that are listed more than once in $predeps 7790e19dfac4Smrg # $postdeps and mark them as special (i.e., whose duplicates are 7791e19dfac4Smrg # not to be eliminated). 7792e19dfac4Smrg pre_post_deps= 7793e19dfac4Smrg if $opt_duplicate_compiler_generated_deps; then 7794e19dfac4Smrg for pre_post_dep in $predeps $postdeps; do 7795e19dfac4Smrg case "$pre_post_deps " in 7796313a12fdSmrg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 7797e19dfac4Smrg esac 7798313a12fdSmrg func_append pre_post_deps " $pre_post_dep" 7799e19dfac4Smrg done 7800e19dfac4Smrg fi 7801e19dfac4Smrg pre_post_deps= 7802e19dfac4Smrg fi 7803e19dfac4Smrg 7804e19dfac4Smrg deplibs= 7805e19dfac4Smrg newdependency_libs= 7806e19dfac4Smrg newlib_search_path= 7807e19dfac4Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 7808e19dfac4Smrg notinst_deplibs= # not-installed libtool libraries 7809e19dfac4Smrg notinst_path= # paths that contain not-installed libtool libraries 7810e19dfac4Smrg 7811e19dfac4Smrg case $linkmode in 7812e19dfac4Smrg lib) 7813e19dfac4Smrg passes="conv dlpreopen link" 7814e19dfac4Smrg for file in $dlfiles $dlprefiles; do 7815e19dfac4Smrg case $file in 7816e19dfac4Smrg *.la) ;; 7817e19dfac4Smrg *) 78187cea3689Smrg func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" 7819e19dfac4Smrg ;; 7820e19dfac4Smrg esac 7821e19dfac4Smrg done 7822e19dfac4Smrg ;; 7823e19dfac4Smrg prog) 7824e19dfac4Smrg compile_deplibs= 7825e19dfac4Smrg finalize_deplibs= 78267cea3689Smrg alldeplibs=false 7827e19dfac4Smrg newdlfiles= 7828e19dfac4Smrg newdlprefiles= 7829e19dfac4Smrg passes="conv scan dlopen dlpreopen link" 7830e19dfac4Smrg ;; 7831e19dfac4Smrg *) passes="conv" 7832e19dfac4Smrg ;; 7833e19dfac4Smrg esac 7834e19dfac4Smrg 7835e19dfac4Smrg for pass in $passes; do 7836e19dfac4Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 7837e19dfac4Smrg # so that -L comes before libs that need it for instance... 78387cea3689Smrg if test lib,link = "$linkmode,$pass"; then 7839e19dfac4Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 7840e19dfac4Smrg ## order, and fix it there properly 7841e19dfac4Smrg tmp_deplibs= 7842e19dfac4Smrg for deplib in $deplibs; do 7843e19dfac4Smrg tmp_deplibs="$deplib $tmp_deplibs" 7844e19dfac4Smrg done 78457cea3689Smrg deplibs=$tmp_deplibs 7846e19dfac4Smrg fi 7847e19dfac4Smrg 78487cea3689Smrg if test lib,link = "$linkmode,$pass" || 78497cea3689Smrg test prog,scan = "$linkmode,$pass"; then 78507cea3689Smrg libs=$deplibs 7851e19dfac4Smrg deplibs= 7852e19dfac4Smrg fi 78537cea3689Smrg if test prog = "$linkmode"; then 7854e19dfac4Smrg case $pass in 78557cea3689Smrg dlopen) libs=$dlfiles ;; 78567cea3689Smrg dlpreopen) libs=$dlprefiles ;; 7857313a12fdSmrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 7858e19dfac4Smrg esac 7859e19dfac4Smrg fi 78607cea3689Smrg if test lib,dlpreopen = "$linkmode,$pass"; then 7861e19dfac4Smrg # Collect and forward deplibs of preopened libtool libs 7862e19dfac4Smrg for lib in $dlprefiles; do 7863e19dfac4Smrg # Ignore non-libtool-libs 7864e19dfac4Smrg dependency_libs= 7865313a12fdSmrg func_resolve_sysroot "$lib" 7866e19dfac4Smrg case $lib in 7867313a12fdSmrg *.la) func_source "$func_resolve_sysroot_result" ;; 7868e19dfac4Smrg esac 7869e19dfac4Smrg 7870e19dfac4Smrg # Collect preopened libtool deplibs, except any this library 7871e19dfac4Smrg # has declared as weak libs 7872e19dfac4Smrg for deplib in $dependency_libs; do 7873313a12fdSmrg func_basename "$deplib" 7874313a12fdSmrg deplib_base=$func_basename_result 7875e19dfac4Smrg case " $weak_libs " in 7876e19dfac4Smrg *" $deplib_base "*) ;; 7877313a12fdSmrg *) func_append deplibs " $deplib" ;; 7878e19dfac4Smrg esac 7879e19dfac4Smrg done 7880e19dfac4Smrg done 78817cea3689Smrg libs=$dlprefiles 7882e19dfac4Smrg fi 78837cea3689Smrg if test dlopen = "$pass"; then 7884e19dfac4Smrg # Collect dlpreopened libraries 78857cea3689Smrg save_deplibs=$deplibs 7886e19dfac4Smrg deplibs= 7887e19dfac4Smrg fi 7888e19dfac4Smrg 7889e19dfac4Smrg for deplib in $libs; do 7890e19dfac4Smrg lib= 78917cea3689Smrg found=false 7892e19dfac4Smrg case $deplib in 7893313a12fdSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 7894313a12fdSmrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 78957cea3689Smrg if test prog,link = "$linkmode,$pass"; then 7896e19dfac4Smrg compile_deplibs="$deplib $compile_deplibs" 7897e19dfac4Smrg finalize_deplibs="$deplib $finalize_deplibs" 7898e19dfac4Smrg else 7899313a12fdSmrg func_append compiler_flags " $deplib" 79007cea3689Smrg if test lib = "$linkmode"; then 7901e19dfac4Smrg case "$new_inherited_linker_flags " in 7902e19dfac4Smrg *" $deplib "*) ;; 7903313a12fdSmrg * ) func_append new_inherited_linker_flags " $deplib" ;; 7904e19dfac4Smrg esac 7905e19dfac4Smrg fi 7906e19dfac4Smrg fi 7907e19dfac4Smrg continue 7908e19dfac4Smrg ;; 7909e19dfac4Smrg -l*) 79107cea3689Smrg if test lib != "$linkmode" && test prog != "$linkmode"; then 79117cea3689Smrg func_warning "'-l' is ignored for archives/objects" 7912e19dfac4Smrg continue 7913e19dfac4Smrg fi 7914e19dfac4Smrg func_stripname '-l' '' "$deplib" 7915e19dfac4Smrg name=$func_stripname_result 79167cea3689Smrg if test lib = "$linkmode"; then 7917e19dfac4Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 7918e19dfac4Smrg else 7919e19dfac4Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 7920e19dfac4Smrg fi 7921e19dfac4Smrg for searchdir in $searchdirs; do 7922e19dfac4Smrg for search_ext in .la $std_shrext .so .a; do 7923e19dfac4Smrg # Search the libtool library 79247cea3689Smrg lib=$searchdir/lib$name$search_ext 7925e19dfac4Smrg if test -f "$lib"; then 79267cea3689Smrg if test .la = "$search_ext"; then 79277cea3689Smrg found=: 7928e19dfac4Smrg else 79297cea3689Smrg found=false 7930e19dfac4Smrg fi 7931e19dfac4Smrg break 2 7932e19dfac4Smrg fi 7933e19dfac4Smrg done 7934e19dfac4Smrg done 79357cea3689Smrg if $found; then 79367cea3689Smrg # deplib is a libtool library 7937e19dfac4Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 7938e19dfac4Smrg # We need to do some special things here, and not later. 79397cea3689Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 7940e19dfac4Smrg case " $predeps $postdeps " in 7941e19dfac4Smrg *" $deplib "*) 7942e19dfac4Smrg if func_lalib_p "$lib"; then 7943e19dfac4Smrg library_names= 7944e19dfac4Smrg old_library= 7945e19dfac4Smrg func_source "$lib" 7946e19dfac4Smrg for l in $old_library $library_names; do 79477cea3689Smrg ll=$l 7948e19dfac4Smrg done 79497cea3689Smrg if test "X$ll" = "X$old_library"; then # only static version available 79507cea3689Smrg found=false 7951e19dfac4Smrg func_dirname "$lib" "" "." 79527cea3689Smrg ladir=$func_dirname_result 7953e19dfac4Smrg lib=$ladir/$old_library 79547cea3689Smrg if test prog,link = "$linkmode,$pass"; then 7955e19dfac4Smrg compile_deplibs="$deplib $compile_deplibs" 7956e19dfac4Smrg finalize_deplibs="$deplib $finalize_deplibs" 7957e19dfac4Smrg else 7958e19dfac4Smrg deplibs="$deplib $deplibs" 79597cea3689Smrg test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 7960e19dfac4Smrg fi 7961e19dfac4Smrg continue 7962e19dfac4Smrg fi 7963e19dfac4Smrg fi 7964e19dfac4Smrg ;; 7965e19dfac4Smrg *) ;; 7966e19dfac4Smrg esac 7967e19dfac4Smrg fi 79687cea3689Smrg else 79697cea3689Smrg # deplib doesn't seem to be a libtool library 79707cea3689Smrg if test prog,link = "$linkmode,$pass"; then 79717cea3689Smrg compile_deplibs="$deplib $compile_deplibs" 79727cea3689Smrg finalize_deplibs="$deplib $finalize_deplibs" 79737cea3689Smrg else 79747cea3689Smrg deplibs="$deplib $deplibs" 79757cea3689Smrg test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 79767cea3689Smrg fi 79777cea3689Smrg continue 7978e19dfac4Smrg fi 7979e19dfac4Smrg ;; # -l 7980e19dfac4Smrg *.ltframework) 79817cea3689Smrg if test prog,link = "$linkmode,$pass"; then 7982e19dfac4Smrg compile_deplibs="$deplib $compile_deplibs" 7983e19dfac4Smrg finalize_deplibs="$deplib $finalize_deplibs" 7984e19dfac4Smrg else 7985e19dfac4Smrg deplibs="$deplib $deplibs" 79867cea3689Smrg if test lib = "$linkmode"; then 7987e19dfac4Smrg case "$new_inherited_linker_flags " in 7988e19dfac4Smrg *" $deplib "*) ;; 7989313a12fdSmrg * ) func_append new_inherited_linker_flags " $deplib" ;; 7990e19dfac4Smrg esac 7991e19dfac4Smrg fi 7992e19dfac4Smrg fi 7993e19dfac4Smrg continue 7994e19dfac4Smrg ;; 7995e19dfac4Smrg -L*) 7996e19dfac4Smrg case $linkmode in 7997e19dfac4Smrg lib) 7998e19dfac4Smrg deplibs="$deplib $deplibs" 79997cea3689Smrg test conv = "$pass" && continue 8000e19dfac4Smrg newdependency_libs="$deplib $newdependency_libs" 8001e19dfac4Smrg func_stripname '-L' '' "$deplib" 8002313a12fdSmrg func_resolve_sysroot "$func_stripname_result" 8003313a12fdSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 8004e19dfac4Smrg ;; 8005e19dfac4Smrg prog) 80067cea3689Smrg if test conv = "$pass"; then 8007e19dfac4Smrg deplibs="$deplib $deplibs" 8008e19dfac4Smrg continue 8009e19dfac4Smrg fi 80107cea3689Smrg if test scan = "$pass"; then 8011e19dfac4Smrg deplibs="$deplib $deplibs" 8012e19dfac4Smrg else 8013e19dfac4Smrg compile_deplibs="$deplib $compile_deplibs" 8014e19dfac4Smrg finalize_deplibs="$deplib $finalize_deplibs" 8015e19dfac4Smrg fi 8016e19dfac4Smrg func_stripname '-L' '' "$deplib" 8017313a12fdSmrg func_resolve_sysroot "$func_stripname_result" 8018313a12fdSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 8019e19dfac4Smrg ;; 8020e19dfac4Smrg *) 80217cea3689Smrg func_warning "'-L' is ignored for archives/objects" 8022e19dfac4Smrg ;; 8023e19dfac4Smrg esac # linkmode 8024e19dfac4Smrg continue 8025e19dfac4Smrg ;; # -L 8026e19dfac4Smrg -R*) 80277cea3689Smrg if test link = "$pass"; then 8028e19dfac4Smrg func_stripname '-R' '' "$deplib" 8029313a12fdSmrg func_resolve_sysroot "$func_stripname_result" 8030313a12fdSmrg dir=$func_resolve_sysroot_result 8031e19dfac4Smrg # Make sure the xrpath contains only unique directories. 8032e19dfac4Smrg case "$xrpath " in 8033e19dfac4Smrg *" $dir "*) ;; 8034313a12fdSmrg *) func_append xrpath " $dir" ;; 8035e19dfac4Smrg esac 8036e19dfac4Smrg fi 8037e19dfac4Smrg deplibs="$deplib $deplibs" 8038e19dfac4Smrg continue 8039e19dfac4Smrg ;; 8040313a12fdSmrg *.la) 8041313a12fdSmrg func_resolve_sysroot "$deplib" 8042313a12fdSmrg lib=$func_resolve_sysroot_result 8043313a12fdSmrg ;; 8044e19dfac4Smrg *.$libext) 80457cea3689Smrg if test conv = "$pass"; then 8046e19dfac4Smrg deplibs="$deplib $deplibs" 8047e19dfac4Smrg continue 8048e19dfac4Smrg fi 8049e19dfac4Smrg case $linkmode in 8050e19dfac4Smrg lib) 8051e19dfac4Smrg # Linking convenience modules into shared libraries is allowed, 8052e19dfac4Smrg # but linking other static libraries is non-portable. 8053e19dfac4Smrg case " $dlpreconveniencelibs " in 8054e19dfac4Smrg *" $deplib "*) ;; 8055e19dfac4Smrg *) 80567cea3689Smrg valid_a_lib=false 8057e19dfac4Smrg case $deplibs_check_method in 8058e19dfac4Smrg match_pattern*) 8059e19dfac4Smrg set dummy $deplibs_check_method; shift 8060e19dfac4Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 8061313a12fdSmrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 8062e19dfac4Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 80637cea3689Smrg valid_a_lib=: 8064e19dfac4Smrg fi 8065e19dfac4Smrg ;; 8066e19dfac4Smrg pass_all) 80677cea3689Smrg valid_a_lib=: 8068e19dfac4Smrg ;; 8069e19dfac4Smrg esac 80707cea3689Smrg if $valid_a_lib; then 80717cea3689Smrg echo 80727cea3689Smrg $ECHO "*** Warning: Linking the shared library $output against the" 80737cea3689Smrg $ECHO "*** static library $deplib is not portable!" 80747cea3689Smrg deplibs="$deplib $deplibs" 80757cea3689Smrg else 8076313a12fdSmrg echo 8077e19dfac4Smrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 8078313a12fdSmrg echo "*** I have the capability to make that library automatically link in when" 8079313a12fdSmrg echo "*** you link to this library. But I can only do this if you have a" 8080313a12fdSmrg echo "*** shared version of the library, which you do not appear to have" 8081313a12fdSmrg echo "*** because the file extensions .$libext of this argument makes me believe" 8082313a12fdSmrg echo "*** that it is just a static archive that I should not use here." 8083e19dfac4Smrg fi 8084e19dfac4Smrg ;; 8085e19dfac4Smrg esac 8086e19dfac4Smrg continue 8087e19dfac4Smrg ;; 8088e19dfac4Smrg prog) 80897cea3689Smrg if test link != "$pass"; then 8090e19dfac4Smrg deplibs="$deplib $deplibs" 8091e19dfac4Smrg else 8092e19dfac4Smrg compile_deplibs="$deplib $compile_deplibs" 8093e19dfac4Smrg finalize_deplibs="$deplib $finalize_deplibs" 8094e19dfac4Smrg fi 8095e19dfac4Smrg continue 8096e19dfac4Smrg ;; 8097e19dfac4Smrg esac # linkmode 8098e19dfac4Smrg ;; # *.$libext 8099e19dfac4Smrg *.lo | *.$objext) 81007cea3689Smrg if test conv = "$pass"; then 8101e19dfac4Smrg deplibs="$deplib $deplibs" 81027cea3689Smrg elif test prog = "$linkmode"; then 81037cea3689Smrg if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then 8104e19dfac4Smrg # If there is no dlopen support or we're linking statically, 8105e19dfac4Smrg # we need to preload. 8106313a12fdSmrg func_append newdlprefiles " $deplib" 8107e19dfac4Smrg compile_deplibs="$deplib $compile_deplibs" 8108e19dfac4Smrg finalize_deplibs="$deplib $finalize_deplibs" 8109e19dfac4Smrg else 8110313a12fdSmrg func_append newdlfiles " $deplib" 8111e19dfac4Smrg fi 8112e19dfac4Smrg fi 8113e19dfac4Smrg continue 8114e19dfac4Smrg ;; 8115e19dfac4Smrg %DEPLIBS%) 81167cea3689Smrg alldeplibs=: 8117e19dfac4Smrg continue 8118e19dfac4Smrg ;; 8119e19dfac4Smrg esac # case $deplib 8120e19dfac4Smrg 81217cea3689Smrg $found || test -f "$lib" \ 81227cea3689Smrg || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" 8123e19dfac4Smrg 8124e19dfac4Smrg # Check to see that this really is a libtool archive. 8125e19dfac4Smrg func_lalib_unsafe_p "$lib" \ 81267cea3689Smrg || func_fatal_error "'$lib' is not a valid libtool archive" 8127e19dfac4Smrg 8128e19dfac4Smrg func_dirname "$lib" "" "." 81297cea3689Smrg ladir=$func_dirname_result 8130e19dfac4Smrg 8131e19dfac4Smrg dlname= 8132e19dfac4Smrg dlopen= 8133e19dfac4Smrg dlpreopen= 8134e19dfac4Smrg libdir= 8135e19dfac4Smrg library_names= 8136e19dfac4Smrg old_library= 8137e19dfac4Smrg inherited_linker_flags= 8138e19dfac4Smrg # If the library was installed with an old release of libtool, 8139e19dfac4Smrg # it will not redefine variables installed, or shouldnotlink 8140e19dfac4Smrg installed=yes 8141e19dfac4Smrg shouldnotlink=no 8142e19dfac4Smrg avoidtemprpath= 8143e19dfac4Smrg 8144e19dfac4Smrg 8145e19dfac4Smrg # Read the .la file 8146e19dfac4Smrg func_source "$lib" 8147e19dfac4Smrg 8148e19dfac4Smrg # Convert "-framework foo" to "foo.ltframework" 8149e19dfac4Smrg if test -n "$inherited_linker_flags"; then 8150313a12fdSmrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 8151e19dfac4Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 8152e19dfac4Smrg case " $new_inherited_linker_flags " in 8153e19dfac4Smrg *" $tmp_inherited_linker_flag "*) ;; 8154313a12fdSmrg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 8155e19dfac4Smrg esac 8156e19dfac4Smrg done 8157e19dfac4Smrg fi 8158313a12fdSmrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 81597cea3689Smrg if test lib,link = "$linkmode,$pass" || 81607cea3689Smrg test prog,scan = "$linkmode,$pass" || 81617cea3689Smrg { test prog != "$linkmode" && test lib != "$linkmode"; }; then 8162313a12fdSmrg test -n "$dlopen" && func_append dlfiles " $dlopen" 8163313a12fdSmrg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 8164e19dfac4Smrg fi 8165e19dfac4Smrg 81667cea3689Smrg if test conv = "$pass"; then 8167e19dfac4Smrg # Only check for convenience libraries 8168e19dfac4Smrg deplibs="$lib $deplibs" 8169e19dfac4Smrg if test -z "$libdir"; then 8170e19dfac4Smrg if test -z "$old_library"; then 81717cea3689Smrg func_fatal_error "cannot find name of link library for '$lib'" 8172e19dfac4Smrg fi 8173e19dfac4Smrg # It is a libtool convenience library, so add in its objects. 8174313a12fdSmrg func_append convenience " $ladir/$objdir/$old_library" 8175313a12fdSmrg func_append old_convenience " $ladir/$objdir/$old_library" 81767cea3689Smrg elif test prog != "$linkmode" && test lib != "$linkmode"; then 81777cea3689Smrg func_fatal_error "'$lib' is not a convenience library" 8178e19dfac4Smrg fi 8179313a12fdSmrg tmp_libs= 8180313a12fdSmrg for deplib in $dependency_libs; do 8181313a12fdSmrg deplibs="$deplib $deplibs" 81827cea3689Smrg if $opt_preserve_dup_deps; then 8183313a12fdSmrg case "$tmp_libs " in 8184313a12fdSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 8185313a12fdSmrg esac 8186313a12fdSmrg fi 8187313a12fdSmrg func_append tmp_libs " $deplib" 8188313a12fdSmrg done 8189e19dfac4Smrg continue 8190e19dfac4Smrg fi # $pass = conv 8191e19dfac4Smrg 8192e19dfac4Smrg 8193e19dfac4Smrg # Get the name of the library we link against. 8194e19dfac4Smrg linklib= 8195313a12fdSmrg if test -n "$old_library" && 81967cea3689Smrg { test yes = "$prefer_static_libs" || 81977cea3689Smrg test built,no = "$prefer_static_libs,$installed"; }; then 8198313a12fdSmrg linklib=$old_library 8199313a12fdSmrg else 8200313a12fdSmrg for l in $old_library $library_names; do 82017cea3689Smrg linklib=$l 8202313a12fdSmrg done 8203313a12fdSmrg fi 8204e19dfac4Smrg if test -z "$linklib"; then 82057cea3689Smrg func_fatal_error "cannot find name of link library for '$lib'" 8206e19dfac4Smrg fi 8207e19dfac4Smrg 8208e19dfac4Smrg # This library was specified with -dlopen. 82097cea3689Smrg if test dlopen = "$pass"; then 82107cea3689Smrg test -z "$libdir" \ 82117cea3689Smrg && func_fatal_error "cannot -dlopen a convenience library: '$lib'" 8212e19dfac4Smrg if test -z "$dlname" || 82137cea3689Smrg test yes != "$dlopen_support" || 82147cea3689Smrg test no = "$build_libtool_libs" 82157cea3689Smrg then 8216e19dfac4Smrg # If there is no dlname, no dlopen support or we're linking 8217e19dfac4Smrg # statically, we need to preload. We also need to preload any 8218e19dfac4Smrg # dependent libraries so libltdl's deplib preloader doesn't 8219e19dfac4Smrg # bomb out in the load deplibs phase. 8220313a12fdSmrg func_append dlprefiles " $lib $dependency_libs" 8221e19dfac4Smrg else 8222313a12fdSmrg func_append newdlfiles " $lib" 8223e19dfac4Smrg fi 8224e19dfac4Smrg continue 8225e19dfac4Smrg fi # $pass = dlopen 8226e19dfac4Smrg 8227e19dfac4Smrg # We need an absolute path. 8228e19dfac4Smrg case $ladir in 82297cea3689Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; 8230e19dfac4Smrg *) 8231e19dfac4Smrg abs_ladir=`cd "$ladir" && pwd` 8232e19dfac4Smrg if test -z "$abs_ladir"; then 82337cea3689Smrg func_warning "cannot determine absolute directory name of '$ladir'" 8234e19dfac4Smrg func_warning "passing it literally to the linker, although it might fail" 82357cea3689Smrg abs_ladir=$ladir 8236e19dfac4Smrg fi 8237e19dfac4Smrg ;; 8238e19dfac4Smrg esac 8239e19dfac4Smrg func_basename "$lib" 82407cea3689Smrg laname=$func_basename_result 8241e19dfac4Smrg 8242e19dfac4Smrg # Find the relevant object directory and library name. 82437cea3689Smrg if test yes = "$installed"; then 8244313a12fdSmrg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 82457cea3689Smrg func_warning "library '$lib' was moved." 82467cea3689Smrg dir=$ladir 82477cea3689Smrg absdir=$abs_ladir 82487cea3689Smrg libdir=$abs_ladir 8249e19dfac4Smrg else 82507cea3689Smrg dir=$lt_sysroot$libdir 82517cea3689Smrg absdir=$lt_sysroot$libdir 8252e19dfac4Smrg fi 82537cea3689Smrg test yes = "$hardcode_automatic" && avoidtemprpath=yes 8254e19dfac4Smrg else 8255e19dfac4Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 82567cea3689Smrg dir=$ladir 82577cea3689Smrg absdir=$abs_ladir 8258e19dfac4Smrg # Remove this search path later 8259313a12fdSmrg func_append notinst_path " $abs_ladir" 8260e19dfac4Smrg else 82617cea3689Smrg dir=$ladir/$objdir 82627cea3689Smrg absdir=$abs_ladir/$objdir 8263e19dfac4Smrg # Remove this search path later 8264313a12fdSmrg func_append notinst_path " $abs_ladir" 8265e19dfac4Smrg fi 8266e19dfac4Smrg fi # $installed = yes 8267e19dfac4Smrg func_stripname 'lib' '.la' "$laname" 8268e19dfac4Smrg name=$func_stripname_result 8269e19dfac4Smrg 8270e19dfac4Smrg # This library was specified with -dlpreopen. 82717cea3689Smrg if test dlpreopen = "$pass"; then 82727cea3689Smrg if test -z "$libdir" && test prog = "$linkmode"; then 82737cea3689Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" 8274e19dfac4Smrg fi 82757cea3689Smrg case $host in 8276313a12fdSmrg # special handling for platforms with PE-DLLs. 8277313a12fdSmrg *cygwin* | *mingw* | *cegcc* ) 8278313a12fdSmrg # Linker will automatically link against shared library if both 8279313a12fdSmrg # static and shared are present. Therefore, ensure we extract 8280313a12fdSmrg # symbols from the import library if a shared library is present 8281313a12fdSmrg # (otherwise, the dlopen module name will be incorrect). We do 8282313a12fdSmrg # this by putting the import library name into $newdlprefiles. 8283313a12fdSmrg # We recover the dlopen module name by 'saving' the la file 8284313a12fdSmrg # name in a special purpose variable, and (later) extracting the 8285313a12fdSmrg # dlname from the la file. 8286313a12fdSmrg if test -n "$dlname"; then 8287313a12fdSmrg func_tr_sh "$dir/$linklib" 8288313a12fdSmrg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 8289313a12fdSmrg func_append newdlprefiles " $dir/$linklib" 8290313a12fdSmrg else 8291313a12fdSmrg func_append newdlprefiles " $dir/$old_library" 8292313a12fdSmrg # Keep a list of preopened convenience libraries to check 8293313a12fdSmrg # that they are being used correctly in the link pass. 8294313a12fdSmrg test -z "$libdir" && \ 8295313a12fdSmrg func_append dlpreconveniencelibs " $dir/$old_library" 8296313a12fdSmrg fi 8297313a12fdSmrg ;; 8298313a12fdSmrg * ) 8299313a12fdSmrg # Prefer using a static library (so that no silly _DYNAMIC symbols 8300313a12fdSmrg # are required to link). 8301313a12fdSmrg if test -n "$old_library"; then 8302313a12fdSmrg func_append newdlprefiles " $dir/$old_library" 8303313a12fdSmrg # Keep a list of preopened convenience libraries to check 8304313a12fdSmrg # that they are being used correctly in the link pass. 8305313a12fdSmrg test -z "$libdir" && \ 8306313a12fdSmrg func_append dlpreconveniencelibs " $dir/$old_library" 8307313a12fdSmrg # Otherwise, use the dlname, so that lt_dlopen finds it. 8308313a12fdSmrg elif test -n "$dlname"; then 8309313a12fdSmrg func_append newdlprefiles " $dir/$dlname" 8310313a12fdSmrg else 8311313a12fdSmrg func_append newdlprefiles " $dir/$linklib" 8312313a12fdSmrg fi 8313313a12fdSmrg ;; 8314313a12fdSmrg esac 8315e19dfac4Smrg fi # $pass = dlpreopen 8316e19dfac4Smrg 8317e19dfac4Smrg if test -z "$libdir"; then 8318e19dfac4Smrg # Link the convenience library 83197cea3689Smrg if test lib = "$linkmode"; then 8320e19dfac4Smrg deplibs="$dir/$old_library $deplibs" 83217cea3689Smrg elif test prog,link = "$linkmode,$pass"; then 8322e19dfac4Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 8323e19dfac4Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 8324e19dfac4Smrg else 8325e19dfac4Smrg deplibs="$lib $deplibs" # used for prog,scan pass 8326e19dfac4Smrg fi 8327e19dfac4Smrg continue 8328e19dfac4Smrg fi 8329e19dfac4Smrg 8330e19dfac4Smrg 83317cea3689Smrg if test prog = "$linkmode" && test link != "$pass"; then 8332313a12fdSmrg func_append newlib_search_path " $ladir" 8333e19dfac4Smrg deplibs="$lib $deplibs" 8334e19dfac4Smrg 83357cea3689Smrg linkalldeplibs=false 83367cea3689Smrg if test no != "$link_all_deplibs" || test -z "$library_names" || 83377cea3689Smrg test no = "$build_libtool_libs"; then 83387cea3689Smrg linkalldeplibs=: 8339e19dfac4Smrg fi 8340e19dfac4Smrg 8341e19dfac4Smrg tmp_libs= 8342e19dfac4Smrg for deplib in $dependency_libs; do 8343e19dfac4Smrg case $deplib in 8344e19dfac4Smrg -L*) func_stripname '-L' '' "$deplib" 8345313a12fdSmrg func_resolve_sysroot "$func_stripname_result" 8346313a12fdSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 8347e19dfac4Smrg ;; 8348e19dfac4Smrg esac 8349e19dfac4Smrg # Need to link against all dependency_libs? 83507cea3689Smrg if $linkalldeplibs; then 8351e19dfac4Smrg deplibs="$deplib $deplibs" 8352e19dfac4Smrg else 8353e19dfac4Smrg # Need to hardcode shared library paths 8354e19dfac4Smrg # or/and link against static libraries 8355e19dfac4Smrg newdependency_libs="$deplib $newdependency_libs" 8356e19dfac4Smrg fi 83577cea3689Smrg if $opt_preserve_dup_deps; then 8358e19dfac4Smrg case "$tmp_libs " in 8359313a12fdSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 8360e19dfac4Smrg esac 8361e19dfac4Smrg fi 8362313a12fdSmrg func_append tmp_libs " $deplib" 8363e19dfac4Smrg done # for deplib 8364e19dfac4Smrg continue 8365e19dfac4Smrg fi # $linkmode = prog... 8366e19dfac4Smrg 83677cea3689Smrg if test prog,link = "$linkmode,$pass"; then 8368e19dfac4Smrg if test -n "$library_names" && 83697cea3689Smrg { { test no = "$prefer_static_libs" || 83707cea3689Smrg test built,yes = "$prefer_static_libs,$installed"; } || 8371e19dfac4Smrg test -z "$old_library"; }; then 8372e19dfac4Smrg # We need to hardcode the library path 83737cea3689Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then 8374e19dfac4Smrg # Make sure the rpath contains only unique directories. 83757cea3689Smrg case $temp_rpath: in 8376e19dfac4Smrg *"$absdir:"*) ;; 8377313a12fdSmrg *) func_append temp_rpath "$absdir:" ;; 8378e19dfac4Smrg esac 8379e19dfac4Smrg fi 8380e19dfac4Smrg 8381e19dfac4Smrg # Hardcode the library path. 8382e19dfac4Smrg # Skip directories that are in the system default run-time 8383e19dfac4Smrg # search path. 8384e19dfac4Smrg case " $sys_lib_dlsearch_path " in 8385e19dfac4Smrg *" $absdir "*) ;; 8386e19dfac4Smrg *) 8387e19dfac4Smrg case "$compile_rpath " in 8388e19dfac4Smrg *" $absdir "*) ;; 8389313a12fdSmrg *) func_append compile_rpath " $absdir" ;; 8390e19dfac4Smrg esac 8391e19dfac4Smrg ;; 8392e19dfac4Smrg esac 8393e19dfac4Smrg case " $sys_lib_dlsearch_path " in 8394e19dfac4Smrg *" $libdir "*) ;; 8395e19dfac4Smrg *) 8396e19dfac4Smrg case "$finalize_rpath " in 8397e19dfac4Smrg *" $libdir "*) ;; 8398313a12fdSmrg *) func_append finalize_rpath " $libdir" ;; 8399e19dfac4Smrg esac 8400e19dfac4Smrg ;; 8401e19dfac4Smrg esac 8402e19dfac4Smrg fi # $linkmode,$pass = prog,link... 8403e19dfac4Smrg 84047cea3689Smrg if $alldeplibs && 84057cea3689Smrg { test pass_all = "$deplibs_check_method" || 84067cea3689Smrg { test yes = "$build_libtool_libs" && 8407e19dfac4Smrg test -n "$library_names"; }; }; then 8408e19dfac4Smrg # We only need to search for static libraries 8409e19dfac4Smrg continue 8410e19dfac4Smrg fi 8411e19dfac4Smrg fi 8412e19dfac4Smrg 8413e19dfac4Smrg link_static=no # Whether the deplib will be linked statically 8414e19dfac4Smrg use_static_libs=$prefer_static_libs 84157cea3689Smrg if test built = "$use_static_libs" && test yes = "$installed"; then 8416e19dfac4Smrg use_static_libs=no 8417e19dfac4Smrg fi 8418e19dfac4Smrg if test -n "$library_names" && 84197cea3689Smrg { test no = "$use_static_libs" || test -z "$old_library"; }; then 8420e19dfac4Smrg case $host in 84217cea3689Smrg *cygwin* | *mingw* | *cegcc* | *os2*) 8422e19dfac4Smrg # No point in relinking DLLs because paths are not encoded 8423313a12fdSmrg func_append notinst_deplibs " $lib" 8424e19dfac4Smrg need_relink=no 8425e19dfac4Smrg ;; 8426e19dfac4Smrg *) 84277cea3689Smrg if test no = "$installed"; then 8428313a12fdSmrg func_append notinst_deplibs " $lib" 8429e19dfac4Smrg need_relink=yes 8430e19dfac4Smrg fi 8431e19dfac4Smrg ;; 8432e19dfac4Smrg esac 8433e19dfac4Smrg # This is a shared library 8434e19dfac4Smrg 8435e19dfac4Smrg # Warn about portability, can't link against -module's on some 8436e19dfac4Smrg # systems (darwin). Don't bleat about dlopened modules though! 84377cea3689Smrg dlopenmodule= 8438e19dfac4Smrg for dlpremoduletest in $dlprefiles; do 8439e19dfac4Smrg if test "X$dlpremoduletest" = "X$lib"; then 84407cea3689Smrg dlopenmodule=$dlpremoduletest 8441e19dfac4Smrg break 8442e19dfac4Smrg fi 8443e19dfac4Smrg done 84447cea3689Smrg if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then 8445313a12fdSmrg echo 84467cea3689Smrg if test prog = "$linkmode"; then 8447e19dfac4Smrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 8448e19dfac4Smrg else 8449e19dfac4Smrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 8450e19dfac4Smrg fi 8451e19dfac4Smrg $ECHO "*** $linklib is not portable!" 8452e19dfac4Smrg fi 84537cea3689Smrg if test lib = "$linkmode" && 84547cea3689Smrg test yes = "$hardcode_into_libs"; then 8455e19dfac4Smrg # Hardcode the library path. 8456e19dfac4Smrg # Skip directories that are in the system default run-time 8457e19dfac4Smrg # search path. 8458e19dfac4Smrg case " $sys_lib_dlsearch_path " in 8459e19dfac4Smrg *" $absdir "*) ;; 8460e19dfac4Smrg *) 8461e19dfac4Smrg case "$compile_rpath " in 8462e19dfac4Smrg *" $absdir "*) ;; 8463313a12fdSmrg *) func_append compile_rpath " $absdir" ;; 8464e19dfac4Smrg esac 8465e19dfac4Smrg ;; 8466e19dfac4Smrg esac 8467e19dfac4Smrg case " $sys_lib_dlsearch_path " in 8468e19dfac4Smrg *" $libdir "*) ;; 8469e19dfac4Smrg *) 8470e19dfac4Smrg case "$finalize_rpath " in 8471e19dfac4Smrg *" $libdir "*) ;; 8472313a12fdSmrg *) func_append finalize_rpath " $libdir" ;; 8473e19dfac4Smrg esac 8474e19dfac4Smrg ;; 8475e19dfac4Smrg esac 8476e19dfac4Smrg fi 8477e19dfac4Smrg 8478e19dfac4Smrg if test -n "$old_archive_from_expsyms_cmds"; then 8479e19dfac4Smrg # figure out the soname 8480e19dfac4Smrg set dummy $library_names 8481e19dfac4Smrg shift 84827cea3689Smrg realname=$1 8483e19dfac4Smrg shift 8484e19dfac4Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 8485e19dfac4Smrg # use dlname if we got it. it's perfectly good, no? 8486e19dfac4Smrg if test -n "$dlname"; then 84877cea3689Smrg soname=$dlname 8488e19dfac4Smrg elif test -n "$soname_spec"; then 8489e19dfac4Smrg # bleh windows 8490e19dfac4Smrg case $host in 84917cea3689Smrg *cygwin* | mingw* | *cegcc* | *os2*) 8492e19dfac4Smrg func_arith $current - $age 8493e19dfac4Smrg major=$func_arith_result 84947cea3689Smrg versuffix=-$major 8495e19dfac4Smrg ;; 8496e19dfac4Smrg esac 8497e19dfac4Smrg eval soname=\"$soname_spec\" 8498e19dfac4Smrg else 84997cea3689Smrg soname=$realname 8500e19dfac4Smrg fi 8501e19dfac4Smrg 8502e19dfac4Smrg # Make a new name for the extract_expsyms_cmds to use 85037cea3689Smrg soroot=$soname 8504e19dfac4Smrg func_basename "$soroot" 85057cea3689Smrg soname=$func_basename_result 8506e19dfac4Smrg func_stripname 'lib' '.dll' "$soname" 8507e19dfac4Smrg newlib=libimp-$func_stripname_result.a 8508e19dfac4Smrg 8509e19dfac4Smrg # If the library has no export list, then create one now 8510e19dfac4Smrg if test -f "$output_objdir/$soname-def"; then : 8511e19dfac4Smrg else 85127cea3689Smrg func_verbose "extracting exported symbol list from '$soname'" 8513e19dfac4Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 8514e19dfac4Smrg fi 8515e19dfac4Smrg 8516e19dfac4Smrg # Create $newlib 8517e19dfac4Smrg if test -f "$output_objdir/$newlib"; then :; else 85187cea3689Smrg func_verbose "generating import library for '$soname'" 8519e19dfac4Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 8520e19dfac4Smrg fi 8521e19dfac4Smrg # make sure the library variables are pointing to the new library 8522e19dfac4Smrg dir=$output_objdir 8523e19dfac4Smrg linklib=$newlib 8524e19dfac4Smrg fi # test -n "$old_archive_from_expsyms_cmds" 8525e19dfac4Smrg 85267cea3689Smrg if test prog = "$linkmode" || test relink != "$opt_mode"; then 8527e19dfac4Smrg add_shlibpath= 8528e19dfac4Smrg add_dir= 8529e19dfac4Smrg add= 8530e19dfac4Smrg lib_linked=yes 8531e19dfac4Smrg case $hardcode_action in 8532e19dfac4Smrg immediate | unsupported) 85337cea3689Smrg if test no = "$hardcode_direct"; then 85347cea3689Smrg add=$dir/$linklib 8535e19dfac4Smrg case $host in 85367cea3689Smrg *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; 85377cea3689Smrg *-*-sysv4*uw2*) add_dir=-L$dir ;; 8538e19dfac4Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 85397cea3689Smrg *-*-unixware7*) add_dir=-L$dir ;; 8540e19dfac4Smrg *-*-darwin* ) 85417cea3689Smrg # if the lib is a (non-dlopened) module then we cannot 8542e19dfac4Smrg # link against it, someone is ignoring the earlier warnings 8543e19dfac4Smrg if /usr/bin/file -L $add 2> /dev/null | 85447cea3689Smrg $GREP ": [^:]* bundle" >/dev/null; then 8545e19dfac4Smrg if test "X$dlopenmodule" != "X$lib"; then 8546e19dfac4Smrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 85477cea3689Smrg if test -z "$old_library"; then 8548313a12fdSmrg echo 8549313a12fdSmrg echo "*** And there doesn't seem to be a static archive available" 8550313a12fdSmrg echo "*** The link will probably fail, sorry" 8551e19dfac4Smrg else 85527cea3689Smrg add=$dir/$old_library 8553e19dfac4Smrg fi 8554e19dfac4Smrg elif test -n "$old_library"; then 85557cea3689Smrg add=$dir/$old_library 8556e19dfac4Smrg fi 8557e19dfac4Smrg fi 8558e19dfac4Smrg esac 85597cea3689Smrg elif test no = "$hardcode_minus_L"; then 8560e19dfac4Smrg case $host in 85617cea3689Smrg *-*-sunos*) add_shlibpath=$dir ;; 8562e19dfac4Smrg esac 85637cea3689Smrg add_dir=-L$dir 85647cea3689Smrg add=-l$name 85657cea3689Smrg elif test no = "$hardcode_shlibpath_var"; then 85667cea3689Smrg add_shlibpath=$dir 85677cea3689Smrg add=-l$name 8568e19dfac4Smrg else 8569e19dfac4Smrg lib_linked=no 8570e19dfac4Smrg fi 8571e19dfac4Smrg ;; 8572e19dfac4Smrg relink) 85737cea3689Smrg if test yes = "$hardcode_direct" && 85747cea3689Smrg test no = "$hardcode_direct_absolute"; then 85757cea3689Smrg add=$dir/$linklib 85767cea3689Smrg elif test yes = "$hardcode_minus_L"; then 85777cea3689Smrg add_dir=-L$absdir 8578e19dfac4Smrg # Try looking first in the location we're being installed to. 8579e19dfac4Smrg if test -n "$inst_prefix_dir"; then 8580e19dfac4Smrg case $libdir in 8581e19dfac4Smrg [\\/]*) 8582313a12fdSmrg func_append add_dir " -L$inst_prefix_dir$libdir" 8583e19dfac4Smrg ;; 8584e19dfac4Smrg esac 8585e19dfac4Smrg fi 85867cea3689Smrg add=-l$name 85877cea3689Smrg elif test yes = "$hardcode_shlibpath_var"; then 85887cea3689Smrg add_shlibpath=$dir 85897cea3689Smrg add=-l$name 8590e19dfac4Smrg else 8591e19dfac4Smrg lib_linked=no 8592e19dfac4Smrg fi 8593e19dfac4Smrg ;; 8594e19dfac4Smrg *) lib_linked=no ;; 8595e19dfac4Smrg esac 8596e19dfac4Smrg 85977cea3689Smrg if test yes != "$lib_linked"; then 8598e19dfac4Smrg func_fatal_configuration "unsupported hardcode properties" 8599e19dfac4Smrg fi 8600e19dfac4Smrg 8601e19dfac4Smrg if test -n "$add_shlibpath"; then 8602e19dfac4Smrg case :$compile_shlibpath: in 8603e19dfac4Smrg *":$add_shlibpath:"*) ;; 8604313a12fdSmrg *) func_append compile_shlibpath "$add_shlibpath:" ;; 8605e19dfac4Smrg esac 8606e19dfac4Smrg fi 86077cea3689Smrg if test prog = "$linkmode"; then 8608e19dfac4Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 8609e19dfac4Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 8610e19dfac4Smrg else 8611e19dfac4Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 8612e19dfac4Smrg test -n "$add" && deplibs="$add $deplibs" 86137cea3689Smrg if test yes != "$hardcode_direct" && 86147cea3689Smrg test yes != "$hardcode_minus_L" && 86157cea3689Smrg test yes = "$hardcode_shlibpath_var"; then 8616e19dfac4Smrg case :$finalize_shlibpath: in 8617e19dfac4Smrg *":$libdir:"*) ;; 8618313a12fdSmrg *) func_append finalize_shlibpath "$libdir:" ;; 8619e19dfac4Smrg esac 8620e19dfac4Smrg fi 8621e19dfac4Smrg fi 8622e19dfac4Smrg fi 8623e19dfac4Smrg 86247cea3689Smrg if test prog = "$linkmode" || test relink = "$opt_mode"; then 8625e19dfac4Smrg add_shlibpath= 8626e19dfac4Smrg add_dir= 8627e19dfac4Smrg add= 8628e19dfac4Smrg # Finalize command for both is simple: just hardcode it. 86297cea3689Smrg if test yes = "$hardcode_direct" && 86307cea3689Smrg test no = "$hardcode_direct_absolute"; then 86317cea3689Smrg add=$libdir/$linklib 86327cea3689Smrg elif test yes = "$hardcode_minus_L"; then 86337cea3689Smrg add_dir=-L$libdir 86347cea3689Smrg add=-l$name 86357cea3689Smrg elif test yes = "$hardcode_shlibpath_var"; then 8636e19dfac4Smrg case :$finalize_shlibpath: in 8637e19dfac4Smrg *":$libdir:"*) ;; 8638313a12fdSmrg *) func_append finalize_shlibpath "$libdir:" ;; 8639e19dfac4Smrg esac 86407cea3689Smrg add=-l$name 86417cea3689Smrg elif test yes = "$hardcode_automatic"; then 8642e19dfac4Smrg if test -n "$inst_prefix_dir" && 86437cea3689Smrg test -f "$inst_prefix_dir$libdir/$linklib"; then 86447cea3689Smrg add=$inst_prefix_dir$libdir/$linklib 8645e19dfac4Smrg else 86467cea3689Smrg add=$libdir/$linklib 8647e19dfac4Smrg fi 8648e19dfac4Smrg else 8649e19dfac4Smrg # We cannot seem to hardcode it, guess we'll fake it. 86507cea3689Smrg add_dir=-L$libdir 8651e19dfac4Smrg # Try looking first in the location we're being installed to. 8652e19dfac4Smrg if test -n "$inst_prefix_dir"; then 8653e19dfac4Smrg case $libdir in 8654e19dfac4Smrg [\\/]*) 8655313a12fdSmrg func_append add_dir " -L$inst_prefix_dir$libdir" 8656e19dfac4Smrg ;; 8657e19dfac4Smrg esac 8658e19dfac4Smrg fi 86597cea3689Smrg add=-l$name 8660e19dfac4Smrg fi 8661e19dfac4Smrg 86627cea3689Smrg if test prog = "$linkmode"; then 8663e19dfac4Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 8664e19dfac4Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 8665e19dfac4Smrg else 8666e19dfac4Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 8667e19dfac4Smrg test -n "$add" && deplibs="$add $deplibs" 8668e19dfac4Smrg fi 8669e19dfac4Smrg fi 86707cea3689Smrg elif test prog = "$linkmode"; then 8671e19dfac4Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 8672e19dfac4Smrg # is not unsupported. This is valid on all known static and 8673e19dfac4Smrg # shared platforms. 86747cea3689Smrg if test unsupported != "$hardcode_direct"; then 86757cea3689Smrg test -n "$old_library" && linklib=$old_library 8676e19dfac4Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 8677e19dfac4Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 8678e19dfac4Smrg else 8679e19dfac4Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 8680e19dfac4Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 8681e19dfac4Smrg fi 86827cea3689Smrg elif test yes = "$build_libtool_libs"; then 8683e19dfac4Smrg # Not a shared library 86847cea3689Smrg if test pass_all != "$deplibs_check_method"; then 8685e19dfac4Smrg # We're trying link a shared library against a static one 8686e19dfac4Smrg # but the system doesn't support it. 8687e19dfac4Smrg 8688e19dfac4Smrg # Just print a warning and add the library to dependency_libs so 8689e19dfac4Smrg # that the program can be linked against the static library. 8690313a12fdSmrg echo 86917cea3689Smrg $ECHO "*** Warning: This system cannot link to static lib archive $lib." 8692313a12fdSmrg echo "*** I have the capability to make that library automatically link in when" 8693313a12fdSmrg echo "*** you link to this library. But I can only do this if you have a" 8694313a12fdSmrg echo "*** shared version of the library, which you do not appear to have." 86957cea3689Smrg if test yes = "$module"; then 8696313a12fdSmrg echo "*** But as you try to build a module library, libtool will still create " 8697313a12fdSmrg echo "*** a static module, that should work as long as the dlopening application" 8698313a12fdSmrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 8699e19dfac4Smrg if test -z "$global_symbol_pipe"; then 8700313a12fdSmrg echo 8701313a12fdSmrg echo "*** However, this would only work if libtool was able to extract symbol" 87027cea3689Smrg echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 8703313a12fdSmrg echo "*** not find such a program. So, this module is probably useless." 87047cea3689Smrg echo "*** 'nm' from GNU binutils and a full rebuild may help." 8705e19dfac4Smrg fi 87067cea3689Smrg if test no = "$build_old_libs"; then 8707e19dfac4Smrg build_libtool_libs=module 8708e19dfac4Smrg build_old_libs=yes 8709e19dfac4Smrg else 8710e19dfac4Smrg build_libtool_libs=no 8711e19dfac4Smrg fi 8712e19dfac4Smrg fi 8713e19dfac4Smrg else 8714e19dfac4Smrg deplibs="$dir/$old_library $deplibs" 8715e19dfac4Smrg link_static=yes 8716e19dfac4Smrg fi 8717e19dfac4Smrg fi # link shared/static library? 8718e19dfac4Smrg 87197cea3689Smrg if test lib = "$linkmode"; then 8720e19dfac4Smrg if test -n "$dependency_libs" && 87217cea3689Smrg { test yes != "$hardcode_into_libs" || 87227cea3689Smrg test yes = "$build_old_libs" || 87237cea3689Smrg test yes = "$link_static"; }; then 8724e19dfac4Smrg # Extract -R from dependency_libs 8725e19dfac4Smrg temp_deplibs= 8726e19dfac4Smrg for libdir in $dependency_libs; do 8727e19dfac4Smrg case $libdir in 8728e19dfac4Smrg -R*) func_stripname '-R' '' "$libdir" 8729e19dfac4Smrg temp_xrpath=$func_stripname_result 8730e19dfac4Smrg case " $xrpath " in 8731e19dfac4Smrg *" $temp_xrpath "*) ;; 8732313a12fdSmrg *) func_append xrpath " $temp_xrpath";; 8733e19dfac4Smrg esac;; 8734313a12fdSmrg *) func_append temp_deplibs " $libdir";; 8735e19dfac4Smrg esac 8736e19dfac4Smrg done 87377cea3689Smrg dependency_libs=$temp_deplibs 8738e19dfac4Smrg fi 8739e19dfac4Smrg 8740313a12fdSmrg func_append newlib_search_path " $absdir" 8741e19dfac4Smrg # Link against this library 87427cea3689Smrg test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 8743e19dfac4Smrg # ... and its dependency_libs 8744e19dfac4Smrg tmp_libs= 8745e19dfac4Smrg for deplib in $dependency_libs; do 8746e19dfac4Smrg newdependency_libs="$deplib $newdependency_libs" 8747313a12fdSmrg case $deplib in 8748313a12fdSmrg -L*) func_stripname '-L' '' "$deplib" 8749313a12fdSmrg func_resolve_sysroot "$func_stripname_result";; 8750313a12fdSmrg *) func_resolve_sysroot "$deplib" ;; 8751313a12fdSmrg esac 87527cea3689Smrg if $opt_preserve_dup_deps; then 8753e19dfac4Smrg case "$tmp_libs " in 8754313a12fdSmrg *" $func_resolve_sysroot_result "*) 8755313a12fdSmrg func_append specialdeplibs " $func_resolve_sysroot_result" ;; 8756e19dfac4Smrg esac 8757e19dfac4Smrg fi 8758313a12fdSmrg func_append tmp_libs " $func_resolve_sysroot_result" 8759e19dfac4Smrg done 8760e19dfac4Smrg 87617cea3689Smrg if test no != "$link_all_deplibs"; then 8762e19dfac4Smrg # Add the search paths of all dependency libraries 8763e19dfac4Smrg for deplib in $dependency_libs; do 876400084f2cSmrg path= 8765e19dfac4Smrg case $deplib in 87667cea3689Smrg -L*) path=$deplib ;; 8767e19dfac4Smrg *.la) 8768313a12fdSmrg func_resolve_sysroot "$deplib" 8769313a12fdSmrg deplib=$func_resolve_sysroot_result 8770e19dfac4Smrg func_dirname "$deplib" "" "." 8771313a12fdSmrg dir=$func_dirname_result 8772e19dfac4Smrg # We need an absolute path. 8773e19dfac4Smrg case $dir in 87747cea3689Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; 8775e19dfac4Smrg *) 8776e19dfac4Smrg absdir=`cd "$dir" && pwd` 8777e19dfac4Smrg if test -z "$absdir"; then 87787cea3689Smrg func_warning "cannot determine absolute directory name of '$dir'" 87797cea3689Smrg absdir=$dir 8780e19dfac4Smrg fi 8781e19dfac4Smrg ;; 8782e19dfac4Smrg esac 8783e19dfac4Smrg if $GREP "^installed=no" $deplib > /dev/null; then 8784e19dfac4Smrg case $host in 8785e19dfac4Smrg *-*-darwin*) 8786e19dfac4Smrg depdepl= 87877cea3689Smrg eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 87887cea3689Smrg if test -n "$deplibrary_names"; then 87897cea3689Smrg for tmp in $deplibrary_names; do 8790e19dfac4Smrg depdepl=$tmp 8791e19dfac4Smrg done 87927cea3689Smrg if test -f "$absdir/$objdir/$depdepl"; then 87937cea3689Smrg depdepl=$absdir/$objdir/$depdepl 87947cea3689Smrg darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8795e19dfac4Smrg if test -z "$darwin_install_name"; then 87967cea3689Smrg darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8797e19dfac4Smrg fi 87987cea3689Smrg func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" 87997cea3689Smrg func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" 8800e19dfac4Smrg path= 8801e19dfac4Smrg fi 8802e19dfac4Smrg fi 8803e19dfac4Smrg ;; 8804e19dfac4Smrg *) 88057cea3689Smrg path=-L$absdir/$objdir 8806e19dfac4Smrg ;; 8807e19dfac4Smrg esac 8808e19dfac4Smrg else 88097cea3689Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 8810e19dfac4Smrg test -z "$libdir" && \ 88117cea3689Smrg func_fatal_error "'$deplib' is not a valid libtool archive" 8812e19dfac4Smrg test "$absdir" != "$libdir" && \ 88137cea3689Smrg func_warning "'$deplib' seems to be moved" 8814e19dfac4Smrg 88157cea3689Smrg path=-L$absdir 8816e19dfac4Smrg fi 8817e19dfac4Smrg ;; 8818e19dfac4Smrg esac 8819e19dfac4Smrg case " $deplibs " in 8820e19dfac4Smrg *" $path "*) ;; 8821e19dfac4Smrg *) deplibs="$path $deplibs" ;; 8822e19dfac4Smrg esac 8823e19dfac4Smrg done 8824e19dfac4Smrg fi # link_all_deplibs != no 8825e19dfac4Smrg fi # linkmode = lib 8826e19dfac4Smrg done # for deplib in $libs 88277cea3689Smrg if test link = "$pass"; then 88287cea3689Smrg if test prog = "$linkmode"; then 8829e19dfac4Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 8830e19dfac4Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 8831e19dfac4Smrg else 8832313a12fdSmrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8833e19dfac4Smrg fi 8834e19dfac4Smrg fi 88357cea3689Smrg dependency_libs=$newdependency_libs 88367cea3689Smrg if test dlpreopen = "$pass"; then 8837e19dfac4Smrg # Link the dlpreopened libraries before other libraries 8838e19dfac4Smrg for deplib in $save_deplibs; do 8839e19dfac4Smrg deplibs="$deplib $deplibs" 8840e19dfac4Smrg done 8841e19dfac4Smrg fi 88427cea3689Smrg if test dlopen != "$pass"; then 88437cea3689Smrg test conv = "$pass" || { 8844e19dfac4Smrg # Make sure lib_search_path contains only unique directories. 8845e19dfac4Smrg lib_search_path= 8846e19dfac4Smrg for dir in $newlib_search_path; do 8847e19dfac4Smrg case "$lib_search_path " in 8848e19dfac4Smrg *" $dir "*) ;; 8849313a12fdSmrg *) func_append lib_search_path " $dir" ;; 8850e19dfac4Smrg esac 8851e19dfac4Smrg done 8852e19dfac4Smrg newlib_search_path= 88537cea3689Smrg } 8854e19dfac4Smrg 88557cea3689Smrg if test prog,link = "$linkmode,$pass"; then 8856e19dfac4Smrg vars="compile_deplibs finalize_deplibs" 88577cea3689Smrg else 88587cea3689Smrg vars=deplibs 8859e19dfac4Smrg fi 8860e19dfac4Smrg for var in $vars dependency_libs; do 8861e19dfac4Smrg # Add libraries to $var in reverse order 8862e19dfac4Smrg eval tmp_libs=\"\$$var\" 8863e19dfac4Smrg new_libs= 8864e19dfac4Smrg for deplib in $tmp_libs; do 8865e19dfac4Smrg # FIXME: Pedantically, this is the right thing to do, so 8866e19dfac4Smrg # that some nasty dependency loop isn't accidentally 8867e19dfac4Smrg # broken: 8868e19dfac4Smrg #new_libs="$deplib $new_libs" 8869e19dfac4Smrg # Pragmatically, this seems to cause very few problems in 8870e19dfac4Smrg # practice: 8871e19dfac4Smrg case $deplib in 8872e19dfac4Smrg -L*) new_libs="$deplib $new_libs" ;; 8873e19dfac4Smrg -R*) ;; 8874e19dfac4Smrg *) 8875e19dfac4Smrg # And here is the reason: when a library appears more 8876e19dfac4Smrg # than once as an explicit dependence of a library, or 8877e19dfac4Smrg # is implicitly linked in more than once by the 8878e19dfac4Smrg # compiler, it is considered special, and multiple 8879e19dfac4Smrg # occurrences thereof are not removed. Compare this 8880e19dfac4Smrg # with having the same library being listed as a 8881e19dfac4Smrg # dependency of multiple other libraries: in this case, 8882e19dfac4Smrg # we know (pedantically, we assume) the library does not 8883e19dfac4Smrg # need to be listed more than once, so we keep only the 8884e19dfac4Smrg # last copy. This is not always right, but it is rare 8885e19dfac4Smrg # enough that we require users that really mean to play 8886e19dfac4Smrg # such unportable linking tricks to link the library 8887e19dfac4Smrg # using -Wl,-lname, so that libtool does not consider it 8888e19dfac4Smrg # for duplicate removal. 8889e19dfac4Smrg case " $specialdeplibs " in 8890e19dfac4Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 8891e19dfac4Smrg *) 8892e19dfac4Smrg case " $new_libs " in 8893e19dfac4Smrg *" $deplib "*) ;; 8894e19dfac4Smrg *) new_libs="$deplib $new_libs" ;; 8895e19dfac4Smrg esac 8896e19dfac4Smrg ;; 8897e19dfac4Smrg esac 8898e19dfac4Smrg ;; 8899e19dfac4Smrg esac 8900e19dfac4Smrg done 8901e19dfac4Smrg tmp_libs= 8902e19dfac4Smrg for deplib in $new_libs; do 8903e19dfac4Smrg case $deplib in 8904e19dfac4Smrg -L*) 8905e19dfac4Smrg case " $tmp_libs " in 8906e19dfac4Smrg *" $deplib "*) ;; 8907313a12fdSmrg *) func_append tmp_libs " $deplib" ;; 8908e19dfac4Smrg esac 8909e19dfac4Smrg ;; 8910313a12fdSmrg *) func_append tmp_libs " $deplib" ;; 8911e19dfac4Smrg esac 8912e19dfac4Smrg done 8913e19dfac4Smrg eval $var=\"$tmp_libs\" 8914e19dfac4Smrg done # for var 8915e19dfac4Smrg fi 89167cea3689Smrg 89177cea3689Smrg # Add Sun CC postdeps if required: 89187cea3689Smrg test CXX = "$tagname" && { 89197cea3689Smrg case $host_os in 89207cea3689Smrg linux*) 892195b7a5c8Smrg case `$CC -V 2>&1 | $SED 5q` in 89227cea3689Smrg *Sun\ C*) # Sun C++ 5.9 89237cea3689Smrg func_suncc_cstd_abi 89247cea3689Smrg 89257cea3689Smrg if test no != "$suncc_use_cstd_abi"; then 89267cea3689Smrg func_append postdeps ' -library=Cstd -library=Crun' 89277cea3689Smrg fi 89287cea3689Smrg ;; 89297cea3689Smrg esac 89307cea3689Smrg ;; 89317cea3689Smrg 89327cea3689Smrg solaris*) 89337cea3689Smrg func_cc_basename "$CC" 89347cea3689Smrg case $func_cc_basename_result in 89357cea3689Smrg CC* | sunCC*) 89367cea3689Smrg func_suncc_cstd_abi 89377cea3689Smrg 89387cea3689Smrg if test no != "$suncc_use_cstd_abi"; then 89397cea3689Smrg func_append postdeps ' -library=Cstd -library=Crun' 89407cea3689Smrg fi 89417cea3689Smrg ;; 89427cea3689Smrg esac 89437cea3689Smrg ;; 89447cea3689Smrg esac 89457cea3689Smrg } 89467cea3689Smrg 8947e19dfac4Smrg # Last step: remove runtime libs from dependency_libs 8948e19dfac4Smrg # (they stay in deplibs) 8949e19dfac4Smrg tmp_libs= 89507cea3689Smrg for i in $dependency_libs; do 8951e19dfac4Smrg case " $predeps $postdeps $compiler_lib_search_path " in 8952e19dfac4Smrg *" $i "*) 89537cea3689Smrg i= 8954e19dfac4Smrg ;; 8955e19dfac4Smrg esac 89567cea3689Smrg if test -n "$i"; then 8957313a12fdSmrg func_append tmp_libs " $i" 8958e19dfac4Smrg fi 8959e19dfac4Smrg done 8960e19dfac4Smrg dependency_libs=$tmp_libs 8961e19dfac4Smrg done # for pass 89627cea3689Smrg if test prog = "$linkmode"; then 89637cea3689Smrg dlfiles=$newdlfiles 8964e19dfac4Smrg fi 89657cea3689Smrg if test prog = "$linkmode" || test lib = "$linkmode"; then 89667cea3689Smrg dlprefiles=$newdlprefiles 8967e19dfac4Smrg fi 8968e19dfac4Smrg 8969e19dfac4Smrg case $linkmode in 8970e19dfac4Smrg oldlib) 89717cea3689Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 89727cea3689Smrg func_warning "'-dlopen' is ignored for archives" 8973e19dfac4Smrg fi 8974e19dfac4Smrg 8975e19dfac4Smrg case " $deplibs" in 8976e19dfac4Smrg *\ -l* | *\ -L*) 89777cea3689Smrg func_warning "'-l' and '-L' are ignored for archives" ;; 8978e19dfac4Smrg esac 8979e19dfac4Smrg 8980e19dfac4Smrg test -n "$rpath" && \ 89817cea3689Smrg func_warning "'-rpath' is ignored for archives" 8982e19dfac4Smrg 8983e19dfac4Smrg test -n "$xrpath" && \ 89847cea3689Smrg func_warning "'-R' is ignored for archives" 8985e19dfac4Smrg 8986e19dfac4Smrg test -n "$vinfo" && \ 89877cea3689Smrg func_warning "'-version-info/-version-number' is ignored for archives" 8988e19dfac4Smrg 8989e19dfac4Smrg test -n "$release" && \ 89907cea3689Smrg func_warning "'-release' is ignored for archives" 8991e19dfac4Smrg 8992e19dfac4Smrg test -n "$export_symbols$export_symbols_regex" && \ 89937cea3689Smrg func_warning "'-export-symbols' is ignored for archives" 8994e19dfac4Smrg 8995e19dfac4Smrg # Now set the variables for building old libraries. 8996e19dfac4Smrg build_libtool_libs=no 89977cea3689Smrg oldlibs=$output 8998313a12fdSmrg func_append objs "$old_deplibs" 8999e19dfac4Smrg ;; 9000e19dfac4Smrg 9001e19dfac4Smrg lib) 90027cea3689Smrg # Make sure we only generate libraries of the form 'libNAME.la'. 9003e19dfac4Smrg case $outputname in 9004e19dfac4Smrg lib*) 9005e19dfac4Smrg func_stripname 'lib' '.la' "$outputname" 9006e19dfac4Smrg name=$func_stripname_result 9007e19dfac4Smrg eval shared_ext=\"$shrext_cmds\" 9008e19dfac4Smrg eval libname=\"$libname_spec\" 9009e19dfac4Smrg ;; 9010e19dfac4Smrg *) 90117cea3689Smrg test no = "$module" \ 90127cea3689Smrg && func_fatal_help "libtool library '$output' must begin with 'lib'" 9013e19dfac4Smrg 90147cea3689Smrg if test no != "$need_lib_prefix"; then 9015e19dfac4Smrg # Add the "lib" prefix for modules if required 9016e19dfac4Smrg func_stripname '' '.la' "$outputname" 9017e19dfac4Smrg name=$func_stripname_result 9018e19dfac4Smrg eval shared_ext=\"$shrext_cmds\" 9019e19dfac4Smrg eval libname=\"$libname_spec\" 9020e19dfac4Smrg else 9021e19dfac4Smrg func_stripname '' '.la' "$outputname" 9022e19dfac4Smrg libname=$func_stripname_result 9023e19dfac4Smrg fi 9024e19dfac4Smrg ;; 9025e19dfac4Smrg esac 9026e19dfac4Smrg 9027e19dfac4Smrg if test -n "$objs"; then 90287cea3689Smrg if test pass_all != "$deplibs_check_method"; then 90297cea3689Smrg func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" 9030e19dfac4Smrg else 9031313a12fdSmrg echo 9032e19dfac4Smrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 9033e19dfac4Smrg $ECHO "*** objects $objs is not portable!" 9034313a12fdSmrg func_append libobjs " $objs" 9035e19dfac4Smrg fi 9036e19dfac4Smrg fi 9037e19dfac4Smrg 90387cea3689Smrg test no = "$dlself" \ 90397cea3689Smrg || func_warning "'-dlopen self' is ignored for libtool libraries" 9040e19dfac4Smrg 9041e19dfac4Smrg set dummy $rpath 9042e19dfac4Smrg shift 90437cea3689Smrg test 1 -lt "$#" \ 90447cea3689Smrg && func_warning "ignoring multiple '-rpath's for a libtool library" 9045e19dfac4Smrg 90467cea3689Smrg install_libdir=$1 9047e19dfac4Smrg 9048e19dfac4Smrg oldlibs= 9049e19dfac4Smrg if test -z "$rpath"; then 90507cea3689Smrg if test yes = "$build_libtool_libs"; then 9051e19dfac4Smrg # Building a libtool convenience library. 90527cea3689Smrg # Some compilers have problems with a '.al' extension so 9053e19dfac4Smrg # convenience libraries should have the same extension an 9054e19dfac4Smrg # archive normally would. 9055e19dfac4Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 9056e19dfac4Smrg build_libtool_libs=convenience 9057e19dfac4Smrg build_old_libs=yes 9058e19dfac4Smrg fi 9059e19dfac4Smrg 9060e19dfac4Smrg test -n "$vinfo" && \ 90617cea3689Smrg func_warning "'-version-info/-version-number' is ignored for convenience libraries" 9062e19dfac4Smrg 9063e19dfac4Smrg test -n "$release" && \ 90647cea3689Smrg func_warning "'-release' is ignored for convenience libraries" 9065e19dfac4Smrg else 9066e19dfac4Smrg 9067e19dfac4Smrg # Parse the version information argument. 90687cea3689Smrg save_ifs=$IFS; IFS=: 9069e19dfac4Smrg set dummy $vinfo 0 0 0 9070e19dfac4Smrg shift 90717cea3689Smrg IFS=$save_ifs 9072e19dfac4Smrg 9073e19dfac4Smrg test -n "$7" && \ 90747cea3689Smrg func_fatal_help "too many parameters to '-version-info'" 9075e19dfac4Smrg 9076e19dfac4Smrg # convert absolute version numbers to libtool ages 9077e19dfac4Smrg # this retains compatibility with .la files and attempts 9078e19dfac4Smrg # to make the code below a bit more comprehensible 9079e19dfac4Smrg 9080e19dfac4Smrg case $vinfo_number in 9081e19dfac4Smrg yes) 90827cea3689Smrg number_major=$1 90837cea3689Smrg number_minor=$2 90847cea3689Smrg number_revision=$3 9085e19dfac4Smrg # 9086e19dfac4Smrg # There are really only two kinds -- those that 9087e19dfac4Smrg # use the current revision as the major version 9088e19dfac4Smrg # and those that subtract age and use age as 9089e19dfac4Smrg # a minor version. But, then there is irix 90907cea3689Smrg # that has an extra 1 added just for fun 9091e19dfac4Smrg # 9092e19dfac4Smrg case $version_type in 9093313a12fdSmrg # correct linux to gnu/linux during the next big refactor 909495b7a5c8Smrg darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none) 9095e19dfac4Smrg func_arith $number_major + $number_minor 9096e19dfac4Smrg current=$func_arith_result 90977cea3689Smrg age=$number_minor 90987cea3689Smrg revision=$number_revision 9099e19dfac4Smrg ;; 91007cea3689Smrg freebsd-aout|qnx|sunos) 91017cea3689Smrg current=$number_major 91027cea3689Smrg revision=$number_minor 91037cea3689Smrg age=0 9104e19dfac4Smrg ;; 9105e19dfac4Smrg irix|nonstopux) 9106e19dfac4Smrg func_arith $number_major + $number_minor 9107e19dfac4Smrg current=$func_arith_result 91087cea3689Smrg age=$number_minor 91097cea3689Smrg revision=$number_minor 9110e19dfac4Smrg lt_irix_increment=no 9111e19dfac4Smrg ;; 9112e19dfac4Smrg esac 9113e19dfac4Smrg ;; 9114e19dfac4Smrg no) 91157cea3689Smrg current=$1 91167cea3689Smrg revision=$2 91177cea3689Smrg age=$3 9118e19dfac4Smrg ;; 9119e19dfac4Smrg esac 9120e19dfac4Smrg 9121e19dfac4Smrg # Check that each of the things are valid numbers. 9122e19dfac4Smrg case $current in 9123e19dfac4Smrg 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]) ;; 9124e19dfac4Smrg *) 91257cea3689Smrg func_error "CURRENT '$current' must be a nonnegative integer" 91267cea3689Smrg func_fatal_error "'$vinfo' is not valid version information" 9127e19dfac4Smrg ;; 9128e19dfac4Smrg esac 9129e19dfac4Smrg 9130e19dfac4Smrg case $revision in 9131e19dfac4Smrg 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]) ;; 9132e19dfac4Smrg *) 91337cea3689Smrg func_error "REVISION '$revision' must be a nonnegative integer" 91347cea3689Smrg func_fatal_error "'$vinfo' is not valid version information" 9135e19dfac4Smrg ;; 9136e19dfac4Smrg esac 9137e19dfac4Smrg 9138e19dfac4Smrg case $age in 9139e19dfac4Smrg 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]) ;; 9140e19dfac4Smrg *) 91417cea3689Smrg func_error "AGE '$age' must be a nonnegative integer" 91427cea3689Smrg func_fatal_error "'$vinfo' is not valid version information" 9143e19dfac4Smrg ;; 9144e19dfac4Smrg esac 9145e19dfac4Smrg 9146e19dfac4Smrg if test "$age" -gt "$current"; then 91477cea3689Smrg func_error "AGE '$age' is greater than the current interface number '$current'" 91487cea3689Smrg func_fatal_error "'$vinfo' is not valid version information" 9149e19dfac4Smrg fi 9150e19dfac4Smrg 9151e19dfac4Smrg # Calculate the version variables. 9152e19dfac4Smrg major= 9153e19dfac4Smrg versuffix= 9154e19dfac4Smrg verstring= 9155e19dfac4Smrg case $version_type in 9156e19dfac4Smrg none) ;; 9157e19dfac4Smrg 9158e19dfac4Smrg darwin) 9159e19dfac4Smrg # Like Linux, but with the current version available in 9160e19dfac4Smrg # verstring for coding it into the library header 9161e19dfac4Smrg func_arith $current - $age 9162e19dfac4Smrg major=.$func_arith_result 91637cea3689Smrg versuffix=$major.$age.$revision 9164e19dfac4Smrg # Darwin ld doesn't like 0 for these options... 9165e19dfac4Smrg func_arith $current + 1 9166e19dfac4Smrg minor_current=$func_arith_result 91677cea3689Smrg xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 9168e19dfac4Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 91697cea3689Smrg # On Darwin other compilers 91707cea3689Smrg case $CC in 91717cea3689Smrg nagfor*) 91727cea3689Smrg verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 91737cea3689Smrg ;; 91747cea3689Smrg *) 91757cea3689Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 91767cea3689Smrg ;; 91777cea3689Smrg esac 9178e19dfac4Smrg ;; 9179e19dfac4Smrg 9180e19dfac4Smrg freebsd-aout) 91817cea3689Smrg major=.$current 91827cea3689Smrg versuffix=.$current.$revision 9183e19dfac4Smrg ;; 9184e19dfac4Smrg 918595b7a5c8Smrg freebsd-elf | midnightbsd-elf) 91867cea3689Smrg func_arith $current - $age 91877cea3689Smrg major=.$func_arith_result 91887cea3689Smrg versuffix=$major.$age.$revision 9189e19dfac4Smrg ;; 9190e19dfac4Smrg 9191e19dfac4Smrg irix | nonstopux) 91927cea3689Smrg if test no = "$lt_irix_increment"; then 9193e19dfac4Smrg func_arith $current - $age 9194e19dfac4Smrg else 9195e19dfac4Smrg func_arith $current - $age + 1 9196e19dfac4Smrg fi 9197e19dfac4Smrg major=$func_arith_result 9198e19dfac4Smrg 9199e19dfac4Smrg case $version_type in 9200e19dfac4Smrg nonstopux) verstring_prefix=nonstopux ;; 9201e19dfac4Smrg *) verstring_prefix=sgi ;; 9202e19dfac4Smrg esac 92037cea3689Smrg verstring=$verstring_prefix$major.$revision 9204e19dfac4Smrg 9205e19dfac4Smrg # Add in all the interfaces that we are compatible with. 9206e19dfac4Smrg loop=$revision 92077cea3689Smrg while test 0 -ne "$loop"; do 9208e19dfac4Smrg func_arith $revision - $loop 9209e19dfac4Smrg iface=$func_arith_result 9210e19dfac4Smrg func_arith $loop - 1 9211e19dfac4Smrg loop=$func_arith_result 92127cea3689Smrg verstring=$verstring_prefix$major.$iface:$verstring 9213e19dfac4Smrg done 9214e19dfac4Smrg 92157cea3689Smrg # Before this point, $major must not contain '.'. 9216e19dfac4Smrg major=.$major 92177cea3689Smrg versuffix=$major.$revision 9218e19dfac4Smrg ;; 9219e19dfac4Smrg 9220313a12fdSmrg linux) # correct to gnu/linux during the next big refactor 9221e19dfac4Smrg func_arith $current - $age 9222e19dfac4Smrg major=.$func_arith_result 92237cea3689Smrg versuffix=$major.$age.$revision 9224e19dfac4Smrg ;; 9225e19dfac4Smrg 9226e19dfac4Smrg osf) 9227e19dfac4Smrg func_arith $current - $age 9228e19dfac4Smrg major=.$func_arith_result 92297cea3689Smrg versuffix=.$current.$age.$revision 92307cea3689Smrg verstring=$current.$age.$revision 9231e19dfac4Smrg 9232e19dfac4Smrg # Add in all the interfaces that we are compatible with. 9233e19dfac4Smrg loop=$age 92347cea3689Smrg while test 0 -ne "$loop"; do 9235e19dfac4Smrg func_arith $current - $loop 9236e19dfac4Smrg iface=$func_arith_result 9237e19dfac4Smrg func_arith $loop - 1 9238e19dfac4Smrg loop=$func_arith_result 92397cea3689Smrg verstring=$verstring:$iface.0 9240e19dfac4Smrg done 9241e19dfac4Smrg 9242e19dfac4Smrg # Make executables depend on our current version. 92437cea3689Smrg func_append verstring ":$current.0" 9244e19dfac4Smrg ;; 9245e19dfac4Smrg 9246e19dfac4Smrg qnx) 92477cea3689Smrg major=.$current 92487cea3689Smrg versuffix=.$current 92497cea3689Smrg ;; 92507cea3689Smrg 92517cea3689Smrg sco) 92527cea3689Smrg major=.$current 92537cea3689Smrg versuffix=.$current 9254e19dfac4Smrg ;; 9255e19dfac4Smrg 9256e19dfac4Smrg sunos) 92577cea3689Smrg major=.$current 92587cea3689Smrg versuffix=.$current.$revision 9259e19dfac4Smrg ;; 9260e19dfac4Smrg 9261e19dfac4Smrg windows) 9262e19dfac4Smrg # Use '-' rather than '.', since we only want one 92637cea3689Smrg # extension on DOS 8.3 file systems. 9264e19dfac4Smrg func_arith $current - $age 9265e19dfac4Smrg major=$func_arith_result 92667cea3689Smrg versuffix=-$major 9267e19dfac4Smrg ;; 9268e19dfac4Smrg 9269e19dfac4Smrg *) 92707cea3689Smrg func_fatal_configuration "unknown library version type '$version_type'" 9271e19dfac4Smrg ;; 9272e19dfac4Smrg esac 9273e19dfac4Smrg 9274e19dfac4Smrg # Clear the version info if we defaulted, and they specified a release. 9275e19dfac4Smrg if test -z "$vinfo" && test -n "$release"; then 9276e19dfac4Smrg major= 9277e19dfac4Smrg case $version_type in 9278e19dfac4Smrg darwin) 9279e19dfac4Smrg # we can't check for "0.0" in archive_cmds due to quoting 9280e19dfac4Smrg # problems, so we reset it completely 9281e19dfac4Smrg verstring= 9282e19dfac4Smrg ;; 9283e19dfac4Smrg *) 92847cea3689Smrg verstring=0.0 9285e19dfac4Smrg ;; 9286e19dfac4Smrg esac 92877cea3689Smrg if test no = "$need_version"; then 9288e19dfac4Smrg versuffix= 9289e19dfac4Smrg else 92907cea3689Smrg versuffix=.0.0 9291e19dfac4Smrg fi 9292e19dfac4Smrg fi 9293e19dfac4Smrg 9294e19dfac4Smrg # Remove version info from name if versioning should be avoided 92957cea3689Smrg if test yes,no = "$avoid_version,$need_version"; then 9296e19dfac4Smrg major= 9297e19dfac4Smrg versuffix= 92987cea3689Smrg verstring= 9299e19dfac4Smrg fi 9300e19dfac4Smrg 9301e19dfac4Smrg # Check to see if the archive will have undefined symbols. 93027cea3689Smrg if test yes = "$allow_undefined"; then 93037cea3689Smrg if test unsupported = "$allow_undefined_flag"; then 93047cea3689Smrg if test yes = "$build_old_libs"; then 93057cea3689Smrg func_warning "undefined symbols not allowed in $host shared libraries; building static only" 93067cea3689Smrg build_libtool_libs=no 93077cea3689Smrg else 93087cea3689Smrg func_fatal_error "can't build $host shared library unless -no-undefined is specified" 93097cea3689Smrg fi 9310e19dfac4Smrg fi 9311e19dfac4Smrg else 9312e19dfac4Smrg # Don't allow undefined symbols. 93137cea3689Smrg allow_undefined_flag=$no_undefined_flag 9314e19dfac4Smrg fi 9315e19dfac4Smrg 9316e19dfac4Smrg fi 9317e19dfac4Smrg 93187cea3689Smrg func_generate_dlsyms "$libname" "$libname" : 9319313a12fdSmrg func_append libobjs " $symfileobj" 93207cea3689Smrg test " " = "$libobjs" && libobjs= 9321e19dfac4Smrg 93227cea3689Smrg if test relink != "$opt_mode"; then 9323e19dfac4Smrg # Remove our outputs, but don't remove object files since they 9324e19dfac4Smrg # may have been created when compiling PIC objects. 9325e19dfac4Smrg removelist= 9326e19dfac4Smrg tempremovelist=`$ECHO "$output_objdir/*"` 9327e19dfac4Smrg for p in $tempremovelist; do 9328e19dfac4Smrg case $p in 9329e19dfac4Smrg *.$objext | *.gcno) 9330e19dfac4Smrg ;; 93317cea3689Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) 93327cea3689Smrg if test -n "$precious_files_regex"; then 9333e19dfac4Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 9334e19dfac4Smrg then 9335e19dfac4Smrg continue 9336e19dfac4Smrg fi 9337e19dfac4Smrg fi 9338313a12fdSmrg func_append removelist " $p" 9339e19dfac4Smrg ;; 9340e19dfac4Smrg *) ;; 9341e19dfac4Smrg esac 9342e19dfac4Smrg done 9343e19dfac4Smrg test -n "$removelist" && \ 9344e19dfac4Smrg func_show_eval "${RM}r \$removelist" 9345e19dfac4Smrg fi 9346e19dfac4Smrg 9347e19dfac4Smrg # Now set the variables for building old libraries. 93487cea3689Smrg if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then 9349313a12fdSmrg func_append oldlibs " $output_objdir/$libname.$libext" 9350e19dfac4Smrg 9351e19dfac4Smrg # Transform .lo files to .o files. 93527cea3689Smrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` 9353e19dfac4Smrg fi 9354e19dfac4Smrg 9355e19dfac4Smrg # Eliminate all temporary directories. 9356e19dfac4Smrg #for path in $notinst_path; do 9357313a12fdSmrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 9358313a12fdSmrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 9359313a12fdSmrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 9360e19dfac4Smrg #done 9361e19dfac4Smrg 9362e19dfac4Smrg if test -n "$xrpath"; then 9363e19dfac4Smrg # If the user specified any rpath flags, then add them. 9364e19dfac4Smrg temp_xrpath= 9365e19dfac4Smrg for libdir in $xrpath; do 9366313a12fdSmrg func_replace_sysroot "$libdir" 9367313a12fdSmrg func_append temp_xrpath " -R$func_replace_sysroot_result" 9368e19dfac4Smrg case "$finalize_rpath " in 9369e19dfac4Smrg *" $libdir "*) ;; 9370313a12fdSmrg *) func_append finalize_rpath " $libdir" ;; 9371e19dfac4Smrg esac 9372e19dfac4Smrg done 93737cea3689Smrg if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then 9374e19dfac4Smrg dependency_libs="$temp_xrpath $dependency_libs" 9375e19dfac4Smrg fi 9376e19dfac4Smrg fi 9377e19dfac4Smrg 9378e19dfac4Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 93797cea3689Smrg old_dlfiles=$dlfiles 9380e19dfac4Smrg dlfiles= 9381e19dfac4Smrg for lib in $old_dlfiles; do 9382e19dfac4Smrg case " $dlprefiles $dlfiles " in 9383e19dfac4Smrg *" $lib "*) ;; 9384313a12fdSmrg *) func_append dlfiles " $lib" ;; 9385e19dfac4Smrg esac 9386e19dfac4Smrg done 9387e19dfac4Smrg 9388e19dfac4Smrg # Make sure dlprefiles contains only unique files 93897cea3689Smrg old_dlprefiles=$dlprefiles 9390e19dfac4Smrg dlprefiles= 9391e19dfac4Smrg for lib in $old_dlprefiles; do 9392e19dfac4Smrg case "$dlprefiles " in 9393e19dfac4Smrg *" $lib "*) ;; 9394313a12fdSmrg *) func_append dlprefiles " $lib" ;; 9395e19dfac4Smrg esac 9396e19dfac4Smrg done 9397e19dfac4Smrg 93987cea3689Smrg if test yes = "$build_libtool_libs"; then 9399e19dfac4Smrg if test -n "$rpath"; then 9400e19dfac4Smrg case $host in 9401313a12fdSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 9402e19dfac4Smrg # these systems don't actually have a c library (as such)! 9403e19dfac4Smrg ;; 9404e19dfac4Smrg *-*-rhapsody* | *-*-darwin1.[012]) 9405e19dfac4Smrg # Rhapsody C library is in the System framework 9406313a12fdSmrg func_append deplibs " System.ltframework" 9407e19dfac4Smrg ;; 9408e19dfac4Smrg *-*-netbsd*) 9409e19dfac4Smrg # Don't link with libc until the a.out ld.so is fixed. 9410e19dfac4Smrg ;; 941195b7a5c8Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) 9412e19dfac4Smrg # Do not include libc due to us having libc/libc_r. 9413e19dfac4Smrg ;; 9414e19dfac4Smrg *-*-sco3.2v5* | *-*-sco5v6*) 9415e19dfac4Smrg # Causes problems with __ctype 9416e19dfac4Smrg ;; 9417e19dfac4Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 9418e19dfac4Smrg # Compiler inserts libc in the correct place for threads to work 9419e19dfac4Smrg ;; 9420e19dfac4Smrg *) 9421e19dfac4Smrg # Add libc to deplibs on all other systems if necessary. 94227cea3689Smrg if test yes = "$build_libtool_need_lc"; then 9423313a12fdSmrg func_append deplibs " -lc" 9424e19dfac4Smrg fi 9425e19dfac4Smrg ;; 9426e19dfac4Smrg esac 9427e19dfac4Smrg fi 9428e19dfac4Smrg 9429e19dfac4Smrg # Transform deplibs into only deplibs that can be linked in shared. 9430e19dfac4Smrg name_save=$name 9431e19dfac4Smrg libname_save=$libname 9432e19dfac4Smrg release_save=$release 9433e19dfac4Smrg versuffix_save=$versuffix 9434e19dfac4Smrg major_save=$major 9435e19dfac4Smrg # I'm not sure if I'm treating the release correctly. I think 9436e19dfac4Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 9437e19dfac4Smrg # add it in twice. Is that correct? 94387cea3689Smrg release= 94397cea3689Smrg versuffix= 94407cea3689Smrg major= 9441e19dfac4Smrg newdeplibs= 9442e19dfac4Smrg droppeddeps=no 9443e19dfac4Smrg case $deplibs_check_method in 9444e19dfac4Smrg pass_all) 9445e19dfac4Smrg # Don't check for shared/static. Everything works. 9446e19dfac4Smrg # This might be a little naive. We might want to check 9447e19dfac4Smrg # whether the library exists or not. But this is on 9448e19dfac4Smrg # osf3 & osf4 and I'm not really sure... Just 9449e19dfac4Smrg # implementing what was already the behavior. 9450e19dfac4Smrg newdeplibs=$deplibs 9451e19dfac4Smrg ;; 9452e19dfac4Smrg test_compile) 9453e19dfac4Smrg # This code stresses the "libraries are programs" paradigm to its 9454e19dfac4Smrg # limits. Maybe even breaks it. We compile a program, linking it 9455e19dfac4Smrg # against the deplibs as a proxy for the library. Then we can check 9456e19dfac4Smrg # whether they linked in statically or dynamically with ldd. 9457e19dfac4Smrg $opt_dry_run || $RM conftest.c 9458e19dfac4Smrg cat > conftest.c <<EOF 9459e19dfac4Smrg int main() { return 0; } 9460e19dfac4SmrgEOF 9461e19dfac4Smrg $opt_dry_run || $RM conftest 9462e19dfac4Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 9463e19dfac4Smrg ldd_output=`ldd conftest` 9464e19dfac4Smrg for i in $deplibs; do 9465e19dfac4Smrg case $i in 9466e19dfac4Smrg -l*) 9467e19dfac4Smrg func_stripname -l '' "$i" 9468e19dfac4Smrg name=$func_stripname_result 94697cea3689Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9470e19dfac4Smrg case " $predeps $postdeps " in 9471e19dfac4Smrg *" $i "*) 9472313a12fdSmrg func_append newdeplibs " $i" 94737cea3689Smrg i= 9474e19dfac4Smrg ;; 9475e19dfac4Smrg esac 9476e19dfac4Smrg fi 94777cea3689Smrg if test -n "$i"; then 9478e19dfac4Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 9479e19dfac4Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9480e19dfac4Smrg set dummy $deplib_matches; shift 9481e19dfac4Smrg deplib_match=$1 94827cea3689Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9483313a12fdSmrg func_append newdeplibs " $i" 9484e19dfac4Smrg else 9485e19dfac4Smrg droppeddeps=yes 9486313a12fdSmrg echo 9487e19dfac4Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 9488313a12fdSmrg echo "*** I have the capability to make that library automatically link in when" 9489313a12fdSmrg echo "*** you link to this library. But I can only do this if you have a" 9490313a12fdSmrg echo "*** shared version of the library, which I believe you do not have" 9491313a12fdSmrg echo "*** because a test_compile did reveal that the linker did not use it for" 9492313a12fdSmrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 9493e19dfac4Smrg fi 9494e19dfac4Smrg fi 9495e19dfac4Smrg ;; 9496e19dfac4Smrg *) 9497313a12fdSmrg func_append newdeplibs " $i" 9498e19dfac4Smrg ;; 9499e19dfac4Smrg esac 9500e19dfac4Smrg done 9501e19dfac4Smrg else 9502e19dfac4Smrg # Error occurred in the first compile. Let's try to salvage 9503e19dfac4Smrg # the situation: Compile a separate program for each library. 9504e19dfac4Smrg for i in $deplibs; do 9505e19dfac4Smrg case $i in 9506e19dfac4Smrg -l*) 9507e19dfac4Smrg func_stripname -l '' "$i" 9508e19dfac4Smrg name=$func_stripname_result 9509e19dfac4Smrg $opt_dry_run || $RM conftest 9510e19dfac4Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 9511e19dfac4Smrg ldd_output=`ldd conftest` 95127cea3689Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9513e19dfac4Smrg case " $predeps $postdeps " in 9514e19dfac4Smrg *" $i "*) 9515313a12fdSmrg func_append newdeplibs " $i" 95167cea3689Smrg i= 9517e19dfac4Smrg ;; 9518e19dfac4Smrg esac 9519e19dfac4Smrg fi 95207cea3689Smrg if test -n "$i"; then 9521e19dfac4Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 9522e19dfac4Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9523e19dfac4Smrg set dummy $deplib_matches; shift 9524e19dfac4Smrg deplib_match=$1 95257cea3689Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9526313a12fdSmrg func_append newdeplibs " $i" 9527e19dfac4Smrg else 9528e19dfac4Smrg droppeddeps=yes 9529313a12fdSmrg echo 9530e19dfac4Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 9531313a12fdSmrg echo "*** I have the capability to make that library automatically link in when" 9532313a12fdSmrg echo "*** you link to this library. But I can only do this if you have a" 9533313a12fdSmrg echo "*** shared version of the library, which you do not appear to have" 9534313a12fdSmrg echo "*** because a test_compile did reveal that the linker did not use this one" 9535313a12fdSmrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 9536e19dfac4Smrg fi 9537e19dfac4Smrg fi 9538e19dfac4Smrg else 9539e19dfac4Smrg droppeddeps=yes 9540313a12fdSmrg echo 9541e19dfac4Smrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 9542313a12fdSmrg echo "*** make it link in! You will probably need to install it or some" 9543313a12fdSmrg echo "*** library that it depends on before this library will be fully" 9544313a12fdSmrg echo "*** functional. Installing it before continuing would be even better." 9545e19dfac4Smrg fi 9546e19dfac4Smrg ;; 9547e19dfac4Smrg *) 9548313a12fdSmrg func_append newdeplibs " $i" 9549e19dfac4Smrg ;; 9550e19dfac4Smrg esac 9551e19dfac4Smrg done 9552e19dfac4Smrg fi 9553e19dfac4Smrg ;; 9554e19dfac4Smrg file_magic*) 9555e19dfac4Smrg set dummy $deplibs_check_method; shift 9556e19dfac4Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9557e19dfac4Smrg for a_deplib in $deplibs; do 9558e19dfac4Smrg case $a_deplib in 9559e19dfac4Smrg -l*) 9560e19dfac4Smrg func_stripname -l '' "$a_deplib" 9561e19dfac4Smrg name=$func_stripname_result 95627cea3689Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9563e19dfac4Smrg case " $predeps $postdeps " in 9564e19dfac4Smrg *" $a_deplib "*) 9565313a12fdSmrg func_append newdeplibs " $a_deplib" 95667cea3689Smrg a_deplib= 9567e19dfac4Smrg ;; 9568e19dfac4Smrg esac 9569e19dfac4Smrg fi 95707cea3689Smrg if test -n "$a_deplib"; then 9571e19dfac4Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 9572313a12fdSmrg if test -n "$file_magic_glob"; then 9573313a12fdSmrg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 9574313a12fdSmrg else 9575313a12fdSmrg libnameglob=$libname 9576313a12fdSmrg fi 95777cea3689Smrg test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` 9578e19dfac4Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 95797cea3689Smrg if test yes = "$want_nocaseglob"; then 9580313a12fdSmrg shopt -s nocaseglob 9581313a12fdSmrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9582313a12fdSmrg $nocaseglob 9583313a12fdSmrg else 9584313a12fdSmrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9585313a12fdSmrg fi 9586e19dfac4Smrg for potent_lib in $potential_libs; do 9587e19dfac4Smrg # Follow soft links. 9588e19dfac4Smrg if ls -lLd "$potent_lib" 2>/dev/null | 9589e19dfac4Smrg $GREP " -> " >/dev/null; then 9590e19dfac4Smrg continue 9591e19dfac4Smrg fi 9592e19dfac4Smrg # The statement above tries to avoid entering an 9593e19dfac4Smrg # endless loop below, in case of cyclic links. 9594e19dfac4Smrg # We might still enter an endless loop, since a link 9595e19dfac4Smrg # loop can be closed while we follow links, 9596e19dfac4Smrg # but so what? 95977cea3689Smrg potlib=$potent_lib 9598e19dfac4Smrg while test -h "$potlib" 2>/dev/null; do 95997cea3689Smrg potliblink=`ls -ld $potlib | $SED 's/.* -> //'` 9600e19dfac4Smrg case $potliblink in 96017cea3689Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; 96027cea3689Smrg *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; 9603e19dfac4Smrg esac 9604e19dfac4Smrg done 9605e19dfac4Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 9606e19dfac4Smrg $SED -e 10q | 9607e19dfac4Smrg $EGREP "$file_magic_regex" > /dev/null; then 9608313a12fdSmrg func_append newdeplibs " $a_deplib" 96097cea3689Smrg a_deplib= 9610e19dfac4Smrg break 2 9611e19dfac4Smrg fi 9612e19dfac4Smrg done 9613e19dfac4Smrg done 9614e19dfac4Smrg fi 96157cea3689Smrg if test -n "$a_deplib"; then 9616e19dfac4Smrg droppeddeps=yes 9617313a12fdSmrg echo 9618e19dfac4Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 9619313a12fdSmrg echo "*** I have the capability to make that library automatically link in when" 9620313a12fdSmrg echo "*** you link to this library. But I can only do this if you have a" 9621313a12fdSmrg echo "*** shared version of the library, which you do not appear to have" 9622313a12fdSmrg echo "*** because I did check the linker path looking for a file starting" 96237cea3689Smrg if test -z "$potlib"; then 9624e19dfac4Smrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 9625e19dfac4Smrg else 9626e19dfac4Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 9627e19dfac4Smrg $ECHO "*** using a file magic. Last file checked: $potlib" 9628e19dfac4Smrg fi 9629e19dfac4Smrg fi 9630e19dfac4Smrg ;; 9631e19dfac4Smrg *) 9632e19dfac4Smrg # Add a -L argument. 9633313a12fdSmrg func_append newdeplibs " $a_deplib" 9634e19dfac4Smrg ;; 9635e19dfac4Smrg esac 9636e19dfac4Smrg done # Gone through all deplibs. 9637e19dfac4Smrg ;; 9638e19dfac4Smrg match_pattern*) 9639e19dfac4Smrg set dummy $deplibs_check_method; shift 9640e19dfac4Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9641e19dfac4Smrg for a_deplib in $deplibs; do 9642e19dfac4Smrg case $a_deplib in 9643e19dfac4Smrg -l*) 9644e19dfac4Smrg func_stripname -l '' "$a_deplib" 9645e19dfac4Smrg name=$func_stripname_result 96467cea3689Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9647e19dfac4Smrg case " $predeps $postdeps " in 9648e19dfac4Smrg *" $a_deplib "*) 9649313a12fdSmrg func_append newdeplibs " $a_deplib" 96507cea3689Smrg a_deplib= 9651e19dfac4Smrg ;; 9652e19dfac4Smrg esac 9653e19dfac4Smrg fi 96547cea3689Smrg if test -n "$a_deplib"; then 9655e19dfac4Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 9656e19dfac4Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9657e19dfac4Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 9658e19dfac4Smrg for potent_lib in $potential_libs; do 96597cea3689Smrg potlib=$potent_lib # see symlink-check above in file_magic test 9660313a12fdSmrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 9661e19dfac4Smrg $EGREP "$match_pattern_regex" > /dev/null; then 9662313a12fdSmrg func_append newdeplibs " $a_deplib" 96637cea3689Smrg a_deplib= 9664e19dfac4Smrg break 2 9665e19dfac4Smrg fi 9666e19dfac4Smrg done 9667e19dfac4Smrg done 9668e19dfac4Smrg fi 96697cea3689Smrg if test -n "$a_deplib"; then 9670e19dfac4Smrg droppeddeps=yes 9671313a12fdSmrg echo 9672e19dfac4Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 9673313a12fdSmrg echo "*** I have the capability to make that library automatically link in when" 9674313a12fdSmrg echo "*** you link to this library. But I can only do this if you have a" 9675313a12fdSmrg echo "*** shared version of the library, which you do not appear to have" 9676313a12fdSmrg echo "*** because I did check the linker path looking for a file starting" 96777cea3689Smrg if test -z "$potlib"; then 9678e19dfac4Smrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 9679e19dfac4Smrg else 9680e19dfac4Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 9681e19dfac4Smrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 9682e19dfac4Smrg fi 9683e19dfac4Smrg fi 9684e19dfac4Smrg ;; 9685e19dfac4Smrg *) 9686e19dfac4Smrg # Add a -L argument. 9687313a12fdSmrg func_append newdeplibs " $a_deplib" 9688e19dfac4Smrg ;; 9689e19dfac4Smrg esac 9690e19dfac4Smrg done # Gone through all deplibs. 9691e19dfac4Smrg ;; 9692e19dfac4Smrg none | unknown | *) 96937cea3689Smrg newdeplibs= 9694313a12fdSmrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 96957cea3689Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 96967cea3689Smrg for i in $predeps $postdeps; do 9697e19dfac4Smrg # can't use Xsed below, because $i might contain '/' 96987cea3689Smrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` 9699e19dfac4Smrg done 9700e19dfac4Smrg fi 9701313a12fdSmrg case $tmp_deplibs in 9702313a12fdSmrg *[!\ \ ]*) 9703313a12fdSmrg echo 97047cea3689Smrg if test none = "$deplibs_check_method"; then 9705313a12fdSmrg echo "*** Warning: inter-library dependencies are not supported in this platform." 9706e19dfac4Smrg else 9707313a12fdSmrg echo "*** Warning: inter-library dependencies are not known to be supported." 9708e19dfac4Smrg fi 9709313a12fdSmrg echo "*** All declared inter-library dependencies are being dropped." 9710e19dfac4Smrg droppeddeps=yes 9711313a12fdSmrg ;; 9712313a12fdSmrg esac 9713e19dfac4Smrg ;; 9714e19dfac4Smrg esac 9715e19dfac4Smrg versuffix=$versuffix_save 9716e19dfac4Smrg major=$major_save 9717e19dfac4Smrg release=$release_save 9718e19dfac4Smrg libname=$libname_save 9719e19dfac4Smrg name=$name_save 9720e19dfac4Smrg 9721e19dfac4Smrg case $host in 9722e19dfac4Smrg *-*-rhapsody* | *-*-darwin1.[012]) 9723e19dfac4Smrg # On Rhapsody replace the C library with the System framework 9724313a12fdSmrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 9725e19dfac4Smrg ;; 9726e19dfac4Smrg esac 9727e19dfac4Smrg 97287cea3689Smrg if test yes = "$droppeddeps"; then 97297cea3689Smrg if test yes = "$module"; then 9730313a12fdSmrg echo 9731313a12fdSmrg echo "*** Warning: libtool could not satisfy all declared inter-library" 9732e19dfac4Smrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 9733313a12fdSmrg echo "*** a static module, that should work as long as the dlopening" 9734313a12fdSmrg echo "*** application is linked with the -dlopen flag." 9735e19dfac4Smrg if test -z "$global_symbol_pipe"; then 9736313a12fdSmrg echo 9737313a12fdSmrg echo "*** However, this would only work if libtool was able to extract symbol" 97387cea3689Smrg echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 9739313a12fdSmrg echo "*** not find such a program. So, this module is probably useless." 97407cea3689Smrg echo "*** 'nm' from GNU binutils and a full rebuild may help." 9741e19dfac4Smrg fi 97427cea3689Smrg if test no = "$build_old_libs"; then 97437cea3689Smrg oldlibs=$output_objdir/$libname.$libext 9744e19dfac4Smrg build_libtool_libs=module 9745e19dfac4Smrg build_old_libs=yes 9746e19dfac4Smrg else 9747e19dfac4Smrg build_libtool_libs=no 9748e19dfac4Smrg fi 9749e19dfac4Smrg else 9750313a12fdSmrg echo "*** The inter-library dependencies that have been dropped here will be" 9751313a12fdSmrg echo "*** automatically added whenever a program is linked with this library" 9752313a12fdSmrg echo "*** or is declared to -dlopen it." 9753e19dfac4Smrg 97547cea3689Smrg if test no = "$allow_undefined"; then 9755313a12fdSmrg echo 9756313a12fdSmrg echo "*** Since this library must not contain undefined symbols," 9757313a12fdSmrg echo "*** because either the platform does not support them or" 9758313a12fdSmrg echo "*** it was explicitly requested with -no-undefined," 9759313a12fdSmrg echo "*** libtool will only create a static version of it." 97607cea3689Smrg if test no = "$build_old_libs"; then 97617cea3689Smrg oldlibs=$output_objdir/$libname.$libext 9762e19dfac4Smrg build_libtool_libs=module 9763e19dfac4Smrg build_old_libs=yes 9764e19dfac4Smrg else 9765e19dfac4Smrg build_libtool_libs=no 9766e19dfac4Smrg fi 9767e19dfac4Smrg fi 9768e19dfac4Smrg fi 9769e19dfac4Smrg fi 9770e19dfac4Smrg # Done checking deplibs! 9771e19dfac4Smrg deplibs=$newdeplibs 9772e19dfac4Smrg fi 9773e19dfac4Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 9774e19dfac4Smrg case $host in 9775e19dfac4Smrg *-*-darwin*) 9776313a12fdSmrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9777313a12fdSmrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9778313a12fdSmrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9779e19dfac4Smrg ;; 9780e19dfac4Smrg esac 9781e19dfac4Smrg 9782e19dfac4Smrg # move library search paths that coincide with paths to not yet 9783e19dfac4Smrg # installed libraries to the beginning of the library search list 9784e19dfac4Smrg new_libs= 9785e19dfac4Smrg for path in $notinst_path; do 9786e19dfac4Smrg case " $new_libs " in 9787e19dfac4Smrg *" -L$path/$objdir "*) ;; 9788e19dfac4Smrg *) 9789e19dfac4Smrg case " $deplibs " in 9790e19dfac4Smrg *" -L$path/$objdir "*) 9791313a12fdSmrg func_append new_libs " -L$path/$objdir" ;; 9792e19dfac4Smrg esac 9793e19dfac4Smrg ;; 9794e19dfac4Smrg esac 9795e19dfac4Smrg done 9796e19dfac4Smrg for deplib in $deplibs; do 9797e19dfac4Smrg case $deplib in 9798e19dfac4Smrg -L*) 9799e19dfac4Smrg case " $new_libs " in 9800e19dfac4Smrg *" $deplib "*) ;; 9801313a12fdSmrg *) func_append new_libs " $deplib" ;; 9802e19dfac4Smrg esac 9803e19dfac4Smrg ;; 9804313a12fdSmrg *) func_append new_libs " $deplib" ;; 9805e19dfac4Smrg esac 9806e19dfac4Smrg done 98077cea3689Smrg deplibs=$new_libs 9808e19dfac4Smrg 9809e19dfac4Smrg # All the library-specific variables (install_libdir is set above). 9810e19dfac4Smrg library_names= 9811e19dfac4Smrg old_library= 9812e19dfac4Smrg dlname= 9813e19dfac4Smrg 9814e19dfac4Smrg # Test again, we may have decided not to build it any more 98157cea3689Smrg if test yes = "$build_libtool_libs"; then 98167cea3689Smrg # Remove $wl instances when linking with ld. 9817313a12fdSmrg # FIXME: should test the right _cmds variable. 9818313a12fdSmrg case $archive_cmds in 9819313a12fdSmrg *\$LD\ *) wl= ;; 9820313a12fdSmrg esac 98217cea3689Smrg if test yes = "$hardcode_into_libs"; then 9822e19dfac4Smrg # Hardcode the library paths 9823e19dfac4Smrg hardcode_libdirs= 9824e19dfac4Smrg dep_rpath= 98257cea3689Smrg rpath=$finalize_rpath 98267cea3689Smrg test relink = "$opt_mode" || rpath=$compile_rpath$rpath 9827e19dfac4Smrg for libdir in $rpath; do 9828e19dfac4Smrg if test -n "$hardcode_libdir_flag_spec"; then 9829e19dfac4Smrg if test -n "$hardcode_libdir_separator"; then 9830313a12fdSmrg func_replace_sysroot "$libdir" 9831313a12fdSmrg libdir=$func_replace_sysroot_result 9832e19dfac4Smrg if test -z "$hardcode_libdirs"; then 98337cea3689Smrg hardcode_libdirs=$libdir 9834e19dfac4Smrg else 9835e19dfac4Smrg # Just accumulate the unique libdirs. 9836e19dfac4Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 9837e19dfac4Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 9838e19dfac4Smrg ;; 9839e19dfac4Smrg *) 9840313a12fdSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 9841e19dfac4Smrg ;; 9842e19dfac4Smrg esac 9843e19dfac4Smrg fi 9844e19dfac4Smrg else 9845e19dfac4Smrg eval flag=\"$hardcode_libdir_flag_spec\" 9846313a12fdSmrg func_append dep_rpath " $flag" 9847e19dfac4Smrg fi 9848e19dfac4Smrg elif test -n "$runpath_var"; then 9849e19dfac4Smrg case "$perm_rpath " in 9850e19dfac4Smrg *" $libdir "*) ;; 9851313a12fdSmrg *) func_append perm_rpath " $libdir" ;; 9852e19dfac4Smrg esac 9853e19dfac4Smrg fi 9854e19dfac4Smrg done 9855e19dfac4Smrg # Substitute the hardcoded libdirs into the rpath. 9856e19dfac4Smrg if test -n "$hardcode_libdir_separator" && 9857e19dfac4Smrg test -n "$hardcode_libdirs"; then 98587cea3689Smrg libdir=$hardcode_libdirs 9859313a12fdSmrg eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 9860e19dfac4Smrg fi 9861e19dfac4Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 9862e19dfac4Smrg # We should set the runpath_var. 9863e19dfac4Smrg rpath= 9864e19dfac4Smrg for dir in $perm_rpath; do 9865313a12fdSmrg func_append rpath "$dir:" 9866e19dfac4Smrg done 9867e19dfac4Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 9868e19dfac4Smrg fi 9869e19dfac4Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 9870e19dfac4Smrg fi 987127702724Smrg 98727cea3689Smrg shlibpath=$finalize_shlibpath 98737cea3689Smrg test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath 9874e19dfac4Smrg if test -n "$shlibpath"; then 9875e19dfac4Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 9876e19dfac4Smrg fi 987727702724Smrg 9878e19dfac4Smrg # Get the real and link names of the library. 9879e19dfac4Smrg eval shared_ext=\"$shrext_cmds\" 9880e19dfac4Smrg eval library_names=\"$library_names_spec\" 9881e19dfac4Smrg set dummy $library_names 9882e19dfac4Smrg shift 98837cea3689Smrg realname=$1 9884e19dfac4Smrg shift 988527702724Smrg 9886e19dfac4Smrg if test -n "$soname_spec"; then 9887e19dfac4Smrg eval soname=\"$soname_spec\" 9888e19dfac4Smrg else 98897cea3689Smrg soname=$realname 9890e19dfac4Smrg fi 9891e19dfac4Smrg if test -z "$dlname"; then 9892e19dfac4Smrg dlname=$soname 9893e19dfac4Smrg fi 989427702724Smrg 98957cea3689Smrg lib=$output_objdir/$realname 9896e19dfac4Smrg linknames= 9897e19dfac4Smrg for link 9898e19dfac4Smrg do 9899313a12fdSmrg func_append linknames " $link" 9900e19dfac4Smrg done 990127702724Smrg 9902e19dfac4Smrg # Use standard objects if they are pic 9903313a12fdSmrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 9904e19dfac4Smrg test "X$libobjs" = "X " && libobjs= 990527702724Smrg 9906e19dfac4Smrg delfiles= 9907e19dfac4Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 9908e19dfac4Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 99097cea3689Smrg export_symbols=$output_objdir/$libname.uexp 9910313a12fdSmrg func_append delfiles " $export_symbols" 9911e19dfac4Smrg fi 991227702724Smrg 9913e19dfac4Smrg orig_export_symbols= 9914e19dfac4Smrg case $host_os in 9915e19dfac4Smrg cygwin* | mingw* | cegcc*) 9916e19dfac4Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 9917e19dfac4Smrg # exporting using user supplied symfile 99187cea3689Smrg func_dll_def_p "$export_symbols" || { 9919e19dfac4Smrg # and it's NOT already a .def file. Must figure out 9920e19dfac4Smrg # which of the given symbols are data symbols and tag 9921e19dfac4Smrg # them as such. So, trigger use of export_symbols_cmds. 9922e19dfac4Smrg # export_symbols gets reassigned inside the "prepare 9923e19dfac4Smrg # the list of exported symbols" if statement, so the 9924e19dfac4Smrg # include_expsyms logic still works. 99257cea3689Smrg orig_export_symbols=$export_symbols 9926e19dfac4Smrg export_symbols= 9927e19dfac4Smrg always_export_symbols=yes 99287cea3689Smrg } 9929e19dfac4Smrg fi 9930e19dfac4Smrg ;; 9931e19dfac4Smrg esac 993227702724Smrg 9933e19dfac4Smrg # Prepare the list of exported symbols 9934e19dfac4Smrg if test -z "$export_symbols"; then 99357cea3689Smrg if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then 99367cea3689Smrg func_verbose "generating symbol list for '$libname.la'" 99377cea3689Smrg export_symbols=$output_objdir/$libname.exp 9938e19dfac4Smrg $opt_dry_run || $RM $export_symbols 9939e19dfac4Smrg cmds=$export_symbols_cmds 99407cea3689Smrg save_ifs=$IFS; IFS='~' 9941313a12fdSmrg for cmd1 in $cmds; do 99427cea3689Smrg IFS=$save_ifs 9943313a12fdSmrg # Take the normal branch if the nm_file_list_spec branch 9944313a12fdSmrg # doesn't work or if tool conversion is not needed. 9945313a12fdSmrg case $nm_file_list_spec~$to_tool_file_cmd in 9946313a12fdSmrg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 9947313a12fdSmrg try_normal_branch=yes 9948313a12fdSmrg eval cmd=\"$cmd1\" 9949313a12fdSmrg func_len " $cmd" 9950313a12fdSmrg len=$func_len_result 9951313a12fdSmrg ;; 9952313a12fdSmrg *) 9953313a12fdSmrg try_normal_branch=no 9954313a12fdSmrg ;; 9955313a12fdSmrg esac 99567cea3689Smrg if test yes = "$try_normal_branch" \ 9957313a12fdSmrg && { test "$len" -lt "$max_cmd_len" \ 9958313a12fdSmrg || test "$max_cmd_len" -le -1; } 9959313a12fdSmrg then 9960313a12fdSmrg func_show_eval "$cmd" 'exit $?' 9961313a12fdSmrg skipped_export=false 9962313a12fdSmrg elif test -n "$nm_file_list_spec"; then 9963313a12fdSmrg func_basename "$output" 9964313a12fdSmrg output_la=$func_basename_result 9965313a12fdSmrg save_libobjs=$libobjs 9966313a12fdSmrg save_output=$output 99677cea3689Smrg output=$output_objdir/$output_la.nm 9968313a12fdSmrg func_to_tool_file "$output" 9969313a12fdSmrg libobjs=$nm_file_list_spec$func_to_tool_file_result 9970313a12fdSmrg func_append delfiles " $output" 9971313a12fdSmrg func_verbose "creating $NM input file list: $output" 9972313a12fdSmrg for obj in $save_libobjs; do 9973313a12fdSmrg func_to_tool_file "$obj" 9974313a12fdSmrg $ECHO "$func_to_tool_file_result" 9975313a12fdSmrg done > "$output" 9976313a12fdSmrg eval cmd=\"$cmd1\" 9977e19dfac4Smrg func_show_eval "$cmd" 'exit $?' 9978313a12fdSmrg output=$save_output 9979313a12fdSmrg libobjs=$save_libobjs 9980e19dfac4Smrg skipped_export=false 9981e19dfac4Smrg else 9982e19dfac4Smrg # The command line is too long to execute in one step. 9983e19dfac4Smrg func_verbose "using reloadable object file for export list..." 9984e19dfac4Smrg skipped_export=: 9985e19dfac4Smrg # Break out early, otherwise skipped_export may be 9986e19dfac4Smrg # set to false by a later but shorter cmd. 9987e19dfac4Smrg break 9988e19dfac4Smrg fi 9989e19dfac4Smrg done 99907cea3689Smrg IFS=$save_ifs 99917cea3689Smrg if test -n "$export_symbols_regex" && test : != "$skipped_export"; then 9992e19dfac4Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 9993e19dfac4Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 9994e19dfac4Smrg fi 9995e19dfac4Smrg fi 9996e19dfac4Smrg fi 999727702724Smrg 9998e19dfac4Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 99997cea3689Smrg tmp_export_symbols=$export_symbols 100007cea3689Smrg test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 10001313a12fdSmrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 10002e19dfac4Smrg fi 1000327702724Smrg 100047cea3689Smrg if test : != "$skipped_export" && test -n "$orig_export_symbols"; then 10005e19dfac4Smrg # The given exports_symbols file has to be filtered, so filter it. 100067cea3689Smrg func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 10007e19dfac4Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 100087cea3689Smrg # 's' commands, which not all seds can handle. GNU sed should be fine 10009e19dfac4Smrg # though. Also, the filter scales superlinearly with the number of 10010e19dfac4Smrg # global variables. join(1) would be nice here, but unfortunately 10011e19dfac4Smrg # isn't a blessed tool. 10012e19dfac4Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 10013313a12fdSmrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 10014e19dfac4Smrg export_symbols=$output_objdir/$libname.def 10015e19dfac4Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 1001627702724Smrg fi 1001727702724Smrg 10018e19dfac4Smrg tmp_deplibs= 10019e19dfac4Smrg for test_deplib in $deplibs; do 10020e19dfac4Smrg case " $convenience " in 10021e19dfac4Smrg *" $test_deplib "*) ;; 10022e19dfac4Smrg *) 10023313a12fdSmrg func_append tmp_deplibs " $test_deplib" 10024e19dfac4Smrg ;; 10025e19dfac4Smrg esac 10026e19dfac4Smrg done 100277cea3689Smrg deplibs=$tmp_deplibs 1002827702724Smrg 10029e19dfac4Smrg if test -n "$convenience"; then 10030e19dfac4Smrg if test -n "$whole_archive_flag_spec" && 100317cea3689Smrg test yes = "$compiler_needs_object" && 10032e19dfac4Smrg test -z "$libobjs"; then 10033e19dfac4Smrg # extract the archives, so we have objects to list. 10034e19dfac4Smrg # TODO: could optimize this to just extract one archive. 10035e19dfac4Smrg whole_archive_flag_spec= 10036e19dfac4Smrg fi 10037e19dfac4Smrg if test -n "$whole_archive_flag_spec"; then 10038e19dfac4Smrg save_libobjs=$libobjs 10039e19dfac4Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 10040e19dfac4Smrg test "X$libobjs" = "X " && libobjs= 10041e19dfac4Smrg else 100427cea3689Smrg gentop=$output_objdir/${outputname}x 10043313a12fdSmrg func_append generated " $gentop" 1004427702724Smrg 10045e19dfac4Smrg func_extract_archives $gentop $convenience 10046313a12fdSmrg func_append libobjs " $func_extract_archives_result" 10047e19dfac4Smrg test "X$libobjs" = "X " && libobjs= 10048e19dfac4Smrg fi 10049e19dfac4Smrg fi 1005027702724Smrg 100517cea3689Smrg if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then 10052e19dfac4Smrg eval flag=\"$thread_safe_flag_spec\" 10053313a12fdSmrg func_append linker_flags " $flag" 10054e19dfac4Smrg fi 1005527702724Smrg 10056e19dfac4Smrg # Make a backup of the uninstalled library when relinking 100577cea3689Smrg if test relink = "$opt_mode"; then 10058e19dfac4Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 1005927702724Smrg fi 1006027702724Smrg 10061e19dfac4Smrg # Do each of the archive commands. 100627cea3689Smrg if test yes = "$module" && test -n "$module_cmds"; then 10063e19dfac4Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 10064e19dfac4Smrg eval test_cmds=\"$module_expsym_cmds\" 10065e19dfac4Smrg cmds=$module_expsym_cmds 10066e19dfac4Smrg else 10067e19dfac4Smrg eval test_cmds=\"$module_cmds\" 10068e19dfac4Smrg cmds=$module_cmds 10069e19dfac4Smrg fi 10070e19dfac4Smrg else 10071e19dfac4Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 10072e19dfac4Smrg eval test_cmds=\"$archive_expsym_cmds\" 10073e19dfac4Smrg cmds=$archive_expsym_cmds 10074e19dfac4Smrg else 10075e19dfac4Smrg eval test_cmds=\"$archive_cmds\" 10076e19dfac4Smrg cmds=$archive_cmds 10077e19dfac4Smrg fi 1007827702724Smrg fi 1007927702724Smrg 100807cea3689Smrg if test : != "$skipped_export" && 10081e19dfac4Smrg func_len " $test_cmds" && 10082e19dfac4Smrg len=$func_len_result && 10083e19dfac4Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 10084e19dfac4Smrg : 10085e19dfac4Smrg else 10086e19dfac4Smrg # The command line is too long to link in one step, link piecewise 10087e19dfac4Smrg # or, if using GNU ld and skipped_export is not :, use a linker 10088e19dfac4Smrg # script. 1008927702724Smrg 10090e19dfac4Smrg # Save the value of $output and $libobjs because we want to 10091e19dfac4Smrg # use them later. If we have whole_archive_flag_spec, we 10092e19dfac4Smrg # want to use save_libobjs as it was before 10093e19dfac4Smrg # whole_archive_flag_spec was expanded, because we can't 10094e19dfac4Smrg # assume the linker understands whole_archive_flag_spec. 10095e19dfac4Smrg # This may have to be revisited, in case too many 10096e19dfac4Smrg # convenience libraries get linked in and end up exceeding 10097e19dfac4Smrg # the spec. 10098e19dfac4Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 10099e19dfac4Smrg save_libobjs=$libobjs 10100e19dfac4Smrg fi 10101e19dfac4Smrg save_output=$output 10102313a12fdSmrg func_basename "$output" 10103313a12fdSmrg output_la=$func_basename_result 1010427702724Smrg 10105e19dfac4Smrg # Clear the reloadable object creation command queue and 10106e19dfac4Smrg # initialize k to one. 10107e19dfac4Smrg test_cmds= 10108e19dfac4Smrg concat_cmds= 10109e19dfac4Smrg objlist= 10110e19dfac4Smrg last_robj= 10111e19dfac4Smrg k=1 1011227702724Smrg 101137cea3689Smrg if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then 101147cea3689Smrg output=$output_objdir/$output_la.lnkscript 10115e19dfac4Smrg func_verbose "creating GNU ld script: $output" 10116313a12fdSmrg echo 'INPUT (' > $output 10117e19dfac4Smrg for obj in $save_libobjs 10118e19dfac4Smrg do 10119313a12fdSmrg func_to_tool_file "$obj" 10120313a12fdSmrg $ECHO "$func_to_tool_file_result" >> $output 10121e19dfac4Smrg done 10122313a12fdSmrg echo ')' >> $output 10123313a12fdSmrg func_append delfiles " $output" 10124313a12fdSmrg func_to_tool_file "$output" 10125313a12fdSmrg output=$func_to_tool_file_result 101267cea3689Smrg elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then 101277cea3689Smrg output=$output_objdir/$output_la.lnk 10128e19dfac4Smrg func_verbose "creating linker input file list: $output" 10129e19dfac4Smrg : > $output 10130e19dfac4Smrg set x $save_libobjs 10131e19dfac4Smrg shift 10132e19dfac4Smrg firstobj= 101337cea3689Smrg if test yes = "$compiler_needs_object"; then 10134e19dfac4Smrg firstobj="$1 " 10135e19dfac4Smrg shift 10136e19dfac4Smrg fi 10137e19dfac4Smrg for obj 10138e19dfac4Smrg do 10139313a12fdSmrg func_to_tool_file "$obj" 10140313a12fdSmrg $ECHO "$func_to_tool_file_result" >> $output 10141e19dfac4Smrg done 10142313a12fdSmrg func_append delfiles " $output" 10143313a12fdSmrg func_to_tool_file "$output" 10144313a12fdSmrg output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 10145e19dfac4Smrg else 10146e19dfac4Smrg if test -n "$save_libobjs"; then 10147e19dfac4Smrg func_verbose "creating reloadable object files..." 101487cea3689Smrg output=$output_objdir/$output_la-$k.$objext 10149e19dfac4Smrg eval test_cmds=\"$reload_cmds\" 10150e19dfac4Smrg func_len " $test_cmds" 10151e19dfac4Smrg len0=$func_len_result 10152e19dfac4Smrg len=$len0 10153e19dfac4Smrg 10154e19dfac4Smrg # Loop over the list of objects to be linked. 10155e19dfac4Smrg for obj in $save_libobjs 10156e19dfac4Smrg do 10157e19dfac4Smrg func_len " $obj" 10158e19dfac4Smrg func_arith $len + $func_len_result 10159e19dfac4Smrg len=$func_arith_result 101607cea3689Smrg if test -z "$objlist" || 10161e19dfac4Smrg test "$len" -lt "$max_cmd_len"; then 10162e19dfac4Smrg func_append objlist " $obj" 10163e19dfac4Smrg else 10164e19dfac4Smrg # The command $test_cmds is almost too long, add a 10165e19dfac4Smrg # command to the queue. 101667cea3689Smrg if test 1 -eq "$k"; then 10167e19dfac4Smrg # The first file doesn't have a previous command to add. 10168313a12fdSmrg reload_objs=$objlist 10169313a12fdSmrg eval concat_cmds=\"$reload_cmds\" 10170e19dfac4Smrg else 10171e19dfac4Smrg # All subsequent reloadable object files will link in 10172e19dfac4Smrg # the last one created. 10173313a12fdSmrg reload_objs="$objlist $last_robj" 10174313a12fdSmrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 10175e19dfac4Smrg fi 101767cea3689Smrg last_robj=$output_objdir/$output_la-$k.$objext 10177e19dfac4Smrg func_arith $k + 1 10178e19dfac4Smrg k=$func_arith_result 101797cea3689Smrg output=$output_objdir/$output_la-$k.$objext 10180313a12fdSmrg objlist=" $obj" 10181e19dfac4Smrg func_len " $last_robj" 10182e19dfac4Smrg func_arith $len0 + $func_len_result 10183e19dfac4Smrg len=$func_arith_result 10184e19dfac4Smrg fi 10185e19dfac4Smrg done 10186e19dfac4Smrg # Handle the remaining objects by creating one last 10187e19dfac4Smrg # reloadable object file. All subsequent reloadable object 10188e19dfac4Smrg # files will link in the last one created. 10189e19dfac4Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 10190313a12fdSmrg reload_objs="$objlist $last_robj" 101917cea3689Smrg eval concat_cmds=\"\$concat_cmds$reload_cmds\" 10192e19dfac4Smrg if test -n "$last_robj"; then 101937cea3689Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 10194e19dfac4Smrg fi 10195313a12fdSmrg func_append delfiles " $output" 1019627702724Smrg 10197e19dfac4Smrg else 10198e19dfac4Smrg output= 10199e19dfac4Smrg fi 1020027702724Smrg 102017cea3689Smrg ${skipped_export-false} && { 102027cea3689Smrg func_verbose "generating symbol list for '$libname.la'" 102037cea3689Smrg export_symbols=$output_objdir/$libname.exp 10204e19dfac4Smrg $opt_dry_run || $RM $export_symbols 10205e19dfac4Smrg libobjs=$output 10206e19dfac4Smrg # Append the command to create the export file. 10207e19dfac4Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 10208e19dfac4Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 10209e19dfac4Smrg if test -n "$last_robj"; then 10210e19dfac4Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 10211e19dfac4Smrg fi 102127cea3689Smrg } 1021327702724Smrg 10214e19dfac4Smrg test -n "$save_libobjs" && 10215e19dfac4Smrg func_verbose "creating a temporary reloadable object file: $output" 1021627702724Smrg 10217e19dfac4Smrg # Loop through the commands generated above and execute them. 102187cea3689Smrg save_ifs=$IFS; IFS='~' 10219e19dfac4Smrg for cmd in $concat_cmds; do 102207cea3689Smrg IFS=$save_ifs 102217cea3689Smrg $opt_quiet || { 1022295b7a5c8Smrg func_quote_arg expand,pretty "$cmd" 1022395b7a5c8Smrg eval "func_echo $func_quote_arg_result" 10224e19dfac4Smrg } 10225e19dfac4Smrg $opt_dry_run || eval "$cmd" || { 10226e19dfac4Smrg lt_exit=$? 10227e19dfac4Smrg 10228e19dfac4Smrg # Restore the uninstalled library and exit 102297cea3689Smrg if test relink = "$opt_mode"; then 10230e19dfac4Smrg ( cd "$output_objdir" && \ 10231e19dfac4Smrg $RM "${realname}T" && \ 10232e19dfac4Smrg $MV "${realname}U" "$realname" ) 10233e19dfac4Smrg fi 1023427702724Smrg 10235e19dfac4Smrg exit $lt_exit 10236e19dfac4Smrg } 10237e19dfac4Smrg done 102387cea3689Smrg IFS=$save_ifs 10239e19dfac4Smrg 10240e19dfac4Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 10241e19dfac4Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 10242e19dfac4Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 1024327702724Smrg fi 1024427702724Smrg fi 1024527702724Smrg 102467cea3689Smrg ${skipped_export-false} && { 10247e19dfac4Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 102487cea3689Smrg tmp_export_symbols=$export_symbols 102497cea3689Smrg test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 10250313a12fdSmrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 10251e19dfac4Smrg fi 1025227702724Smrg 10253e19dfac4Smrg if test -n "$orig_export_symbols"; then 10254e19dfac4Smrg # The given exports_symbols file has to be filtered, so filter it. 102557cea3689Smrg func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 10256e19dfac4Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 102577cea3689Smrg # 's' commands, which not all seds can handle. GNU sed should be fine 10258e19dfac4Smrg # though. Also, the filter scales superlinearly with the number of 10259e19dfac4Smrg # global variables. join(1) would be nice here, but unfortunately 10260e19dfac4Smrg # isn't a blessed tool. 10261e19dfac4Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 10262313a12fdSmrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 10263e19dfac4Smrg export_symbols=$output_objdir/$libname.def 10264e19dfac4Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 10265e19dfac4Smrg fi 102667cea3689Smrg } 1026727702724Smrg 10268e19dfac4Smrg libobjs=$output 10269e19dfac4Smrg # Restore the value of output. 10270e19dfac4Smrg output=$save_output 1027127702724Smrg 10272e19dfac4Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 10273e19dfac4Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 10274e19dfac4Smrg test "X$libobjs" = "X " && libobjs= 10275e19dfac4Smrg fi 10276e19dfac4Smrg # Expand the library linking commands again to reset the 10277e19dfac4Smrg # value of $libobjs for piecewise linking. 10278e19dfac4Smrg 10279e19dfac4Smrg # Do each of the archive commands. 102807cea3689Smrg if test yes = "$module" && test -n "$module_cmds"; then 10281e19dfac4Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 10282e19dfac4Smrg cmds=$module_expsym_cmds 1028327702724Smrg else 10284e19dfac4Smrg cmds=$module_cmds 1028527702724Smrg fi 1028627702724Smrg else 10287e19dfac4Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 10288e19dfac4Smrg cmds=$archive_expsym_cmds 10289e19dfac4Smrg else 10290e19dfac4Smrg cmds=$archive_cmds 10291e19dfac4Smrg fi 1029227702724Smrg fi 1029327702724Smrg fi 1029427702724Smrg 10295e19dfac4Smrg if test -n "$delfiles"; then 10296e19dfac4Smrg # Append the command to remove temporary files to $cmds. 10297e19dfac4Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 10298e19dfac4Smrg fi 1029927702724Smrg 10300e19dfac4Smrg # Add any objects from preloaded convenience libraries 10301e19dfac4Smrg if test -n "$dlprefiles"; then 103027cea3689Smrg gentop=$output_objdir/${outputname}x 10303313a12fdSmrg func_append generated " $gentop" 1030427702724Smrg 10305e19dfac4Smrg func_extract_archives $gentop $dlprefiles 10306313a12fdSmrg func_append libobjs " $func_extract_archives_result" 10307e19dfac4Smrg test "X$libobjs" = "X " && libobjs= 1030827702724Smrg fi 1030927702724Smrg 103107cea3689Smrg save_ifs=$IFS; IFS='~' 10311e19dfac4Smrg for cmd in $cmds; do 103127cea3689Smrg IFS=$sp$nl 10313e19dfac4Smrg eval cmd=\"$cmd\" 103147cea3689Smrg IFS=$save_ifs 103157cea3689Smrg $opt_quiet || { 1031695b7a5c8Smrg func_quote_arg expand,pretty "$cmd" 1031795b7a5c8Smrg eval "func_echo $func_quote_arg_result" 10318e19dfac4Smrg } 10319e19dfac4Smrg $opt_dry_run || eval "$cmd" || { 10320e19dfac4Smrg lt_exit=$? 1032127702724Smrg 10322e19dfac4Smrg # Restore the uninstalled library and exit 103237cea3689Smrg if test relink = "$opt_mode"; then 10324e19dfac4Smrg ( cd "$output_objdir" && \ 10325e19dfac4Smrg $RM "${realname}T" && \ 10326e19dfac4Smrg $MV "${realname}U" "$realname" ) 10327e19dfac4Smrg fi 10328e19dfac4Smrg 10329e19dfac4Smrg exit $lt_exit 10330e19dfac4Smrg } 10331e19dfac4Smrg done 103327cea3689Smrg IFS=$save_ifs 10333e19dfac4Smrg 10334e19dfac4Smrg # Restore the uninstalled library and exit 103357cea3689Smrg if test relink = "$opt_mode"; then 10336e19dfac4Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 10337e19dfac4Smrg 10338e19dfac4Smrg if test -n "$convenience"; then 10339e19dfac4Smrg if test -z "$whole_archive_flag_spec"; then 10340e19dfac4Smrg func_show_eval '${RM}r "$gentop"' 1034127702724Smrg fi 1034227702724Smrg fi 1034327702724Smrg 10344e19dfac4Smrg exit $EXIT_SUCCESS 10345e19dfac4Smrg fi 1034627702724Smrg 10347e19dfac4Smrg # Create links to the real library. 10348e19dfac4Smrg for linkname in $linknames; do 10349e19dfac4Smrg if test "$realname" != "$linkname"; then 10350e19dfac4Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 10351e19dfac4Smrg fi 10352e19dfac4Smrg done 10353e19dfac4Smrg 10354e19dfac4Smrg # If -module or -export-dynamic was specified, set the dlname. 103557cea3689Smrg if test yes = "$module" || test yes = "$export_dynamic"; then 10356e19dfac4Smrg # On all known operating systems, these are identical. 103577cea3689Smrg dlname=$soname 10358e19dfac4Smrg fi 10359e19dfac4Smrg fi 10360e19dfac4Smrg ;; 10361e19dfac4Smrg 10362e19dfac4Smrg obj) 103637cea3689Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 103647cea3689Smrg func_warning "'-dlopen' is ignored for objects" 10365e19dfac4Smrg fi 10366e19dfac4Smrg 10367e19dfac4Smrg case " $deplibs" in 10368e19dfac4Smrg *\ -l* | *\ -L*) 103697cea3689Smrg func_warning "'-l' and '-L' are ignored for objects" ;; 10370e19dfac4Smrg esac 10371e19dfac4Smrg 10372e19dfac4Smrg test -n "$rpath" && \ 103737cea3689Smrg func_warning "'-rpath' is ignored for objects" 10374e19dfac4Smrg 10375e19dfac4Smrg test -n "$xrpath" && \ 103767cea3689Smrg func_warning "'-R' is ignored for objects" 10377e19dfac4Smrg 10378e19dfac4Smrg test -n "$vinfo" && \ 103797cea3689Smrg func_warning "'-version-info' is ignored for objects" 10380e19dfac4Smrg 10381e19dfac4Smrg test -n "$release" && \ 103827cea3689Smrg func_warning "'-release' is ignored for objects" 10383e19dfac4Smrg 10384e19dfac4Smrg case $output in 10385e19dfac4Smrg *.lo) 10386e19dfac4Smrg test -n "$objs$old_deplibs" && \ 103877cea3689Smrg func_fatal_error "cannot build library object '$output' from non-libtool objects" 10388e19dfac4Smrg 10389e19dfac4Smrg libobj=$output 10390e19dfac4Smrg func_lo2o "$libobj" 10391e19dfac4Smrg obj=$func_lo2o_result 10392e19dfac4Smrg ;; 10393e19dfac4Smrg *) 10394e19dfac4Smrg libobj= 103957cea3689Smrg obj=$output 10396e19dfac4Smrg ;; 10397e19dfac4Smrg esac 10398e19dfac4Smrg 10399e19dfac4Smrg # Delete the old objects. 10400e19dfac4Smrg $opt_dry_run || $RM $obj $libobj 10401e19dfac4Smrg 10402e19dfac4Smrg # Objects from convenience libraries. This assumes 10403e19dfac4Smrg # single-version convenience libraries. Whenever we create 10404e19dfac4Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 10405e19dfac4Smrg # the extraction. 10406e19dfac4Smrg reload_conv_objs= 10407e19dfac4Smrg gentop= 104087cea3689Smrg # if reload_cmds runs $LD directly, get rid of -Wl from 104097cea3689Smrg # whole_archive_flag_spec and hope we can get by with turning comma 104107cea3689Smrg # into space. 104117cea3689Smrg case $reload_cmds in 104127cea3689Smrg *\$LD[\ \$]*) wl= ;; 104137cea3689Smrg esac 10414e19dfac4Smrg if test -n "$convenience"; then 10415e19dfac4Smrg if test -n "$whole_archive_flag_spec"; then 10416e19dfac4Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 104177cea3689Smrg test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 104187cea3689Smrg reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags 10419e19dfac4Smrg else 104207cea3689Smrg gentop=$output_objdir/${obj}x 10421313a12fdSmrg func_append generated " $gentop" 10422e19dfac4Smrg 10423e19dfac4Smrg func_extract_archives $gentop $convenience 10424e19dfac4Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 10425e19dfac4Smrg fi 10426e19dfac4Smrg fi 1042727702724Smrg 10428313a12fdSmrg # If we're not building shared, we need to use non_pic_objs 104297cea3689Smrg test yes = "$build_libtool_libs" || libobjs=$non_pic_objects 10430313a12fdSmrg 10431e19dfac4Smrg # Create the old-style object. 104327cea3689Smrg reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs 1043327702724Smrg 104347cea3689Smrg output=$obj 10435e19dfac4Smrg func_execute_cmds "$reload_cmds" 'exit $?' 1043627702724Smrg 10437e19dfac4Smrg # Exit if we aren't doing a library object file. 10438e19dfac4Smrg if test -z "$libobj"; then 10439e19dfac4Smrg if test -n "$gentop"; then 10440e19dfac4Smrg func_show_eval '${RM}r "$gentop"' 10441e19dfac4Smrg fi 1044227702724Smrg 10443e19dfac4Smrg exit $EXIT_SUCCESS 10444e19dfac4Smrg fi 1044527702724Smrg 104467cea3689Smrg test yes = "$build_libtool_libs" || { 10447e19dfac4Smrg if test -n "$gentop"; then 10448e19dfac4Smrg func_show_eval '${RM}r "$gentop"' 10449e19dfac4Smrg fi 1045027702724Smrg 10451e19dfac4Smrg # Create an invalid libtool object if no PIC, so that we don't 10452e19dfac4Smrg # accidentally link it into a program. 10453e19dfac4Smrg # $show "echo timestamp > $libobj" 10454e19dfac4Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 10455e19dfac4Smrg exit $EXIT_SUCCESS 104567cea3689Smrg } 1045727702724Smrg 104587cea3689Smrg if test -n "$pic_flag" || test default != "$pic_mode"; then 10459e19dfac4Smrg # Only do commands if we really have different PIC objects. 10460e19dfac4Smrg reload_objs="$libobjs $reload_conv_objs" 104617cea3689Smrg output=$libobj 10462e19dfac4Smrg func_execute_cmds "$reload_cmds" 'exit $?' 1046327702724Smrg fi 1046427702724Smrg 10465e19dfac4Smrg if test -n "$gentop"; then 10466e19dfac4Smrg func_show_eval '${RM}r "$gentop"' 10467e19dfac4Smrg fi 1046827702724Smrg 10469e19dfac4Smrg exit $EXIT_SUCCESS 10470e19dfac4Smrg ;; 1047127702724Smrg 10472e19dfac4Smrg prog) 10473e19dfac4Smrg case $host in 10474e19dfac4Smrg *cygwin*) func_stripname '' '.exe' "$output" 10475e19dfac4Smrg output=$func_stripname_result.exe;; 1047627702724Smrg esac 10477e19dfac4Smrg test -n "$vinfo" && \ 104787cea3689Smrg func_warning "'-version-info' is ignored for programs" 1047927702724Smrg 10480e19dfac4Smrg test -n "$release" && \ 104817cea3689Smrg func_warning "'-release' is ignored for programs" 1048227702724Smrg 104837cea3689Smrg $preload \ 104847cea3689Smrg && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ 104857cea3689Smrg && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." 1048627702724Smrg 10487e19dfac4Smrg case $host in 10488e19dfac4Smrg *-*-rhapsody* | *-*-darwin1.[012]) 10489e19dfac4Smrg # On Rhapsody replace the C library is the System framework 10490313a12fdSmrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 10491313a12fdSmrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 1049227702724Smrg ;; 1049327702724Smrg esac 1049427702724Smrg 10495e19dfac4Smrg case $host in 10496e19dfac4Smrg *-*-darwin*) 10497e19dfac4Smrg # Don't allow lazy linking, it breaks C++ global constructors 10498e19dfac4Smrg # But is supposedly fixed on 10.4 or later (yay!). 104997cea3689Smrg if test CXX = "$tagname"; then 10500e19dfac4Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10501e19dfac4Smrg 10.[0123]) 105027cea3689Smrg func_append compile_command " $wl-bind_at_load" 105037cea3689Smrg func_append finalize_command " $wl-bind_at_load" 10504e19dfac4Smrg ;; 10505e19dfac4Smrg esac 10506e19dfac4Smrg fi 10507e19dfac4Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 10508313a12fdSmrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10509313a12fdSmrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 1051027702724Smrg ;; 1051127702724Smrg esac 1051227702724Smrg 1051327702724Smrg 10514e19dfac4Smrg # move library search paths that coincide with paths to not yet 10515e19dfac4Smrg # installed libraries to the beginning of the library search list 10516e19dfac4Smrg new_libs= 10517e19dfac4Smrg for path in $notinst_path; do 10518e19dfac4Smrg case " $new_libs " in 10519e19dfac4Smrg *" -L$path/$objdir "*) ;; 1052027702724Smrg *) 10521e19dfac4Smrg case " $compile_deplibs " in 10522e19dfac4Smrg *" -L$path/$objdir "*) 10523313a12fdSmrg func_append new_libs " -L$path/$objdir" ;; 10524e19dfac4Smrg esac 1052527702724Smrg ;; 1052627702724Smrg esac 1052727702724Smrg done 10528e19dfac4Smrg for deplib in $compile_deplibs; do 10529e19dfac4Smrg case $deplib in 10530e19dfac4Smrg -L*) 10531e19dfac4Smrg case " $new_libs " in 10532e19dfac4Smrg *" $deplib "*) ;; 10533313a12fdSmrg *) func_append new_libs " $deplib" ;; 10534e19dfac4Smrg esac 10535e19dfac4Smrg ;; 10536313a12fdSmrg *) func_append new_libs " $deplib" ;; 10537e19dfac4Smrg esac 10538e19dfac4Smrg done 105397cea3689Smrg compile_deplibs=$new_libs 1054027702724Smrg 1054127702724Smrg 10542313a12fdSmrg func_append compile_command " $compile_deplibs" 10543313a12fdSmrg func_append finalize_command " $finalize_deplibs" 1054427702724Smrg 10545e19dfac4Smrg if test -n "$rpath$xrpath"; then 10546e19dfac4Smrg # If the user specified any rpath flags, then add them. 10547e19dfac4Smrg for libdir in $rpath $xrpath; do 10548e19dfac4Smrg # This is the magic to use -rpath. 10549e19dfac4Smrg case "$finalize_rpath " in 10550e19dfac4Smrg *" $libdir "*) ;; 10551313a12fdSmrg *) func_append finalize_rpath " $libdir" ;; 10552e19dfac4Smrg esac 10553e19dfac4Smrg done 10554e19dfac4Smrg fi 1055527702724Smrg 10556e19dfac4Smrg # Now hardcode the library paths 10557e19dfac4Smrg rpath= 10558e19dfac4Smrg hardcode_libdirs= 10559e19dfac4Smrg for libdir in $compile_rpath $finalize_rpath; do 10560e19dfac4Smrg if test -n "$hardcode_libdir_flag_spec"; then 10561e19dfac4Smrg if test -n "$hardcode_libdir_separator"; then 10562e19dfac4Smrg if test -z "$hardcode_libdirs"; then 105637cea3689Smrg hardcode_libdirs=$libdir 10564e19dfac4Smrg else 10565e19dfac4Smrg # Just accumulate the unique libdirs. 10566e19dfac4Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10567e19dfac4Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10568e19dfac4Smrg ;; 10569e19dfac4Smrg *) 10570313a12fdSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10571e19dfac4Smrg ;; 10572e19dfac4Smrg esac 10573e19dfac4Smrg fi 10574e19dfac4Smrg else 10575e19dfac4Smrg eval flag=\"$hardcode_libdir_flag_spec\" 10576313a12fdSmrg func_append rpath " $flag" 10577e19dfac4Smrg fi 10578e19dfac4Smrg elif test -n "$runpath_var"; then 10579e19dfac4Smrg case "$perm_rpath " in 1058027702724Smrg *" $libdir "*) ;; 10581313a12fdSmrg *) func_append perm_rpath " $libdir" ;; 1058227702724Smrg esac 10583e19dfac4Smrg fi 10584e19dfac4Smrg case $host in 10585e19dfac4Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 105867cea3689Smrg testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` 10587e19dfac4Smrg case :$dllsearchpath: in 10588e19dfac4Smrg *":$libdir:"*) ;; 10589e19dfac4Smrg ::) dllsearchpath=$libdir;; 10590313a12fdSmrg *) func_append dllsearchpath ":$libdir";; 10591e19dfac4Smrg esac 10592e19dfac4Smrg case :$dllsearchpath: in 10593e19dfac4Smrg *":$testbindir:"*) ;; 10594e19dfac4Smrg ::) dllsearchpath=$testbindir;; 10595313a12fdSmrg *) func_append dllsearchpath ":$testbindir";; 10596e19dfac4Smrg esac 10597e19dfac4Smrg ;; 10598e19dfac4Smrg esac 10599e19dfac4Smrg done 10600e19dfac4Smrg # Substitute the hardcoded libdirs into the rpath. 10601e19dfac4Smrg if test -n "$hardcode_libdir_separator" && 10602e19dfac4Smrg test -n "$hardcode_libdirs"; then 106037cea3689Smrg libdir=$hardcode_libdirs 10604e19dfac4Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 10605e19dfac4Smrg fi 106067cea3689Smrg compile_rpath=$rpath 10607e19dfac4Smrg 10608e19dfac4Smrg rpath= 10609e19dfac4Smrg hardcode_libdirs= 10610e19dfac4Smrg for libdir in $finalize_rpath; do 10611e19dfac4Smrg if test -n "$hardcode_libdir_flag_spec"; then 10612e19dfac4Smrg if test -n "$hardcode_libdir_separator"; then 10613e19dfac4Smrg if test -z "$hardcode_libdirs"; then 106147cea3689Smrg hardcode_libdirs=$libdir 10615e19dfac4Smrg else 10616e19dfac4Smrg # Just accumulate the unique libdirs. 10617e19dfac4Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10618e19dfac4Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10619e19dfac4Smrg ;; 10620e19dfac4Smrg *) 10621313a12fdSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10622e19dfac4Smrg ;; 10623e19dfac4Smrg esac 10624e19dfac4Smrg fi 10625e19dfac4Smrg else 10626e19dfac4Smrg eval flag=\"$hardcode_libdir_flag_spec\" 10627313a12fdSmrg func_append rpath " $flag" 10628e19dfac4Smrg fi 10629e19dfac4Smrg elif test -n "$runpath_var"; then 10630e19dfac4Smrg case "$finalize_perm_rpath " in 1063127702724Smrg *" $libdir "*) ;; 10632313a12fdSmrg *) func_append finalize_perm_rpath " $libdir" ;; 1063327702724Smrg esac 1063427702724Smrg fi 10635e19dfac4Smrg done 10636e19dfac4Smrg # Substitute the hardcoded libdirs into the rpath. 10637e19dfac4Smrg if test -n "$hardcode_libdir_separator" && 10638e19dfac4Smrg test -n "$hardcode_libdirs"; then 106397cea3689Smrg libdir=$hardcode_libdirs 10640e19dfac4Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 10641e19dfac4Smrg fi 106427cea3689Smrg finalize_rpath=$rpath 1064327702724Smrg 106447cea3689Smrg if test -n "$libobjs" && test yes = "$build_old_libs"; then 10645e19dfac4Smrg # Transform all the library objects into standard objects. 10646313a12fdSmrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10647313a12fdSmrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10648e19dfac4Smrg fi 1064927702724Smrg 106507cea3689Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" false 1065127702724Smrg 10652e19dfac4Smrg # template prelinking step 10653e19dfac4Smrg if test -n "$prelink_cmds"; then 10654e19dfac4Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 10655e19dfac4Smrg fi 1065627702724Smrg 106577cea3689Smrg wrappers_required=: 10658e19dfac4Smrg case $host in 10659313a12fdSmrg *cegcc* | *mingw32ce*) 10660313a12fdSmrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 106617cea3689Smrg wrappers_required=false 10662313a12fdSmrg ;; 10663e19dfac4Smrg *cygwin* | *mingw* ) 106647cea3689Smrg test yes = "$build_libtool_libs" || wrappers_required=false 10665e19dfac4Smrg ;; 10666e19dfac4Smrg *) 106677cea3689Smrg if test no = "$need_relink" || test yes != "$build_libtool_libs"; then 106687cea3689Smrg wrappers_required=false 10669e19dfac4Smrg fi 10670e19dfac4Smrg ;; 10671e19dfac4Smrg esac 106727cea3689Smrg $wrappers_required || { 10673e19dfac4Smrg # Replace the output file specification. 10674313a12fdSmrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 106757cea3689Smrg link_command=$compile_command$compile_rpath 1067627702724Smrg 10677e19dfac4Smrg # We have no uninstalled library dependencies, so finalize right now. 10678e19dfac4Smrg exit_status=0 10679e19dfac4Smrg func_show_eval "$link_command" 'exit_status=$?' 1068027702724Smrg 10681313a12fdSmrg if test -n "$postlink_cmds"; then 10682313a12fdSmrg func_to_tool_file "$output" 10683313a12fdSmrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10684313a12fdSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 10685313a12fdSmrg fi 10686313a12fdSmrg 10687e19dfac4Smrg # Delete the generated files. 106887cea3689Smrg if test -f "$output_objdir/${outputname}S.$objext"; then 106897cea3689Smrg func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' 10690e19dfac4Smrg fi 1069127702724Smrg 10692e19dfac4Smrg exit $exit_status 106937cea3689Smrg } 1069427702724Smrg 10695e19dfac4Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 10696e19dfac4Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 10697e19dfac4Smrg fi 10698e19dfac4Smrg if test -n "$finalize_shlibpath"; then 10699e19dfac4Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 10700e19dfac4Smrg fi 1070127702724Smrg 10702e19dfac4Smrg compile_var= 10703e19dfac4Smrg finalize_var= 10704e19dfac4Smrg if test -n "$runpath_var"; then 10705e19dfac4Smrg if test -n "$perm_rpath"; then 10706e19dfac4Smrg # We should set the runpath_var. 10707e19dfac4Smrg rpath= 10708e19dfac4Smrg for dir in $perm_rpath; do 10709313a12fdSmrg func_append rpath "$dir:" 1071027702724Smrg done 10711e19dfac4Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 1071227702724Smrg fi 10713e19dfac4Smrg if test -n "$finalize_perm_rpath"; then 10714e19dfac4Smrg # We should set the runpath_var. 10715e19dfac4Smrg rpath= 10716e19dfac4Smrg for dir in $finalize_perm_rpath; do 10717313a12fdSmrg func_append rpath "$dir:" 10718e19dfac4Smrg done 10719e19dfac4Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 10720e19dfac4Smrg fi 10721e19dfac4Smrg fi 1072227702724Smrg 107237cea3689Smrg if test yes = "$no_install"; then 10724e19dfac4Smrg # We don't need to create a wrapper script. 107257cea3689Smrg link_command=$compile_var$compile_command$compile_rpath 10726e19dfac4Smrg # Replace the output file specification. 10727313a12fdSmrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10728e19dfac4Smrg # Delete the old output file. 10729e19dfac4Smrg $opt_dry_run || $RM $output 10730e19dfac4Smrg # Link the executable and exit 10731e19dfac4Smrg func_show_eval "$link_command" 'exit $?' 10732313a12fdSmrg 10733313a12fdSmrg if test -n "$postlink_cmds"; then 10734313a12fdSmrg func_to_tool_file "$output" 10735313a12fdSmrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10736313a12fdSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 10737313a12fdSmrg fi 10738313a12fdSmrg 10739e19dfac4Smrg exit $EXIT_SUCCESS 10740e19dfac4Smrg fi 1074127702724Smrg 107427cea3689Smrg case $hardcode_action,$fast_install in 107437cea3689Smrg relink,*) 107447cea3689Smrg # Fast installation is not supported 107457cea3689Smrg link_command=$compile_var$compile_command$compile_rpath 107467cea3689Smrg relink_command=$finalize_var$finalize_command$finalize_rpath 1074727702724Smrg 107487cea3689Smrg func_warning "this platform does not like uninstalled shared libraries" 107497cea3689Smrg func_warning "'$output' will be relinked during installation" 107507cea3689Smrg ;; 107517cea3689Smrg *,yes) 107527cea3689Smrg link_command=$finalize_var$compile_command$finalize_rpath 107537cea3689Smrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 107547cea3689Smrg ;; 107557cea3689Smrg *,no) 107567cea3689Smrg link_command=$compile_var$compile_command$compile_rpath 107577cea3689Smrg relink_command=$finalize_var$finalize_command$finalize_rpath 107587cea3689Smrg ;; 107597cea3689Smrg *,needless) 107607cea3689Smrg link_command=$finalize_var$compile_command$finalize_rpath 107617cea3689Smrg relink_command= 107627cea3689Smrg ;; 107637cea3689Smrg esac 1076427702724Smrg 10765e19dfac4Smrg # Replace the output file specification. 10766313a12fdSmrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 1076727702724Smrg 10768e19dfac4Smrg # Delete the old output files. 10769e19dfac4Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 1077027702724Smrg 10771e19dfac4Smrg func_show_eval "$link_command" 'exit $?' 1077227702724Smrg 10773313a12fdSmrg if test -n "$postlink_cmds"; then 10774313a12fdSmrg func_to_tool_file "$output_objdir/$outputname" 10775313a12fdSmrg 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'` 10776313a12fdSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 10777313a12fdSmrg fi 10778313a12fdSmrg 10779e19dfac4Smrg # Now create the wrapper script. 10780e19dfac4Smrg func_verbose "creating $output" 1078127702724Smrg 10782e19dfac4Smrg # Quote the relink command for shipping. 10783e19dfac4Smrg if test -n "$relink_command"; then 10784e19dfac4Smrg # Preserve any variables that may affect compiler behavior 10785e19dfac4Smrg for var in $variables_saved_for_relink; do 10786e19dfac4Smrg if eval test -z \"\${$var+set}\"; then 10787e19dfac4Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 10788e19dfac4Smrg elif eval var_value=\$$var; test -z "$var_value"; then 10789e19dfac4Smrg relink_command="$var=; export $var; $relink_command" 10790e19dfac4Smrg else 1079195b7a5c8Smrg func_quote_arg pretty "$var_value" 1079295b7a5c8Smrg relink_command="$var=$func_quote_arg_result; export $var; $relink_command" 10793e19dfac4Smrg fi 10794e19dfac4Smrg done 1079595b7a5c8Smrg func_quote eval cd "`pwd`" 1079695b7a5c8Smrg func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)" 1079795b7a5c8Smrg relink_command=$func_quote_arg_unquoted_result 10798e19dfac4Smrg fi 1079927702724Smrg 10800e19dfac4Smrg # Only actually do things if not in dry run mode. 10801e19dfac4Smrg $opt_dry_run || { 10802e19dfac4Smrg # win32 will think the script is a binary if it has 10803e19dfac4Smrg # a .exe suffix, so we strip it off here. 10804e19dfac4Smrg case $output in 10805e19dfac4Smrg *.exe) func_stripname '' '.exe' "$output" 10806e19dfac4Smrg output=$func_stripname_result ;; 10807e19dfac4Smrg esac 10808e19dfac4Smrg # test for cygwin because mv fails w/o .exe extensions 1080927702724Smrg case $host in 10810e19dfac4Smrg *cygwin*) 10811e19dfac4Smrg exeext=.exe 10812e19dfac4Smrg func_stripname '' '.exe' "$outputname" 10813e19dfac4Smrg outputname=$func_stripname_result ;; 10814e19dfac4Smrg *) exeext= ;; 1081527702724Smrg esac 10816e19dfac4Smrg case $host in 10817e19dfac4Smrg *cygwin* | *mingw* ) 10818e19dfac4Smrg func_dirname_and_basename "$output" "" "." 10819e19dfac4Smrg output_name=$func_basename_result 10820e19dfac4Smrg output_path=$func_dirname_result 108217cea3689Smrg cwrappersource=$output_path/$objdir/lt-$output_name.c 108227cea3689Smrg cwrapper=$output_path/$output_name.exe 10823e19dfac4Smrg $RM $cwrappersource $cwrapper 10824e19dfac4Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 10825e19dfac4Smrg 10826e19dfac4Smrg func_emit_cwrapperexe_src > $cwrappersource 10827e19dfac4Smrg 10828e19dfac4Smrg # The wrapper executable is built using the $host compiler, 10829e19dfac4Smrg # because it contains $host paths and files. If cross- 10830e19dfac4Smrg # compiling, it, like the target executable, must be 10831e19dfac4Smrg # executed on the $host or under an emulation environment. 10832e19dfac4Smrg $opt_dry_run || { 10833e19dfac4Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 10834e19dfac4Smrg $STRIP $cwrapper 10835e19dfac4Smrg } 1083627702724Smrg 10837e19dfac4Smrg # Now, create the wrapper script for func_source use: 10838e19dfac4Smrg func_ltwrapper_scriptname $cwrapper 10839e19dfac4Smrg $RM $func_ltwrapper_scriptname_result 10840e19dfac4Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 10841e19dfac4Smrg $opt_dry_run || { 10842e19dfac4Smrg # note: this script will not be executed, so do not chmod. 108437cea3689Smrg if test "x$build" = "x$host"; then 10844e19dfac4Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 1084527702724Smrg else 10846e19dfac4Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 1084727702724Smrg fi 10848e19dfac4Smrg } 10849e19dfac4Smrg ;; 10850e19dfac4Smrg * ) 10851e19dfac4Smrg $RM $output 10852e19dfac4Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 1085327702724Smrg 10854e19dfac4Smrg func_emit_wrapper no > $output 10855e19dfac4Smrg chmod +x $output 1085627702724Smrg ;; 1085727702724Smrg esac 10858e19dfac4Smrg } 10859e19dfac4Smrg exit $EXIT_SUCCESS 10860e19dfac4Smrg ;; 10861e19dfac4Smrg esac 1086227702724Smrg 10863e19dfac4Smrg # See if we need to build an old-fashioned archive. 10864e19dfac4Smrg for oldlib in $oldlibs; do 1086527702724Smrg 108667cea3689Smrg case $build_libtool_libs in 108677cea3689Smrg convenience) 108687cea3689Smrg oldobjs="$libobjs_save $symfileobj" 108697cea3689Smrg addlibs=$convenience 10870e19dfac4Smrg build_libtool_libs=no 108717cea3689Smrg ;; 108727cea3689Smrg module) 108737cea3689Smrg oldobjs=$libobjs_save 108747cea3689Smrg addlibs=$old_convenience 108757cea3689Smrg build_libtool_libs=no 108767cea3689Smrg ;; 108777cea3689Smrg *) 10878e19dfac4Smrg oldobjs="$old_deplibs $non_pic_objects" 108797cea3689Smrg $preload && test -f "$symfileobj" \ 108807cea3689Smrg && func_append oldobjs " $symfileobj" 108817cea3689Smrg addlibs=$old_convenience 108827cea3689Smrg ;; 108837cea3689Smrg esac 1088427702724Smrg 10885e19dfac4Smrg if test -n "$addlibs"; then 108867cea3689Smrg gentop=$output_objdir/${outputname}x 10887313a12fdSmrg func_append generated " $gentop" 1088827702724Smrg 10889e19dfac4Smrg func_extract_archives $gentop $addlibs 10890313a12fdSmrg func_append oldobjs " $func_extract_archives_result" 10891e19dfac4Smrg fi 1089227702724Smrg 10893e19dfac4Smrg # Do each command in the archive commands. 108947cea3689Smrg if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then 10895e19dfac4Smrg cmds=$old_archive_from_new_cmds 10896e19dfac4Smrg else 1089727702724Smrg 10898e19dfac4Smrg # Add any objects from preloaded convenience libraries 10899e19dfac4Smrg if test -n "$dlprefiles"; then 109007cea3689Smrg gentop=$output_objdir/${outputname}x 10901313a12fdSmrg func_append generated " $gentop" 1090227702724Smrg 10903e19dfac4Smrg func_extract_archives $gentop $dlprefiles 10904313a12fdSmrg func_append oldobjs " $func_extract_archives_result" 10905e19dfac4Smrg fi 1090627702724Smrg 10907e19dfac4Smrg # POSIX demands no paths to be encoded in archives. We have 10908e19dfac4Smrg # to avoid creating archives with duplicate basenames if we 10909e19dfac4Smrg # might have to extract them afterwards, e.g., when creating a 10910e19dfac4Smrg # static archive out of a convenience library, or when linking 10911e19dfac4Smrg # the entirety of a libtool archive into another (currently 10912e19dfac4Smrg # not supported by libtool). 10913e19dfac4Smrg if (for obj in $oldobjs 10914e19dfac4Smrg do 10915e19dfac4Smrg func_basename "$obj" 10916e19dfac4Smrg $ECHO "$func_basename_result" 10917e19dfac4Smrg done | sort | sort -uc >/dev/null 2>&1); then 10918e19dfac4Smrg : 10919e19dfac4Smrg else 10920313a12fdSmrg echo "copying selected object files to avoid basename conflicts..." 109217cea3689Smrg gentop=$output_objdir/${outputname}x 10922313a12fdSmrg func_append generated " $gentop" 10923e19dfac4Smrg func_mkdir_p "$gentop" 10924e19dfac4Smrg save_oldobjs=$oldobjs 10925e19dfac4Smrg oldobjs= 10926e19dfac4Smrg counter=1 10927e19dfac4Smrg for obj in $save_oldobjs 10928e19dfac4Smrg do 10929e19dfac4Smrg func_basename "$obj" 109307cea3689Smrg objbase=$func_basename_result 10931e19dfac4Smrg case " $oldobjs " in 10932e19dfac4Smrg " ") oldobjs=$obj ;; 10933e19dfac4Smrg *[\ /]"$objbase "*) 10934e19dfac4Smrg while :; do 10935e19dfac4Smrg # Make sure we don't pick an alternate name that also 10936e19dfac4Smrg # overlaps. 10937e19dfac4Smrg newobj=lt$counter-$objbase 10938e19dfac4Smrg func_arith $counter + 1 10939e19dfac4Smrg counter=$func_arith_result 10940e19dfac4Smrg case " $oldobjs " in 10941e19dfac4Smrg *[\ /]"$newobj "*) ;; 10942e19dfac4Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 10943e19dfac4Smrg esac 10944e19dfac4Smrg done 10945e19dfac4Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 10946313a12fdSmrg func_append oldobjs " $gentop/$newobj" 10947e19dfac4Smrg ;; 10948313a12fdSmrg *) func_append oldobjs " $obj" ;; 10949e19dfac4Smrg esac 1095027702724Smrg done 1095127702724Smrg fi 10952313a12fdSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 10953313a12fdSmrg tool_oldlib=$func_to_tool_file_result 10954e19dfac4Smrg eval cmds=\"$old_archive_cmds\" 1095527702724Smrg 10956e19dfac4Smrg func_len " $cmds" 10957e19dfac4Smrg len=$func_len_result 10958e19dfac4Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 10959e19dfac4Smrg cmds=$old_archive_cmds 10960313a12fdSmrg elif test -n "$archiver_list_spec"; then 10961313a12fdSmrg func_verbose "using command file archive linking..." 10962313a12fdSmrg for obj in $oldobjs 10963313a12fdSmrg do 10964313a12fdSmrg func_to_tool_file "$obj" 10965313a12fdSmrg $ECHO "$func_to_tool_file_result" 10966313a12fdSmrg done > $output_objdir/$libname.libcmd 10967313a12fdSmrg func_to_tool_file "$output_objdir/$libname.libcmd" 10968313a12fdSmrg oldobjs=" $archiver_list_spec$func_to_tool_file_result" 10969313a12fdSmrg cmds=$old_archive_cmds 10970e19dfac4Smrg else 10971e19dfac4Smrg # the command line is too long to link in one step, link in parts 10972e19dfac4Smrg func_verbose "using piecewise archive linking..." 10973e19dfac4Smrg save_RANLIB=$RANLIB 10974e19dfac4Smrg RANLIB=: 10975e19dfac4Smrg objlist= 10976e19dfac4Smrg concat_cmds= 10977e19dfac4Smrg save_oldobjs=$oldobjs 10978e19dfac4Smrg oldobjs= 10979e19dfac4Smrg # Is there a better way of finding the last object in the list? 10980e19dfac4Smrg for obj in $save_oldobjs 10981e19dfac4Smrg do 10982e19dfac4Smrg last_oldobj=$obj 10983e19dfac4Smrg done 10984e19dfac4Smrg eval test_cmds=\"$old_archive_cmds\" 10985e19dfac4Smrg func_len " $test_cmds" 10986e19dfac4Smrg len0=$func_len_result 10987e19dfac4Smrg len=$len0 10988e19dfac4Smrg for obj in $save_oldobjs 10989e19dfac4Smrg do 10990e19dfac4Smrg func_len " $obj" 10991e19dfac4Smrg func_arith $len + $func_len_result 10992e19dfac4Smrg len=$func_arith_result 10993e19dfac4Smrg func_append objlist " $obj" 10994e19dfac4Smrg if test "$len" -lt "$max_cmd_len"; then 10995e19dfac4Smrg : 10996e19dfac4Smrg else 10997e19dfac4Smrg # the above command should be used before it gets too long 10998e19dfac4Smrg oldobjs=$objlist 109997cea3689Smrg if test "$obj" = "$last_oldobj"; then 11000e19dfac4Smrg RANLIB=$save_RANLIB 11001e19dfac4Smrg fi 11002e19dfac4Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 110037cea3689Smrg eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" 11004e19dfac4Smrg objlist= 11005e19dfac4Smrg len=$len0 11006e19dfac4Smrg fi 11007e19dfac4Smrg done 11008e19dfac4Smrg RANLIB=$save_RANLIB 11009e19dfac4Smrg oldobjs=$objlist 110107cea3689Smrg if test -z "$oldobjs"; then 11011e19dfac4Smrg eval cmds=\"\$concat_cmds\" 11012e19dfac4Smrg else 11013e19dfac4Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 11014e19dfac4Smrg fi 11015e19dfac4Smrg fi 11016e19dfac4Smrg fi 11017e19dfac4Smrg func_execute_cmds "$cmds" 'exit $?' 1101827702724Smrg done 1101927702724Smrg 11020e19dfac4Smrg test -n "$generated" && \ 11021e19dfac4Smrg func_show_eval "${RM}r$generated" 1102227702724Smrg 11023e19dfac4Smrg # Now create the libtool archive. 11024e19dfac4Smrg case $output in 11025e19dfac4Smrg *.la) 11026e19dfac4Smrg old_library= 110277cea3689Smrg test yes = "$build_old_libs" && old_library=$libname.$libext 11028e19dfac4Smrg func_verbose "creating $output" 1102927702724Smrg 11030e19dfac4Smrg # Preserve any variables that may affect compiler behavior 11031e19dfac4Smrg for var in $variables_saved_for_relink; do 11032e19dfac4Smrg if eval test -z \"\${$var+set}\"; then 11033e19dfac4Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 11034e19dfac4Smrg elif eval var_value=\$$var; test -z "$var_value"; then 11035e19dfac4Smrg relink_command="$var=; export $var; $relink_command" 1103627702724Smrg else 1103795b7a5c8Smrg func_quote_arg pretty,unquoted "$var_value" 1103895b7a5c8Smrg relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command" 1103927702724Smrg fi 11040e19dfac4Smrg done 11041e19dfac4Smrg # Quote the link command for shipping. 1104295b7a5c8Smrg func_quote eval cd "`pwd`" 1104395b7a5c8Smrg relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 1104495b7a5c8Smrg func_quote_arg pretty,unquoted "$relink_command" 1104595b7a5c8Smrg relink_command=$func_quote_arg_unquoted_result 110467cea3689Smrg if test yes = "$hardcode_automatic"; then 11047e19dfac4Smrg relink_command= 11048e19dfac4Smrg fi 1104927702724Smrg 11050e19dfac4Smrg # Only create the output if not a dry run. 11051e19dfac4Smrg $opt_dry_run || { 11052e19dfac4Smrg for installed in no yes; do 110537cea3689Smrg if test yes = "$installed"; then 11054e19dfac4Smrg if test -z "$install_libdir"; then 11055e19dfac4Smrg break 11056e19dfac4Smrg fi 110577cea3689Smrg output=$output_objdir/${outputname}i 11058e19dfac4Smrg # Replace all uninstalled libtool libraries with the installed ones 11059e19dfac4Smrg newdependency_libs= 11060e19dfac4Smrg for deplib in $dependency_libs; do 11061e19dfac4Smrg case $deplib in 11062e19dfac4Smrg *.la) 11063e19dfac4Smrg func_basename "$deplib" 110647cea3689Smrg name=$func_basename_result 11065313a12fdSmrg func_resolve_sysroot "$deplib" 110667cea3689Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 11067e19dfac4Smrg test -z "$libdir" && \ 110687cea3689Smrg func_fatal_error "'$deplib' is not a valid libtool archive" 11069313a12fdSmrg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 11070313a12fdSmrg ;; 11071313a12fdSmrg -L*) 11072313a12fdSmrg func_stripname -L '' "$deplib" 11073313a12fdSmrg func_replace_sysroot "$func_stripname_result" 11074313a12fdSmrg func_append newdependency_libs " -L$func_replace_sysroot_result" 11075e19dfac4Smrg ;; 11076313a12fdSmrg -R*) 11077313a12fdSmrg func_stripname -R '' "$deplib" 11078313a12fdSmrg func_replace_sysroot "$func_stripname_result" 11079313a12fdSmrg func_append newdependency_libs " -R$func_replace_sysroot_result" 11080313a12fdSmrg ;; 11081313a12fdSmrg *) func_append newdependency_libs " $deplib" ;; 11082e19dfac4Smrg esac 11083e19dfac4Smrg done 110847cea3689Smrg dependency_libs=$newdependency_libs 11085e19dfac4Smrg newdlfiles= 11086e19dfac4Smrg 11087e19dfac4Smrg for lib in $dlfiles; do 11088e19dfac4Smrg case $lib in 11089e19dfac4Smrg *.la) 11090e19dfac4Smrg func_basename "$lib" 110917cea3689Smrg name=$func_basename_result 110927cea3689Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 11093e19dfac4Smrg test -z "$libdir" && \ 110947cea3689Smrg func_fatal_error "'$lib' is not a valid libtool archive" 11095313a12fdSmrg func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 11096e19dfac4Smrg ;; 11097313a12fdSmrg *) func_append newdlfiles " $lib" ;; 11098e19dfac4Smrg esac 11099e19dfac4Smrg done 111007cea3689Smrg dlfiles=$newdlfiles 11101e19dfac4Smrg newdlprefiles= 11102e19dfac4Smrg for lib in $dlprefiles; do 11103e19dfac4Smrg case $lib in 11104e19dfac4Smrg *.la) 11105e19dfac4Smrg # Only pass preopened files to the pseudo-archive (for 11106e19dfac4Smrg # eventual linking with the app. that links it) if we 11107e19dfac4Smrg # didn't already link the preopened objects directly into 11108e19dfac4Smrg # the library: 11109e19dfac4Smrg func_basename "$lib" 111107cea3689Smrg name=$func_basename_result 111117cea3689Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 11112e19dfac4Smrg test -z "$libdir" && \ 111137cea3689Smrg func_fatal_error "'$lib' is not a valid libtool archive" 11114313a12fdSmrg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 11115e19dfac4Smrg ;; 11116e19dfac4Smrg esac 11117e19dfac4Smrg done 111187cea3689Smrg dlprefiles=$newdlprefiles 11119e19dfac4Smrg else 11120e19dfac4Smrg newdlfiles= 11121e19dfac4Smrg for lib in $dlfiles; do 11122e19dfac4Smrg case $lib in 111237cea3689Smrg [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 11124e19dfac4Smrg *) abs=`pwd`"/$lib" ;; 11125e19dfac4Smrg esac 11126313a12fdSmrg func_append newdlfiles " $abs" 11127e19dfac4Smrg done 111287cea3689Smrg dlfiles=$newdlfiles 11129e19dfac4Smrg newdlprefiles= 11130e19dfac4Smrg for lib in $dlprefiles; do 11131e19dfac4Smrg case $lib in 111327cea3689Smrg [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 11133e19dfac4Smrg *) abs=`pwd`"/$lib" ;; 11134e19dfac4Smrg esac 11135313a12fdSmrg func_append newdlprefiles " $abs" 11136e19dfac4Smrg done 111377cea3689Smrg dlprefiles=$newdlprefiles 11138e19dfac4Smrg fi 11139e19dfac4Smrg $RM $output 11140e19dfac4Smrg # place dlname in correct position for cygwin 11141313a12fdSmrg # In fact, it would be nice if we could use this code for all target 11142313a12fdSmrg # systems that can't hard-code library paths into their executables 11143313a12fdSmrg # and that have no shared library path variable independent of PATH, 11144313a12fdSmrg # but it turns out we can't easily determine that from inspecting 11145313a12fdSmrg # libtool variables, so we have to hard-code the OSs to which it 11146313a12fdSmrg # applies here; at the moment, that means platforms that use the PE 11147313a12fdSmrg # object format with DLL files. See the long comment at the top of 11148313a12fdSmrg # tests/bindir.at for full details. 11149e19dfac4Smrg tdlname=$dlname 11150e19dfac4Smrg case $host,$output,$installed,$module,$dlname in 11151313a12fdSmrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 11152313a12fdSmrg # If a -bindir argument was supplied, place the dll there. 111537cea3689Smrg if test -n "$bindir"; then 11154313a12fdSmrg func_relative_path "$install_libdir" "$bindir" 111557cea3689Smrg tdlname=$func_relative_path_result/$dlname 11156313a12fdSmrg else 11157313a12fdSmrg # Otherwise fall back on heuristic. 11158313a12fdSmrg tdlname=../bin/$dlname 11159313a12fdSmrg fi 11160313a12fdSmrg ;; 11161e19dfac4Smrg esac 11162e19dfac4Smrg $ECHO > $output "\ 11163e19dfac4Smrg# $outputname - a libtool library file 111647cea3689Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 11165e19dfac4Smrg# 11166e19dfac4Smrg# Please DO NOT delete this file! 11167e19dfac4Smrg# It is necessary for linking the library. 1116827702724Smrg 11169e19dfac4Smrg# The name that we can dlopen(3). 11170e19dfac4Smrgdlname='$tdlname' 1117127702724Smrg 11172e19dfac4Smrg# Names of this library. 11173e19dfac4Smrglibrary_names='$library_names' 1117427702724Smrg 11175e19dfac4Smrg# The name of the static archive. 11176e19dfac4Smrgold_library='$old_library' 1117727702724Smrg 111787cea3689Smrg# Linker flags that cannot go in dependency_libs. 11179e19dfac4Smrginherited_linker_flags='$new_inherited_linker_flags' 1118027702724Smrg 11181e19dfac4Smrg# Libraries that this one depends upon. 11182e19dfac4Smrgdependency_libs='$dependency_libs' 1118327702724Smrg 11184e19dfac4Smrg# Names of additional weak libraries provided by this library 11185e19dfac4Smrgweak_library_names='$weak_libs' 1118627702724Smrg 11187e19dfac4Smrg# Version information for $libname. 11188e19dfac4Smrgcurrent=$current 11189e19dfac4Smrgage=$age 11190e19dfac4Smrgrevision=$revision 1119127702724Smrg 11192e19dfac4Smrg# Is this an already installed library? 11193e19dfac4Smrginstalled=$installed 1119427702724Smrg 11195e19dfac4Smrg# Should we warn about portability when linking against -modules? 11196e19dfac4Smrgshouldnotlink=$module 1119727702724Smrg 11198e19dfac4Smrg# Files to dlopen/dlpreopen 11199e19dfac4Smrgdlopen='$dlfiles' 11200e19dfac4Smrgdlpreopen='$dlprefiles' 1120127702724Smrg 11202e19dfac4Smrg# Directory that this library needs to be installed in: 11203e19dfac4Smrglibdir='$install_libdir'" 112047cea3689Smrg if test no,yes = "$installed,$need_relink"; then 11205e19dfac4Smrg $ECHO >> $output "\ 11206e19dfac4Smrgrelink_command=\"$relink_command\"" 11207e19dfac4Smrg fi 11208e19dfac4Smrg done 11209e19dfac4Smrg } 1121027702724Smrg 11211e19dfac4Smrg # Do a symbolic link so that the libtool archive can be found in 11212e19dfac4Smrg # LD_LIBRARY_PATH before the program is installed. 11213e19dfac4Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 11214e19dfac4Smrg ;; 11215e19dfac4Smrg esac 11216e19dfac4Smrg exit $EXIT_SUCCESS 11217e19dfac4Smrg} 1121827702724Smrg 112197cea3689Smrgif test link = "$opt_mode" || test relink = "$opt_mode"; then 112207cea3689Smrg func_mode_link ${1+"$@"} 112217cea3689Smrgfi 1122227702724Smrg 1122327702724Smrg 11224e19dfac4Smrg# func_mode_uninstall arg... 11225e19dfac4Smrgfunc_mode_uninstall () 11226e19dfac4Smrg{ 112277cea3689Smrg $debug_cmd 112287cea3689Smrg 112297cea3689Smrg RM=$nonopt 1123027702724Smrg files= 112317cea3689Smrg rmforce=false 1123227702724Smrg exit_status=0 1123327702724Smrg 1123427702724Smrg # This variable tells wrapper scripts just to set variables rather 1123527702724Smrg # than running their programs. 112367cea3689Smrg libtool_install_magic=$magic 1123727702724Smrg 1123827702724Smrg for arg 1123927702724Smrg do 1124027702724Smrg case $arg in 112417cea3689Smrg -f) func_append RM " $arg"; rmforce=: ;; 11242313a12fdSmrg -*) func_append RM " $arg" ;; 11243313a12fdSmrg *) func_append files " $arg" ;; 1124427702724Smrg esac 1124527702724Smrg done 1124627702724Smrg 11247e19dfac4Smrg test -z "$RM" && \ 11248e19dfac4Smrg func_fatal_help "you must specify an RM program" 1124927702724Smrg 1125027702724Smrg rmdirs= 1125127702724Smrg 1125227702724Smrg for file in $files; do 11253e19dfac4Smrg func_dirname "$file" "" "." 112547cea3689Smrg dir=$func_dirname_result 112557cea3689Smrg if test . = "$dir"; then 112567cea3689Smrg odir=$objdir 1125727702724Smrg else 112587cea3689Smrg odir=$dir/$objdir 1125927702724Smrg fi 11260e19dfac4Smrg func_basename "$file" 112617cea3689Smrg name=$func_basename_result 112627cea3689Smrg test uninstall = "$opt_mode" && odir=$dir 1126327702724Smrg 11264313a12fdSmrg # Remember odir for removal later, being careful to avoid duplicates 112657cea3689Smrg if test clean = "$opt_mode"; then 1126627702724Smrg case " $rmdirs " in 11267313a12fdSmrg *" $odir "*) ;; 11268313a12fdSmrg *) func_append rmdirs " $odir" ;; 1126927702724Smrg esac 1127027702724Smrg fi 1127127702724Smrg 1127227702724Smrg # Don't error if the file doesn't exist and rm -f was used. 11273e19dfac4Smrg if { test -L "$file"; } >/dev/null 2>&1 || 11274e19dfac4Smrg { test -h "$file"; } >/dev/null 2>&1 || 11275e19dfac4Smrg test -f "$file"; then 1127627702724Smrg : 1127727702724Smrg elif test -d "$file"; then 1127827702724Smrg exit_status=1 1127927702724Smrg continue 112807cea3689Smrg elif $rmforce; then 1128127702724Smrg continue 1128227702724Smrg fi 1128327702724Smrg 112847cea3689Smrg rmfiles=$file 1128527702724Smrg 1128627702724Smrg case $name in 1128727702724Smrg *.la) 1128827702724Smrg # Possibly a libtool archive, so verify it. 11289e19dfac4Smrg if func_lalib_p "$file"; then 11290e19dfac4Smrg func_source $dir/$name 1129127702724Smrg 1129227702724Smrg # Delete the libtool libraries and symlinks. 1129327702724Smrg for n in $library_names; do 11294313a12fdSmrg func_append rmfiles " $odir/$n" 1129527702724Smrg done 11296313a12fdSmrg test -n "$old_library" && func_append rmfiles " $odir/$old_library" 1129727702724Smrg 112987cea3689Smrg case $opt_mode in 1129927702724Smrg clean) 11300313a12fdSmrg case " $library_names " in 1130127702724Smrg *" $dlname "*) ;; 11302313a12fdSmrg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 1130327702724Smrg esac 11304313a12fdSmrg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 1130527702724Smrg ;; 1130627702724Smrg uninstall) 1130727702724Smrg if test -n "$library_names"; then 1130827702724Smrg # Do each command in the postuninstall commands. 113097cea3689Smrg func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' 1131027702724Smrg fi 1131127702724Smrg 1131227702724Smrg if test -n "$old_library"; then 1131327702724Smrg # Do each command in the old_postuninstall commands. 113147cea3689Smrg func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' 1131527702724Smrg fi 1131627702724Smrg # FIXME: should reinstall the best remaining shared library. 1131727702724Smrg ;; 1131827702724Smrg esac 1131927702724Smrg fi 1132027702724Smrg ;; 1132127702724Smrg 1132227702724Smrg *.lo) 1132327702724Smrg # Possibly a libtool object, so verify it. 11324e19dfac4Smrg if func_lalib_p "$file"; then 1132527702724Smrg 1132627702724Smrg # Read the .lo file 11327e19dfac4Smrg func_source $dir/$name 1132827702724Smrg 1132927702724Smrg # Add PIC object to the list of files to remove. 113307cea3689Smrg if test -n "$pic_object" && test none != "$pic_object"; then 11331313a12fdSmrg func_append rmfiles " $dir/$pic_object" 1133227702724Smrg fi 1133327702724Smrg 1133427702724Smrg # Add non-PIC object to the list of files to remove. 113357cea3689Smrg if test -n "$non_pic_object" && test none != "$non_pic_object"; then 11336313a12fdSmrg func_append rmfiles " $dir/$non_pic_object" 1133727702724Smrg fi 1133827702724Smrg fi 1133927702724Smrg ;; 1134027702724Smrg 1134127702724Smrg *) 113427cea3689Smrg if test clean = "$opt_mode"; then 1134327702724Smrg noexename=$name 1134427702724Smrg case $file in 1134527702724Smrg *.exe) 11346e19dfac4Smrg func_stripname '' '.exe' "$file" 11347e19dfac4Smrg file=$func_stripname_result 11348e19dfac4Smrg func_stripname '' '.exe' "$name" 11349e19dfac4Smrg noexename=$func_stripname_result 1135027702724Smrg # $file with .exe has already been added to rmfiles, 1135127702724Smrg # add $file without .exe 11352313a12fdSmrg func_append rmfiles " $file" 1135327702724Smrg ;; 1135427702724Smrg esac 1135527702724Smrg # Do a test to see if this is a libtool program. 11356e19dfac4Smrg if func_ltwrapper_p "$file"; then 11357e19dfac4Smrg if func_ltwrapper_executable_p "$file"; then 11358e19dfac4Smrg func_ltwrapper_scriptname "$file" 11359e19dfac4Smrg relink_command= 11360e19dfac4Smrg func_source $func_ltwrapper_scriptname_result 11361313a12fdSmrg func_append rmfiles " $func_ltwrapper_scriptname_result" 11362e19dfac4Smrg else 11363e19dfac4Smrg relink_command= 11364e19dfac4Smrg func_source $dir/$noexename 11365e19dfac4Smrg fi 1136627702724Smrg 1136727702724Smrg # note $name still contains .exe if it was in $file originally 1136827702724Smrg # as does the version of $file that was added into $rmfiles 113697cea3689Smrg func_append rmfiles " $odir/$name $odir/${name}S.$objext" 113707cea3689Smrg if test yes = "$fast_install" && test -n "$relink_command"; then 11371313a12fdSmrg func_append rmfiles " $odir/lt-$name" 1137227702724Smrg fi 113737cea3689Smrg if test "X$noexename" != "X$name"; then 113747cea3689Smrg func_append rmfiles " $odir/lt-$noexename.c" 1137527702724Smrg fi 1137627702724Smrg fi 1137727702724Smrg fi 1137827702724Smrg ;; 1137927702724Smrg esac 11380e19dfac4Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 1138127702724Smrg done 1138227702724Smrg 113837cea3689Smrg # Try to remove the $objdir's in the directories where we deleted files 1138427702724Smrg for dir in $rmdirs; do 1138527702724Smrg if test -d "$dir"; then 11386e19dfac4Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 1138727702724Smrg fi 1138827702724Smrg done 1138927702724Smrg 1139027702724Smrg exit $exit_status 11391e19dfac4Smrg} 1139227702724Smrg 113937cea3689Smrgif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then 113947cea3689Smrg func_mode_uninstall ${1+"$@"} 113957cea3689Smrgfi 1139627702724Smrg 11397313a12fdSmrgtest -z "$opt_mode" && { 113987cea3689Smrg help=$generic_help 11399e19dfac4Smrg func_fatal_help "you must specify a MODE" 11400e19dfac4Smrg} 11401e19dfac4Smrg 11402e19dfac4Smrgtest -z "$exec_cmd" && \ 114037cea3689Smrg func_fatal_help "invalid operation mode '$opt_mode'" 1140427702724Smrg 1140527702724Smrgif test -n "$exec_cmd"; then 11406e19dfac4Smrg eval exec "$exec_cmd" 1140727702724Smrg exit $EXIT_FAILURE 1140827702724Smrgfi 1140927702724Smrg 11410e19dfac4Smrgexit $exit_status 1141127702724Smrg 1141227702724Smrg 1141327702724Smrg# The TAGs below are defined such that we never get into a situation 114147cea3689Smrg# where we disable both kinds of libraries. Given conflicting 1141527702724Smrg# choices, we go for a static library, that is the most portable, 1141627702724Smrg# since we can't tell whether shared libraries were disabled because 1141727702724Smrg# the user asked for that or because the platform doesn't support 1141827702724Smrg# them. This is particularly important on AIX, because we don't 1141927702724Smrg# support having both static and shared libraries enabled at the same 1142027702724Smrg# time on that platform, so we default to a shared-only configuration. 1142127702724Smrg# If a disable-shared tag is given, we'll fallback to a static-only 1142227702724Smrg# configuration. But we'll never go from static-only to shared-only. 1142327702724Smrg 1142427702724Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 11425e19dfac4Smrgbuild_libtool_libs=no 11426e19dfac4Smrgbuild_old_libs=yes 1142727702724Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 1142827702724Smrg 1142927702724Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 11430e19dfac4Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 1143127702724Smrg# ### END LIBTOOL TAG CONFIG: disable-static 1143227702724Smrg 1143327702724Smrg# Local Variables: 1143427702724Smrg# mode:shell-script 1143527702724Smrg# sh-indentation:2 1143627702724Smrg# End: 11437