ltmain.sh revision cdce750a
19d0ccd10Smrg#! /bin/sh 29d0ccd10Smrg## DO NOT EDIT - This file generated from ./build-aux/ltmain.in 39d0ccd10Smrg## by inline-source v2014-01-03.01 4e169010aSmrg 59d0ccd10Smrg# libtool (GNU libtool) 2.4.6 69d0ccd10Smrg# Provide generalized library-building support services. 7e169010aSmrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 8e169010aSmrg 99d0ccd10Smrg# Copyright (C) 1996-2015 Free Software Foundation, Inc. 10e169010aSmrg# This is free software; see the source for copying conditions. There is NO 11e169010aSmrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12e169010aSmrg 13e169010aSmrg# GNU Libtool is free software; you can redistribute it and/or modify 147914d74bSmrg# it under the terms of the GNU General Public License as published by 157914d74bSmrg# the Free Software Foundation; either version 2 of the License, or 167914d74bSmrg# (at your option) any later version. 177914d74bSmrg# 18e169010aSmrg# As a special exception to the GNU General Public License, 19e169010aSmrg# if you distribute this file as part of a program or library that 20e169010aSmrg# is built using GNU Libtool, you may include this file under the 21e169010aSmrg# same distribution terms that you use for the rest of that program. 22e169010aSmrg# 23e169010aSmrg# GNU Libtool is distributed in the hope that it will be useful, but 247914d74bSmrg# WITHOUT ANY WARRANTY; without even the implied warranty of 257914d74bSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 267914d74bSmrg# General Public License for more details. 277914d74bSmrg# 287914d74bSmrg# You should have received a copy of the GNU General Public License 299d0ccd10Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 30e169010aSmrg 31e169010aSmrg 32e8ead290SmrgPROGRAM=libtool 33e169010aSmrgPACKAGE=libtool 34cdce750aSmrgVERSION=2.4.6 359d0ccd10Smrgpackage_revision=2.4.6 36e169010aSmrg 379d0ccd10Smrg 389d0ccd10Smrg## ------ ## 399d0ccd10Smrg## Usage. ## 409d0ccd10Smrg## ------ ## 419d0ccd10Smrg 429d0ccd10Smrg# Run './libtool --help' for help with using this script from the 439d0ccd10Smrg# command line. 449d0ccd10Smrg 459d0ccd10Smrg 469d0ccd10Smrg## ------------------------------- ## 479d0ccd10Smrg## User overridable command paths. ## 489d0ccd10Smrg## ------------------------------- ## 499d0ccd10Smrg 509d0ccd10Smrg# After configure completes, it has a better idea of some of the 519d0ccd10Smrg# shell tools we need than the defaults used by the functions shared 529d0ccd10Smrg# with bootstrap, so set those here where they can still be over- 539d0ccd10Smrg# ridden by the user, but otherwise take precedence. 549d0ccd10Smrg 559d0ccd10Smrg: ${AUTOCONF="autoconf"} 569d0ccd10Smrg: ${AUTOMAKE="automake"} 579d0ccd10Smrg 589d0ccd10Smrg 599d0ccd10Smrg## -------------------------- ## 609d0ccd10Smrg## Source external libraries. ## 619d0ccd10Smrg## -------------------------- ## 629d0ccd10Smrg 639d0ccd10Smrg# Much of our low-level functionality needs to be sourced from external 649d0ccd10Smrg# libraries, which are installed to $pkgauxdir. 659d0ccd10Smrg 669d0ccd10Smrg# Set a version string for this script. 679d0ccd10Smrgscriptversion=2015-01-20.17; # UTC 689d0ccd10Smrg 699d0ccd10Smrg# General shell script boiler plate, and helper functions. 709d0ccd10Smrg# Written by Gary V. Vaughan, 2004 719d0ccd10Smrg 729d0ccd10Smrg# Copyright (C) 2004-2015 Free Software Foundation, Inc. 739d0ccd10Smrg# This is free software; see the source for copying conditions. There is NO 749d0ccd10Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 759d0ccd10Smrg 769d0ccd10Smrg# This program is free software; you can redistribute it and/or modify 779d0ccd10Smrg# it under the terms of the GNU General Public License as published by 789d0ccd10Smrg# the Free Software Foundation; either version 3 of the License, or 799d0ccd10Smrg# (at your option) any later version. 809d0ccd10Smrg 819d0ccd10Smrg# As a special exception to the GNU General Public License, if you distribute 829d0ccd10Smrg# this file as part of a program or library that is built using GNU Libtool, 839d0ccd10Smrg# you may include this file under the same distribution terms that you use 849d0ccd10Smrg# for the rest of that program. 859d0ccd10Smrg 869d0ccd10Smrg# This program is distributed in the hope that it will be useful, 879d0ccd10Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 889d0ccd10Smrg# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU 899d0ccd10Smrg# General Public License for more details. 909d0ccd10Smrg 919d0ccd10Smrg# You should have received a copy of the GNU General Public License 929d0ccd10Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 939d0ccd10Smrg 949d0ccd10Smrg# Please report bugs or propose patches to gary@gnu.org. 959d0ccd10Smrg 969d0ccd10Smrg 979d0ccd10Smrg## ------ ## 989d0ccd10Smrg## Usage. ## 999d0ccd10Smrg## ------ ## 1009d0ccd10Smrg 1019d0ccd10Smrg# Evaluate this file near the top of your script to gain access to 1029d0ccd10Smrg# the functions and variables defined here: 1039d0ccd10Smrg# 1049d0ccd10Smrg# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh 1059d0ccd10Smrg# 1069d0ccd10Smrg# If you need to override any of the default environment variable 1079d0ccd10Smrg# settings, do that before evaluating this file. 1089d0ccd10Smrg 1099d0ccd10Smrg 1109d0ccd10Smrg## -------------------- ## 1119d0ccd10Smrg## Shell normalisation. ## 1129d0ccd10Smrg## -------------------- ## 1139d0ccd10Smrg 1149d0ccd10Smrg# Some shells need a little help to be as Bourne compatible as possible. 1159d0ccd10Smrg# Before doing anything else, make sure all that help has been provided! 1169d0ccd10Smrg 1179d0ccd10SmrgDUALCASE=1; export DUALCASE # for MKS sh 1189d0ccd10Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : 119e169010aSmrg emulate sh 120e169010aSmrg NULLCMD=: 1219d0ccd10Smrg # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which 122e169010aSmrg # is contrary to our usage. Disable this feature. 123e169010aSmrg alias -g '${1+"$@"}'='"$@"' 124e169010aSmrg setopt NO_GLOB_SUBST 125e169010aSmrgelse 1269d0ccd10Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac 127e169010aSmrgfi 128e8ead290Smrg 1299d0ccd10Smrg# NLS nuisances: We save the old values in case they are required later. 1309d0ccd10Smrg_G_user_locale= 1319d0ccd10Smrg_G_safe_locale= 1329d0ccd10Smrgfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 133e169010aSmrgdo 1349d0ccd10Smrg eval "if test set = \"\${$_G_var+set}\"; then 1359d0ccd10Smrg save_$_G_var=\$$_G_var 1369d0ccd10Smrg $_G_var=C 1379d0ccd10Smrg export $_G_var 1389d0ccd10Smrg _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" 1399d0ccd10Smrg _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" 140e169010aSmrg fi" 141e169010aSmrgdone 142e169010aSmrg 1439d0ccd10Smrg# CDPATH. 1449d0ccd10Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 145e169010aSmrg 1469d0ccd10Smrg# Make sure IFS has a sensible default 1479d0ccd10Smrgsp=' ' 1489d0ccd10Smrgnl=' 1499d0ccd10Smrg' 1509d0ccd10SmrgIFS="$sp $nl" 1519d0ccd10Smrg 1529d0ccd10Smrg# There are apparently some retarded systems that use ';' as a PATH separator! 1539d0ccd10Smrgif test "${PATH_SEPARATOR+set}" != set; then 1549d0ccd10Smrg PATH_SEPARATOR=: 1559d0ccd10Smrg (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { 1569d0ccd10Smrg (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || 1579d0ccd10Smrg PATH_SEPARATOR=';' 1589d0ccd10Smrg } 1599d0ccd10Smrgfi 160e169010aSmrg 161e169010aSmrg 162e169010aSmrg 1639d0ccd10Smrg## ------------------------- ## 1649d0ccd10Smrg## Locate command utilities. ## 1659d0ccd10Smrg## ------------------------- ## 1669d0ccd10Smrg 1679d0ccd10Smrg 1689d0ccd10Smrg# func_executable_p FILE 1699d0ccd10Smrg# ---------------------- 1709d0ccd10Smrg# Check that FILE is an executable regular file. 1719d0ccd10Smrgfunc_executable_p () 1729d0ccd10Smrg{ 1739d0ccd10Smrg test -f "$1" && test -x "$1" 1749d0ccd10Smrg} 1759d0ccd10Smrg 1769d0ccd10Smrg 1779d0ccd10Smrg# func_path_progs PROGS_LIST CHECK_FUNC [PATH] 1789d0ccd10Smrg# -------------------------------------------- 1799d0ccd10Smrg# Search for either a program that responds to --version with output 1809d0ccd10Smrg# containing "GNU", or else returned by CHECK_FUNC otherwise, by 1819d0ccd10Smrg# trying all the directories in PATH with each of the elements of 1829d0ccd10Smrg# PROGS_LIST. 1839d0ccd10Smrg# 1849d0ccd10Smrg# CHECK_FUNC should accept the path to a candidate program, and 1859d0ccd10Smrg# set $func_check_prog_result if it truncates its output less than 1869d0ccd10Smrg# $_G_path_prog_max characters. 1879d0ccd10Smrgfunc_path_progs () 1889d0ccd10Smrg{ 1899d0ccd10Smrg _G_progs_list=$1 1909d0ccd10Smrg _G_check_func=$2 1919d0ccd10Smrg _G_PATH=${3-"$PATH"} 1929d0ccd10Smrg 1939d0ccd10Smrg _G_path_prog_max=0 1949d0ccd10Smrg _G_path_prog_found=false 1959d0ccd10Smrg _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} 1969d0ccd10Smrg for _G_dir in $_G_PATH; do 1979d0ccd10Smrg IFS=$_G_save_IFS 1989d0ccd10Smrg test -z "$_G_dir" && _G_dir=. 1999d0ccd10Smrg for _G_prog_name in $_G_progs_list; do 2009d0ccd10Smrg for _exeext in '' .EXE; do 2019d0ccd10Smrg _G_path_prog=$_G_dir/$_G_prog_name$_exeext 2029d0ccd10Smrg func_executable_p "$_G_path_prog" || continue 2039d0ccd10Smrg case `"$_G_path_prog" --version 2>&1` in 2049d0ccd10Smrg *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; 2059d0ccd10Smrg *) $_G_check_func $_G_path_prog 2069d0ccd10Smrg func_path_progs_result=$func_check_prog_result 2079d0ccd10Smrg ;; 2089d0ccd10Smrg esac 2099d0ccd10Smrg $_G_path_prog_found && break 3 2109d0ccd10Smrg done 2119d0ccd10Smrg done 2129d0ccd10Smrg done 2139d0ccd10Smrg IFS=$_G_save_IFS 2149d0ccd10Smrg test -z "$func_path_progs_result" && { 2159d0ccd10Smrg echo "no acceptable sed could be found in \$PATH" >&2 2169d0ccd10Smrg exit 1 2179d0ccd10Smrg } 2189d0ccd10Smrg} 2199d0ccd10Smrg 2209d0ccd10Smrg 2219d0ccd10Smrg# We want to be able to use the functions in this file before configure 2229d0ccd10Smrg# has figured out where the best binaries are kept, which means we have 2239d0ccd10Smrg# to search for them ourselves - except when the results are already set 2249d0ccd10Smrg# where we skip the searches. 2259d0ccd10Smrg 2269d0ccd10Smrg# Unless the user overrides by setting SED, search the path for either GNU 2279d0ccd10Smrg# sed, or the sed that truncates its output the least. 2289d0ccd10Smrgtest -z "$SED" && { 2299d0ccd10Smrg _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ 2309d0ccd10Smrg for _G_i in 1 2 3 4 5 6 7; do 2319d0ccd10Smrg _G_sed_script=$_G_sed_script$nl$_G_sed_script 2329d0ccd10Smrg done 2339d0ccd10Smrg echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed 2349d0ccd10Smrg _G_sed_script= 2359d0ccd10Smrg 2369d0ccd10Smrg func_check_prog_sed () 2379d0ccd10Smrg { 2389d0ccd10Smrg _G_path_prog=$1 2399d0ccd10Smrg 2409d0ccd10Smrg _G_count=0 2419d0ccd10Smrg printf 0123456789 >conftest.in 2429d0ccd10Smrg while : 2439d0ccd10Smrg do 2449d0ccd10Smrg cat conftest.in conftest.in >conftest.tmp 2459d0ccd10Smrg mv conftest.tmp conftest.in 2469d0ccd10Smrg cp conftest.in conftest.nl 2479d0ccd10Smrg echo '' >> conftest.nl 2489d0ccd10Smrg "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break 2499d0ccd10Smrg diff conftest.out conftest.nl >/dev/null 2>&1 || break 2509d0ccd10Smrg _G_count=`expr $_G_count + 1` 2519d0ccd10Smrg if test "$_G_count" -gt "$_G_path_prog_max"; then 2529d0ccd10Smrg # Best one so far, save it but keep looking for a better one 2539d0ccd10Smrg func_check_prog_result=$_G_path_prog 2549d0ccd10Smrg _G_path_prog_max=$_G_count 2559d0ccd10Smrg fi 2569d0ccd10Smrg # 10*(2^10) chars as input seems more than enough 2579d0ccd10Smrg test 10 -lt "$_G_count" && break 2589d0ccd10Smrg done 2599d0ccd10Smrg rm -f conftest.in conftest.tmp conftest.nl conftest.out 2609d0ccd10Smrg } 2619d0ccd10Smrg 2629d0ccd10Smrg func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin 2639d0ccd10Smrg rm -f conftest.sed 2649d0ccd10Smrg SED=$func_path_progs_result 2659d0ccd10Smrg} 2669d0ccd10Smrg 2679d0ccd10Smrg 2689d0ccd10Smrg# Unless the user overrides by setting GREP, search the path for either GNU 2699d0ccd10Smrg# grep, or the grep that truncates its output the least. 2709d0ccd10Smrgtest -z "$GREP" && { 2719d0ccd10Smrg func_check_prog_grep () 2729d0ccd10Smrg { 2739d0ccd10Smrg _G_path_prog=$1 2749d0ccd10Smrg 2759d0ccd10Smrg _G_count=0 2769d0ccd10Smrg _G_path_prog_max=0 2779d0ccd10Smrg printf 0123456789 >conftest.in 2789d0ccd10Smrg while : 2799d0ccd10Smrg do 2809d0ccd10Smrg cat conftest.in conftest.in >conftest.tmp 2819d0ccd10Smrg mv conftest.tmp conftest.in 2829d0ccd10Smrg cp conftest.in conftest.nl 2839d0ccd10Smrg echo 'GREP' >> conftest.nl 2849d0ccd10Smrg "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break 2859d0ccd10Smrg diff conftest.out conftest.nl >/dev/null 2>&1 || break 2869d0ccd10Smrg _G_count=`expr $_G_count + 1` 2879d0ccd10Smrg if test "$_G_count" -gt "$_G_path_prog_max"; then 2889d0ccd10Smrg # Best one so far, save it but keep looking for a better one 2899d0ccd10Smrg func_check_prog_result=$_G_path_prog 2909d0ccd10Smrg _G_path_prog_max=$_G_count 2919d0ccd10Smrg fi 2929d0ccd10Smrg # 10*(2^10) chars as input seems more than enough 2939d0ccd10Smrg test 10 -lt "$_G_count" && break 2949d0ccd10Smrg done 2959d0ccd10Smrg rm -f conftest.in conftest.tmp conftest.nl conftest.out 2969d0ccd10Smrg } 2979d0ccd10Smrg 2989d0ccd10Smrg func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin 2999d0ccd10Smrg GREP=$func_path_progs_result 3009d0ccd10Smrg} 3019d0ccd10Smrg 3029d0ccd10Smrg 3039d0ccd10Smrg## ------------------------------- ## 3049d0ccd10Smrg## User overridable command paths. ## 3059d0ccd10Smrg## ------------------------------- ## 3069d0ccd10Smrg 3079d0ccd10Smrg# All uppercase variable names are used for environment variables. These 3089d0ccd10Smrg# variables can be overridden by the user before calling a script that 3099d0ccd10Smrg# uses them if a suitable command of that name is not already available 3109d0ccd10Smrg# in the command search PATH. 311e169010aSmrg 312e169010aSmrg: ${CP="cp -f"} 3139d0ccd10Smrg: ${ECHO="printf %s\n"} 3149d0ccd10Smrg: ${EGREP="$GREP -E"} 3159d0ccd10Smrg: ${FGREP="$GREP -F"} 3169d0ccd10Smrg: ${LN_S="ln -s"} 317e169010aSmrg: ${MAKE="make"} 318e169010aSmrg: ${MKDIR="mkdir"} 319e169010aSmrg: ${MV="mv -f"} 320e169010aSmrg: ${RM="rm -f"} 321e169010aSmrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 322e169010aSmrg 323e169010aSmrg 3249d0ccd10Smrg## -------------------- ## 3259d0ccd10Smrg## Useful sed snippets. ## 3269d0ccd10Smrg## -------------------- ## 327c63293b5Smrg 3289d0ccd10Smrgsed_dirname='s|/[^/]*$||' 3299d0ccd10Smrgsed_basename='s|^.*/||' 330c63293b5Smrg 3319d0ccd10Smrg# Sed substitution that helps us do robust quoting. It backslashifies 3329d0ccd10Smrg# metacharacters that are still active within double-quoted strings. 3339d0ccd10Smrgsed_quote_subst='s|\([`"$\\]\)|\\\1|g' 334c63293b5Smrg 3359d0ccd10Smrg# Same as above, but do not quote variable references. 3369d0ccd10Smrgsed_double_quote_subst='s/\(["`\\]\)/\\\1/g' 337c63293b5Smrg 3389d0ccd10Smrg# Sed substitution that turns a string into a regex matching for the 3399d0ccd10Smrg# string literally. 3409d0ccd10Smrgsed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' 341c63293b5Smrg 3429d0ccd10Smrg# Sed substitution that converts a w32 file name or path 3439d0ccd10Smrg# that contains forward slashes, into one that contains 3449d0ccd10Smrg# (escaped) backslashes. A very naive implementation. 3459d0ccd10Smrgsed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 3469d0ccd10Smrg 3479d0ccd10Smrg# Re-'\' parameter expansions in output of sed_double_quote_subst that 3489d0ccd10Smrg# were '\'-ed in input to the same. If an odd number of '\' preceded a 3499d0ccd10Smrg# '$' in input to sed_double_quote_subst, that '$' was protected from 3509d0ccd10Smrg# expansion. Since each input '\' is now two '\'s, look for any number 3519d0ccd10Smrg# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. 3529d0ccd10Smrg_G_bs='\\' 3539d0ccd10Smrg_G_bs2='\\\\' 3549d0ccd10Smrg_G_bs4='\\\\\\\\' 3559d0ccd10Smrg_G_dollar='\$' 3569d0ccd10Smrgsed_double_backslash="\ 3579d0ccd10Smrg s/$_G_bs4/&\\ 3589d0ccd10Smrg/g 3599d0ccd10Smrg s/^$_G_bs2$_G_dollar/$_G_bs&/ 3609d0ccd10Smrg s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g 3619d0ccd10Smrg s/\n//g" 362c63293b5Smrg 363e169010aSmrg 3649d0ccd10Smrg## ----------------- ## 3659d0ccd10Smrg## Global variables. ## 3669d0ccd10Smrg## ----------------- ## 3677914d74bSmrg 3689d0ccd10Smrg# Except for the global variables explicitly listed below, the following 3699d0ccd10Smrg# functions in the '^func_' namespace, and the '^require_' namespace 3709d0ccd10Smrg# variables initialised in the 'Resource management' section, sourcing 3719d0ccd10Smrg# this file will not pollute your global namespace with anything 3729d0ccd10Smrg# else. There's no portable way to scope variables in Bourne shell 3739d0ccd10Smrg# though, so actually running these functions will sometimes place 3749d0ccd10Smrg# results into a variable named after the function, and often use 3759d0ccd10Smrg# temporary variables in the '^_G_' namespace. If you are careful to 3769d0ccd10Smrg# avoid using those namespaces casually in your sourcing script, things 3779d0ccd10Smrg# should continue to work as you expect. And, of course, you can freely 3789d0ccd10Smrg# overwrite any of the functions or variables defined here before 3799d0ccd10Smrg# calling anything to customize them. 380e8ead290Smrg 3819d0ccd10SmrgEXIT_SUCCESS=0 3829d0ccd10SmrgEXIT_FAILURE=1 3839d0ccd10SmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 3849d0ccd10SmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 385e8ead290Smrg 3869d0ccd10Smrg# Allow overriding, eg assuming that you follow the convention of 3879d0ccd10Smrg# putting '$debug_cmd' at the start of all your functions, you can get 3889d0ccd10Smrg# bash to show function call trace with: 3899d0ccd10Smrg# 3909d0ccd10Smrg# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name 3919d0ccd10Smrgdebug_cmd=${debug_cmd-":"} 3929d0ccd10Smrgexit_cmd=: 393e8ead290Smrg 3949d0ccd10Smrg# By convention, finish your script with: 3959d0ccd10Smrg# 3969d0ccd10Smrg# exit $exit_status 3979d0ccd10Smrg# 3989d0ccd10Smrg# so that you can set exit_status to non-zero if you want to indicate 3999d0ccd10Smrg# something went wrong during execution without actually bailing out at 4009d0ccd10Smrg# the point of failure. 4019d0ccd10Smrgexit_status=$EXIT_SUCCESS 402e8ead290Smrg 4039d0ccd10Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 4049d0ccd10Smrg# is ksh but when the shell is invoked as "sh" and the current value of 4059d0ccd10Smrg# the _XPG environment variable is not equal to 1 (one), the special 4069d0ccd10Smrg# positional parameter $0, within a function call, is the name of the 4079d0ccd10Smrg# function. 4089d0ccd10Smrgprogpath=$0 4097914d74bSmrg 4109d0ccd10Smrg# The name of this program. 4119d0ccd10Smrgprogname=`$ECHO "$progpath" |$SED "$sed_basename"` 4127914d74bSmrg 4139d0ccd10Smrg# Make sure we have an absolute progpath for reexecution: 414e169010aSmrgcase $progpath in 415e169010aSmrg [\\/]*|[A-Za-z]:\\*) ;; 416e169010aSmrg *[\\/]*) 4179d0ccd10Smrg progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` 418e169010aSmrg progdir=`cd "$progdir" && pwd` 4199d0ccd10Smrg progpath=$progdir/$progname 420e169010aSmrg ;; 421e169010aSmrg *) 4229d0ccd10Smrg _G_IFS=$IFS 423e6d5e4e0Smrg IFS=${PATH_SEPARATOR-:} 424e169010aSmrg for progdir in $PATH; do 4259d0ccd10Smrg IFS=$_G_IFS 426e169010aSmrg test -x "$progdir/$progname" && break 427e169010aSmrg done 4289d0ccd10Smrg IFS=$_G_IFS 429e169010aSmrg test -n "$progdir" || progdir=`pwd` 4309d0ccd10Smrg progpath=$progdir/$progname 431e169010aSmrg ;; 432e169010aSmrgesac 4337914d74bSmrg 434e169010aSmrg 4359d0ccd10Smrg## ----------------- ## 4369d0ccd10Smrg## Standard options. ## 4379d0ccd10Smrg## ----------------- ## 438c63293b5Smrg 4399d0ccd10Smrg# The following options affect the operation of the functions defined 4409d0ccd10Smrg# below, and should be set appropriately depending on run-time para- 4419d0ccd10Smrg# meters passed on the command line. 442e169010aSmrg 443e169010aSmrgopt_dry_run=false 444e169010aSmrgopt_quiet=false 445e169010aSmrgopt_verbose=false 446e169010aSmrg 4479d0ccd10Smrg# Categories 'all' and 'none' are always available. Append any others 4489d0ccd10Smrg# you will pass as the first argument to func_warning from your own 4499d0ccd10Smrg# code. 4509d0ccd10Smrgwarning_categories= 4517914d74bSmrg 4529d0ccd10Smrg# By default, display warnings according to 'opt_warning_types'. Set 4539d0ccd10Smrg# 'warning_func' to ':' to elide all warnings, or func_fatal_error to 4549d0ccd10Smrg# treat the next displayed warning as a fatal error. 4559d0ccd10Smrgwarning_func=func_warn_and_continue 4567914d74bSmrg 4579d0ccd10Smrg# Set to 'all' to display all warnings, 'none' to suppress all 4589d0ccd10Smrg# warnings, or a space delimited list of some subset of 4599d0ccd10Smrg# 'warning_categories' to display only the listed warnings. 4609d0ccd10Smrgopt_warning_types=all 4617914d74bSmrg 462e8ead290Smrg 4639d0ccd10Smrg## -------------------- ## 4649d0ccd10Smrg## Resource management. ## 4659d0ccd10Smrg## -------------------- ## 4667914d74bSmrg 4679d0ccd10Smrg# This section contains definitions for functions that each ensure a 4689d0ccd10Smrg# particular resource (a file, or a non-empty configuration variable for 4699d0ccd10Smrg# example) is available, and if appropriate to extract default values 4709d0ccd10Smrg# from pertinent package files. Call them using their associated 4719d0ccd10Smrg# 'require_*' variable to ensure that they are executed, at most, once. 4729d0ccd10Smrg# 4739d0ccd10Smrg# It's entirely deliberate that calling these functions can set 4749d0ccd10Smrg# variables that don't obey the namespace limitations obeyed by the rest 4759d0ccd10Smrg# of this file, in order that that they be as useful as possible to 4769d0ccd10Smrg# callers. 4777914d74bSmrg 4787914d74bSmrg 4799d0ccd10Smrg# require_term_colors 4809d0ccd10Smrg# ------------------- 4819d0ccd10Smrg# Allow display of bold text on terminals that support it. 4829d0ccd10Smrgrequire_term_colors=func_require_term_colors 4839d0ccd10Smrgfunc_require_term_colors () 484e169010aSmrg{ 4859d0ccd10Smrg $debug_cmd 4869d0ccd10Smrg 4879d0ccd10Smrg test -t 1 && { 4889d0ccd10Smrg # COLORTERM and USE_ANSI_COLORS environment variables take 4899d0ccd10Smrg # precedence, because most terminfo databases neglect to describe 4909d0ccd10Smrg # whether color sequences are supported. 4919d0ccd10Smrg test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} 4929d0ccd10Smrg 4939d0ccd10Smrg if test 1 = "$USE_ANSI_COLORS"; then 4949d0ccd10Smrg # Standard ANSI escape sequences 4959d0ccd10Smrg tc_reset='[0m' 4969d0ccd10Smrg tc_bold='[1m'; tc_standout='[7m' 4979d0ccd10Smrg tc_red='[31m'; tc_green='[32m' 4989d0ccd10Smrg tc_blue='[34m'; tc_cyan='[36m' 4999d0ccd10Smrg else 5009d0ccd10Smrg # Otherwise trust the terminfo database after all. 5019d0ccd10Smrg test -n "`tput sgr0 2>/dev/null`" && { 5029d0ccd10Smrg tc_reset=`tput sgr0` 5039d0ccd10Smrg test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` 5049d0ccd10Smrg tc_standout=$tc_bold 5059d0ccd10Smrg test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` 5069d0ccd10Smrg test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` 5079d0ccd10Smrg test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` 5089d0ccd10Smrg test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` 5099d0ccd10Smrg test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` 5109d0ccd10Smrg } 5119d0ccd10Smrg fi 5129d0ccd10Smrg } 5137914d74bSmrg 5149d0ccd10Smrg require_term_colors=: 515e169010aSmrg} 5167914d74bSmrg 5177914d74bSmrg 5189d0ccd10Smrg## ----------------- ## 5199d0ccd10Smrg## Function library. ## 5209d0ccd10Smrg## ----------------- ## 5219d0ccd10Smrg 5229d0ccd10Smrg# This section contains a variety of useful functions to call in your 5239d0ccd10Smrg# scripts. Take note of the portable wrappers for features provided by 5249d0ccd10Smrg# some modern shells, which will fall back to slower equivalents on 5259d0ccd10Smrg# less featureful shells. 5269d0ccd10Smrg 5279d0ccd10Smrg 5289d0ccd10Smrg# func_append VAR VALUE 5299d0ccd10Smrg# --------------------- 5309d0ccd10Smrg# Append VALUE onto the existing contents of VAR. 5319d0ccd10Smrg 5329d0ccd10Smrg # We should try to minimise forks, especially on Windows where they are 5339d0ccd10Smrg # unreasonably slow, so skip the feature probes when bash or zsh are 5349d0ccd10Smrg # being used: 5359d0ccd10Smrg if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then 5369d0ccd10Smrg : ${_G_HAVE_ARITH_OP="yes"} 5379d0ccd10Smrg : ${_G_HAVE_XSI_OPS="yes"} 5389d0ccd10Smrg # The += operator was introduced in bash 3.1 5399d0ccd10Smrg case $BASH_VERSION in 5409d0ccd10Smrg [12].* | 3.0 | 3.0*) ;; 5419d0ccd10Smrg *) 5429d0ccd10Smrg : ${_G_HAVE_PLUSEQ_OP="yes"} 5439d0ccd10Smrg ;; 5449d0ccd10Smrg esac 5459d0ccd10Smrg fi 5469d0ccd10Smrg 5479d0ccd10Smrg # _G_HAVE_PLUSEQ_OP 5489d0ccd10Smrg # Can be empty, in which case the shell is probed, "yes" if += is 5499d0ccd10Smrg # useable or anything else if it does not work. 5509d0ccd10Smrg test -z "$_G_HAVE_PLUSEQ_OP" \ 5519d0ccd10Smrg && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ 5529d0ccd10Smrg && _G_HAVE_PLUSEQ_OP=yes 5539d0ccd10Smrg 5549d0ccd10Smrgif test yes = "$_G_HAVE_PLUSEQ_OP" 5559d0ccd10Smrgthen 5569d0ccd10Smrg # This is an XSI compatible shell, allowing a faster implementation... 5579d0ccd10Smrg eval 'func_append () 5589d0ccd10Smrg { 5599d0ccd10Smrg $debug_cmd 5609d0ccd10Smrg 5619d0ccd10Smrg eval "$1+=\$2" 5629d0ccd10Smrg }' 5639d0ccd10Smrgelse 5649d0ccd10Smrg # ...otherwise fall back to using expr, which is often a shell builtin. 5659d0ccd10Smrg func_append () 5669d0ccd10Smrg { 5679d0ccd10Smrg $debug_cmd 5689d0ccd10Smrg 5699d0ccd10Smrg eval "$1=\$$1\$2" 5709d0ccd10Smrg } 5719d0ccd10Smrgfi 5729d0ccd10Smrg 5739d0ccd10Smrg 5749d0ccd10Smrg# func_append_quoted VAR VALUE 5759d0ccd10Smrg# ---------------------------- 5769d0ccd10Smrg# Quote VALUE and append to the end of shell variable VAR, separated 5779d0ccd10Smrg# by a space. 5789d0ccd10Smrgif test yes = "$_G_HAVE_PLUSEQ_OP"; then 5799d0ccd10Smrg eval 'func_append_quoted () 5809d0ccd10Smrg { 5819d0ccd10Smrg $debug_cmd 5829d0ccd10Smrg 5839d0ccd10Smrg func_quote_for_eval "$2" 5849d0ccd10Smrg eval "$1+=\\ \$func_quote_for_eval_result" 5859d0ccd10Smrg }' 5869d0ccd10Smrgelse 5879d0ccd10Smrg func_append_quoted () 5889d0ccd10Smrg { 5899d0ccd10Smrg $debug_cmd 5909d0ccd10Smrg 5919d0ccd10Smrg func_quote_for_eval "$2" 5929d0ccd10Smrg eval "$1=\$$1\\ \$func_quote_for_eval_result" 5939d0ccd10Smrg } 5949d0ccd10Smrgfi 5959d0ccd10Smrg 5969d0ccd10Smrg 5979d0ccd10Smrg# func_append_uniq VAR VALUE 5989d0ccd10Smrg# -------------------------- 5999d0ccd10Smrg# Append unique VALUE onto the existing contents of VAR, assuming 6009d0ccd10Smrg# entries are delimited by the first character of VALUE. For example: 6019d0ccd10Smrg# 6029d0ccd10Smrg# func_append_uniq options " --another-option option-argument" 6039d0ccd10Smrg# 6049d0ccd10Smrg# will only append to $options if " --another-option option-argument " 6059d0ccd10Smrg# is not already present somewhere in $options already (note spaces at 6069d0ccd10Smrg# each end implied by leading space in second argument). 6079d0ccd10Smrgfunc_append_uniq () 6089d0ccd10Smrg{ 6099d0ccd10Smrg $debug_cmd 6109d0ccd10Smrg 6119d0ccd10Smrg eval _G_current_value='`$ECHO $'$1'`' 6129d0ccd10Smrg _G_delim=`expr "$2" : '\(.\)'` 6139d0ccd10Smrg 6149d0ccd10Smrg case $_G_delim$_G_current_value$_G_delim in 6159d0ccd10Smrg *"$2$_G_delim"*) ;; 6169d0ccd10Smrg *) func_append "$@" ;; 6179d0ccd10Smrg esac 6189d0ccd10Smrg} 6199d0ccd10Smrg 6209d0ccd10Smrg 6219d0ccd10Smrg# func_arith TERM... 6229d0ccd10Smrg# ------------------ 6239d0ccd10Smrg# Set func_arith_result to the result of evaluating TERMs. 6249d0ccd10Smrg test -z "$_G_HAVE_ARITH_OP" \ 6259d0ccd10Smrg && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ 6269d0ccd10Smrg && _G_HAVE_ARITH_OP=yes 6279d0ccd10Smrg 6289d0ccd10Smrgif test yes = "$_G_HAVE_ARITH_OP"; then 6299d0ccd10Smrg eval 'func_arith () 6309d0ccd10Smrg { 6319d0ccd10Smrg $debug_cmd 6329d0ccd10Smrg 6339d0ccd10Smrg func_arith_result=$(( $* )) 6349d0ccd10Smrg }' 6359d0ccd10Smrgelse 6369d0ccd10Smrg func_arith () 6379d0ccd10Smrg { 6389d0ccd10Smrg $debug_cmd 6399d0ccd10Smrg 6409d0ccd10Smrg func_arith_result=`expr "$@"` 6419d0ccd10Smrg } 6429d0ccd10Smrgfi 6439d0ccd10Smrg 6449d0ccd10Smrg 6459d0ccd10Smrg# func_basename FILE 6469d0ccd10Smrg# ------------------ 6479d0ccd10Smrg# Set func_basename_result to FILE with everything up to and including 6489d0ccd10Smrg# the last / stripped. 6499d0ccd10Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 6509d0ccd10Smrg # If this shell supports suffix pattern removal, then use it to avoid 6519d0ccd10Smrg # forking. Hide the definitions single quotes in case the shell chokes 6529d0ccd10Smrg # on unsupported syntax... 6539d0ccd10Smrg _b='func_basename_result=${1##*/}' 6549d0ccd10Smrg _d='case $1 in 6559d0ccd10Smrg */*) func_dirname_result=${1%/*}$2 ;; 6569d0ccd10Smrg * ) func_dirname_result=$3 ;; 6579d0ccd10Smrg esac' 6589d0ccd10Smrg 6599d0ccd10Smrgelse 6609d0ccd10Smrg # ...otherwise fall back to using sed. 6619d0ccd10Smrg _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' 6629d0ccd10Smrg _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` 6639d0ccd10Smrg if test "X$func_dirname_result" = "X$1"; then 6649d0ccd10Smrg func_dirname_result=$3 6659d0ccd10Smrg else 6669d0ccd10Smrg func_append func_dirname_result "$2" 6679d0ccd10Smrg fi' 6689d0ccd10Smrgfi 6699d0ccd10Smrg 6709d0ccd10Smrgeval 'func_basename () 6719d0ccd10Smrg{ 6729d0ccd10Smrg $debug_cmd 6739d0ccd10Smrg 6749d0ccd10Smrg '"$_b"' 6759d0ccd10Smrg}' 6769d0ccd10Smrg 6779d0ccd10Smrg 6789d0ccd10Smrg# func_dirname FILE APPEND NONDIR_REPLACEMENT 6799d0ccd10Smrg# ------------------------------------------- 6809d0ccd10Smrg# Compute the dirname of FILE. If nonempty, add APPEND to the result, 6819d0ccd10Smrg# otherwise set result to NONDIR_REPLACEMENT. 6829d0ccd10Smrgeval 'func_dirname () 6839d0ccd10Smrg{ 6849d0ccd10Smrg $debug_cmd 6859d0ccd10Smrg 6869d0ccd10Smrg '"$_d"' 6879d0ccd10Smrg}' 6889d0ccd10Smrg 6899d0ccd10Smrg 6909d0ccd10Smrg# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT 6919d0ccd10Smrg# -------------------------------------------------------- 6929d0ccd10Smrg# Perform func_basename and func_dirname in a single function 6939d0ccd10Smrg# call: 6949d0ccd10Smrg# dirname: Compute the dirname of FILE. If nonempty, 6959d0ccd10Smrg# add APPEND to the result, otherwise set result 6969d0ccd10Smrg# to NONDIR_REPLACEMENT. 6979d0ccd10Smrg# value returned in "$func_dirname_result" 6989d0ccd10Smrg# basename: Compute filename of FILE. 6999d0ccd10Smrg# value retuned in "$func_basename_result" 7009d0ccd10Smrg# For efficiency, we do not delegate to the functions above but instead 7019d0ccd10Smrg# duplicate the functionality here. 7029d0ccd10Smrgeval 'func_dirname_and_basename () 7039d0ccd10Smrg{ 7049d0ccd10Smrg $debug_cmd 7059d0ccd10Smrg 7069d0ccd10Smrg '"$_b"' 7079d0ccd10Smrg '"$_d"' 7089d0ccd10Smrg}' 7099d0ccd10Smrg 7109d0ccd10Smrg 7119d0ccd10Smrg# func_echo ARG... 7129d0ccd10Smrg# ---------------- 7139d0ccd10Smrg# Echo program name prefixed message. 7149d0ccd10Smrgfunc_echo () 7159d0ccd10Smrg{ 7169d0ccd10Smrg $debug_cmd 7179d0ccd10Smrg 7189d0ccd10Smrg _G_message=$* 7199d0ccd10Smrg 7209d0ccd10Smrg func_echo_IFS=$IFS 7219d0ccd10Smrg IFS=$nl 7229d0ccd10Smrg for _G_line in $_G_message; do 7239d0ccd10Smrg IFS=$func_echo_IFS 7249d0ccd10Smrg $ECHO "$progname: $_G_line" 7259d0ccd10Smrg done 7269d0ccd10Smrg IFS=$func_echo_IFS 7279d0ccd10Smrg} 7289d0ccd10Smrg 7299d0ccd10Smrg 7309d0ccd10Smrg# func_echo_all ARG... 7319d0ccd10Smrg# -------------------- 7329d0ccd10Smrg# Invoke $ECHO with all args, space-separated. 7339d0ccd10Smrgfunc_echo_all () 7349d0ccd10Smrg{ 7359d0ccd10Smrg $ECHO "$*" 7369d0ccd10Smrg} 7379d0ccd10Smrg 7389d0ccd10Smrg 7399d0ccd10Smrg# func_echo_infix_1 INFIX ARG... 7409d0ccd10Smrg# ------------------------------ 7419d0ccd10Smrg# Echo program name, followed by INFIX on the first line, with any 7429d0ccd10Smrg# additional lines not showing INFIX. 7439d0ccd10Smrgfunc_echo_infix_1 () 7449d0ccd10Smrg{ 7459d0ccd10Smrg $debug_cmd 7469d0ccd10Smrg 7479d0ccd10Smrg $require_term_colors 7489d0ccd10Smrg 7499d0ccd10Smrg _G_infix=$1; shift 7509d0ccd10Smrg _G_indent=$_G_infix 7519d0ccd10Smrg _G_prefix="$progname: $_G_infix: " 7529d0ccd10Smrg _G_message=$* 7539d0ccd10Smrg 7549d0ccd10Smrg # Strip color escape sequences before counting printable length 7559d0ccd10Smrg for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" 7569d0ccd10Smrg do 7579d0ccd10Smrg test -n "$_G_tc" && { 7589d0ccd10Smrg _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` 7599d0ccd10Smrg _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` 7609d0ccd10Smrg } 7619d0ccd10Smrg done 7629d0ccd10Smrg _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes 7639d0ccd10Smrg 7649d0ccd10Smrg func_echo_infix_1_IFS=$IFS 7659d0ccd10Smrg IFS=$nl 7669d0ccd10Smrg for _G_line in $_G_message; do 7679d0ccd10Smrg IFS=$func_echo_infix_1_IFS 7689d0ccd10Smrg $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 7699d0ccd10Smrg _G_prefix=$_G_indent 7709d0ccd10Smrg done 7719d0ccd10Smrg IFS=$func_echo_infix_1_IFS 7729d0ccd10Smrg} 7739d0ccd10Smrg 7749d0ccd10Smrg 7759d0ccd10Smrg# func_error ARG... 7769d0ccd10Smrg# ----------------- 7779d0ccd10Smrg# Echo program name prefixed message to standard error. 7789d0ccd10Smrgfunc_error () 7799d0ccd10Smrg{ 7809d0ccd10Smrg $debug_cmd 7819d0ccd10Smrg 7829d0ccd10Smrg $require_term_colors 7839d0ccd10Smrg 7849d0ccd10Smrg func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 7859d0ccd10Smrg} 7869d0ccd10Smrg 7879d0ccd10Smrg 7889d0ccd10Smrg# func_fatal_error ARG... 7899d0ccd10Smrg# ----------------------- 7909d0ccd10Smrg# Echo program name prefixed message to standard error, and exit. 7919d0ccd10Smrgfunc_fatal_error () 7929d0ccd10Smrg{ 7939d0ccd10Smrg $debug_cmd 7949d0ccd10Smrg 7959d0ccd10Smrg func_error "$*" 7969d0ccd10Smrg exit $EXIT_FAILURE 7979d0ccd10Smrg} 7989d0ccd10Smrg 7999d0ccd10Smrg 8009d0ccd10Smrg# func_grep EXPRESSION FILENAME 8019d0ccd10Smrg# ----------------------------- 802e169010aSmrg# Check whether EXPRESSION matches any line of FILENAME, without output. 803e169010aSmrgfunc_grep () 804e169010aSmrg{ 8059d0ccd10Smrg $debug_cmd 8069d0ccd10Smrg 807e169010aSmrg $GREP "$1" "$2" >/dev/null 2>&1 808e169010aSmrg} 809e169010aSmrg 810e169010aSmrg 8119d0ccd10Smrg# func_len STRING 8129d0ccd10Smrg# --------------- 8139d0ccd10Smrg# Set func_len_result to the length of STRING. STRING may not 8149d0ccd10Smrg# start with a hyphen. 8159d0ccd10Smrg test -z "$_G_HAVE_XSI_OPS" \ 8169d0ccd10Smrg && (eval 'x=a/b/c; 8179d0ccd10Smrg test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 8189d0ccd10Smrg && _G_HAVE_XSI_OPS=yes 8199d0ccd10Smrg 8209d0ccd10Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 8219d0ccd10Smrg eval 'func_len () 8229d0ccd10Smrg { 8239d0ccd10Smrg $debug_cmd 8249d0ccd10Smrg 8259d0ccd10Smrg func_len_result=${#1} 8269d0ccd10Smrg }' 8279d0ccd10Smrgelse 8289d0ccd10Smrg func_len () 8299d0ccd10Smrg { 8309d0ccd10Smrg $debug_cmd 8319d0ccd10Smrg 8329d0ccd10Smrg func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` 8339d0ccd10Smrg } 8349d0ccd10Smrgfi 8359d0ccd10Smrg 8369d0ccd10Smrg 8379d0ccd10Smrg# func_mkdir_p DIRECTORY-PATH 8389d0ccd10Smrg# --------------------------- 839e169010aSmrg# Make sure the entire path to DIRECTORY-PATH is available. 840e169010aSmrgfunc_mkdir_p () 841e169010aSmrg{ 8429d0ccd10Smrg $debug_cmd 8439d0ccd10Smrg 8449d0ccd10Smrg _G_directory_path=$1 8459d0ccd10Smrg _G_dir_list= 846e169010aSmrg 8479d0ccd10Smrg if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then 848e169010aSmrg 8499d0ccd10Smrg # Protect directory names starting with '-' 8509d0ccd10Smrg case $_G_directory_path in 8519d0ccd10Smrg -*) _G_directory_path=./$_G_directory_path ;; 852e169010aSmrg esac 853e169010aSmrg 854e169010aSmrg # While some portion of DIR does not yet exist... 8559d0ccd10Smrg while test ! -d "$_G_directory_path"; do 856e169010aSmrg # ...make a list in topmost first order. Use a colon delimited 857e169010aSmrg # list incase some portion of path contains whitespace. 8589d0ccd10Smrg _G_dir_list=$_G_directory_path:$_G_dir_list 859e169010aSmrg 860e169010aSmrg # If the last portion added has no slash in it, the list is done 8619d0ccd10Smrg case $_G_directory_path in */*) ;; *) break ;; esac 862e169010aSmrg 863e169010aSmrg # ...otherwise throw away the child directory and loop 8649d0ccd10Smrg _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` 865e169010aSmrg done 8669d0ccd10Smrg _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` 867e169010aSmrg 8689d0ccd10Smrg func_mkdir_p_IFS=$IFS; IFS=: 8699d0ccd10Smrg for _G_dir in $_G_dir_list; do 8709d0ccd10Smrg IFS=$func_mkdir_p_IFS 8719d0ccd10Smrg # mkdir can fail with a 'File exist' error if two processes 872e169010aSmrg # try to create one of the directories concurrently. Don't 873e169010aSmrg # stop in that case! 8749d0ccd10Smrg $MKDIR "$_G_dir" 2>/dev/null || : 875e169010aSmrg done 8769d0ccd10Smrg IFS=$func_mkdir_p_IFS 877e169010aSmrg 878e169010aSmrg # Bail out if we (or some other process) failed to create a directory. 8799d0ccd10Smrg test -d "$_G_directory_path" || \ 8809d0ccd10Smrg func_fatal_error "Failed to create '$1'" 881e169010aSmrg fi 882e169010aSmrg} 8837914d74bSmrg 8847914d74bSmrg 8859d0ccd10Smrg# func_mktempdir [BASENAME] 8869d0ccd10Smrg# ------------------------- 8877914d74bSmrg# Make a temporary directory that won't clash with other running 8887914d74bSmrg# libtool processes, and avoids race conditions if possible. If 8899d0ccd10Smrg# given, BASENAME is the basename for that directory. 8907914d74bSmrgfunc_mktempdir () 8917914d74bSmrg{ 8929d0ccd10Smrg $debug_cmd 8939d0ccd10Smrg 8949d0ccd10Smrg _G_template=${TMPDIR-/tmp}/${1-$progname} 8957914d74bSmrg 8969d0ccd10Smrg if test : = "$opt_dry_run"; then 8977914d74bSmrg # Return a directory name, but don't create it in dry-run mode 8989d0ccd10Smrg _G_tmpdir=$_G_template-$$ 8997914d74bSmrg else 9007914d74bSmrg 9017914d74bSmrg # If mktemp works, use that first and foremost 9029d0ccd10Smrg _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` 9037914d74bSmrg 9049d0ccd10Smrg if test ! -d "$_G_tmpdir"; then 905e169010aSmrg # Failing that, at least try and use $RANDOM to avoid a race 9069d0ccd10Smrg _G_tmpdir=$_G_template-${RANDOM-0}$$ 9077914d74bSmrg 9089d0ccd10Smrg func_mktempdir_umask=`umask` 909e169010aSmrg umask 0077 9109d0ccd10Smrg $MKDIR "$_G_tmpdir" 9119d0ccd10Smrg umask $func_mktempdir_umask 9127914d74bSmrg fi 9137914d74bSmrg 9147914d74bSmrg # If we're not in dry-run mode, bomb out on failure 9159d0ccd10Smrg test -d "$_G_tmpdir" || \ 9169d0ccd10Smrg func_fatal_error "cannot create temporary directory '$_G_tmpdir'" 9177914d74bSmrg fi 9187914d74bSmrg 9199d0ccd10Smrg $ECHO "$_G_tmpdir" 9207914d74bSmrg} 9217914d74bSmrg 9227914d74bSmrg 9239d0ccd10Smrg# func_normal_abspath PATH 9249d0ccd10Smrg# ------------------------ 9259d0ccd10Smrg# Remove doubled-up and trailing slashes, "." path components, 9269d0ccd10Smrg# and cancel out any ".." path components in PATH after making 9279d0ccd10Smrg# it an absolute path. 9289d0ccd10Smrgfunc_normal_abspath () 9297914d74bSmrg{ 9309d0ccd10Smrg $debug_cmd 931e169010aSmrg 9329d0ccd10Smrg # These SED scripts presuppose an absolute path with a trailing slash. 9339d0ccd10Smrg _G_pathcar='s|^/\([^/]*\).*$|\1|' 9349d0ccd10Smrg _G_pathcdr='s|^/[^/]*||' 9359d0ccd10Smrg _G_removedotparts=':dotsl 9369d0ccd10Smrg s|/\./|/|g 9379d0ccd10Smrg t dotsl 9389d0ccd10Smrg s|/\.$|/|' 9399d0ccd10Smrg _G_collapseslashes='s|/\{1,\}|/|g' 9409d0ccd10Smrg _G_finalslash='s|/*$|/|' 9419d0ccd10Smrg 9429d0ccd10Smrg # Start from root dir and reassemble the path. 9439d0ccd10Smrg func_normal_abspath_result= 9449d0ccd10Smrg func_normal_abspath_tpath=$1 9459d0ccd10Smrg func_normal_abspath_altnamespace= 9469d0ccd10Smrg case $func_normal_abspath_tpath in 9479d0ccd10Smrg "") 9489d0ccd10Smrg # Empty path, that just means $cwd. 9499d0ccd10Smrg func_stripname '' '/' "`pwd`" 9509d0ccd10Smrg func_normal_abspath_result=$func_stripname_result 9519d0ccd10Smrg return 9529d0ccd10Smrg ;; 9539d0ccd10Smrg # The next three entries are used to spot a run of precisely 9549d0ccd10Smrg # two leading slashes without using negated character classes; 9559d0ccd10Smrg # we take advantage of case's first-match behaviour. 9569d0ccd10Smrg ///*) 9579d0ccd10Smrg # Unusual form of absolute path, do nothing. 9589d0ccd10Smrg ;; 9599d0ccd10Smrg //*) 9609d0ccd10Smrg # Not necessarily an ordinary path; POSIX reserves leading '//' 9619d0ccd10Smrg # and for example Cygwin uses it to access remote file shares 9629d0ccd10Smrg # over CIFS/SMB, so we conserve a leading double slash if found. 9639d0ccd10Smrg func_normal_abspath_altnamespace=/ 9649d0ccd10Smrg ;; 9659d0ccd10Smrg /*) 9669d0ccd10Smrg # Absolute path, do nothing. 967e169010aSmrg ;; 968e169010aSmrg *) 9699d0ccd10Smrg # Relative path, prepend $cwd. 9709d0ccd10Smrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 9719d0ccd10Smrg ;; 9727914d74bSmrg esac 9739d0ccd10Smrg 9749d0ccd10Smrg # Cancel out all the simple stuff to save iterations. We also want 9759d0ccd10Smrg # the path to end with a slash for ease of parsing, so make sure 9769d0ccd10Smrg # there is one (and only one) here. 9779d0ccd10Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 9789d0ccd10Smrg -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` 9799d0ccd10Smrg while :; do 9809d0ccd10Smrg # Processed it all yet? 9819d0ccd10Smrg if test / = "$func_normal_abspath_tpath"; then 9829d0ccd10Smrg # If we ascended to the root using ".." the result may be empty now. 9839d0ccd10Smrg if test -z "$func_normal_abspath_result"; then 9849d0ccd10Smrg func_normal_abspath_result=/ 9859d0ccd10Smrg fi 9869d0ccd10Smrg break 9879d0ccd10Smrg fi 9889d0ccd10Smrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 9899d0ccd10Smrg -e "$_G_pathcar"` 9909d0ccd10Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 9919d0ccd10Smrg -e "$_G_pathcdr"` 9929d0ccd10Smrg # Figure out what to do with it 9939d0ccd10Smrg case $func_normal_abspath_tcomponent in 9949d0ccd10Smrg "") 9959d0ccd10Smrg # Trailing empty path component, ignore it. 9969d0ccd10Smrg ;; 9979d0ccd10Smrg ..) 9989d0ccd10Smrg # Parent dir; strip last assembled component from result. 9999d0ccd10Smrg func_dirname "$func_normal_abspath_result" 10009d0ccd10Smrg func_normal_abspath_result=$func_dirname_result 10019d0ccd10Smrg ;; 10029d0ccd10Smrg *) 10039d0ccd10Smrg # Actual path component, append it. 10049d0ccd10Smrg func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" 10059d0ccd10Smrg ;; 10069d0ccd10Smrg esac 10079d0ccd10Smrg done 10089d0ccd10Smrg # Restore leading double-slash if one was found on entry. 10099d0ccd10Smrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 10109d0ccd10Smrg} 10119d0ccd10Smrg 10129d0ccd10Smrg 10139d0ccd10Smrg# func_notquiet ARG... 10149d0ccd10Smrg# -------------------- 10159d0ccd10Smrg# Echo program name prefixed message only when not in quiet mode. 10169d0ccd10Smrgfunc_notquiet () 10179d0ccd10Smrg{ 10189d0ccd10Smrg $debug_cmd 10199d0ccd10Smrg 10209d0ccd10Smrg $opt_quiet || func_echo ${1+"$@"} 10219d0ccd10Smrg 10229d0ccd10Smrg # A bug in bash halts the script if the last line of a function 10239d0ccd10Smrg # fails when set -e is in force, so we need another command to 10249d0ccd10Smrg # work around that: 10259d0ccd10Smrg : 10269d0ccd10Smrg} 10279d0ccd10Smrg 10289d0ccd10Smrg 10299d0ccd10Smrg# func_relative_path SRCDIR DSTDIR 10309d0ccd10Smrg# -------------------------------- 10319d0ccd10Smrg# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. 10329d0ccd10Smrgfunc_relative_path () 10339d0ccd10Smrg{ 10349d0ccd10Smrg $debug_cmd 10359d0ccd10Smrg 10369d0ccd10Smrg func_relative_path_result= 10379d0ccd10Smrg func_normal_abspath "$1" 10389d0ccd10Smrg func_relative_path_tlibdir=$func_normal_abspath_result 10399d0ccd10Smrg func_normal_abspath "$2" 10409d0ccd10Smrg func_relative_path_tbindir=$func_normal_abspath_result 10419d0ccd10Smrg 10429d0ccd10Smrg # Ascend the tree starting from libdir 10439d0ccd10Smrg while :; do 10449d0ccd10Smrg # check if we have found a prefix of bindir 10459d0ccd10Smrg case $func_relative_path_tbindir in 10469d0ccd10Smrg $func_relative_path_tlibdir) 10479d0ccd10Smrg # found an exact match 10489d0ccd10Smrg func_relative_path_tcancelled= 10499d0ccd10Smrg break 10509d0ccd10Smrg ;; 10519d0ccd10Smrg $func_relative_path_tlibdir*) 10529d0ccd10Smrg # found a matching prefix 10539d0ccd10Smrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 10549d0ccd10Smrg func_relative_path_tcancelled=$func_stripname_result 10559d0ccd10Smrg if test -z "$func_relative_path_result"; then 10569d0ccd10Smrg func_relative_path_result=. 10579d0ccd10Smrg fi 10589d0ccd10Smrg break 10599d0ccd10Smrg ;; 10609d0ccd10Smrg *) 10619d0ccd10Smrg func_dirname $func_relative_path_tlibdir 10629d0ccd10Smrg func_relative_path_tlibdir=$func_dirname_result 10639d0ccd10Smrg if test -z "$func_relative_path_tlibdir"; then 10649d0ccd10Smrg # Have to descend all the way to the root! 10659d0ccd10Smrg func_relative_path_result=../$func_relative_path_result 10669d0ccd10Smrg func_relative_path_tcancelled=$func_relative_path_tbindir 10679d0ccd10Smrg break 10689d0ccd10Smrg fi 10699d0ccd10Smrg func_relative_path_result=../$func_relative_path_result 10709d0ccd10Smrg ;; 10719d0ccd10Smrg esac 10729d0ccd10Smrg done 10739d0ccd10Smrg 10749d0ccd10Smrg # Now calculate path; take care to avoid doubling-up slashes. 10759d0ccd10Smrg func_stripname '' '/' "$func_relative_path_result" 10769d0ccd10Smrg func_relative_path_result=$func_stripname_result 10779d0ccd10Smrg func_stripname '/' '/' "$func_relative_path_tcancelled" 10789d0ccd10Smrg if test -n "$func_stripname_result"; then 10799d0ccd10Smrg func_append func_relative_path_result "/$func_stripname_result" 10809d0ccd10Smrg fi 10819d0ccd10Smrg 10829d0ccd10Smrg # Normalisation. If bindir is libdir, return '.' else relative path. 10839d0ccd10Smrg if test -n "$func_relative_path_result"; then 10849d0ccd10Smrg func_stripname './' '' "$func_relative_path_result" 10859d0ccd10Smrg func_relative_path_result=$func_stripname_result 10869d0ccd10Smrg fi 10879d0ccd10Smrg 10889d0ccd10Smrg test -n "$func_relative_path_result" || func_relative_path_result=. 10899d0ccd10Smrg 10909d0ccd10Smrg : 10917914d74bSmrg} 10927914d74bSmrg 10937914d74bSmrg 10949d0ccd10Smrg# func_quote_for_eval ARG... 10959d0ccd10Smrg# -------------------------- 10969d0ccd10Smrg# Aesthetically quote ARGs to be evaled later. 10979d0ccd10Smrg# This function returns two values: 10989d0ccd10Smrg# i) func_quote_for_eval_result 10999d0ccd10Smrg# double-quoted, suitable for a subsequent eval 11009d0ccd10Smrg# ii) func_quote_for_eval_unquoted_result 11019d0ccd10Smrg# has all characters that are still active within double 11029d0ccd10Smrg# quotes backslashified. 11039d0ccd10Smrgfunc_quote_for_eval () 11049d0ccd10Smrg{ 11059d0ccd10Smrg $debug_cmd 11069d0ccd10Smrg 11079d0ccd10Smrg func_quote_for_eval_unquoted_result= 11089d0ccd10Smrg func_quote_for_eval_result= 11099d0ccd10Smrg while test 0 -lt $#; do 11109d0ccd10Smrg case $1 in 11119d0ccd10Smrg *[\\\`\"\$]*) 11129d0ccd10Smrg _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; 11139d0ccd10Smrg *) 11149d0ccd10Smrg _G_unquoted_arg=$1 ;; 11159d0ccd10Smrg esac 11169d0ccd10Smrg if test -n "$func_quote_for_eval_unquoted_result"; then 11179d0ccd10Smrg func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" 11189d0ccd10Smrg else 11199d0ccd10Smrg func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" 11209d0ccd10Smrg fi 11219d0ccd10Smrg 11229d0ccd10Smrg case $_G_unquoted_arg in 11239d0ccd10Smrg # Double-quote args containing shell metacharacters to delay 11249d0ccd10Smrg # word splitting, command substitution and variable expansion 11259d0ccd10Smrg # for a subsequent eval. 11269d0ccd10Smrg # Many Bourne shells cannot handle close brackets correctly 11279d0ccd10Smrg # in scan sets, so we specify it separately. 11289d0ccd10Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 11299d0ccd10Smrg _G_quoted_arg=\"$_G_unquoted_arg\" 11309d0ccd10Smrg ;; 11319d0ccd10Smrg *) 11329d0ccd10Smrg _G_quoted_arg=$_G_unquoted_arg 11339d0ccd10Smrg ;; 11349d0ccd10Smrg esac 11359d0ccd10Smrg 11369d0ccd10Smrg if test -n "$func_quote_for_eval_result"; then 11379d0ccd10Smrg func_append func_quote_for_eval_result " $_G_quoted_arg" 11389d0ccd10Smrg else 11399d0ccd10Smrg func_append func_quote_for_eval_result "$_G_quoted_arg" 11409d0ccd10Smrg fi 11419d0ccd10Smrg shift 11429d0ccd10Smrg done 11439d0ccd10Smrg} 11449d0ccd10Smrg 11459d0ccd10Smrg 11469d0ccd10Smrg# func_quote_for_expand ARG 11479d0ccd10Smrg# ------------------------- 1148e169010aSmrg# Aesthetically quote ARG to be evaled later; same as above, 1149e169010aSmrg# but do not quote variable references. 1150e169010aSmrgfunc_quote_for_expand () 11517914d74bSmrg{ 11529d0ccd10Smrg $debug_cmd 11539d0ccd10Smrg 1154e169010aSmrg case $1 in 1155e169010aSmrg *[\\\`\"]*) 11569d0ccd10Smrg _G_arg=`$ECHO "$1" | $SED \ 11579d0ccd10Smrg -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; 11587914d74bSmrg *) 11599d0ccd10Smrg _G_arg=$1 ;; 1160e169010aSmrg esac 1161e169010aSmrg 11629d0ccd10Smrg case $_G_arg in 1163e169010aSmrg # Double-quote args containing shell metacharacters to delay 1164e169010aSmrg # word splitting and command substitution for a subsequent eval. 1165e169010aSmrg # Many Bourne shells cannot handle close brackets correctly 1166e169010aSmrg # in scan sets, so we specify it separately. 1167e169010aSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 11689d0ccd10Smrg _G_arg=\"$_G_arg\" 1169e169010aSmrg ;; 1170e169010aSmrg esac 1171e169010aSmrg 11729d0ccd10Smrg func_quote_for_expand_result=$_G_arg 11739d0ccd10Smrg} 11749d0ccd10Smrg 11759d0ccd10Smrg 11769d0ccd10Smrg# func_stripname PREFIX SUFFIX NAME 11779d0ccd10Smrg# --------------------------------- 11789d0ccd10Smrg# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. 11799d0ccd10Smrg# PREFIX and SUFFIX must not contain globbing or regex special 11809d0ccd10Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading 11819d0ccd10Smrg# dot (in which case that matches only a dot). 11829d0ccd10Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 11839d0ccd10Smrg eval 'func_stripname () 11849d0ccd10Smrg { 11859d0ccd10Smrg $debug_cmd 11869d0ccd10Smrg 11879d0ccd10Smrg # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are 11889d0ccd10Smrg # positional parameters, so assign one to ordinary variable first. 11899d0ccd10Smrg func_stripname_result=$3 11909d0ccd10Smrg func_stripname_result=${func_stripname_result#"$1"} 11919d0ccd10Smrg func_stripname_result=${func_stripname_result%"$2"} 11929d0ccd10Smrg }' 11939d0ccd10Smrgelse 11949d0ccd10Smrg func_stripname () 11959d0ccd10Smrg { 11969d0ccd10Smrg $debug_cmd 11979d0ccd10Smrg 11989d0ccd10Smrg case $2 in 11999d0ccd10Smrg .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; 12009d0ccd10Smrg *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; 12019d0ccd10Smrg esac 12029d0ccd10Smrg } 12039d0ccd10Smrgfi 12049d0ccd10Smrg 12059d0ccd10Smrg 12069d0ccd10Smrg# func_show_eval CMD [FAIL_EXP] 12079d0ccd10Smrg# ----------------------------- 12089d0ccd10Smrg# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 12099d0ccd10Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 12109d0ccd10Smrg# is given, then evaluate it. 12119d0ccd10Smrgfunc_show_eval () 12129d0ccd10Smrg{ 12139d0ccd10Smrg $debug_cmd 12149d0ccd10Smrg 12159d0ccd10Smrg _G_cmd=$1 12169d0ccd10Smrg _G_fail_exp=${2-':'} 12179d0ccd10Smrg 12189d0ccd10Smrg func_quote_for_expand "$_G_cmd" 12199d0ccd10Smrg eval "func_notquiet $func_quote_for_expand_result" 12209d0ccd10Smrg 12219d0ccd10Smrg $opt_dry_run || { 12229d0ccd10Smrg eval "$_G_cmd" 12239d0ccd10Smrg _G_status=$? 12249d0ccd10Smrg if test 0 -ne "$_G_status"; then 12259d0ccd10Smrg eval "(exit $_G_status); $_G_fail_exp" 12269d0ccd10Smrg fi 12279d0ccd10Smrg } 12289d0ccd10Smrg} 12299d0ccd10Smrg 12309d0ccd10Smrg 12319d0ccd10Smrg# func_show_eval_locale CMD [FAIL_EXP] 12329d0ccd10Smrg# ------------------------------------ 12339d0ccd10Smrg# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 12349d0ccd10Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 12359d0ccd10Smrg# is given, then evaluate it. Use the saved locale for evaluation. 12369d0ccd10Smrgfunc_show_eval_locale () 12379d0ccd10Smrg{ 12389d0ccd10Smrg $debug_cmd 12399d0ccd10Smrg 12409d0ccd10Smrg _G_cmd=$1 12419d0ccd10Smrg _G_fail_exp=${2-':'} 12429d0ccd10Smrg 12439d0ccd10Smrg $opt_quiet || { 12449d0ccd10Smrg func_quote_for_expand "$_G_cmd" 12459d0ccd10Smrg eval "func_echo $func_quote_for_expand_result" 12469d0ccd10Smrg } 12479d0ccd10Smrg 12489d0ccd10Smrg $opt_dry_run || { 12499d0ccd10Smrg eval "$_G_user_locale 12509d0ccd10Smrg $_G_cmd" 12519d0ccd10Smrg _G_status=$? 12529d0ccd10Smrg eval "$_G_safe_locale" 12539d0ccd10Smrg if test 0 -ne "$_G_status"; then 12549d0ccd10Smrg eval "(exit $_G_status); $_G_fail_exp" 12559d0ccd10Smrg fi 12569d0ccd10Smrg } 12579d0ccd10Smrg} 12589d0ccd10Smrg 12599d0ccd10Smrg 12609d0ccd10Smrg# func_tr_sh 12619d0ccd10Smrg# ---------- 12629d0ccd10Smrg# Turn $1 into a string suitable for a shell variable name. 12639d0ccd10Smrg# Result is stored in $func_tr_sh_result. All characters 12649d0ccd10Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 12659d0ccd10Smrg# if $1 begins with a digit, a '_' is prepended as well. 12669d0ccd10Smrgfunc_tr_sh () 12679d0ccd10Smrg{ 12689d0ccd10Smrg $debug_cmd 12699d0ccd10Smrg 12709d0ccd10Smrg case $1 in 12719d0ccd10Smrg [0-9]* | *[!a-zA-Z0-9_]*) 12729d0ccd10Smrg func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` 12739d0ccd10Smrg ;; 12749d0ccd10Smrg * ) 12759d0ccd10Smrg func_tr_sh_result=$1 12769d0ccd10Smrg ;; 12779d0ccd10Smrg esac 12789d0ccd10Smrg} 12799d0ccd10Smrg 12809d0ccd10Smrg 12819d0ccd10Smrg# func_verbose ARG... 12829d0ccd10Smrg# ------------------- 12839d0ccd10Smrg# Echo program name prefixed message in verbose mode only. 12849d0ccd10Smrgfunc_verbose () 12859d0ccd10Smrg{ 12869d0ccd10Smrg $debug_cmd 12879d0ccd10Smrg 12889d0ccd10Smrg $opt_verbose && func_echo "$*" 12899d0ccd10Smrg 12909d0ccd10Smrg : 12919d0ccd10Smrg} 12929d0ccd10Smrg 12939d0ccd10Smrg 12949d0ccd10Smrg# func_warn_and_continue ARG... 12959d0ccd10Smrg# ----------------------------- 12969d0ccd10Smrg# Echo program name prefixed warning message to standard error. 12979d0ccd10Smrgfunc_warn_and_continue () 12989d0ccd10Smrg{ 12999d0ccd10Smrg $debug_cmd 13009d0ccd10Smrg 13019d0ccd10Smrg $require_term_colors 13029d0ccd10Smrg 13039d0ccd10Smrg func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 13049d0ccd10Smrg} 13059d0ccd10Smrg 13069d0ccd10Smrg 13079d0ccd10Smrg# func_warning CATEGORY ARG... 13089d0ccd10Smrg# ---------------------------- 13099d0ccd10Smrg# Echo program name prefixed warning message to standard error. Warning 13109d0ccd10Smrg# messages can be filtered according to CATEGORY, where this function 13119d0ccd10Smrg# elides messages where CATEGORY is not listed in the global variable 13129d0ccd10Smrg# 'opt_warning_types'. 13139d0ccd10Smrgfunc_warning () 13149d0ccd10Smrg{ 13159d0ccd10Smrg $debug_cmd 13169d0ccd10Smrg 13179d0ccd10Smrg # CATEGORY must be in the warning_categories list! 13189d0ccd10Smrg case " $warning_categories " in 13199d0ccd10Smrg *" $1 "*) ;; 13209d0ccd10Smrg *) func_internal_error "invalid warning category '$1'" ;; 13219d0ccd10Smrg esac 13229d0ccd10Smrg 13239d0ccd10Smrg _G_category=$1 13249d0ccd10Smrg shift 13259d0ccd10Smrg 13269d0ccd10Smrg case " $opt_warning_types " in 13279d0ccd10Smrg *" $_G_category "*) $warning_func ${1+"$@"} ;; 13289d0ccd10Smrg esac 13297914d74bSmrg} 13307914d74bSmrg 13317914d74bSmrg 13329d0ccd10Smrg# func_sort_ver VER1 VER2 13339d0ccd10Smrg# ----------------------- 13349d0ccd10Smrg# 'sort -V' is not generally available. 13359d0ccd10Smrg# Note this deviates from the version comparison in automake 13369d0ccd10Smrg# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a 13379d0ccd10Smrg# but this should suffice as we won't be specifying old 13389d0ccd10Smrg# version formats or redundant trailing .0 in bootstrap.conf. 13399d0ccd10Smrg# If we did want full compatibility then we should probably 13409d0ccd10Smrg# use m4_version_compare from autoconf. 13419d0ccd10Smrgfunc_sort_ver () 13429d0ccd10Smrg{ 13439d0ccd10Smrg $debug_cmd 13449d0ccd10Smrg 13459d0ccd10Smrg printf '%s\n%s\n' "$1" "$2" \ 13469d0ccd10Smrg | 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 13479d0ccd10Smrg} 13489d0ccd10Smrg 13499d0ccd10Smrg# func_lt_ver PREV CURR 13509d0ccd10Smrg# --------------------- 13519d0ccd10Smrg# Return true if PREV and CURR are in the correct order according to 13529d0ccd10Smrg# func_sort_ver, otherwise false. Use it like this: 13539d0ccd10Smrg# 13549d0ccd10Smrg# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." 13559d0ccd10Smrgfunc_lt_ver () 13569d0ccd10Smrg{ 13579d0ccd10Smrg $debug_cmd 13589d0ccd10Smrg 13599d0ccd10Smrg test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` 13609d0ccd10Smrg} 13619d0ccd10Smrg 13629d0ccd10Smrg 13639d0ccd10Smrg# Local variables: 13649d0ccd10Smrg# mode: shell-script 13659d0ccd10Smrg# sh-indentation: 2 13669d0ccd10Smrg# eval: (add-hook 'before-save-hook 'time-stamp) 13679d0ccd10Smrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" 13689d0ccd10Smrg# time-stamp-time-zone: "UTC" 13699d0ccd10Smrg# End: 13709d0ccd10Smrg#! /bin/sh 13719d0ccd10Smrg 13729d0ccd10Smrg# Set a version string for this script. 13739d0ccd10Smrgscriptversion=2014-01-07.03; # UTC 13749d0ccd10Smrg 13759d0ccd10Smrg# A portable, pluggable option parser for Bourne shell. 13769d0ccd10Smrg# Written by Gary V. Vaughan, 2010 13779d0ccd10Smrg 13789d0ccd10Smrg# Copyright (C) 2010-2015 Free Software Foundation, Inc. 13799d0ccd10Smrg# This is free software; see the source for copying conditions. There is NO 13809d0ccd10Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 13819d0ccd10Smrg 13829d0ccd10Smrg# This program is free software: you can redistribute it and/or modify 13839d0ccd10Smrg# it under the terms of the GNU General Public License as published by 13849d0ccd10Smrg# the Free Software Foundation, either version 3 of the License, or 13859d0ccd10Smrg# (at your option) any later version. 13869d0ccd10Smrg 13879d0ccd10Smrg# This program is distributed in the hope that it will be useful, 13889d0ccd10Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 13899d0ccd10Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13909d0ccd10Smrg# GNU General Public License for more details. 13919d0ccd10Smrg 13929d0ccd10Smrg# You should have received a copy of the GNU General Public License 13939d0ccd10Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 13949d0ccd10Smrg 13959d0ccd10Smrg# Please report bugs or propose patches to gary@gnu.org. 13969d0ccd10Smrg 13979d0ccd10Smrg 13989d0ccd10Smrg## ------ ## 13999d0ccd10Smrg## Usage. ## 14009d0ccd10Smrg## ------ ## 14019d0ccd10Smrg 14029d0ccd10Smrg# This file is a library for parsing options in your shell scripts along 14039d0ccd10Smrg# with assorted other useful supporting features that you can make use 14049d0ccd10Smrg# of too. 14059d0ccd10Smrg# 14069d0ccd10Smrg# For the simplest scripts you might need only: 14079d0ccd10Smrg# 14089d0ccd10Smrg# #!/bin/sh 14099d0ccd10Smrg# . relative/path/to/funclib.sh 14109d0ccd10Smrg# . relative/path/to/options-parser 14119d0ccd10Smrg# scriptversion=1.0 14129d0ccd10Smrg# func_options ${1+"$@"} 14139d0ccd10Smrg# eval set dummy "$func_options_result"; shift 14149d0ccd10Smrg# ...rest of your script... 14159d0ccd10Smrg# 14169d0ccd10Smrg# In order for the '--version' option to work, you will need to have a 14179d0ccd10Smrg# suitably formatted comment like the one at the top of this file 14189d0ccd10Smrg# starting with '# Written by ' and ending with '# warranty; '. 14199d0ccd10Smrg# 14209d0ccd10Smrg# For '-h' and '--help' to work, you will also need a one line 14219d0ccd10Smrg# description of your script's purpose in a comment directly above the 14229d0ccd10Smrg# '# Written by ' line, like the one at the top of this file. 14239d0ccd10Smrg# 14249d0ccd10Smrg# The default options also support '--debug', which will turn on shell 14259d0ccd10Smrg# execution tracing (see the comment above debug_cmd below for another 14269d0ccd10Smrg# use), and '--verbose' and the func_verbose function to allow your script 14279d0ccd10Smrg# to display verbose messages only when your user has specified 14289d0ccd10Smrg# '--verbose'. 14299d0ccd10Smrg# 14309d0ccd10Smrg# After sourcing this file, you can plug processing for additional 14319d0ccd10Smrg# options by amending the variables from the 'Configuration' section 14329d0ccd10Smrg# below, and following the instructions in the 'Option parsing' 14339d0ccd10Smrg# section further down. 14349d0ccd10Smrg 14359d0ccd10Smrg## -------------- ## 14369d0ccd10Smrg## Configuration. ## 14379d0ccd10Smrg## -------------- ## 14389d0ccd10Smrg 14399d0ccd10Smrg# You should override these variables in your script after sourcing this 14409d0ccd10Smrg# file so that they reflect the customisations you have added to the 14419d0ccd10Smrg# option parser. 14429d0ccd10Smrg 14439d0ccd10Smrg# The usage line for option parsing errors and the start of '-h' and 14449d0ccd10Smrg# '--help' output messages. You can embed shell variables for delayed 14459d0ccd10Smrg# expansion at the time the message is displayed, but you will need to 14469d0ccd10Smrg# quote other shell meta-characters carefully to prevent them being 14479d0ccd10Smrg# expanded when the contents are evaled. 14489d0ccd10Smrgusage='$progpath [OPTION]...' 14499d0ccd10Smrg 14509d0ccd10Smrg# Short help message in response to '-h' and '--help'. Add to this or 14519d0ccd10Smrg# override it after sourcing this library to reflect the full set of 14529d0ccd10Smrg# options your script accepts. 14539d0ccd10Smrgusage_message="\ 14549d0ccd10Smrg --debug enable verbose shell tracing 14559d0ccd10Smrg -W, --warnings=CATEGORY 14569d0ccd10Smrg report the warnings falling in CATEGORY [all] 14579d0ccd10Smrg -v, --verbose verbosely report processing 14589d0ccd10Smrg --version print version information and exit 14599d0ccd10Smrg -h, --help print short or long help message and exit 14609d0ccd10Smrg" 14619d0ccd10Smrg 14629d0ccd10Smrg# Additional text appended to 'usage_message' in response to '--help'. 14639d0ccd10Smrglong_help_message=" 14649d0ccd10SmrgWarning categories include: 14659d0ccd10Smrg 'all' show all warnings 14669d0ccd10Smrg 'none' turn off all the warnings 14679d0ccd10Smrg 'error' warnings are treated as fatal errors" 14689d0ccd10Smrg 14699d0ccd10Smrg# Help message printed before fatal option parsing errors. 14709d0ccd10Smrgfatal_help="Try '\$progname --help' for more information." 14719d0ccd10Smrg 14729d0ccd10Smrg 14739d0ccd10Smrg 14749d0ccd10Smrg## ------------------------- ## 14759d0ccd10Smrg## Hook function management. ## 14769d0ccd10Smrg## ------------------------- ## 14779d0ccd10Smrg 14789d0ccd10Smrg# This section contains functions for adding, removing, and running hooks 14799d0ccd10Smrg# to the main code. A hook is just a named list of of function, that can 14809d0ccd10Smrg# be run in order later on. 14819d0ccd10Smrg 14829d0ccd10Smrg# func_hookable FUNC_NAME 14839d0ccd10Smrg# ----------------------- 14849d0ccd10Smrg# Declare that FUNC_NAME will run hooks added with 14859d0ccd10Smrg# 'func_add_hook FUNC_NAME ...'. 14869d0ccd10Smrgfunc_hookable () 14879d0ccd10Smrg{ 14889d0ccd10Smrg $debug_cmd 14899d0ccd10Smrg 14909d0ccd10Smrg func_append hookable_fns " $1" 14919d0ccd10Smrg} 14929d0ccd10Smrg 14939d0ccd10Smrg 14949d0ccd10Smrg# func_add_hook FUNC_NAME HOOK_FUNC 14959d0ccd10Smrg# --------------------------------- 14969d0ccd10Smrg# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must 14979d0ccd10Smrg# first have been declared "hookable" by a call to 'func_hookable'. 14989d0ccd10Smrgfunc_add_hook () 14999d0ccd10Smrg{ 15009d0ccd10Smrg $debug_cmd 15019d0ccd10Smrg 15029d0ccd10Smrg case " $hookable_fns " in 15039d0ccd10Smrg *" $1 "*) ;; 15049d0ccd10Smrg *) func_fatal_error "'$1' does not accept hook functions." ;; 15059d0ccd10Smrg esac 15069d0ccd10Smrg 15079d0ccd10Smrg eval func_append ${1}_hooks '" $2"' 15089d0ccd10Smrg} 15099d0ccd10Smrg 15109d0ccd10Smrg 15119d0ccd10Smrg# func_remove_hook FUNC_NAME HOOK_FUNC 15129d0ccd10Smrg# ------------------------------------ 15139d0ccd10Smrg# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. 15149d0ccd10Smrgfunc_remove_hook () 15159d0ccd10Smrg{ 15169d0ccd10Smrg $debug_cmd 15179d0ccd10Smrg 15189d0ccd10Smrg eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' 15199d0ccd10Smrg} 15209d0ccd10Smrg 15219d0ccd10Smrg 15229d0ccd10Smrg# func_run_hooks FUNC_NAME [ARG]... 15239d0ccd10Smrg# --------------------------------- 15249d0ccd10Smrg# Run all hook functions registered to FUNC_NAME. 15259d0ccd10Smrg# It is assumed that the list of hook functions contains nothing more 15269d0ccd10Smrg# than a whitespace-delimited list of legal shell function names, and 15279d0ccd10Smrg# no effort is wasted trying to catch shell meta-characters or preserve 15289d0ccd10Smrg# whitespace. 15299d0ccd10Smrgfunc_run_hooks () 15309d0ccd10Smrg{ 15319d0ccd10Smrg $debug_cmd 15329d0ccd10Smrg 15339d0ccd10Smrg case " $hookable_fns " in 15349d0ccd10Smrg *" $1 "*) ;; 15359d0ccd10Smrg *) func_fatal_error "'$1' does not support hook funcions.n" ;; 15369d0ccd10Smrg esac 15379d0ccd10Smrg 15389d0ccd10Smrg eval _G_hook_fns=\$$1_hooks; shift 15399d0ccd10Smrg 15409d0ccd10Smrg for _G_hook in $_G_hook_fns; do 15419d0ccd10Smrg eval $_G_hook '"$@"' 15429d0ccd10Smrg 15439d0ccd10Smrg # store returned options list back into positional 15449d0ccd10Smrg # parameters for next 'cmd' execution. 15459d0ccd10Smrg eval _G_hook_result=\$${_G_hook}_result 15469d0ccd10Smrg eval set dummy "$_G_hook_result"; shift 15479d0ccd10Smrg done 15489d0ccd10Smrg 15499d0ccd10Smrg func_quote_for_eval ${1+"$@"} 15509d0ccd10Smrg func_run_hooks_result=$func_quote_for_eval_result 15519d0ccd10Smrg} 15529d0ccd10Smrg 15539d0ccd10Smrg 15549d0ccd10Smrg 15559d0ccd10Smrg## --------------- ## 15569d0ccd10Smrg## Option parsing. ## 15579d0ccd10Smrg## --------------- ## 15589d0ccd10Smrg 15599d0ccd10Smrg# In order to add your own option parsing hooks, you must accept the 15609d0ccd10Smrg# full positional parameter list in your hook function, remove any 15619d0ccd10Smrg# options that you action, and then pass back the remaining unprocessed 15629d0ccd10Smrg# options in '<hooked_function_name>_result', escaped suitably for 15639d0ccd10Smrg# 'eval'. Like this: 15649d0ccd10Smrg# 15659d0ccd10Smrg# my_options_prep () 15669d0ccd10Smrg# { 15679d0ccd10Smrg# $debug_cmd 15689d0ccd10Smrg# 15699d0ccd10Smrg# # Extend the existing usage message. 15709d0ccd10Smrg# usage_message=$usage_message' 15719d0ccd10Smrg# -s, --silent don'\''t print informational messages 15729d0ccd10Smrg# ' 15739d0ccd10Smrg# 15749d0ccd10Smrg# func_quote_for_eval ${1+"$@"} 15759d0ccd10Smrg# my_options_prep_result=$func_quote_for_eval_result 15769d0ccd10Smrg# } 15779d0ccd10Smrg# func_add_hook func_options_prep my_options_prep 15789d0ccd10Smrg# 15799d0ccd10Smrg# 15809d0ccd10Smrg# my_silent_option () 15819d0ccd10Smrg# { 15829d0ccd10Smrg# $debug_cmd 15839d0ccd10Smrg# 15849d0ccd10Smrg# # Note that for efficiency, we parse as many options as we can 15859d0ccd10Smrg# # recognise in a loop before passing the remainder back to the 15869d0ccd10Smrg# # caller on the first unrecognised argument we encounter. 15879d0ccd10Smrg# while test $# -gt 0; do 15889d0ccd10Smrg# opt=$1; shift 15899d0ccd10Smrg# case $opt in 15909d0ccd10Smrg# --silent|-s) opt_silent=: ;; 15919d0ccd10Smrg# # Separate non-argument short options: 15929d0ccd10Smrg# -s*) func_split_short_opt "$_G_opt" 15939d0ccd10Smrg# set dummy "$func_split_short_opt_name" \ 15949d0ccd10Smrg# "-$func_split_short_opt_arg" ${1+"$@"} 15959d0ccd10Smrg# shift 15969d0ccd10Smrg# ;; 15979d0ccd10Smrg# *) set dummy "$_G_opt" "$*"; shift; break ;; 15989d0ccd10Smrg# esac 15999d0ccd10Smrg# done 16009d0ccd10Smrg# 16019d0ccd10Smrg# func_quote_for_eval ${1+"$@"} 16029d0ccd10Smrg# my_silent_option_result=$func_quote_for_eval_result 16039d0ccd10Smrg# } 16049d0ccd10Smrg# func_add_hook func_parse_options my_silent_option 16059d0ccd10Smrg# 16069d0ccd10Smrg# 16079d0ccd10Smrg# my_option_validation () 16089d0ccd10Smrg# { 16099d0ccd10Smrg# $debug_cmd 16109d0ccd10Smrg# 16119d0ccd10Smrg# $opt_silent && $opt_verbose && func_fatal_help "\ 16129d0ccd10Smrg# '--silent' and '--verbose' options are mutually exclusive." 16139d0ccd10Smrg# 16149d0ccd10Smrg# func_quote_for_eval ${1+"$@"} 16159d0ccd10Smrg# my_option_validation_result=$func_quote_for_eval_result 16169d0ccd10Smrg# } 16179d0ccd10Smrg# func_add_hook func_validate_options my_option_validation 16189d0ccd10Smrg# 16199d0ccd10Smrg# You'll alse need to manually amend $usage_message to reflect the extra 16209d0ccd10Smrg# options you parse. It's preferable to append if you can, so that 16219d0ccd10Smrg# multiple option parsing hooks can be added safely. 16229d0ccd10Smrg 16239d0ccd10Smrg 16249d0ccd10Smrg# func_options [ARG]... 16259d0ccd10Smrg# --------------------- 16269d0ccd10Smrg# All the functions called inside func_options are hookable. See the 16279d0ccd10Smrg# individual implementations for details. 16289d0ccd10Smrgfunc_hookable func_options 16299d0ccd10Smrgfunc_options () 16307914d74bSmrg{ 16319d0ccd10Smrg $debug_cmd 16327914d74bSmrg 16339d0ccd10Smrg func_options_prep ${1+"$@"} 16349d0ccd10Smrg eval func_parse_options \ 16359d0ccd10Smrg ${func_options_prep_result+"$func_options_prep_result"} 16369d0ccd10Smrg eval func_validate_options \ 16379d0ccd10Smrg ${func_parse_options_result+"$func_parse_options_result"} 1638e169010aSmrg 16399d0ccd10Smrg eval func_run_hooks func_options \ 16409d0ccd10Smrg ${func_validate_options_result+"$func_validate_options_result"} 16419d0ccd10Smrg 16429d0ccd10Smrg # save modified positional parameters for caller 16439d0ccd10Smrg func_options_result=$func_run_hooks_result 16447914d74bSmrg} 16457914d74bSmrg 1646e169010aSmrg 16479d0ccd10Smrg# func_options_prep [ARG]... 16489d0ccd10Smrg# -------------------------- 16499d0ccd10Smrg# All initialisations required before starting the option parse loop. 16509d0ccd10Smrg# Note that when calling hook functions, we pass through the list of 16519d0ccd10Smrg# positional parameters. If a hook function modifies that list, and 16529d0ccd10Smrg# needs to propogate that back to rest of this script, then the complete 16539d0ccd10Smrg# modified list must be put in 'func_run_hooks_result' before 16549d0ccd10Smrg# returning. 16559d0ccd10Smrgfunc_hookable func_options_prep 16569d0ccd10Smrgfunc_options_prep () 16577914d74bSmrg{ 16589d0ccd10Smrg $debug_cmd 16597914d74bSmrg 16609d0ccd10Smrg # Option defaults: 16619d0ccd10Smrg opt_verbose=false 16629d0ccd10Smrg opt_warning_types= 1663e169010aSmrg 16649d0ccd10Smrg func_run_hooks func_options_prep ${1+"$@"} 16659d0ccd10Smrg 16669d0ccd10Smrg # save modified positional parameters for caller 16679d0ccd10Smrg func_options_prep_result=$func_run_hooks_result 16687914d74bSmrg} 16697914d74bSmrg 16709d0ccd10Smrg 16719d0ccd10Smrg# func_parse_options [ARG]... 16729d0ccd10Smrg# --------------------------- 16739d0ccd10Smrg# The main option parsing loop. 16749d0ccd10Smrgfunc_hookable func_parse_options 16759d0ccd10Smrgfunc_parse_options () 1676c63293b5Smrg{ 16779d0ccd10Smrg $debug_cmd 16789d0ccd10Smrg 16799d0ccd10Smrg func_parse_options_result= 16809d0ccd10Smrg 16819d0ccd10Smrg # this just eases exit handling 16829d0ccd10Smrg while test $# -gt 0; do 16839d0ccd10Smrg # Defer to hook functions for initial option parsing, so they 16849d0ccd10Smrg # get priority in the event of reusing an option name. 16859d0ccd10Smrg func_run_hooks func_parse_options ${1+"$@"} 16869d0ccd10Smrg 16879d0ccd10Smrg # Adjust func_parse_options positional parameters to match 16889d0ccd10Smrg eval set dummy "$func_run_hooks_result"; shift 16899d0ccd10Smrg 16909d0ccd10Smrg # Break out of the loop if we already parsed every option. 16919d0ccd10Smrg test $# -gt 0 || break 16929d0ccd10Smrg 16939d0ccd10Smrg _G_opt=$1 16949d0ccd10Smrg shift 16959d0ccd10Smrg case $_G_opt in 16969d0ccd10Smrg --debug|-x) debug_cmd='set -x' 16979d0ccd10Smrg func_echo "enabling shell trace mode" 16989d0ccd10Smrg $debug_cmd 16999d0ccd10Smrg ;; 17009d0ccd10Smrg 17019d0ccd10Smrg --no-warnings|--no-warning|--no-warn) 17029d0ccd10Smrg set dummy --warnings none ${1+"$@"} 17039d0ccd10Smrg shift 17049d0ccd10Smrg ;; 17059d0ccd10Smrg 17069d0ccd10Smrg --warnings|--warning|-W) 17079d0ccd10Smrg test $# = 0 && func_missing_arg $_G_opt && break 17089d0ccd10Smrg case " $warning_categories $1" in 17099d0ccd10Smrg *" $1 "*) 17109d0ccd10Smrg # trailing space prevents matching last $1 above 17119d0ccd10Smrg func_append_uniq opt_warning_types " $1" 17129d0ccd10Smrg ;; 17139d0ccd10Smrg *all) 17149d0ccd10Smrg opt_warning_types=$warning_categories 17159d0ccd10Smrg ;; 17169d0ccd10Smrg *none) 17179d0ccd10Smrg opt_warning_types=none 17189d0ccd10Smrg warning_func=: 17199d0ccd10Smrg ;; 17209d0ccd10Smrg *error) 17219d0ccd10Smrg opt_warning_types=$warning_categories 17229d0ccd10Smrg warning_func=func_fatal_error 17239d0ccd10Smrg ;; 17249d0ccd10Smrg *) 17259d0ccd10Smrg func_fatal_error \ 17269d0ccd10Smrg "unsupported warning category: '$1'" 17279d0ccd10Smrg ;; 17289d0ccd10Smrg esac 17299d0ccd10Smrg shift 17309d0ccd10Smrg ;; 17319d0ccd10Smrg 17329d0ccd10Smrg --verbose|-v) opt_verbose=: ;; 17339d0ccd10Smrg --version) func_version ;; 17349d0ccd10Smrg -\?|-h) func_usage ;; 17359d0ccd10Smrg --help) func_help ;; 17369d0ccd10Smrg 17379d0ccd10Smrg # Separate optargs to long options (plugins may need this): 17389d0ccd10Smrg --*=*) func_split_equals "$_G_opt" 17399d0ccd10Smrg set dummy "$func_split_equals_lhs" \ 17409d0ccd10Smrg "$func_split_equals_rhs" ${1+"$@"} 17419d0ccd10Smrg shift 17429d0ccd10Smrg ;; 17439d0ccd10Smrg 17449d0ccd10Smrg # Separate optargs to short options: 17459d0ccd10Smrg -W*) 17469d0ccd10Smrg func_split_short_opt "$_G_opt" 17479d0ccd10Smrg set dummy "$func_split_short_opt_name" \ 17489d0ccd10Smrg "$func_split_short_opt_arg" ${1+"$@"} 17499d0ccd10Smrg shift 17509d0ccd10Smrg ;; 17519d0ccd10Smrg 17529d0ccd10Smrg # Separate non-argument short options: 17539d0ccd10Smrg -\?*|-h*|-v*|-x*) 17549d0ccd10Smrg func_split_short_opt "$_G_opt" 17559d0ccd10Smrg set dummy "$func_split_short_opt_name" \ 17569d0ccd10Smrg "-$func_split_short_opt_arg" ${1+"$@"} 17579d0ccd10Smrg shift 17589d0ccd10Smrg ;; 17599d0ccd10Smrg 17609d0ccd10Smrg --) break ;; 17619d0ccd10Smrg -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; 17629d0ccd10Smrg *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; 17639d0ccd10Smrg esac 17649d0ccd10Smrg done 17659d0ccd10Smrg 17669d0ccd10Smrg # save modified positional parameters for caller 17679d0ccd10Smrg func_quote_for_eval ${1+"$@"} 17689d0ccd10Smrg func_parse_options_result=$func_quote_for_eval_result 1769c63293b5Smrg} 1770c63293b5Smrg 17717914d74bSmrg 17729d0ccd10Smrg# func_validate_options [ARG]... 17739d0ccd10Smrg# ------------------------------ 17749d0ccd10Smrg# Perform any sanity checks on option settings and/or unconsumed 17759d0ccd10Smrg# arguments. 17769d0ccd10Smrgfunc_hookable func_validate_options 17779d0ccd10Smrgfunc_validate_options () 1778e169010aSmrg{ 17799d0ccd10Smrg $debug_cmd 1780c63293b5Smrg 17819d0ccd10Smrg # Display all warnings if -W was not given. 17829d0ccd10Smrg test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" 17839d0ccd10Smrg 17849d0ccd10Smrg func_run_hooks func_validate_options ${1+"$@"} 17859d0ccd10Smrg 17869d0ccd10Smrg # Bail if the options were screwed! 17879d0ccd10Smrg $exit_cmd $EXIT_FAILURE 17889d0ccd10Smrg 17899d0ccd10Smrg # save modified positional parameters for caller 17909d0ccd10Smrg func_validate_options_result=$func_run_hooks_result 1791e169010aSmrg} 1792e169010aSmrg 17939d0ccd10Smrg 17949d0ccd10Smrg 17959d0ccd10Smrg## ----------------- ## 17969d0ccd10Smrg## Helper functions. ## 17979d0ccd10Smrg## ----------------- ## 17989d0ccd10Smrg 17999d0ccd10Smrg# This section contains the helper functions used by the rest of the 18009d0ccd10Smrg# hookable option parser framework in ascii-betical order. 18019d0ccd10Smrg 18029d0ccd10Smrg 18039d0ccd10Smrg# func_fatal_help ARG... 18049d0ccd10Smrg# ---------------------- 18059d0ccd10Smrg# Echo program name prefixed message to standard error, followed by 18069d0ccd10Smrg# a help hint, and exit. 18079d0ccd10Smrgfunc_fatal_help () 1808e169010aSmrg{ 18099d0ccd10Smrg $debug_cmd 1810c63293b5Smrg 18119d0ccd10Smrg eval \$ECHO \""Usage: $usage"\" 18129d0ccd10Smrg eval \$ECHO \""$fatal_help"\" 18139d0ccd10Smrg func_error ${1+"$@"} 18149d0ccd10Smrg exit $EXIT_FAILURE 1815e169010aSmrg} 1816e169010aSmrg 18179d0ccd10Smrg 18189d0ccd10Smrg# func_help 18199d0ccd10Smrg# --------- 18209d0ccd10Smrg# Echo long help message to standard output and exit. 1821e169010aSmrgfunc_help () 1822e169010aSmrg{ 18239d0ccd10Smrg $debug_cmd 18249d0ccd10Smrg 18259d0ccd10Smrg func_usage_message 18269d0ccd10Smrg $ECHO "$long_help_message" 18279d0ccd10Smrg exit 0 1828e169010aSmrg} 1829e169010aSmrg 18309d0ccd10Smrg 18319d0ccd10Smrg# func_missing_arg ARGNAME 18329d0ccd10Smrg# ------------------------ 1833e169010aSmrg# Echo program name prefixed message to standard error and set global 1834e169010aSmrg# exit_cmd. 1835e169010aSmrgfunc_missing_arg () 1836e169010aSmrg{ 18379d0ccd10Smrg $debug_cmd 1838c63293b5Smrg 18399d0ccd10Smrg func_error "Missing argument for '$1'." 1840e169010aSmrg exit_cmd=exit 1841e169010aSmrg} 1842e169010aSmrg 1843e169010aSmrg 18449d0ccd10Smrg# func_split_equals STRING 18459d0ccd10Smrg# ------------------------ 18469d0ccd10Smrg# Set func_split_equals_lhs and func_split_equals_rhs shell variables after 18479d0ccd10Smrg# splitting STRING at the '=' sign. 18489d0ccd10Smrgtest -z "$_G_HAVE_XSI_OPS" \ 18499d0ccd10Smrg && (eval 'x=a/b/c; 18509d0ccd10Smrg test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 18519d0ccd10Smrg && _G_HAVE_XSI_OPS=yes 18529d0ccd10Smrg 18539d0ccd10Smrgif test yes = "$_G_HAVE_XSI_OPS" 18549d0ccd10Smrgthen 18559d0ccd10Smrg # This is an XSI compatible shell, allowing a faster implementation... 18569d0ccd10Smrg eval 'func_split_equals () 18579d0ccd10Smrg { 18589d0ccd10Smrg $debug_cmd 18599d0ccd10Smrg 18609d0ccd10Smrg func_split_equals_lhs=${1%%=*} 18619d0ccd10Smrg func_split_equals_rhs=${1#*=} 18629d0ccd10Smrg test "x$func_split_equals_lhs" = "x$1" \ 18639d0ccd10Smrg && func_split_equals_rhs= 18649d0ccd10Smrg }' 18659d0ccd10Smrgelse 18669d0ccd10Smrg # ...otherwise fall back to using expr, which is often a shell builtin. 18679d0ccd10Smrg func_split_equals () 18689d0ccd10Smrg { 18699d0ccd10Smrg $debug_cmd 18709d0ccd10Smrg 18719d0ccd10Smrg func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` 18729d0ccd10Smrg func_split_equals_rhs= 18739d0ccd10Smrg test "x$func_split_equals_lhs" = "x$1" \ 18749d0ccd10Smrg || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` 18759d0ccd10Smrg } 18769d0ccd10Smrgfi #func_split_equals 18779d0ccd10Smrg 18789d0ccd10Smrg 18799d0ccd10Smrg# func_split_short_opt SHORTOPT 18809d0ccd10Smrg# ----------------------------- 1881c63293b5Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell 1882c63293b5Smrg# variables after splitting SHORTOPT after the 2nd character. 18839d0ccd10Smrgif test yes = "$_G_HAVE_XSI_OPS" 18849d0ccd10Smrgthen 18859d0ccd10Smrg # This is an XSI compatible shell, allowing a faster implementation... 18869d0ccd10Smrg eval 'func_split_short_opt () 18879d0ccd10Smrg { 18889d0ccd10Smrg $debug_cmd 18899d0ccd10Smrg 18909d0ccd10Smrg func_split_short_opt_arg=${1#??} 18919d0ccd10Smrg func_split_short_opt_name=${1%"$func_split_short_opt_arg"} 18929d0ccd10Smrg }' 18939d0ccd10Smrgelse 18949d0ccd10Smrg # ...otherwise fall back to using expr, which is often a shell builtin. 18959d0ccd10Smrg func_split_short_opt () 18969d0ccd10Smrg { 18979d0ccd10Smrg $debug_cmd 18989d0ccd10Smrg 18999d0ccd10Smrg func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` 19009d0ccd10Smrg func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` 19019d0ccd10Smrg } 19029d0ccd10Smrgfi #func_split_short_opt 19039d0ccd10Smrg 19049d0ccd10Smrg 19059d0ccd10Smrg# func_usage 19069d0ccd10Smrg# ---------- 19079d0ccd10Smrg# Echo short help message to standard output and exit. 19089d0ccd10Smrgfunc_usage () 1909c63293b5Smrg{ 19109d0ccd10Smrg $debug_cmd 1911c63293b5Smrg 19129d0ccd10Smrg func_usage_message 19139d0ccd10Smrg $ECHO "Run '$progname --help |${PAGER-more}' for full usage" 19149d0ccd10Smrg exit 0 19159d0ccd10Smrg} 1916c63293b5Smrg 1917c63293b5Smrg 19189d0ccd10Smrg# func_usage_message 19199d0ccd10Smrg# ------------------ 19209d0ccd10Smrg# Echo short help message to standard output. 19219d0ccd10Smrgfunc_usage_message () 1922c63293b5Smrg{ 19239d0ccd10Smrg $debug_cmd 1924c63293b5Smrg 19259d0ccd10Smrg eval \$ECHO \""Usage: $usage"\" 19269d0ccd10Smrg echo 19279d0ccd10Smrg $SED -n 's|^# || 19289d0ccd10Smrg /^Written by/{ 19299d0ccd10Smrg x;p;x 19309d0ccd10Smrg } 19319d0ccd10Smrg h 19329d0ccd10Smrg /^Written by/q' < "$progpath" 19339d0ccd10Smrg echo 19349d0ccd10Smrg eval \$ECHO \""$usage_message"\" 19359d0ccd10Smrg} 1936c63293b5Smrg 1937e169010aSmrg 19389d0ccd10Smrg# func_version 19399d0ccd10Smrg# ------------ 19409d0ccd10Smrg# Echo version message to standard output and exit. 19419d0ccd10Smrgfunc_version () 19429d0ccd10Smrg{ 19439d0ccd10Smrg $debug_cmd 1944e169010aSmrg 19459d0ccd10Smrg printf '%s\n' "$progname $scriptversion" 19469d0ccd10Smrg $SED -n ' 19479d0ccd10Smrg /(C)/!b go 19489d0ccd10Smrg :more 19499d0ccd10Smrg /\./!{ 19509d0ccd10Smrg N 19519d0ccd10Smrg s|\n# | | 19529d0ccd10Smrg b more 19539d0ccd10Smrg } 19549d0ccd10Smrg :go 19559d0ccd10Smrg /^# Written by /,/# warranty; / { 19569d0ccd10Smrg s|^# || 19579d0ccd10Smrg s|^# *$|| 19589d0ccd10Smrg s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| 19599d0ccd10Smrg p 19609d0ccd10Smrg } 19619d0ccd10Smrg /^# Written by / { 19629d0ccd10Smrg s|^# || 19639d0ccd10Smrg p 19649d0ccd10Smrg } 19659d0ccd10Smrg /^warranty; /q' < "$progpath" 1966e169010aSmrg 19679d0ccd10Smrg exit $? 19689d0ccd10Smrg} 1969e169010aSmrg 19707914d74bSmrg 19719d0ccd10Smrg# Local variables: 19729d0ccd10Smrg# mode: shell-script 19739d0ccd10Smrg# sh-indentation: 2 19749d0ccd10Smrg# eval: (add-hook 'before-save-hook 'time-stamp) 19759d0ccd10Smrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" 19769d0ccd10Smrg# time-stamp-time-zone: "UTC" 19779d0ccd10Smrg# End: 19787914d74bSmrg 19799d0ccd10Smrg# Set a version string. 19809d0ccd10Smrgscriptversion='(GNU libtool) 2.4.6' 19817914d74bSmrg 19827914d74bSmrg 19839d0ccd10Smrg# func_echo ARG... 19849d0ccd10Smrg# ---------------- 19859d0ccd10Smrg# Libtool also displays the current mode in messages, so override 19869d0ccd10Smrg# funclib.sh func_echo with this custom definition. 19879d0ccd10Smrgfunc_echo () 1988c63293b5Smrg{ 19899d0ccd10Smrg $debug_cmd 1990c63293b5Smrg 19919d0ccd10Smrg _G_message=$* 19929d0ccd10Smrg 19939d0ccd10Smrg func_echo_IFS=$IFS 19949d0ccd10Smrg IFS=$nl 19959d0ccd10Smrg for _G_line in $_G_message; do 19969d0ccd10Smrg IFS=$func_echo_IFS 19979d0ccd10Smrg $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" 19989d0ccd10Smrg done 19999d0ccd10Smrg IFS=$func_echo_IFS 20009d0ccd10Smrg} 2001c63293b5Smrg 2002c63293b5Smrg 20039d0ccd10Smrg# func_warning ARG... 20049d0ccd10Smrg# ------------------- 20059d0ccd10Smrg# Libtool warnings are not categorized, so override funclib.sh 20069d0ccd10Smrg# func_warning with this simpler definition. 20079d0ccd10Smrgfunc_warning () 2008c63293b5Smrg{ 20099d0ccd10Smrg $debug_cmd 20109d0ccd10Smrg 20119d0ccd10Smrg $warning_func ${1+"$@"} 20129d0ccd10Smrg} 20139d0ccd10Smrg 2014c63293b5Smrg 20159d0ccd10Smrg## ---------------- ## 20169d0ccd10Smrg## Options parsing. ## 20179d0ccd10Smrg## ---------------- ## 20189d0ccd10Smrg 20199d0ccd10Smrg# Hook in the functions to make sure our own options are parsed during 20209d0ccd10Smrg# the option parsing loop. 20219d0ccd10Smrg 20229d0ccd10Smrgusage='$progpath [OPTION]... [MODE-ARG]...' 20239d0ccd10Smrg 20249d0ccd10Smrg# Short help message in response to '-h'. 20259d0ccd10Smrgusage_message="Options: 20269d0ccd10Smrg --config show all configuration variables 20279d0ccd10Smrg --debug enable verbose shell tracing 20289d0ccd10Smrg -n, --dry-run display commands without modifying any files 20299d0ccd10Smrg --features display basic configuration information and exit 20309d0ccd10Smrg --mode=MODE use operation mode MODE 20319d0ccd10Smrg --no-warnings equivalent to '-Wnone' 20329d0ccd10Smrg --preserve-dup-deps don't remove duplicate dependency libraries 20339d0ccd10Smrg --quiet, --silent don't print informational messages 20349d0ccd10Smrg --tag=TAG use configuration variables from tag TAG 20359d0ccd10Smrg -v, --verbose print more informational messages than default 20369d0ccd10Smrg --version print version information 20379d0ccd10Smrg -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] 20389d0ccd10Smrg -h, --help, --help-all print short, long, or detailed help message 20399d0ccd10Smrg" 2040c63293b5Smrg 20419d0ccd10Smrg# Additional text appended to 'usage_message' in response to '--help'. 20429d0ccd10Smrgfunc_help () 2043c63293b5Smrg{ 20449d0ccd10Smrg $debug_cmd 20459d0ccd10Smrg 20469d0ccd10Smrg func_usage_message 20479d0ccd10Smrg $ECHO "$long_help_message 20489d0ccd10Smrg 20499d0ccd10SmrgMODE must be one of the following: 20509d0ccd10Smrg 20519d0ccd10Smrg clean remove files from the build directory 20529d0ccd10Smrg compile compile a source file into a libtool object 20539d0ccd10Smrg execute automatically set library path, then run a program 20549d0ccd10Smrg finish complete the installation of libtool libraries 20559d0ccd10Smrg install install libraries or executables 20569d0ccd10Smrg link create a library or an executable 20579d0ccd10Smrg uninstall remove libraries from an installed directory 20589d0ccd10Smrg 20599d0ccd10SmrgMODE-ARGS vary depending on the MODE. When passed as first option, 20609d0ccd10Smrg'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. 20619d0ccd10SmrgTry '$progname --help --mode=MODE' for a more detailed description of MODE. 20629d0ccd10Smrg 20639d0ccd10SmrgWhen reporting a bug, please describe a test case to reproduce it and 20649d0ccd10Smrginclude the following information: 20659d0ccd10Smrg 20669d0ccd10Smrg host-triplet: $host 20679d0ccd10Smrg shell: $SHELL 20689d0ccd10Smrg compiler: $LTCC 20699d0ccd10Smrg compiler flags: $LTCFLAGS 20709d0ccd10Smrg linker: $LD (gnu? $with_gnu_ld) 20719d0ccd10Smrg version: $progname (GNU libtool) 2.4.6 20729d0ccd10Smrg automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` 20739d0ccd10Smrg autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` 20749d0ccd10Smrg 20759d0ccd10SmrgReport bugs to <bug-libtool@gnu.org>. 20769d0ccd10SmrgGNU libtool home page: <http://www.gnu.org/s/libtool/>. 20779d0ccd10SmrgGeneral help using GNU software: <http://www.gnu.org/gethelp/>." 20789d0ccd10Smrg exit 0 20799d0ccd10Smrg} 2080c63293b5Smrg 2081c63293b5Smrg 20829d0ccd10Smrg# func_lo2o OBJECT-NAME 20839d0ccd10Smrg# --------------------- 20849d0ccd10Smrg# Transform OBJECT-NAME from a '.lo' suffix to the platform specific 20859d0ccd10Smrg# object suffix. 2086c63293b5Smrg 20879d0ccd10Smrglo2o=s/\\.lo\$/.$objext/ 20889d0ccd10Smrgo2lo=s/\\.$objext\$/.lo/ 2089c63293b5Smrg 20909d0ccd10Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 20919d0ccd10Smrg eval 'func_lo2o () 20929d0ccd10Smrg { 20939d0ccd10Smrg case $1 in 20949d0ccd10Smrg *.lo) func_lo2o_result=${1%.lo}.$objext ;; 20959d0ccd10Smrg * ) func_lo2o_result=$1 ;; 20969d0ccd10Smrg esac 20979d0ccd10Smrg }' 20989d0ccd10Smrg 20999d0ccd10Smrg # func_xform LIBOBJ-OR-SOURCE 21009d0ccd10Smrg # --------------------------- 21019d0ccd10Smrg # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) 21029d0ccd10Smrg # suffix to a '.lo' libtool-object suffix. 21039d0ccd10Smrg eval 'func_xform () 21049d0ccd10Smrg { 21059d0ccd10Smrg func_xform_result=${1%.*}.lo 21069d0ccd10Smrg }' 21079d0ccd10Smrgelse 21089d0ccd10Smrg # ...otherwise fall back to using sed. 21099d0ccd10Smrg func_lo2o () 21109d0ccd10Smrg { 21119d0ccd10Smrg func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` 21129d0ccd10Smrg } 21139d0ccd10Smrg 21149d0ccd10Smrg func_xform () 21159d0ccd10Smrg { 21169d0ccd10Smrg func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` 21179d0ccd10Smrg } 21189d0ccd10Smrgfi 2119c63293b5Smrg 2120c63293b5Smrg 21219d0ccd10Smrg# func_fatal_configuration ARG... 21229d0ccd10Smrg# ------------------------------- 2123e169010aSmrg# Echo program name prefixed message to standard error, followed by 2124e169010aSmrg# a configuration failure hint, and exit. 2125e169010aSmrgfunc_fatal_configuration () 2126e169010aSmrg{ 21279d0ccd10Smrg func__fatal_error ${1+"$@"} \ 21289d0ccd10Smrg "See the $PACKAGE documentation for more information." \ 21299d0ccd10Smrg "Fatal configuration error." 2130e169010aSmrg} 2131e169010aSmrg 2132e169010aSmrg 2133e169010aSmrg# func_config 21349d0ccd10Smrg# ----------- 2135e169010aSmrg# Display the configuration for all the tags in this script. 2136e169010aSmrgfunc_config () 2137e169010aSmrg{ 2138e169010aSmrg re_begincf='^# ### BEGIN LIBTOOL' 2139e169010aSmrg re_endcf='^# ### END LIBTOOL' 2140e169010aSmrg 2141e169010aSmrg # Default configuration. 2142e169010aSmrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 21437914d74bSmrg 21447914d74bSmrg # Now print the configurations for the tags. 21457914d74bSmrg for tagname in $taglist; do 2146e169010aSmrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 21477914d74bSmrg done 21487914d74bSmrg 2149e169010aSmrg exit $? 2150e169010aSmrg} 21517914d74bSmrg 21529d0ccd10Smrg 2153e169010aSmrg# func_features 21549d0ccd10Smrg# ------------- 2155e169010aSmrg# Display the features supported by this script. 2156e169010aSmrgfunc_features () 2157e169010aSmrg{ 2158e8ead290Smrg echo "host: $host" 21599d0ccd10Smrg if test yes = "$build_libtool_libs"; then 2160e8ead290Smrg echo "enable shared libraries" 21617914d74bSmrg else 2162e8ead290Smrg echo "disable shared libraries" 21637914d74bSmrg fi 21649d0ccd10Smrg if test yes = "$build_old_libs"; then 2165e8ead290Smrg echo "enable static libraries" 21667914d74bSmrg else 2167e8ead290Smrg echo "disable static libraries" 21687914d74bSmrg fi 2169e169010aSmrg 21707914d74bSmrg exit $? 2171e169010aSmrg} 2172e169010aSmrg 21739d0ccd10Smrg 21749d0ccd10Smrg# func_enable_tag TAGNAME 21759d0ccd10Smrg# ----------------------- 2176e169010aSmrg# Verify that TAGNAME is valid, and either flag an error and exit, or 2177e169010aSmrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 2178e169010aSmrg# variable here. 2179e169010aSmrgfunc_enable_tag () 2180e169010aSmrg{ 21819d0ccd10Smrg # Global variable: 21829d0ccd10Smrg tagname=$1 21837914d74bSmrg 21849d0ccd10Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 21859d0ccd10Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 21869d0ccd10Smrg sed_extractcf=/$re_begincf/,/$re_endcf/p 21877914d74bSmrg 21889d0ccd10Smrg # Validate tagname. 21899d0ccd10Smrg case $tagname in 21909d0ccd10Smrg *[!-_A-Za-z0-9,/]*) 21919d0ccd10Smrg func_fatal_error "invalid tag name: $tagname" 21929d0ccd10Smrg ;; 21939d0ccd10Smrg esac 21947914d74bSmrg 21959d0ccd10Smrg # Don't test for the "default" C tag, as we know it's 21969d0ccd10Smrg # there but not specially marked. 21979d0ccd10Smrg case $tagname in 21989d0ccd10Smrg CC) ;; 2199e169010aSmrg *) 22009d0ccd10Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 22019d0ccd10Smrg taglist="$taglist $tagname" 22029d0ccd10Smrg 22039d0ccd10Smrg # Evaluate the configuration. Be careful to quote the path 22049d0ccd10Smrg # and the sed script, to avoid splitting on whitespace, but 22059d0ccd10Smrg # also don't use non-portable quotes within backquotes within 22069d0ccd10Smrg # quotes we have to do it in 2 steps: 22079d0ccd10Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 22089d0ccd10Smrg eval "$extractedcf" 22099d0ccd10Smrg else 22109d0ccd10Smrg func_error "ignoring unknown tag $tagname" 22119d0ccd10Smrg fi 22129d0ccd10Smrg ;; 22139d0ccd10Smrg esac 2214e169010aSmrg} 22157914d74bSmrg 22169d0ccd10Smrg 2217c63293b5Smrg# func_check_version_match 22189d0ccd10Smrg# ------------------------ 2219c63293b5Smrg# Ensure that we are using m4 macros, and libtool script from the same 2220c63293b5Smrg# release of libtool. 2221c63293b5Smrgfunc_check_version_match () 2222e169010aSmrg{ 22239d0ccd10Smrg if test "$package_revision" != "$macro_revision"; then 22249d0ccd10Smrg if test "$VERSION" != "$macro_version"; then 22259d0ccd10Smrg if test -z "$macro_version"; then 22269d0ccd10Smrg cat >&2 <<_LT_EOF 2227c63293b5Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2228c63293b5Smrg$progname: definition of this LT_INIT comes from an older release. 2229c63293b5Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2230c63293b5Smrg$progname: and run autoconf again. 2231c63293b5Smrg_LT_EOF 22329d0ccd10Smrg else 22339d0ccd10Smrg cat >&2 <<_LT_EOF 2234c63293b5Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2235c63293b5Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 2236c63293b5Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2237c63293b5Smrg$progname: and run autoconf again. 2238c63293b5Smrg_LT_EOF 22399d0ccd10Smrg fi 22409d0ccd10Smrg else 22419d0ccd10Smrg cat >&2 <<_LT_EOF 2242c63293b5Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 2243c63293b5Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 2244c63293b5Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 2245c63293b5Smrg$progname: of $PACKAGE $VERSION and run autoconf again. 2246c63293b5Smrg_LT_EOF 22479d0ccd10Smrg fi 22487914d74bSmrg 22499d0ccd10Smrg exit $EXIT_MISMATCH 22509d0ccd10Smrg fi 2251c63293b5Smrg} 2252c63293b5Smrg 2253c63293b5Smrg 22549d0ccd10Smrg# libtool_options_prep [ARG]... 22559d0ccd10Smrg# ----------------------------- 22569d0ccd10Smrg# Preparation for options parsed by libtool. 22579d0ccd10Smrglibtool_options_prep () 22589d0ccd10Smrg{ 22599d0ccd10Smrg $debug_mode 22607914d74bSmrg 22619d0ccd10Smrg # Option defaults: 22629d0ccd10Smrg opt_config=false 22639d0ccd10Smrg opt_dlopen= 22649d0ccd10Smrg opt_dry_run=false 22659d0ccd10Smrg opt_help=false 22669d0ccd10Smrg opt_mode= 22679d0ccd10Smrg opt_preserve_dup_deps=false 22689d0ccd10Smrg opt_quiet=false 2269c63293b5Smrg 22709d0ccd10Smrg nonopt= 22719d0ccd10Smrg preserve_args= 2272c63293b5Smrg 22739d0ccd10Smrg # Shorthand for --mode=foo, only valid as the first argument 22749d0ccd10Smrg case $1 in 22759d0ccd10Smrg clean|clea|cle|cl) 22769d0ccd10Smrg shift; set dummy --mode clean ${1+"$@"}; shift 22779d0ccd10Smrg ;; 22789d0ccd10Smrg compile|compil|compi|comp|com|co|c) 22799d0ccd10Smrg shift; set dummy --mode compile ${1+"$@"}; shift 22809d0ccd10Smrg ;; 22819d0ccd10Smrg execute|execut|execu|exec|exe|ex|e) 22829d0ccd10Smrg shift; set dummy --mode execute ${1+"$@"}; shift 22839d0ccd10Smrg ;; 22849d0ccd10Smrg finish|finis|fini|fin|fi|f) 22859d0ccd10Smrg shift; set dummy --mode finish ${1+"$@"}; shift 22869d0ccd10Smrg ;; 22879d0ccd10Smrg install|instal|insta|inst|ins|in|i) 22889d0ccd10Smrg shift; set dummy --mode install ${1+"$@"}; shift 22899d0ccd10Smrg ;; 22909d0ccd10Smrg link|lin|li|l) 22919d0ccd10Smrg shift; set dummy --mode link ${1+"$@"}; shift 22929d0ccd10Smrg ;; 22939d0ccd10Smrg uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 22949d0ccd10Smrg shift; set dummy --mode uninstall ${1+"$@"}; shift 22959d0ccd10Smrg ;; 22969d0ccd10Smrg esac 22979d0ccd10Smrg 22989d0ccd10Smrg # Pass back the list of options. 22999d0ccd10Smrg func_quote_for_eval ${1+"$@"} 23009d0ccd10Smrg libtool_options_prep_result=$func_quote_for_eval_result 23019d0ccd10Smrg} 23029d0ccd10Smrgfunc_add_hook func_options_prep libtool_options_prep 2303c63293b5Smrg 2304c63293b5Smrg 23059d0ccd10Smrg# libtool_parse_options [ARG]... 23069d0ccd10Smrg# --------------------------------- 23079d0ccd10Smrg# Provide handling for libtool specific options. 23089d0ccd10Smrglibtool_parse_options () 2309c63293b5Smrg{ 23109d0ccd10Smrg $debug_cmd 2311e169010aSmrg 23129d0ccd10Smrg # Perform our own loop to consume as many options as possible in 23139d0ccd10Smrg # each iteration. 23149d0ccd10Smrg while test $# -gt 0; do 23159d0ccd10Smrg _G_opt=$1 23169d0ccd10Smrg shift 23179d0ccd10Smrg case $_G_opt in 23189d0ccd10Smrg --dry-run|--dryrun|-n) 23199d0ccd10Smrg opt_dry_run=: 23209d0ccd10Smrg ;; 23219d0ccd10Smrg 23229d0ccd10Smrg --config) func_config ;; 23239d0ccd10Smrg 23249d0ccd10Smrg --dlopen|-dlopen) 23259d0ccd10Smrg opt_dlopen="${opt_dlopen+$opt_dlopen 23269d0ccd10Smrg}$1" 23279d0ccd10Smrg shift 23289d0ccd10Smrg ;; 23299d0ccd10Smrg 23309d0ccd10Smrg --preserve-dup-deps) 23319d0ccd10Smrg opt_preserve_dup_deps=: ;; 23329d0ccd10Smrg 23339d0ccd10Smrg --features) func_features ;; 23349d0ccd10Smrg 23359d0ccd10Smrg --finish) set dummy --mode finish ${1+"$@"}; shift ;; 23369d0ccd10Smrg 23379d0ccd10Smrg --help) opt_help=: ;; 23389d0ccd10Smrg 23399d0ccd10Smrg --help-all) opt_help=': help-all' ;; 23409d0ccd10Smrg 23419d0ccd10Smrg --mode) test $# = 0 && func_missing_arg $_G_opt && break 23429d0ccd10Smrg opt_mode=$1 23439d0ccd10Smrg case $1 in 23449d0ccd10Smrg # Valid mode arguments: 23459d0ccd10Smrg clean|compile|execute|finish|install|link|relink|uninstall) ;; 23469d0ccd10Smrg 23479d0ccd10Smrg # Catch anything else as an error 23489d0ccd10Smrg *) func_error "invalid argument for $_G_opt" 23499d0ccd10Smrg exit_cmd=exit 23509d0ccd10Smrg break 23519d0ccd10Smrg ;; 23529d0ccd10Smrg esac 23539d0ccd10Smrg shift 23549d0ccd10Smrg ;; 23559d0ccd10Smrg 23569d0ccd10Smrg --no-silent|--no-quiet) 23579d0ccd10Smrg opt_quiet=false 23589d0ccd10Smrg func_append preserve_args " $_G_opt" 23599d0ccd10Smrg ;; 23609d0ccd10Smrg 23619d0ccd10Smrg --no-warnings|--no-warning|--no-warn) 23629d0ccd10Smrg opt_warning=false 23639d0ccd10Smrg func_append preserve_args " $_G_opt" 23649d0ccd10Smrg ;; 23659d0ccd10Smrg 23669d0ccd10Smrg --no-verbose) 23679d0ccd10Smrg opt_verbose=false 23689d0ccd10Smrg func_append preserve_args " $_G_opt" 23699d0ccd10Smrg ;; 23709d0ccd10Smrg 23719d0ccd10Smrg --silent|--quiet) 23729d0ccd10Smrg opt_quiet=: 23739d0ccd10Smrg opt_verbose=false 23749d0ccd10Smrg func_append preserve_args " $_G_opt" 23759d0ccd10Smrg ;; 23769d0ccd10Smrg 23779d0ccd10Smrg --tag) test $# = 0 && func_missing_arg $_G_opt && break 23789d0ccd10Smrg opt_tag=$1 23799d0ccd10Smrg func_append preserve_args " $_G_opt $1" 23809d0ccd10Smrg func_enable_tag "$1" 23819d0ccd10Smrg shift 23829d0ccd10Smrg ;; 23839d0ccd10Smrg 23849d0ccd10Smrg --verbose|-v) opt_quiet=false 23859d0ccd10Smrg opt_verbose=: 23869d0ccd10Smrg func_append preserve_args " $_G_opt" 23879d0ccd10Smrg ;; 23889d0ccd10Smrg 23899d0ccd10Smrg # An option not handled by this hook function: 23909d0ccd10Smrg *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; 23919d0ccd10Smrg esac 23929d0ccd10Smrg done 2393c63293b5Smrg 2394c63293b5Smrg 23959d0ccd10Smrg # save modified positional parameters for caller 23969d0ccd10Smrg func_quote_for_eval ${1+"$@"} 23979d0ccd10Smrg libtool_parse_options_result=$func_quote_for_eval_result 23989d0ccd10Smrg} 23999d0ccd10Smrgfunc_add_hook func_parse_options libtool_parse_options 2400e169010aSmrg 24017914d74bSmrg 2402e169010aSmrg 24039d0ccd10Smrg# libtool_validate_options [ARG]... 24049d0ccd10Smrg# --------------------------------- 24059d0ccd10Smrg# Perform any sanity checks on option settings and/or unconsumed 24069d0ccd10Smrg# arguments. 24079d0ccd10Smrglibtool_validate_options () 24089d0ccd10Smrg{ 24099d0ccd10Smrg # save first non-option argument 24109d0ccd10Smrg if test 0 -lt $#; then 24119d0ccd10Smrg nonopt=$1 24129d0ccd10Smrg shift 2413e169010aSmrg fi 2414e169010aSmrg 24159d0ccd10Smrg # preserve --debug 24169d0ccd10Smrg test : = "$debug_cmd" || func_append preserve_args " --debug" 2417e169010aSmrg 24189d0ccd10Smrg case $host in 24199d0ccd10Smrg # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 24209d0ccd10Smrg # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 24219d0ccd10Smrg *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) 24229d0ccd10Smrg # don't eliminate duplications in $postdeps and $predeps 24239d0ccd10Smrg opt_duplicate_compiler_generated_deps=: 24249d0ccd10Smrg ;; 24259d0ccd10Smrg *) 24269d0ccd10Smrg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 24279d0ccd10Smrg ;; 24289d0ccd10Smrg esac 2429e169010aSmrg 24309d0ccd10Smrg $opt_help || { 24319d0ccd10Smrg # Sanity checks first: 24329d0ccd10Smrg func_check_version_match 2433e169010aSmrg 24349d0ccd10Smrg test yes != "$build_libtool_libs" \ 24359d0ccd10Smrg && test yes != "$build_old_libs" \ 24369d0ccd10Smrg && func_fatal_configuration "not configured to build any kind of library" 2437e169010aSmrg 24389d0ccd10Smrg # Darwin sucks 24399d0ccd10Smrg eval std_shrext=\"$shrext_cmds\" 24409d0ccd10Smrg 24419d0ccd10Smrg # Only execute mode is allowed to have -dlopen flags. 24429d0ccd10Smrg if test -n "$opt_dlopen" && test execute != "$opt_mode"; then 24439d0ccd10Smrg func_error "unrecognized option '-dlopen'" 24449d0ccd10Smrg $ECHO "$help" 1>&2 24459d0ccd10Smrg exit $EXIT_FAILURE 24469d0ccd10Smrg fi 24479d0ccd10Smrg 24489d0ccd10Smrg # Change the help message to a mode-specific one. 24499d0ccd10Smrg generic_help=$help 24509d0ccd10Smrg help="Try '$progname --help --mode=$opt_mode' for more information." 24519d0ccd10Smrg } 24529d0ccd10Smrg 24539d0ccd10Smrg # Pass back the unparsed argument list 24549d0ccd10Smrg func_quote_for_eval ${1+"$@"} 24559d0ccd10Smrg libtool_validate_options_result=$func_quote_for_eval_result 2456c63293b5Smrg} 24579d0ccd10Smrgfunc_add_hook func_validate_options libtool_validate_options 24589d0ccd10Smrg 2459e169010aSmrg 24609d0ccd10Smrg# Process options as early as possible so that --help and --version 24619d0ccd10Smrg# can return quickly. 24629d0ccd10Smrgfunc_options ${1+"$@"} 24639d0ccd10Smrgeval set dummy "$func_options_result"; shift 2464e169010aSmrg 24657914d74bSmrg 24667914d74bSmrg 2467c63293b5Smrg## ----------- ## 2468c63293b5Smrg## Main. ## 2469c63293b5Smrg## ----------- ## 24707914d74bSmrg 24719d0ccd10Smrgmagic='%%%MAGIC variable%%%' 24729d0ccd10Smrgmagic_exe='%%%MAGIC EXE variable%%%' 24739d0ccd10Smrg 24749d0ccd10Smrg# Global variables. 24759d0ccd10Smrgextracted_archives= 24769d0ccd10Smrgextracted_serial=0 24779d0ccd10Smrg 24789d0ccd10Smrg# If this variable is set in any of the actions, the command in it 24799d0ccd10Smrg# will be execed at the end. This prevents here-documents from being 24809d0ccd10Smrg# left over by shells. 24819d0ccd10Smrgexec_cmd= 24829d0ccd10Smrg 24839d0ccd10Smrg 24849d0ccd10Smrg# A function that is used when there is no print builtin or printf. 24859d0ccd10Smrgfunc_fallback_echo () 24869d0ccd10Smrg{ 24879d0ccd10Smrg eval 'cat <<_LTECHO_EOF 24889d0ccd10Smrg$1 24899d0ccd10Smrg_LTECHO_EOF' 24909d0ccd10Smrg} 24919d0ccd10Smrg 24929d0ccd10Smrg# func_generated_by_libtool 24939d0ccd10Smrg# True iff stdin has been generated by Libtool. This function is only 24949d0ccd10Smrg# a basic sanity check; it will hardly flush out determined imposters. 24959d0ccd10Smrgfunc_generated_by_libtool_p () 24969d0ccd10Smrg{ 24979d0ccd10Smrg $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 24989d0ccd10Smrg} 24999d0ccd10Smrg 2500e169010aSmrg# func_lalib_p file 25019d0ccd10Smrg# True iff FILE is a libtool '.la' library or '.lo' object file. 2502e169010aSmrg# This function is only a basic sanity check; it will hardly flush out 2503e169010aSmrg# determined imposters. 2504e169010aSmrgfunc_lalib_p () 2505e169010aSmrg{ 2506e169010aSmrg test -f "$1" && 25079d0ccd10Smrg $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p 2508e169010aSmrg} 25097914d74bSmrg 2510e169010aSmrg# func_lalib_unsafe_p file 25119d0ccd10Smrg# True iff FILE is a libtool '.la' library or '.lo' object file. 2512e169010aSmrg# This function implements the same check as func_lalib_p without 2513e169010aSmrg# resorting to external programs. To this end, it redirects stdin and 2514e169010aSmrg# closes it afterwards, without saving the original file descriptor. 2515e169010aSmrg# As a safety measure, use it only where a negative result would be 25169d0ccd10Smrg# fatal anyway. Works if 'file' does not exist. 2517e169010aSmrgfunc_lalib_unsafe_p () 2518e169010aSmrg{ 2519e169010aSmrg lalib_p=no 2520e169010aSmrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 2521e169010aSmrg for lalib_p_l in 1 2 3 4 2522e169010aSmrg do 2523e169010aSmrg read lalib_p_line 25249d0ccd10Smrg case $lalib_p_line in 2525e169010aSmrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 2526e169010aSmrg esac 2527e169010aSmrg done 2528e169010aSmrg exec 0<&5 5<&- 2529e169010aSmrg fi 25309d0ccd10Smrg test yes = "$lalib_p" 2531e169010aSmrg} 25327914d74bSmrg 2533e169010aSmrg# func_ltwrapper_script_p file 2534e169010aSmrg# True iff FILE is a libtool wrapper script 2535e169010aSmrg# This function is only a basic sanity check; it will hardly flush out 2536e169010aSmrg# determined imposters. 2537e169010aSmrgfunc_ltwrapper_script_p () 2538e169010aSmrg{ 25399d0ccd10Smrg test -f "$1" && 25409d0ccd10Smrg $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p 2541e169010aSmrg} 25427914d74bSmrg 2543e169010aSmrg# func_ltwrapper_executable_p file 2544e169010aSmrg# True iff FILE is a libtool wrapper executable 2545e169010aSmrg# This function is only a basic sanity check; it will hardly flush out 2546e169010aSmrg# determined imposters. 2547e169010aSmrgfunc_ltwrapper_executable_p () 2548e169010aSmrg{ 2549e169010aSmrg func_ltwrapper_exec_suffix= 2550e169010aSmrg case $1 in 2551e169010aSmrg *.exe) ;; 2552e169010aSmrg *) func_ltwrapper_exec_suffix=.exe ;; 2553e169010aSmrg esac 2554e169010aSmrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 2555e169010aSmrg} 25567914d74bSmrg 2557e169010aSmrg# func_ltwrapper_scriptname file 2558e169010aSmrg# Assumes file is an ltwrapper_executable 2559e169010aSmrg# uses $file to determine the appropriate filename for a 2560e169010aSmrg# temporary ltwrapper_script. 2561e169010aSmrgfunc_ltwrapper_scriptname () 2562e169010aSmrg{ 2563c63293b5Smrg func_dirname_and_basename "$1" "" "." 2564c63293b5Smrg func_stripname '' '.exe' "$func_basename_result" 25659d0ccd10Smrg func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper 2566e169010aSmrg} 25677914d74bSmrg 2568e169010aSmrg# func_ltwrapper_p file 2569e169010aSmrg# True iff FILE is a libtool wrapper script or wrapper executable 2570e169010aSmrg# This function is only a basic sanity check; it will hardly flush out 2571e169010aSmrg# determined imposters. 2572e169010aSmrgfunc_ltwrapper_p () 2573e169010aSmrg{ 2574e169010aSmrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 2575e169010aSmrg} 25767914d74bSmrg 25777914d74bSmrg 2578e169010aSmrg# func_execute_cmds commands fail_cmd 2579e169010aSmrg# Execute tilde-delimited COMMANDS. 2580e169010aSmrg# If FAIL_CMD is given, eval that upon failure. 2581e169010aSmrg# FAIL_CMD may read-access the current command in variable CMD! 2582e169010aSmrgfunc_execute_cmds () 2583e169010aSmrg{ 25849d0ccd10Smrg $debug_cmd 25859d0ccd10Smrg 2586e169010aSmrg save_ifs=$IFS; IFS='~' 2587e169010aSmrg for cmd in $1; do 25889d0ccd10Smrg IFS=$sp$nl 2589e169010aSmrg eval cmd=\"$cmd\" 25909d0ccd10Smrg IFS=$save_ifs 2591e169010aSmrg func_show_eval "$cmd" "${2-:}" 2592e169010aSmrg done 2593e169010aSmrg IFS=$save_ifs 2594e169010aSmrg} 2595e169010aSmrg 2596e169010aSmrg 2597e169010aSmrg# func_source file 2598e169010aSmrg# Source FILE, adding directory component if necessary. 2599e169010aSmrg# Note that it is not necessary on cygwin/mingw to append a dot to 2600e169010aSmrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 2601e169010aSmrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 26029d0ccd10Smrg# 'FILE.' does not work on cygwin managed mounts. 2603e169010aSmrgfunc_source () 2604e169010aSmrg{ 26059d0ccd10Smrg $debug_cmd 26069d0ccd10Smrg 2607e169010aSmrg case $1 in 2608e169010aSmrg */* | *\\*) . "$1" ;; 2609e169010aSmrg *) . "./$1" ;; 2610e169010aSmrg esac 2611e169010aSmrg} 2612e169010aSmrg 2613e169010aSmrg 2614c63293b5Smrg# func_resolve_sysroot PATH 2615c63293b5Smrg# Replace a leading = in PATH with a sysroot. Store the result into 2616c63293b5Smrg# func_resolve_sysroot_result 2617c63293b5Smrgfunc_resolve_sysroot () 2618c63293b5Smrg{ 2619c63293b5Smrg func_resolve_sysroot_result=$1 2620c63293b5Smrg case $func_resolve_sysroot_result in 2621c63293b5Smrg =*) 2622c63293b5Smrg func_stripname '=' '' "$func_resolve_sysroot_result" 2623c63293b5Smrg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 2624c63293b5Smrg ;; 2625c63293b5Smrg esac 2626c63293b5Smrg} 2627c63293b5Smrg 2628c63293b5Smrg# func_replace_sysroot PATH 2629c63293b5Smrg# If PATH begins with the sysroot, replace it with = and 2630c63293b5Smrg# store the result into func_replace_sysroot_result. 2631c63293b5Smrgfunc_replace_sysroot () 2632c63293b5Smrg{ 26339d0ccd10Smrg case $lt_sysroot:$1 in 2634c63293b5Smrg ?*:"$lt_sysroot"*) 2635c63293b5Smrg func_stripname "$lt_sysroot" '' "$1" 26369d0ccd10Smrg func_replace_sysroot_result='='$func_stripname_result 2637c63293b5Smrg ;; 2638c63293b5Smrg *) 2639c63293b5Smrg # Including no sysroot. 2640c63293b5Smrg func_replace_sysroot_result=$1 2641c63293b5Smrg ;; 2642c63293b5Smrg esac 2643c63293b5Smrg} 2644c63293b5Smrg 2645e169010aSmrg# func_infer_tag arg 2646e169010aSmrg# Infer tagged configuration to use if any are available and 2647e169010aSmrg# if one wasn't chosen via the "--tag" command line option. 2648e169010aSmrg# Only attempt this if the compiler in the base compile 2649e169010aSmrg# command doesn't match the default compiler. 2650e169010aSmrg# arg is usually of the form 'gcc ...' 2651e169010aSmrgfunc_infer_tag () 2652e169010aSmrg{ 26539d0ccd10Smrg $debug_cmd 26549d0ccd10Smrg 2655e169010aSmrg if test -n "$available_tags" && test -z "$tagname"; then 2656e169010aSmrg CC_quoted= 2657e169010aSmrg for arg in $CC; do 2658c63293b5Smrg func_append_quoted CC_quoted "$arg" 2659e169010aSmrg done 2660e8ead290Smrg CC_expanded=`func_echo_all $CC` 2661e8ead290Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 2662e169010aSmrg case $@ in 2663e169010aSmrg # Blanks in the command may have been stripped by the calling shell, 2664e169010aSmrg # but not from the CC environment variable when configure was run. 2665e8ead290Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2666e8ead290Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 2667e169010aSmrg # Blanks at the start of $base_compile will cause this to fail 2668e169010aSmrg # if we don't check for them as well. 2669e169010aSmrg *) 2670e169010aSmrg for z in $available_tags; do 2671e169010aSmrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 2672e169010aSmrg # Evaluate the configuration. 26739d0ccd10Smrg eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 2674e169010aSmrg CC_quoted= 2675e169010aSmrg for arg in $CC; do 2676e169010aSmrg # Double-quote args containing other shell metacharacters. 2677c63293b5Smrg func_append_quoted CC_quoted "$arg" 2678e169010aSmrg done 2679e8ead290Smrg CC_expanded=`func_echo_all $CC` 2680e8ead290Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 2681e169010aSmrg case "$@ " in 2682e8ead290Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2683e8ead290Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 2684e169010aSmrg # The compiler in the base compile command matches 2685e169010aSmrg # the one in the tagged configuration. 2686e169010aSmrg # Assume this is the tagged configuration we want. 2687e169010aSmrg tagname=$z 2688e169010aSmrg break 2689e169010aSmrg ;; 26907914d74bSmrg esac 2691e169010aSmrg fi 2692e169010aSmrg done 2693e169010aSmrg # If $tagname still isn't set, then no tagged configuration 2694e169010aSmrg # was found and let the user know that the "--tag" command 2695e169010aSmrg # line option must be used. 2696e169010aSmrg if test -z "$tagname"; then 2697e169010aSmrg func_echo "unable to infer tagged configuration" 26989d0ccd10Smrg func_fatal_error "specify a tag with '--tag'" 2699e169010aSmrg# else 2700e169010aSmrg# func_verbose "using $tagname tagged configuration" 2701e169010aSmrg fi 2702e169010aSmrg ;; 2703e169010aSmrg esac 2704e169010aSmrg fi 2705e169010aSmrg} 2706e169010aSmrg 2707e169010aSmrg 2708e169010aSmrg 2709c63293b5Smrg# func_write_libtool_object output_name pic_name nonpic_name 2710c63293b5Smrg# Create a libtool object file (analogous to a ".la" file), 2711c63293b5Smrg# but don't create it if we're doing a dry run. 2712c63293b5Smrgfunc_write_libtool_object () 2713c63293b5Smrg{ 27149d0ccd10Smrg write_libobj=$1 27159d0ccd10Smrg if test yes = "$build_libtool_libs"; then 27169d0ccd10Smrg write_lobj=\'$2\' 2717c63293b5Smrg else 2718c63293b5Smrg write_lobj=none 2719c63293b5Smrg fi 2720c63293b5Smrg 27219d0ccd10Smrg if test yes = "$build_old_libs"; then 27229d0ccd10Smrg write_oldobj=\'$3\' 2723c63293b5Smrg else 2724c63293b5Smrg write_oldobj=none 2725c63293b5Smrg fi 2726c63293b5Smrg 2727c63293b5Smrg $opt_dry_run || { 2728c63293b5Smrg cat >${write_libobj}T <<EOF 2729c63293b5Smrg# $write_libobj - a libtool object file 27309d0ccd10Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 2731c63293b5Smrg# 2732c63293b5Smrg# Please DO NOT delete this file! 2733c63293b5Smrg# It is necessary for linking the library. 2734c63293b5Smrg 2735c63293b5Smrg# Name of the PIC object. 2736c63293b5Smrgpic_object=$write_lobj 2737c63293b5Smrg 2738c63293b5Smrg# Name of the non-PIC object 2739c63293b5Smrgnon_pic_object=$write_oldobj 2740c63293b5Smrg 2741c63293b5SmrgEOF 27429d0ccd10Smrg $MV "${write_libobj}T" "$write_libobj" 2743c63293b5Smrg } 2744c63293b5Smrg} 2745c63293b5Smrg 2746c63293b5Smrg 2747c63293b5Smrg################################################## 2748c63293b5Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 2749c63293b5Smrg################################################## 2750c63293b5Smrg 2751c63293b5Smrg# func_convert_core_file_wine_to_w32 ARG 2752c63293b5Smrg# Helper function used by file name conversion functions when $build is *nix, 2753c63293b5Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a 2754c63293b5Smrg# correctly configured wine environment available, with the winepath program 2755c63293b5Smrg# in $build's $PATH. 2756c63293b5Smrg# 2757c63293b5Smrg# ARG is the $build file name to be converted to w32 format. 2758c63293b5Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will 2759c63293b5Smrg# be empty on error (or when ARG is empty) 2760c63293b5Smrgfunc_convert_core_file_wine_to_w32 () 2761c63293b5Smrg{ 27629d0ccd10Smrg $debug_cmd 27639d0ccd10Smrg 27649d0ccd10Smrg func_convert_core_file_wine_to_w32_result=$1 2765c63293b5Smrg if test -n "$1"; then 2766c63293b5Smrg # Unfortunately, winepath does not exit with a non-zero error code, so we 2767c63293b5Smrg # are forced to check the contents of stdout. On the other hand, if the 2768c63293b5Smrg # command is not found, the shell will set an exit code of 127 and print 2769c63293b5Smrg # *an error message* to stdout. So we must check for both error code of 2770c63293b5Smrg # zero AND non-empty stdout, which explains the odd construction: 2771c63293b5Smrg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 27729d0ccd10Smrg if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then 2773c63293b5Smrg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 27749d0ccd10Smrg $SED -e "$sed_naive_backslashify"` 2775c63293b5Smrg else 2776c63293b5Smrg func_convert_core_file_wine_to_w32_result= 2777c63293b5Smrg fi 2778c63293b5Smrg fi 2779c63293b5Smrg} 2780c63293b5Smrg# end: func_convert_core_file_wine_to_w32 2781c63293b5Smrg 2782c63293b5Smrg 2783c63293b5Smrg# func_convert_core_path_wine_to_w32 ARG 2784c63293b5Smrg# Helper function used by path conversion functions when $build is *nix, and 2785c63293b5Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 2786c63293b5Smrg# configured wine environment available, with the winepath program in $build's 2787c63293b5Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters. 2788c63293b5Smrg# 2789c63293b5Smrg# ARG is path to be converted from $build format to win32. 2790c63293b5Smrg# Result is available in $func_convert_core_path_wine_to_w32_result. 2791c63293b5Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names 2792c63293b5Smrg# are convertible, then the result may be empty. 2793c63293b5Smrgfunc_convert_core_path_wine_to_w32 () 2794c63293b5Smrg{ 27959d0ccd10Smrg $debug_cmd 27969d0ccd10Smrg 2797c63293b5Smrg # unfortunately, winepath doesn't convert paths, only file names 27989d0ccd10Smrg func_convert_core_path_wine_to_w32_result= 2799c63293b5Smrg if test -n "$1"; then 2800c63293b5Smrg oldIFS=$IFS 2801c63293b5Smrg IFS=: 2802c63293b5Smrg for func_convert_core_path_wine_to_w32_f in $1; do 2803c63293b5Smrg IFS=$oldIFS 2804c63293b5Smrg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 28059d0ccd10Smrg if test -n "$func_convert_core_file_wine_to_w32_result"; then 2806c63293b5Smrg if test -z "$func_convert_core_path_wine_to_w32_result"; then 28079d0ccd10Smrg func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result 2808c63293b5Smrg else 2809c63293b5Smrg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 2810c63293b5Smrg fi 2811c63293b5Smrg fi 2812c63293b5Smrg done 2813c63293b5Smrg IFS=$oldIFS 2814c63293b5Smrg fi 2815c63293b5Smrg} 2816c63293b5Smrg# end: func_convert_core_path_wine_to_w32 2817c63293b5Smrg 2818c63293b5Smrg 2819c63293b5Smrg# func_cygpath ARGS... 2820c63293b5Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 2821c63293b5Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 2822c63293b5Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 2823c63293b5Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input 2824c63293b5Smrg# file name or path is assumed to be in w32 format, as previously converted 2825c63293b5Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name 2826c63293b5Smrg# or path in func_cygpath_result (input file name or path is assumed to be in 2827c63293b5Smrg# Cygwin format). Returns an empty string on error. 2828c63293b5Smrg# 2829c63293b5Smrg# ARGS are passed to cygpath, with the last one being the file name or path to 2830c63293b5Smrg# be converted. 2831c63293b5Smrg# 2832c63293b5Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 2833c63293b5Smrg# environment variable; do not put it in $PATH. 2834c63293b5Smrgfunc_cygpath () 2835c63293b5Smrg{ 28369d0ccd10Smrg $debug_cmd 28379d0ccd10Smrg 2838c63293b5Smrg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 2839c63293b5Smrg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 2840c63293b5Smrg if test "$?" -ne 0; then 2841c63293b5Smrg # on failure, ensure result is empty 2842c63293b5Smrg func_cygpath_result= 2843c63293b5Smrg fi 2844c63293b5Smrg else 2845c63293b5Smrg func_cygpath_result= 28469d0ccd10Smrg func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" 2847c63293b5Smrg fi 2848c63293b5Smrg} 2849c63293b5Smrg#end: func_cygpath 2850c63293b5Smrg 2851c63293b5Smrg 2852c63293b5Smrg# func_convert_core_msys_to_w32 ARG 2853c63293b5Smrg# Convert file name or path ARG from MSYS format to w32 format. Return 2854c63293b5Smrg# result in func_convert_core_msys_to_w32_result. 2855c63293b5Smrgfunc_convert_core_msys_to_w32 () 2856c63293b5Smrg{ 28579d0ccd10Smrg $debug_cmd 28589d0ccd10Smrg 2859c63293b5Smrg # awkward: cmd appends spaces to result 2860c63293b5Smrg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 28619d0ccd10Smrg $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` 2862c63293b5Smrg} 2863c63293b5Smrg#end: func_convert_core_msys_to_w32 2864c63293b5Smrg 2865c63293b5Smrg 2866c63293b5Smrg# func_convert_file_check ARG1 ARG2 2867c63293b5Smrg# Verify that ARG1 (a file name in $build format) was converted to $host 2868c63293b5Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting 2869c63293b5Smrg# func_to_host_file_result to ARG1). 2870c63293b5Smrgfunc_convert_file_check () 2871c63293b5Smrg{ 28729d0ccd10Smrg $debug_cmd 28739d0ccd10Smrg 28749d0ccd10Smrg if test -z "$2" && test -n "$1"; then 2875c63293b5Smrg func_error "Could not determine host file name corresponding to" 28769d0ccd10Smrg func_error " '$1'" 2877c63293b5Smrg func_error "Continuing, but uninstalled executables may not work." 2878c63293b5Smrg # Fallback: 28799d0ccd10Smrg func_to_host_file_result=$1 2880c63293b5Smrg fi 2881c63293b5Smrg} 2882c63293b5Smrg# end func_convert_file_check 2883c63293b5Smrg 2884c63293b5Smrg 2885c63293b5Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 2886c63293b5Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host 2887c63293b5Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 2888c63293b5Smrg# func_to_host_file_result to a simplistic fallback value (see below). 2889c63293b5Smrgfunc_convert_path_check () 2890c63293b5Smrg{ 28919d0ccd10Smrg $debug_cmd 28929d0ccd10Smrg 2893c63293b5Smrg if test -z "$4" && test -n "$3"; then 2894c63293b5Smrg func_error "Could not determine the host path corresponding to" 28959d0ccd10Smrg func_error " '$3'" 2896c63293b5Smrg func_error "Continuing, but uninstalled executables may not work." 2897c63293b5Smrg # Fallback. This is a deliberately simplistic "conversion" and 2898c63293b5Smrg # should not be "improved". See libtool.info. 2899c63293b5Smrg if test "x$1" != "x$2"; then 2900c63293b5Smrg lt_replace_pathsep_chars="s|$1|$2|g" 2901c63293b5Smrg func_to_host_path_result=`echo "$3" | 2902c63293b5Smrg $SED -e "$lt_replace_pathsep_chars"` 2903c63293b5Smrg else 29049d0ccd10Smrg func_to_host_path_result=$3 2905c63293b5Smrg fi 2906c63293b5Smrg fi 2907c63293b5Smrg} 2908c63293b5Smrg# end func_convert_path_check 2909c63293b5Smrg 2910c63293b5Smrg 2911c63293b5Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 2912c63293b5Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 2913c63293b5Smrg# and appending REPL if ORIG matches BACKPAT. 2914c63293b5Smrgfunc_convert_path_front_back_pathsep () 2915c63293b5Smrg{ 29169d0ccd10Smrg $debug_cmd 29179d0ccd10Smrg 2918c63293b5Smrg case $4 in 29199d0ccd10Smrg $1 ) func_to_host_path_result=$3$func_to_host_path_result 2920c63293b5Smrg ;; 2921c63293b5Smrg esac 2922c63293b5Smrg case $4 in 2923c63293b5Smrg $2 ) func_append func_to_host_path_result "$3" 2924c63293b5Smrg ;; 2925c63293b5Smrg esac 2926c63293b5Smrg} 2927c63293b5Smrg# end func_convert_path_front_back_pathsep 2928c63293b5Smrg 2929c63293b5Smrg 2930c63293b5Smrg################################################## 2931c63293b5Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS # 2932c63293b5Smrg################################################## 29339d0ccd10Smrg# invoked via '$to_host_file_cmd ARG' 2934c63293b5Smrg# 2935c63293b5Smrg# In each case, ARG is the path to be converted from $build to $host format. 2936c63293b5Smrg# Result will be available in $func_to_host_file_result. 2937c63293b5Smrg 2938c63293b5Smrg 2939c63293b5Smrg# func_to_host_file ARG 2940c63293b5Smrg# Converts the file name ARG from $build format to $host format. Return result 2941c63293b5Smrg# in func_to_host_file_result. 2942c63293b5Smrgfunc_to_host_file () 2943c63293b5Smrg{ 29449d0ccd10Smrg $debug_cmd 29459d0ccd10Smrg 2946c63293b5Smrg $to_host_file_cmd "$1" 2947c63293b5Smrg} 2948c63293b5Smrg# end func_to_host_file 2949c63293b5Smrg 2950c63293b5Smrg 2951c63293b5Smrg# func_to_tool_file ARG LAZY 2952c63293b5Smrg# converts the file name ARG from $build format to toolchain format. Return 2953c63293b5Smrg# result in func_to_tool_file_result. If the conversion in use is listed 2954c63293b5Smrg# in (the comma separated) LAZY, no conversion takes place. 2955c63293b5Smrgfunc_to_tool_file () 2956c63293b5Smrg{ 29579d0ccd10Smrg $debug_cmd 29589d0ccd10Smrg 2959c63293b5Smrg case ,$2, in 2960c63293b5Smrg *,"$to_tool_file_cmd",*) 2961c63293b5Smrg func_to_tool_file_result=$1 2962c63293b5Smrg ;; 2963c63293b5Smrg *) 2964c63293b5Smrg $to_tool_file_cmd "$1" 2965c63293b5Smrg func_to_tool_file_result=$func_to_host_file_result 2966c63293b5Smrg ;; 2967c63293b5Smrg esac 2968c63293b5Smrg} 2969c63293b5Smrg# end func_to_tool_file 2970c63293b5Smrg 2971c63293b5Smrg 2972c63293b5Smrg# func_convert_file_noop ARG 2973c63293b5Smrg# Copy ARG to func_to_host_file_result. 2974c63293b5Smrgfunc_convert_file_noop () 2975c63293b5Smrg{ 29769d0ccd10Smrg func_to_host_file_result=$1 2977c63293b5Smrg} 2978c63293b5Smrg# end func_convert_file_noop 2979c63293b5Smrg 2980c63293b5Smrg 2981c63293b5Smrg# func_convert_file_msys_to_w32 ARG 2982c63293b5Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 2983c63293b5Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 2984c63293b5Smrg# func_to_host_file_result. 2985c63293b5Smrgfunc_convert_file_msys_to_w32 () 2986c63293b5Smrg{ 29879d0ccd10Smrg $debug_cmd 29889d0ccd10Smrg 29899d0ccd10Smrg func_to_host_file_result=$1 2990c63293b5Smrg if test -n "$1"; then 2991c63293b5Smrg func_convert_core_msys_to_w32 "$1" 29929d0ccd10Smrg func_to_host_file_result=$func_convert_core_msys_to_w32_result 2993c63293b5Smrg fi 2994c63293b5Smrg func_convert_file_check "$1" "$func_to_host_file_result" 2995c63293b5Smrg} 2996c63293b5Smrg# end func_convert_file_msys_to_w32 2997c63293b5Smrg 2998c63293b5Smrg 2999c63293b5Smrg# func_convert_file_cygwin_to_w32 ARG 3000c63293b5Smrg# Convert file name ARG from Cygwin to w32 format. Returns result in 3001c63293b5Smrg# func_to_host_file_result. 3002c63293b5Smrgfunc_convert_file_cygwin_to_w32 () 3003c63293b5Smrg{ 30049d0ccd10Smrg $debug_cmd 30059d0ccd10Smrg 30069d0ccd10Smrg func_to_host_file_result=$1 3007c63293b5Smrg if test -n "$1"; then 3008c63293b5Smrg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 3009c63293b5Smrg # LT_CYGPATH in this case. 3010c63293b5Smrg func_to_host_file_result=`cygpath -m "$1"` 3011c63293b5Smrg fi 3012c63293b5Smrg func_convert_file_check "$1" "$func_to_host_file_result" 3013c63293b5Smrg} 3014c63293b5Smrg# end func_convert_file_cygwin_to_w32 3015c63293b5Smrg 3016c63293b5Smrg 3017c63293b5Smrg# func_convert_file_nix_to_w32 ARG 3018c63293b5Smrg# Convert file name ARG from *nix to w32 format. Requires a wine environment 3019c63293b5Smrg# and a working winepath. Returns result in func_to_host_file_result. 3020c63293b5Smrgfunc_convert_file_nix_to_w32 () 3021c63293b5Smrg{ 30229d0ccd10Smrg $debug_cmd 30239d0ccd10Smrg 30249d0ccd10Smrg func_to_host_file_result=$1 3025c63293b5Smrg if test -n "$1"; then 3026c63293b5Smrg func_convert_core_file_wine_to_w32 "$1" 30279d0ccd10Smrg func_to_host_file_result=$func_convert_core_file_wine_to_w32_result 3028c63293b5Smrg fi 3029c63293b5Smrg func_convert_file_check "$1" "$func_to_host_file_result" 3030c63293b5Smrg} 3031c63293b5Smrg# end func_convert_file_nix_to_w32 3032c63293b5Smrg 3033c63293b5Smrg 3034c63293b5Smrg# func_convert_file_msys_to_cygwin ARG 3035c63293b5Smrg# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3036c63293b5Smrg# Returns result in func_to_host_file_result. 3037c63293b5Smrgfunc_convert_file_msys_to_cygwin () 3038c63293b5Smrg{ 30399d0ccd10Smrg $debug_cmd 30409d0ccd10Smrg 30419d0ccd10Smrg func_to_host_file_result=$1 3042c63293b5Smrg if test -n "$1"; then 3043c63293b5Smrg func_convert_core_msys_to_w32 "$1" 3044c63293b5Smrg func_cygpath -u "$func_convert_core_msys_to_w32_result" 30459d0ccd10Smrg func_to_host_file_result=$func_cygpath_result 3046c63293b5Smrg fi 3047c63293b5Smrg func_convert_file_check "$1" "$func_to_host_file_result" 3048c63293b5Smrg} 3049c63293b5Smrg# end func_convert_file_msys_to_cygwin 3050c63293b5Smrg 3051c63293b5Smrg 3052c63293b5Smrg# func_convert_file_nix_to_cygwin ARG 3053c63293b5Smrg# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 3054c63293b5Smrg# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 3055c63293b5Smrg# in func_to_host_file_result. 3056c63293b5Smrgfunc_convert_file_nix_to_cygwin () 3057c63293b5Smrg{ 30589d0ccd10Smrg $debug_cmd 30599d0ccd10Smrg 30609d0ccd10Smrg func_to_host_file_result=$1 3061c63293b5Smrg if test -n "$1"; then 3062c63293b5Smrg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 3063c63293b5Smrg func_convert_core_file_wine_to_w32 "$1" 3064c63293b5Smrg func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 30659d0ccd10Smrg func_to_host_file_result=$func_cygpath_result 3066c63293b5Smrg fi 3067c63293b5Smrg func_convert_file_check "$1" "$func_to_host_file_result" 3068c63293b5Smrg} 3069c63293b5Smrg# end func_convert_file_nix_to_cygwin 3070c63293b5Smrg 3071c63293b5Smrg 3072c63293b5Smrg############################################# 3073c63293b5Smrg# $build to $host PATH CONVERSION FUNCTIONS # 3074c63293b5Smrg############################################# 30759d0ccd10Smrg# invoked via '$to_host_path_cmd ARG' 3076c63293b5Smrg# 3077c63293b5Smrg# In each case, ARG is the path to be converted from $build to $host format. 3078c63293b5Smrg# The result will be available in $func_to_host_path_result. 3079c63293b5Smrg# 3080c63293b5Smrg# Path separators are also converted from $build format to $host format. If 3081c63293b5Smrg# ARG begins or ends with a path separator character, it is preserved (but 3082c63293b5Smrg# converted to $host format) on output. 3083c63293b5Smrg# 3084c63293b5Smrg# All path conversion functions are named using the following convention: 3085c63293b5Smrg# file name conversion function : func_convert_file_X_to_Y () 3086c63293b5Smrg# path conversion function : func_convert_path_X_to_Y () 3087c63293b5Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the 3088c63293b5Smrg# same. If conversion functions are added for new $build/$host combinations, 3089c63293b5Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd 3090c63293b5Smrg# will break. 3091c63293b5Smrg 3092c63293b5Smrg 3093c63293b5Smrg# func_init_to_host_path_cmd 3094c63293b5Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the 3095c63293b5Smrg# appropriate value, based on the value of $to_host_file_cmd. 3096c63293b5Smrgto_host_path_cmd= 3097c63293b5Smrgfunc_init_to_host_path_cmd () 3098c63293b5Smrg{ 30999d0ccd10Smrg $debug_cmd 31009d0ccd10Smrg 3101c63293b5Smrg if test -z "$to_host_path_cmd"; then 3102c63293b5Smrg func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 31039d0ccd10Smrg to_host_path_cmd=func_convert_path_$func_stripname_result 3104c63293b5Smrg fi 3105c63293b5Smrg} 3106c63293b5Smrg 3107c63293b5Smrg 3108c63293b5Smrg# func_to_host_path ARG 3109c63293b5Smrg# Converts the path ARG from $build format to $host format. Return result 3110c63293b5Smrg# in func_to_host_path_result. 3111c63293b5Smrgfunc_to_host_path () 3112c63293b5Smrg{ 31139d0ccd10Smrg $debug_cmd 31149d0ccd10Smrg 3115c63293b5Smrg func_init_to_host_path_cmd 3116c63293b5Smrg $to_host_path_cmd "$1" 3117c63293b5Smrg} 3118c63293b5Smrg# end func_to_host_path 3119c63293b5Smrg 3120c63293b5Smrg 3121c63293b5Smrg# func_convert_path_noop ARG 3122c63293b5Smrg# Copy ARG to func_to_host_path_result. 3123c63293b5Smrgfunc_convert_path_noop () 3124c63293b5Smrg{ 31259d0ccd10Smrg func_to_host_path_result=$1 3126c63293b5Smrg} 3127c63293b5Smrg# end func_convert_path_noop 3128c63293b5Smrg 3129c63293b5Smrg 3130c63293b5Smrg# func_convert_path_msys_to_w32 ARG 3131c63293b5Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 3132c63293b5Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 3133c63293b5Smrg# func_to_host_path_result. 3134c63293b5Smrgfunc_convert_path_msys_to_w32 () 3135e169010aSmrg{ 31369d0ccd10Smrg $debug_cmd 31379d0ccd10Smrg 31389d0ccd10Smrg func_to_host_path_result=$1 3139c63293b5Smrg if test -n "$1"; then 3140c63293b5Smrg # Remove leading and trailing path separator characters from ARG. MSYS 3141c63293b5Smrg # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 3142c63293b5Smrg # and winepath ignores them completely. 3143c63293b5Smrg func_stripname : : "$1" 3144c63293b5Smrg func_to_host_path_tmp1=$func_stripname_result 3145c63293b5Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 31469d0ccd10Smrg func_to_host_path_result=$func_convert_core_msys_to_w32_result 3147c63293b5Smrg func_convert_path_check : ";" \ 3148c63293b5Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3149c63293b5Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3150c63293b5Smrg fi 3151c63293b5Smrg} 3152c63293b5Smrg# end func_convert_path_msys_to_w32 3153e169010aSmrg 3154e169010aSmrg 3155c63293b5Smrg# func_convert_path_cygwin_to_w32 ARG 3156c63293b5Smrg# Convert path ARG from Cygwin to w32 format. Returns result in 3157c63293b5Smrg# func_to_host_file_result. 3158c63293b5Smrgfunc_convert_path_cygwin_to_w32 () 3159c63293b5Smrg{ 31609d0ccd10Smrg $debug_cmd 31619d0ccd10Smrg 31629d0ccd10Smrg func_to_host_path_result=$1 3163c63293b5Smrg if test -n "$1"; then 3164c63293b5Smrg # See func_convert_path_msys_to_w32: 3165c63293b5Smrg func_stripname : : "$1" 3166c63293b5Smrg func_to_host_path_tmp1=$func_stripname_result 3167c63293b5Smrg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 3168c63293b5Smrg func_convert_path_check : ";" \ 3169c63293b5Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3170c63293b5Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3171c63293b5Smrg fi 3172c63293b5Smrg} 3173c63293b5Smrg# end func_convert_path_cygwin_to_w32 3174e169010aSmrg 3175e169010aSmrg 3176c63293b5Smrg# func_convert_path_nix_to_w32 ARG 3177c63293b5Smrg# Convert path ARG from *nix to w32 format. Requires a wine environment and 3178c63293b5Smrg# a working winepath. Returns result in func_to_host_file_result. 3179c63293b5Smrgfunc_convert_path_nix_to_w32 () 3180c63293b5Smrg{ 31819d0ccd10Smrg $debug_cmd 31829d0ccd10Smrg 31839d0ccd10Smrg func_to_host_path_result=$1 3184c63293b5Smrg if test -n "$1"; then 3185c63293b5Smrg # See func_convert_path_msys_to_w32: 3186c63293b5Smrg func_stripname : : "$1" 3187c63293b5Smrg func_to_host_path_tmp1=$func_stripname_result 3188c63293b5Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 31899d0ccd10Smrg func_to_host_path_result=$func_convert_core_path_wine_to_w32_result 3190c63293b5Smrg func_convert_path_check : ";" \ 3191c63293b5Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3192c63293b5Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3193c63293b5Smrg fi 3194c63293b5Smrg} 3195c63293b5Smrg# end func_convert_path_nix_to_w32 3196e169010aSmrg 3197c63293b5Smrg 3198c63293b5Smrg# func_convert_path_msys_to_cygwin ARG 3199c63293b5Smrg# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3200c63293b5Smrg# Returns result in func_to_host_file_result. 3201c63293b5Smrgfunc_convert_path_msys_to_cygwin () 3202c63293b5Smrg{ 32039d0ccd10Smrg $debug_cmd 32049d0ccd10Smrg 32059d0ccd10Smrg func_to_host_path_result=$1 3206c63293b5Smrg if test -n "$1"; then 3207c63293b5Smrg # See func_convert_path_msys_to_w32: 3208c63293b5Smrg func_stripname : : "$1" 3209c63293b5Smrg func_to_host_path_tmp1=$func_stripname_result 3210c63293b5Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 3211c63293b5Smrg func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 32129d0ccd10Smrg func_to_host_path_result=$func_cygpath_result 3213c63293b5Smrg func_convert_path_check : : \ 3214c63293b5Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3215c63293b5Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3216c63293b5Smrg fi 3217c63293b5Smrg} 3218c63293b5Smrg# end func_convert_path_msys_to_cygwin 3219c63293b5Smrg 3220c63293b5Smrg 3221c63293b5Smrg# func_convert_path_nix_to_cygwin ARG 3222c63293b5Smrg# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 3223c63293b5Smrg# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 3224c63293b5Smrg# func_to_host_file_result. 3225c63293b5Smrgfunc_convert_path_nix_to_cygwin () 3226c63293b5Smrg{ 32279d0ccd10Smrg $debug_cmd 32289d0ccd10Smrg 32299d0ccd10Smrg func_to_host_path_result=$1 3230c63293b5Smrg if test -n "$1"; then 3231c63293b5Smrg # Remove leading and trailing path separator characters from 3232c63293b5Smrg # ARG. msys behavior is inconsistent here, cygpath turns them 3233c63293b5Smrg # into '.;' and ';.', and winepath ignores them completely. 3234c63293b5Smrg func_stripname : : "$1" 3235c63293b5Smrg func_to_host_path_tmp1=$func_stripname_result 3236c63293b5Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 3237c63293b5Smrg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 32389d0ccd10Smrg func_to_host_path_result=$func_cygpath_result 3239c63293b5Smrg func_convert_path_check : : \ 3240c63293b5Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3241c63293b5Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3242c63293b5Smrg fi 3243e169010aSmrg} 3244c63293b5Smrg# end func_convert_path_nix_to_cygwin 3245c63293b5Smrg 3246e169010aSmrg 32479d0ccd10Smrg# func_dll_def_p FILE 32489d0ccd10Smrg# True iff FILE is a Windows DLL '.def' file. 32499d0ccd10Smrg# Keep in sync with _LT_DLL_DEF_P in libtool.m4 32509d0ccd10Smrgfunc_dll_def_p () 32519d0ccd10Smrg{ 32529d0ccd10Smrg $debug_cmd 32539d0ccd10Smrg 32549d0ccd10Smrg func_dll_def_p_tmp=`$SED -n \ 32559d0ccd10Smrg -e 's/^[ ]*//' \ 32569d0ccd10Smrg -e '/^\(;.*\)*$/d' \ 32579d0ccd10Smrg -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ 32589d0ccd10Smrg -e q \ 32599d0ccd10Smrg "$1"` 32609d0ccd10Smrg test DEF = "$func_dll_def_p_tmp" 32619d0ccd10Smrg} 32629d0ccd10Smrg 32639d0ccd10Smrg 3264e169010aSmrg# func_mode_compile arg... 3265e169010aSmrgfunc_mode_compile () 3266e169010aSmrg{ 32679d0ccd10Smrg $debug_cmd 32689d0ccd10Smrg 3269e169010aSmrg # Get the compilation command and the source file. 3270e169010aSmrg base_compile= 32719d0ccd10Smrg srcfile=$nonopt # always keep a non-empty value in "srcfile" 3272e169010aSmrg suppress_opt=yes 3273e169010aSmrg suppress_output= 3274e169010aSmrg arg_mode=normal 3275e169010aSmrg libobj= 3276e169010aSmrg later= 3277e169010aSmrg pie_flag= 3278e169010aSmrg 3279e169010aSmrg for arg 3280e169010aSmrg do 3281e169010aSmrg case $arg_mode in 3282e169010aSmrg arg ) 3283e169010aSmrg # do not "continue". Instead, add this to base_compile 32849d0ccd10Smrg lastarg=$arg 3285e169010aSmrg arg_mode=normal 3286e169010aSmrg ;; 3287e169010aSmrg 3288e169010aSmrg target ) 32899d0ccd10Smrg libobj=$arg 3290e169010aSmrg arg_mode=normal 3291e169010aSmrg continue 3292e169010aSmrg ;; 3293e169010aSmrg 3294e169010aSmrg normal ) 3295e169010aSmrg # Accept any command-line options. 3296e169010aSmrg case $arg in 3297e169010aSmrg -o) 3298e169010aSmrg test -n "$libobj" && \ 32999d0ccd10Smrg func_fatal_error "you cannot specify '-o' more than once" 3300e169010aSmrg arg_mode=target 3301e169010aSmrg continue 3302e169010aSmrg ;; 3303e169010aSmrg 3304e169010aSmrg -pie | -fpie | -fPIE) 3305c63293b5Smrg func_append pie_flag " $arg" 3306e169010aSmrg continue 3307e169010aSmrg ;; 3308e169010aSmrg 3309e169010aSmrg -shared | -static | -prefer-pic | -prefer-non-pic) 3310c63293b5Smrg func_append later " $arg" 3311e169010aSmrg continue 3312e169010aSmrg ;; 3313e169010aSmrg 3314e169010aSmrg -no-suppress) 3315e169010aSmrg suppress_opt=no 3316e169010aSmrg continue 3317e169010aSmrg ;; 3318e169010aSmrg 3319e169010aSmrg -Xcompiler) 3320e169010aSmrg arg_mode=arg # the next one goes into the "base_compile" arg list 3321e169010aSmrg continue # The current "srcfile" will either be retained or 3322e169010aSmrg ;; # replaced later. I would guess that would be a bug. 3323e169010aSmrg 3324e169010aSmrg -Wc,*) 3325e169010aSmrg func_stripname '-Wc,' '' "$arg" 3326e169010aSmrg args=$func_stripname_result 3327e169010aSmrg lastarg= 33289d0ccd10Smrg save_ifs=$IFS; IFS=, 3329e169010aSmrg for arg in $args; do 33309d0ccd10Smrg IFS=$save_ifs 3331c63293b5Smrg func_append_quoted lastarg "$arg" 33327914d74bSmrg done 33339d0ccd10Smrg IFS=$save_ifs 3334e169010aSmrg func_stripname ' ' '' "$lastarg" 3335e169010aSmrg lastarg=$func_stripname_result 33367914d74bSmrg 33377914d74bSmrg # Add the arguments to base_compile. 3338c63293b5Smrg func_append base_compile " $lastarg" 33397914d74bSmrg continue 33407914d74bSmrg ;; 33417914d74bSmrg 3342e169010aSmrg *) 33437914d74bSmrg # Accept the current argument as the source file. 33447914d74bSmrg # The previous "srcfile" becomes the current argument. 33457914d74bSmrg # 33469d0ccd10Smrg lastarg=$srcfile 33479d0ccd10Smrg srcfile=$arg 33487914d74bSmrg ;; 33497914d74bSmrg esac # case $arg 33507914d74bSmrg ;; 33517914d74bSmrg esac # case $arg_mode 33527914d74bSmrg 33537914d74bSmrg # Aesthetically quote the previous argument. 3354c63293b5Smrg func_append_quoted base_compile "$lastarg" 33557914d74bSmrg done # for arg 33567914d74bSmrg 33577914d74bSmrg case $arg_mode in 33587914d74bSmrg arg) 3359e169010aSmrg func_fatal_error "you must specify an argument for -Xcompile" 33607914d74bSmrg ;; 33617914d74bSmrg target) 33629d0ccd10Smrg func_fatal_error "you must specify a target with '-o'" 33637914d74bSmrg ;; 33647914d74bSmrg *) 33657914d74bSmrg # Get the name of the library object. 3366e169010aSmrg test -z "$libobj" && { 3367e169010aSmrg func_basename "$srcfile" 33689d0ccd10Smrg libobj=$func_basename_result 3369e169010aSmrg } 33707914d74bSmrg ;; 33717914d74bSmrg esac 33727914d74bSmrg 33737914d74bSmrg # Recognize several different file suffixes. 33747914d74bSmrg # If the user specifies -o file.o, it is replaced with file.lo 33757914d74bSmrg case $libobj in 3376e169010aSmrg *.[cCFSifmso] | \ 3377e169010aSmrg *.ada | *.adb | *.ads | *.asm | \ 3378e169010aSmrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 3379e6d5e4e0Smrg *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 3380e169010aSmrg func_xform "$libobj" 3381e169010aSmrg libobj=$func_xform_result 3382e169010aSmrg ;; 33837914d74bSmrg esac 33847914d74bSmrg 33857914d74bSmrg case $libobj in 3386e169010aSmrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 33877914d74bSmrg *) 33889d0ccd10Smrg func_fatal_error "cannot determine name of library object from '$libobj'" 33897914d74bSmrg ;; 33907914d74bSmrg esac 33917914d74bSmrg 33927914d74bSmrg func_infer_tag $base_compile 33937914d74bSmrg 33947914d74bSmrg for arg in $later; do 33957914d74bSmrg case $arg in 3396e169010aSmrg -shared) 33979d0ccd10Smrg test yes = "$build_libtool_libs" \ 33989d0ccd10Smrg || func_fatal_configuration "cannot build a shared library" 3399e169010aSmrg build_old_libs=no 3400e169010aSmrg continue 3401e169010aSmrg ;; 3402e169010aSmrg 34037914d74bSmrg -static) 3404e169010aSmrg build_libtool_libs=no 34057914d74bSmrg build_old_libs=yes 34067914d74bSmrg continue 34077914d74bSmrg ;; 34087914d74bSmrg 34097914d74bSmrg -prefer-pic) 34107914d74bSmrg pic_mode=yes 34117914d74bSmrg continue 34127914d74bSmrg ;; 34137914d74bSmrg 34147914d74bSmrg -prefer-non-pic) 34157914d74bSmrg pic_mode=no 34167914d74bSmrg continue 34177914d74bSmrg ;; 34187914d74bSmrg esac 34197914d74bSmrg done 34207914d74bSmrg 3421e169010aSmrg func_quote_for_eval "$libobj" 3422e169010aSmrg test "X$libobj" != "X$func_quote_for_eval_result" \ 3423e169010aSmrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 34249d0ccd10Smrg && func_warning "libobj name '$libobj' may not contain shell special characters." 3425e169010aSmrg func_dirname_and_basename "$obj" "/" "" 34269d0ccd10Smrg objname=$func_basename_result 34279d0ccd10Smrg xdir=$func_dirname_result 34289d0ccd10Smrg lobj=$xdir$objdir/$objname 34297914d74bSmrg 3430e169010aSmrg test -z "$base_compile" && \ 3431e169010aSmrg func_fatal_help "you must specify a compilation command" 34327914d74bSmrg 34337914d74bSmrg # Delete any leftover library objects. 34349d0ccd10Smrg if test yes = "$build_old_libs"; then 34357914d74bSmrg removelist="$obj $lobj $libobj ${libobj}T" 34367914d74bSmrg else 34377914d74bSmrg removelist="$lobj $libobj ${libobj}T" 34387914d74bSmrg fi 34397914d74bSmrg 34407914d74bSmrg # On Cygwin there's no "real" PIC flag so we must build both object types 34417914d74bSmrg case $host_os in 3442e169010aSmrg cygwin* | mingw* | pw32* | os2* | cegcc*) 34437914d74bSmrg pic_mode=default 34447914d74bSmrg ;; 34457914d74bSmrg esac 34469d0ccd10Smrg if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then 34477914d74bSmrg # non-PIC code in shared libraries is not supported 34487914d74bSmrg pic_mode=default 34497914d74bSmrg fi 34507914d74bSmrg 34517914d74bSmrg # Calculate the filename of the output object if compiler does 34527914d74bSmrg # not support -o with -c 34539d0ccd10Smrg if test no = "$compiler_c_o"; then 34549d0ccd10Smrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext 34559d0ccd10Smrg lockfile=$output_obj.lock 34567914d74bSmrg else 34577914d74bSmrg output_obj= 34587914d74bSmrg need_locks=no 34597914d74bSmrg lockfile= 34607914d74bSmrg fi 34617914d74bSmrg 34627914d74bSmrg # Lock this critical section if it is needed 34637914d74bSmrg # We use this script file to make the link, it avoids creating a new file 34649d0ccd10Smrg if test yes = "$need_locks"; then 3465e169010aSmrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 3466e169010aSmrg func_echo "Waiting for $lockfile to be removed" 34677914d74bSmrg sleep 2 34687914d74bSmrg done 34699d0ccd10Smrg elif test warn = "$need_locks"; then 34707914d74bSmrg if test -f "$lockfile"; then 3471e169010aSmrg $ECHO "\ 34727914d74bSmrg*** ERROR, $lockfile exists and contains: 34737914d74bSmrg`cat $lockfile 2>/dev/null` 34747914d74bSmrg 34757914d74bSmrgThis indicates that another process is trying to use the same 34767914d74bSmrgtemporary object file, and libtool could not work around it because 34779d0ccd10Smrgyour compiler does not support '-c' and '-o' together. If you 34787914d74bSmrgrepeat this compilation, it may succeed, by chance, but you had better 34797914d74bSmrgavoid parallel builds (make -j) in this platform, or get a better 34807914d74bSmrgcompiler." 34817914d74bSmrg 3482e169010aSmrg $opt_dry_run || $RM $removelist 34837914d74bSmrg exit $EXIT_FAILURE 34847914d74bSmrg fi 3485c63293b5Smrg func_append removelist " $output_obj" 3486e169010aSmrg $ECHO "$srcfile" > "$lockfile" 34877914d74bSmrg fi 34887914d74bSmrg 3489e169010aSmrg $opt_dry_run || $RM $removelist 3490c63293b5Smrg func_append removelist " $lockfile" 3491e169010aSmrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 3492e169010aSmrg 3493c63293b5Smrg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 3494c63293b5Smrg srcfile=$func_to_tool_file_result 3495e169010aSmrg func_quote_for_eval "$srcfile" 3496e169010aSmrg qsrcfile=$func_quote_for_eval_result 34977914d74bSmrg 34987914d74bSmrg # Only build a PIC object if we are building libtool libraries. 34999d0ccd10Smrg if test yes = "$build_libtool_libs"; then 35007914d74bSmrg # Without this assignment, base_compile gets emptied. 35017914d74bSmrg fbsd_hideous_sh_bug=$base_compile 35027914d74bSmrg 35039d0ccd10Smrg if test no != "$pic_mode"; then 35047914d74bSmrg command="$base_compile $qsrcfile $pic_flag" 35057914d74bSmrg else 35067914d74bSmrg # Don't build PIC code 35077914d74bSmrg command="$base_compile $qsrcfile" 35087914d74bSmrg fi 35097914d74bSmrg 3510e169010aSmrg func_mkdir_p "$xdir$objdir" 35117914d74bSmrg 35127914d74bSmrg if test -z "$output_obj"; then 35137914d74bSmrg # Place PIC objects in $objdir 3514c63293b5Smrg func_append command " -o $lobj" 35157914d74bSmrg fi 35167914d74bSmrg 3517e169010aSmrg func_show_eval_locale "$command" \ 3518e169010aSmrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 35197914d74bSmrg 35209d0ccd10Smrg if test warn = "$need_locks" && 35217914d74bSmrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3522e169010aSmrg $ECHO "\ 35237914d74bSmrg*** ERROR, $lockfile contains: 35247914d74bSmrg`cat $lockfile 2>/dev/null` 35257914d74bSmrg 35267914d74bSmrgbut it should contain: 35277914d74bSmrg$srcfile 35287914d74bSmrg 35297914d74bSmrgThis indicates that another process is trying to use the same 35307914d74bSmrgtemporary object file, and libtool could not work around it because 35319d0ccd10Smrgyour compiler does not support '-c' and '-o' together. If you 35327914d74bSmrgrepeat this compilation, it may succeed, by chance, but you had better 35337914d74bSmrgavoid parallel builds (make -j) in this platform, or get a better 35347914d74bSmrgcompiler." 35357914d74bSmrg 3536e169010aSmrg $opt_dry_run || $RM $removelist 35377914d74bSmrg exit $EXIT_FAILURE 35387914d74bSmrg fi 35397914d74bSmrg 35407914d74bSmrg # Just move the object if needed, then go on to compile the next one 35417914d74bSmrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 3542e169010aSmrg func_show_eval '$MV "$output_obj" "$lobj"' \ 3543e169010aSmrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 35447914d74bSmrg fi 35457914d74bSmrg 35467914d74bSmrg # Allow error messages only from the first compilation. 35479d0ccd10Smrg if test yes = "$suppress_opt"; then 3548e169010aSmrg suppress_output=' >/dev/null 2>&1' 35497914d74bSmrg fi 35507914d74bSmrg fi 35517914d74bSmrg 35527914d74bSmrg # Only build a position-dependent object if we build old libraries. 35539d0ccd10Smrg if test yes = "$build_old_libs"; then 35549d0ccd10Smrg if test yes != "$pic_mode"; then 35557914d74bSmrg # Don't build PIC code 3556e169010aSmrg command="$base_compile $qsrcfile$pie_flag" 35577914d74bSmrg else 35587914d74bSmrg command="$base_compile $qsrcfile $pic_flag" 35597914d74bSmrg fi 35609d0ccd10Smrg if test yes = "$compiler_c_o"; then 3561c63293b5Smrg func_append command " -o $obj" 35627914d74bSmrg fi 35637914d74bSmrg 35647914d74bSmrg # Suppress compiler output if we already did a PIC compilation. 3565c63293b5Smrg func_append command "$suppress_output" 3566e169010aSmrg func_show_eval_locale "$command" \ 3567e169010aSmrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 35687914d74bSmrg 35699d0ccd10Smrg if test warn = "$need_locks" && 35707914d74bSmrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3571e169010aSmrg $ECHO "\ 35727914d74bSmrg*** ERROR, $lockfile contains: 35737914d74bSmrg`cat $lockfile 2>/dev/null` 35747914d74bSmrg 35757914d74bSmrgbut it should contain: 35767914d74bSmrg$srcfile 35777914d74bSmrg 35787914d74bSmrgThis indicates that another process is trying to use the same 35797914d74bSmrgtemporary object file, and libtool could not work around it because 35809d0ccd10Smrgyour compiler does not support '-c' and '-o' together. If you 35817914d74bSmrgrepeat this compilation, it may succeed, by chance, but you had better 35827914d74bSmrgavoid parallel builds (make -j) in this platform, or get a better 35837914d74bSmrgcompiler." 35847914d74bSmrg 3585e169010aSmrg $opt_dry_run || $RM $removelist 35867914d74bSmrg exit $EXIT_FAILURE 35877914d74bSmrg fi 35887914d74bSmrg 35897914d74bSmrg # Just move the object if needed 35907914d74bSmrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 3591e169010aSmrg func_show_eval '$MV "$output_obj" "$obj"' \ 3592e169010aSmrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 35937914d74bSmrg fi 35947914d74bSmrg fi 35957914d74bSmrg 3596e169010aSmrg $opt_dry_run || { 3597e169010aSmrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 35987914d74bSmrg 3599e169010aSmrg # Unlock the critical section if it was locked 36009d0ccd10Smrg if test no != "$need_locks"; then 3601e169010aSmrg removelist=$lockfile 3602e169010aSmrg $RM "$lockfile" 3603e169010aSmrg fi 3604e169010aSmrg } 36057914d74bSmrg 36067914d74bSmrg exit $EXIT_SUCCESS 3607e169010aSmrg} 36087914d74bSmrg 3609e169010aSmrg$opt_help || { 36109d0ccd10Smrg test compile = "$opt_mode" && func_mode_compile ${1+"$@"} 3611e169010aSmrg} 36127914d74bSmrg 3613e169010aSmrgfunc_mode_help () 3614e169010aSmrg{ 3615e169010aSmrg # We need to display help for each of the modes. 3616c63293b5Smrg case $opt_mode in 3617e169010aSmrg "") 3618e169010aSmrg # Generic help is extracted from the usage comments 3619e169010aSmrg # at the start of this file. 3620e169010aSmrg func_help 3621e169010aSmrg ;; 36227914d74bSmrg 3623e169010aSmrg clean) 3624e169010aSmrg $ECHO \ 3625e169010aSmrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 36267914d74bSmrg 3627e169010aSmrgRemove files from the build directory. 36287914d74bSmrg 3629e169010aSmrgRM is the name of the program to use to delete files associated with each FILE 36309d0ccd10Smrg(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 3631e169010aSmrgto RM. 36327914d74bSmrg 3633e169010aSmrgIf FILE is a libtool library, object or program, all the files associated 3634e169010aSmrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 3635e169010aSmrg ;; 36367914d74bSmrg 3637e169010aSmrg compile) 3638e169010aSmrg $ECHO \ 3639e169010aSmrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 36407914d74bSmrg 3641e169010aSmrgCompile a source file into a libtool library object. 36427914d74bSmrg 3643e169010aSmrgThis mode accepts the following additional options: 36447914d74bSmrg 3645e169010aSmrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 3646e169010aSmrg -no-suppress do not suppress compiler output for multiple passes 3647e8ead290Smrg -prefer-pic try to build PIC objects only 3648e8ead290Smrg -prefer-non-pic try to build non-PIC objects only 36499d0ccd10Smrg -shared do not build a '.o' file suitable for static linking 36509d0ccd10Smrg -static only build a '.o' file suitable for static linking 3651e8ead290Smrg -Wc,FLAG pass FLAG directly to the compiler 36527914d74bSmrg 36539d0ccd10SmrgCOMPILE-COMMAND is a command to be used in creating a 'standard' object file 3654e169010aSmrgfrom the given SOURCEFILE. 36557914d74bSmrg 3656e169010aSmrgThe output file name is determined by removing the directory component from 36579d0ccd10SmrgSOURCEFILE, then substituting the C source code suffix '.c' with the 36589d0ccd10Smrglibrary object suffix, '.lo'." 3659e169010aSmrg ;; 36607914d74bSmrg 3661e169010aSmrg execute) 3662e169010aSmrg $ECHO \ 3663e169010aSmrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 36647914d74bSmrg 3665e169010aSmrgAutomatically set library path, then run a program. 36667914d74bSmrg 3667e169010aSmrgThis mode accepts the following additional options: 36687914d74bSmrg 3669e169010aSmrg -dlopen FILE add the directory containing FILE to the library path 36707914d74bSmrg 36719d0ccd10SmrgThis mode sets the library path environment variable according to '-dlopen' 3672e169010aSmrgflags. 36737914d74bSmrg 3674e169010aSmrgIf any of the ARGS are libtool executable wrappers, then they are translated 3675e169010aSmrginto their corresponding uninstalled binary, and any of their required library 3676e169010aSmrgdirectories are added to the library path. 36777914d74bSmrg 3678e169010aSmrgThen, COMMAND is executed, with ARGS as arguments." 3679e169010aSmrg ;; 36807914d74bSmrg 3681e169010aSmrg finish) 3682e169010aSmrg $ECHO \ 3683e169010aSmrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 36847914d74bSmrg 3685e169010aSmrgComplete the installation of libtool libraries. 36867914d74bSmrg 3687e169010aSmrgEach LIBDIR is a directory that contains libtool libraries. 36887914d74bSmrg 3689e169010aSmrgThe commands that this mode executes may require superuser privileges. Use 36909d0ccd10Smrgthe '--dry-run' option if you just want to see what would be executed." 3691e169010aSmrg ;; 36927914d74bSmrg 3693e169010aSmrg install) 3694e169010aSmrg $ECHO \ 3695e169010aSmrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 36967914d74bSmrg 3697e169010aSmrgInstall executables or libraries. 36987914d74bSmrg 3699e169010aSmrgINSTALL-COMMAND is the installation command. The first component should be 37009d0ccd10Smrgeither the 'install' or 'cp' program. 37017914d74bSmrg 3702e169010aSmrgThe following components of INSTALL-COMMAND are treated specially: 37037914d74bSmrg 3704e8ead290Smrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 37057914d74bSmrg 3706e169010aSmrgThe rest of the components are interpreted as arguments to that command (only 3707e169010aSmrgBSD-compatible install options are recognized)." 3708e169010aSmrg ;; 37097914d74bSmrg 3710e169010aSmrg link) 3711e169010aSmrg $ECHO \ 3712e169010aSmrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 37137914d74bSmrg 3714e169010aSmrgLink object files or libraries together to form another library, or to 3715e169010aSmrgcreate an executable program. 37167914d74bSmrg 3717e169010aSmrgLINK-COMMAND is a command using the C compiler that you would use to create 3718e169010aSmrga program from several object files. 37197914d74bSmrg 3720e169010aSmrgThe following components of LINK-COMMAND are treated specially: 37217914d74bSmrg 3722e169010aSmrg -all-static do not do any dynamic linking at all 3723e169010aSmrg -avoid-version do not add a version suffix if possible 3724e8ead290Smrg -bindir BINDIR specify path to binaries directory (for systems where 3725e8ead290Smrg libraries must be found in the PATH setting at runtime) 37269d0ccd10Smrg -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime 3727e169010aSmrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 3728e169010aSmrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 3729e169010aSmrg -export-symbols SYMFILE 3730e169010aSmrg try to export only the symbols listed in SYMFILE 3731e169010aSmrg -export-symbols-regex REGEX 3732e169010aSmrg try to export only the symbols matching REGEX 3733e169010aSmrg -LLIBDIR search LIBDIR for required installed libraries 3734e169010aSmrg -lNAME OUTPUT-FILE requires the installed library libNAME 3735e169010aSmrg -module build a library that can dlopened 3736e169010aSmrg -no-fast-install disable the fast-install mode 3737e169010aSmrg -no-install link a not-installable executable 3738e169010aSmrg -no-undefined declare that a library does not refer to external symbols 3739e169010aSmrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 37409d0ccd10Smrg -objectlist FILE use a list of object files found in FILE to specify objects 37419d0ccd10Smrg -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) 3742e169010aSmrg -precious-files-regex REGEX 3743e169010aSmrg don't remove output files matching REGEX 3744e169010aSmrg -release RELEASE specify package release information 3745e169010aSmrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 3746e169010aSmrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 3747e169010aSmrg -shared only do dynamic linking of libtool libraries 3748e169010aSmrg -shrext SUFFIX override the standard shared library file extension 3749e169010aSmrg -static do not do any dynamic linking of uninstalled libtool libraries 3750e169010aSmrg -static-libtool-libs 3751e169010aSmrg do not do any dynamic linking of libtool libraries 3752e169010aSmrg -version-info CURRENT[:REVISION[:AGE]] 3753e169010aSmrg specify library version info [each variable defaults to 0] 3754e169010aSmrg -weak LIBNAME declare that the target provides the LIBNAME interface 3755e8ead290Smrg -Wc,FLAG 3756e8ead290Smrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 3757e8ead290Smrg -Wl,FLAG 3758e8ead290Smrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 3759e8ead290Smrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 37607914d74bSmrg 37619d0ccd10SmrgAll other options (arguments beginning with '-') are ignored. 37627914d74bSmrg 37639d0ccd10SmrgEvery other argument is treated as a filename. Files ending in '.la' are 3764e169010aSmrgtreated as uninstalled libtool libraries, other files are standard or library 3765e169010aSmrgobject files. 37667914d74bSmrg 37679d0ccd10SmrgIf the OUTPUT-FILE ends in '.la', then a libtool library is created, 37689d0ccd10Smrgonly library objects ('.lo' files) may be specified, and '-rpath' is 3769e169010aSmrgrequired, except when creating a convenience library. 37707914d74bSmrg 37719d0ccd10SmrgIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created 37729d0ccd10Smrgusing 'ar' and 'ranlib', or on Windows using 'lib'. 37737914d74bSmrg 37749d0ccd10SmrgIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file 3775e169010aSmrgis created, otherwise an executable program is created." 37767914d74bSmrg ;; 37777914d74bSmrg 3778e169010aSmrg uninstall) 3779e169010aSmrg $ECHO \ 3780e169010aSmrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 37817914d74bSmrg 3782e169010aSmrgRemove libraries from an installation directory. 37837914d74bSmrg 3784e169010aSmrgRM is the name of the program to use to delete files associated with each FILE 37859d0ccd10Smrg(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 3786e169010aSmrgto RM. 37877914d74bSmrg 3788e169010aSmrgIf FILE is a libtool library, all the files associated with it are deleted. 3789e169010aSmrgOtherwise, only FILE itself is deleted using RM." 3790e169010aSmrg ;; 37917914d74bSmrg 3792e169010aSmrg *) 37939d0ccd10Smrg func_fatal_help "invalid operation mode '$opt_mode'" 3794e169010aSmrg ;; 3795e169010aSmrg esac 37967914d74bSmrg 3797e8ead290Smrg echo 37989d0ccd10Smrg $ECHO "Try '$progname --help' for more information about other modes." 3799e169010aSmrg} 38007914d74bSmrg 3801e8ead290Smrg# Now that we've collected a possible --mode arg, show help if necessary 3802e8ead290Smrgif $opt_help; then 38039d0ccd10Smrg if test : = "$opt_help"; then 3804e8ead290Smrg func_mode_help 3805e8ead290Smrg else 3806e8ead290Smrg { 3807e8ead290Smrg func_help noexit 3808c63293b5Smrg for opt_mode in compile link execute install finish uninstall clean; do 3809e8ead290Smrg func_mode_help 3810e8ead290Smrg done 38119d0ccd10Smrg } | $SED -n '1p; 2,$s/^Usage:/ or: /p' 3812e8ead290Smrg { 3813e8ead290Smrg func_help noexit 3814c63293b5Smrg for opt_mode in compile link execute install finish uninstall clean; do 3815e8ead290Smrg echo 3816e8ead290Smrg func_mode_help 3817e8ead290Smrg done 3818e8ead290Smrg } | 38199d0ccd10Smrg $SED '1d 3820e8ead290Smrg /^When reporting/,/^Report/{ 3821e8ead290Smrg H 3822e8ead290Smrg d 3823e8ead290Smrg } 3824e8ead290Smrg $x 3825e8ead290Smrg /information about other modes/d 3826e8ead290Smrg /more detailed .*MODE/d 3827e8ead290Smrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 3828e8ead290Smrg fi 3829e8ead290Smrg exit $? 3830e8ead290Smrgfi 38317914d74bSmrg 38327914d74bSmrg 3833e169010aSmrg# func_mode_execute arg... 3834e169010aSmrgfunc_mode_execute () 3835e169010aSmrg{ 38369d0ccd10Smrg $debug_cmd 38379d0ccd10Smrg 3838e169010aSmrg # The first argument is the command name. 38399d0ccd10Smrg cmd=$nonopt 3840e169010aSmrg test -z "$cmd" && \ 3841e169010aSmrg func_fatal_help "you must specify a COMMAND" 38427914d74bSmrg 3843e169010aSmrg # Handle -dlopen flags immediately. 3844c63293b5Smrg for file in $opt_dlopen; do 3845e169010aSmrg test -f "$file" \ 38469d0ccd10Smrg || func_fatal_help "'$file' is not a file" 38477914d74bSmrg 3848e169010aSmrg dir= 3849e169010aSmrg case $file in 3850e169010aSmrg *.la) 3851c63293b5Smrg func_resolve_sysroot "$file" 3852c63293b5Smrg file=$func_resolve_sysroot_result 3853c63293b5Smrg 3854e169010aSmrg # Check to see that this really is a libtool archive. 3855e169010aSmrg func_lalib_unsafe_p "$file" \ 38569d0ccd10Smrg || func_fatal_help "'$lib' is not a valid libtool archive" 38577914d74bSmrg 3858e169010aSmrg # Read the libtool library. 3859e169010aSmrg dlname= 3860e169010aSmrg library_names= 3861e169010aSmrg func_source "$file" 38627914d74bSmrg 3863e169010aSmrg # Skip this library if it cannot be dlopened. 3864e169010aSmrg if test -z "$dlname"; then 3865e169010aSmrg # Warn if it was a shared library. 3866e169010aSmrg test -n "$library_names" && \ 38679d0ccd10Smrg func_warning "'$file' was not linked with '-export-dynamic'" 3868e169010aSmrg continue 3869e169010aSmrg fi 38707914d74bSmrg 3871e169010aSmrg func_dirname "$file" "" "." 38729d0ccd10Smrg dir=$func_dirname_result 38737914d74bSmrg 3874e169010aSmrg if test -f "$dir/$objdir/$dlname"; then 3875c63293b5Smrg func_append dir "/$objdir" 3876e169010aSmrg else 3877e169010aSmrg if test ! -f "$dir/$dlname"; then 38789d0ccd10Smrg func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" 3879e169010aSmrg fi 3880e169010aSmrg fi 38817914d74bSmrg ;; 38827914d74bSmrg 3883e169010aSmrg *.lo) 3884e169010aSmrg # Just add the directory containing the .lo file. 3885e169010aSmrg func_dirname "$file" "" "." 38869d0ccd10Smrg dir=$func_dirname_result 38877914d74bSmrg ;; 38887914d74bSmrg 3889e169010aSmrg *) 38909d0ccd10Smrg func_warning "'-dlopen' is ignored for non-libtool libraries and objects" 38917914d74bSmrg continue 38927914d74bSmrg ;; 3893e169010aSmrg esac 38947914d74bSmrg 3895e169010aSmrg # Get the absolute pathname. 3896e169010aSmrg absdir=`cd "$dir" && pwd` 38979d0ccd10Smrg test -n "$absdir" && dir=$absdir 38987914d74bSmrg 3899e169010aSmrg # Now add the directory to shlibpath_var. 3900e169010aSmrg if eval "test -z \"\$$shlibpath_var\""; then 3901e169010aSmrg eval "$shlibpath_var=\"\$dir\"" 3902e169010aSmrg else 3903e169010aSmrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 3904e169010aSmrg fi 3905e169010aSmrg done 39067914d74bSmrg 3907e169010aSmrg # This variable tells wrapper scripts just to set shlibpath_var 3908e169010aSmrg # rather than running their programs. 39099d0ccd10Smrg libtool_execute_magic=$magic 39107914d74bSmrg 3911e169010aSmrg # Check if any of the arguments is a wrapper script. 3912e169010aSmrg args= 3913e169010aSmrg for file 3914e169010aSmrg do 3915e169010aSmrg case $file in 3916e8ead290Smrg -* | *.la | *.lo ) ;; 3917e169010aSmrg *) 3918e169010aSmrg # Do a test to see if this is really a libtool program. 3919e169010aSmrg if func_ltwrapper_script_p "$file"; then 3920e169010aSmrg func_source "$file" 3921e169010aSmrg # Transform arg to wrapped name. 39229d0ccd10Smrg file=$progdir/$program 3923e169010aSmrg elif func_ltwrapper_executable_p "$file"; then 3924e169010aSmrg func_ltwrapper_scriptname "$file" 3925e169010aSmrg func_source "$func_ltwrapper_scriptname_result" 3926e169010aSmrg # Transform arg to wrapped name. 39279d0ccd10Smrg file=$progdir/$program 3928e169010aSmrg fi 3929e169010aSmrg ;; 3930e169010aSmrg esac 3931e169010aSmrg # Quote arguments (to preserve shell metacharacters). 3932c63293b5Smrg func_append_quoted args "$file" 3933e169010aSmrg done 39347914d74bSmrg 39359d0ccd10Smrg if $opt_dry_run; then 39369d0ccd10Smrg # Display what would be done. 39379d0ccd10Smrg if test -n "$shlibpath_var"; then 39389d0ccd10Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 39399d0ccd10Smrg echo "export $shlibpath_var" 39409d0ccd10Smrg fi 39419d0ccd10Smrg $ECHO "$cmd$args" 39429d0ccd10Smrg exit $EXIT_SUCCESS 39439d0ccd10Smrg else 3944e169010aSmrg if test -n "$shlibpath_var"; then 3945e169010aSmrg # Export the shlibpath_var. 3946e169010aSmrg eval "export $shlibpath_var" 3947e169010aSmrg fi 39487914d74bSmrg 3949e169010aSmrg # Restore saved environment variables 3950e169010aSmrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 3951e169010aSmrg do 3952e169010aSmrg eval "if test \"\${save_$lt_var+set}\" = set; then 3953e169010aSmrg $lt_var=\$save_$lt_var; export $lt_var 3954e169010aSmrg else 3955e169010aSmrg $lt_unset $lt_var 3956e169010aSmrg fi" 3957e169010aSmrg done 39587914d74bSmrg 3959e169010aSmrg # Now prepare to actually exec the command. 39609d0ccd10Smrg exec_cmd=\$cmd$args 3961e169010aSmrg fi 3962e169010aSmrg} 39637914d74bSmrg 39649d0ccd10Smrgtest execute = "$opt_mode" && func_mode_execute ${1+"$@"} 39657914d74bSmrg 39667914d74bSmrg 3967e169010aSmrg# func_mode_finish arg... 3968e169010aSmrgfunc_mode_finish () 3969e169010aSmrg{ 39709d0ccd10Smrg $debug_cmd 39719d0ccd10Smrg 3972c63293b5Smrg libs= 3973c63293b5Smrg libdirs= 3974e169010aSmrg admincmds= 39757914d74bSmrg 3976c63293b5Smrg for opt in "$nonopt" ${1+"$@"} 3977c63293b5Smrg do 3978c63293b5Smrg if test -d "$opt"; then 3979c63293b5Smrg func_append libdirs " $opt" 3980c63293b5Smrg 3981c63293b5Smrg elif test -f "$opt"; then 3982c63293b5Smrg if func_lalib_unsafe_p "$opt"; then 3983c63293b5Smrg func_append libs " $opt" 3984c63293b5Smrg else 39859d0ccd10Smrg func_warning "'$opt' is not a valid libtool archive" 3986c63293b5Smrg fi 3987c63293b5Smrg 3988c63293b5Smrg else 39899d0ccd10Smrg func_fatal_error "invalid argument '$opt'" 3990c63293b5Smrg fi 3991c63293b5Smrg done 3992c63293b5Smrg 3993c63293b5Smrg if test -n "$libs"; then 3994c63293b5Smrg if test -n "$lt_sysroot"; then 3995c63293b5Smrg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 3996c63293b5Smrg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 3997c63293b5Smrg else 3998c63293b5Smrg sysroot_cmd= 3999c63293b5Smrg fi 4000c63293b5Smrg 4001c63293b5Smrg # Remove sysroot references 4002c63293b5Smrg if $opt_dry_run; then 4003c63293b5Smrg for lib in $libs; do 40049d0ccd10Smrg echo "removing references to $lt_sysroot and '=' prefixes from $lib" 4005c63293b5Smrg done 4006c63293b5Smrg else 4007c63293b5Smrg tmpdir=`func_mktempdir` 4008c63293b5Smrg for lib in $libs; do 40099d0ccd10Smrg $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 4010c63293b5Smrg > $tmpdir/tmp-la 4011c63293b5Smrg mv -f $tmpdir/tmp-la $lib 4012c63293b5Smrg done 4013c63293b5Smrg ${RM}r "$tmpdir" 4014c63293b5Smrg fi 4015c63293b5Smrg fi 40167914d74bSmrg 4017c63293b5Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4018e169010aSmrg for libdir in $libdirs; do 4019e169010aSmrg if test -n "$finish_cmds"; then 4020e169010aSmrg # Do each command in the finish commands. 4021e169010aSmrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 4022e169010aSmrg'"$cmd"'"' 4023e169010aSmrg fi 4024e169010aSmrg if test -n "$finish_eval"; then 4025e169010aSmrg # Do the single finish_eval. 4026e169010aSmrg eval cmds=\"$finish_eval\" 4027c63293b5Smrg $opt_dry_run || eval "$cmds" || func_append admincmds " 4028e169010aSmrg $cmds" 4029e169010aSmrg fi 4030e169010aSmrg done 4031e169010aSmrg fi 40327914d74bSmrg 4033e169010aSmrg # Exit here if they wanted silent mode. 40349d0ccd10Smrg $opt_quiet && exit $EXIT_SUCCESS 40357914d74bSmrg 4036c63293b5Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4037c63293b5Smrg echo "----------------------------------------------------------------------" 4038c63293b5Smrg echo "Libraries have been installed in:" 4039c63293b5Smrg for libdir in $libdirs; do 4040c63293b5Smrg $ECHO " $libdir" 4041c63293b5Smrg done 4042c63293b5Smrg echo 4043c63293b5Smrg echo "If you ever happen to want to link against installed libraries" 4044c63293b5Smrg echo "in a given directory, LIBDIR, you must either use libtool, and" 40459d0ccd10Smrg echo "specify the full pathname of the library, or use the '-LLIBDIR'" 4046c63293b5Smrg echo "flag during linking and do at least one of the following:" 4047c63293b5Smrg if test -n "$shlibpath_var"; then 40489d0ccd10Smrg echo " - add LIBDIR to the '$shlibpath_var' environment variable" 4049c63293b5Smrg echo " during execution" 4050c63293b5Smrg fi 4051c63293b5Smrg if test -n "$runpath_var"; then 40529d0ccd10Smrg echo " - add LIBDIR to the '$runpath_var' environment variable" 4053c63293b5Smrg echo " during linking" 4054c63293b5Smrg fi 4055c63293b5Smrg if test -n "$hardcode_libdir_flag_spec"; then 4056c63293b5Smrg libdir=LIBDIR 4057c63293b5Smrg eval flag=\"$hardcode_libdir_flag_spec\" 40587914d74bSmrg 40599d0ccd10Smrg $ECHO " - use the '$flag' linker flag" 4060c63293b5Smrg fi 4061c63293b5Smrg if test -n "$admincmds"; then 4062c63293b5Smrg $ECHO " - have your system administrator run these commands:$admincmds" 4063c63293b5Smrg fi 4064c63293b5Smrg if test -f /etc/ld.so.conf; then 40659d0ccd10Smrg echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" 4066c63293b5Smrg fi 4067c63293b5Smrg echo 40687914d74bSmrg 4069c63293b5Smrg echo "See any operating system documentation about shared libraries for" 4070c63293b5Smrg case $host in 4071c63293b5Smrg solaris2.[6789]|solaris2.1[0-9]) 4072c63293b5Smrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 4073c63293b5Smrg echo "pages." 4074c63293b5Smrg ;; 4075c63293b5Smrg *) 4076c63293b5Smrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 4077c63293b5Smrg ;; 4078c63293b5Smrg esac 4079c63293b5Smrg echo "----------------------------------------------------------------------" 4080c63293b5Smrg fi 4081e169010aSmrg exit $EXIT_SUCCESS 4082e169010aSmrg} 40837914d74bSmrg 40849d0ccd10Smrgtest finish = "$opt_mode" && func_mode_finish ${1+"$@"} 40857914d74bSmrg 40867914d74bSmrg 4087e169010aSmrg# func_mode_install arg... 4088e169010aSmrgfunc_mode_install () 4089e169010aSmrg{ 40909d0ccd10Smrg $debug_cmd 40919d0ccd10Smrg 4092e169010aSmrg # There may be an optional sh(1) argument at the beginning of 4093e169010aSmrg # install_prog (especially on Windows NT). 40949d0ccd10Smrg if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || 4095e169010aSmrg # Allow the use of GNU shtool's install command. 40969d0ccd10Smrg case $nonopt in *shtool*) :;; *) false;; esac 40979d0ccd10Smrg then 4098e169010aSmrg # Aesthetically quote it. 4099e169010aSmrg func_quote_for_eval "$nonopt" 4100e169010aSmrg install_prog="$func_quote_for_eval_result " 4101e169010aSmrg arg=$1 4102e169010aSmrg shift 4103e169010aSmrg else 4104e169010aSmrg install_prog= 4105e169010aSmrg arg=$nonopt 4106e169010aSmrg fi 41077914d74bSmrg 4108e169010aSmrg # The real first argument should be the name of the installation program. 4109e169010aSmrg # Aesthetically quote it. 4110e169010aSmrg func_quote_for_eval "$arg" 4111c63293b5Smrg func_append install_prog "$func_quote_for_eval_result" 4112e8ead290Smrg install_shared_prog=$install_prog 4113e8ead290Smrg case " $install_prog " in 4114e8ead290Smrg *[\\\ /]cp\ *) install_cp=: ;; 4115e8ead290Smrg *) install_cp=false ;; 4116e8ead290Smrg esac 4117e169010aSmrg 4118e169010aSmrg # We need to accept at least all the BSD install flags. 4119e169010aSmrg dest= 4120e169010aSmrg files= 4121e169010aSmrg opts= 4122e169010aSmrg prev= 4123e169010aSmrg install_type= 41249d0ccd10Smrg isdir=false 4125e169010aSmrg stripme= 4126e8ead290Smrg no_mode=: 4127e169010aSmrg for arg 4128e169010aSmrg do 4129e8ead290Smrg arg2= 4130e169010aSmrg if test -n "$dest"; then 4131c63293b5Smrg func_append files " $dest" 4132e169010aSmrg dest=$arg 4133e169010aSmrg continue 41347914d74bSmrg fi 41357914d74bSmrg 4136e169010aSmrg case $arg in 41379d0ccd10Smrg -d) isdir=: ;; 4138e169010aSmrg -f) 4139e8ead290Smrg if $install_cp; then :; else 4140e8ead290Smrg prev=$arg 4141e8ead290Smrg fi 4142e169010aSmrg ;; 4143e169010aSmrg -g | -m | -o) 4144e169010aSmrg prev=$arg 4145e169010aSmrg ;; 4146e169010aSmrg -s) 4147e169010aSmrg stripme=" -s" 4148e169010aSmrg continue 4149e169010aSmrg ;; 4150e169010aSmrg -*) 4151e169010aSmrg ;; 4152e169010aSmrg *) 4153e169010aSmrg # If the previous option needed an argument, then skip it. 4154e169010aSmrg if test -n "$prev"; then 41559d0ccd10Smrg if test X-m = "X$prev" && test -n "$install_override_mode"; then 4156e8ead290Smrg arg2=$install_override_mode 4157e8ead290Smrg no_mode=false 4158e8ead290Smrg fi 4159e169010aSmrg prev= 4160e169010aSmrg else 4161e169010aSmrg dest=$arg 4162e169010aSmrg continue 4163e169010aSmrg fi 4164e169010aSmrg ;; 4165e169010aSmrg esac 41667914d74bSmrg 4167e169010aSmrg # Aesthetically quote the argument. 4168e169010aSmrg func_quote_for_eval "$arg" 4169c63293b5Smrg func_append install_prog " $func_quote_for_eval_result" 4170e8ead290Smrg if test -n "$arg2"; then 4171e8ead290Smrg func_quote_for_eval "$arg2" 4172e8ead290Smrg fi 4173c63293b5Smrg func_append install_shared_prog " $func_quote_for_eval_result" 4174e169010aSmrg done 41757914d74bSmrg 4176e169010aSmrg test -z "$install_prog" && \ 4177e169010aSmrg func_fatal_help "you must specify an install program" 41787914d74bSmrg 4179e169010aSmrg test -n "$prev" && \ 41809d0ccd10Smrg func_fatal_help "the '$prev' option requires an argument" 41817914d74bSmrg 4182e8ead290Smrg if test -n "$install_override_mode" && $no_mode; then 4183e8ead290Smrg if $install_cp; then :; else 4184e8ead290Smrg func_quote_for_eval "$install_override_mode" 4185c63293b5Smrg func_append install_shared_prog " -m $func_quote_for_eval_result" 4186e8ead290Smrg fi 4187e8ead290Smrg fi 4188e8ead290Smrg 4189e169010aSmrg if test -z "$files"; then 4190e169010aSmrg if test -z "$dest"; then 4191e169010aSmrg func_fatal_help "no file or destination specified" 4192e169010aSmrg else 4193e169010aSmrg func_fatal_help "you must specify a destination" 41947914d74bSmrg fi 41957914d74bSmrg fi 41967914d74bSmrg 4197e169010aSmrg # Strip any trailing slash from the destination. 4198e169010aSmrg func_stripname '' '/' "$dest" 4199e169010aSmrg dest=$func_stripname_result 42007914d74bSmrg 4201e169010aSmrg # Check to see that the destination is a directory. 42029d0ccd10Smrg test -d "$dest" && isdir=: 42039d0ccd10Smrg if $isdir; then 42049d0ccd10Smrg destdir=$dest 4205e169010aSmrg destname= 4206e169010aSmrg else 4207e169010aSmrg func_dirname_and_basename "$dest" "" "." 42089d0ccd10Smrg destdir=$func_dirname_result 42099d0ccd10Smrg destname=$func_basename_result 4210e169010aSmrg 4211e169010aSmrg # Not a directory, so check to see that there is only one file specified. 4212e169010aSmrg set dummy $files; shift 4213e169010aSmrg test "$#" -gt 1 && \ 42149d0ccd10Smrg func_fatal_help "'$dest' is not a directory" 4215e169010aSmrg fi 4216e169010aSmrg case $destdir in 4217e169010aSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 42187914d74bSmrg *) 4219e169010aSmrg for file in $files; do 4220e169010aSmrg case $file in 4221e169010aSmrg *.lo) ;; 4222e169010aSmrg *) 42239d0ccd10Smrg func_fatal_help "'$destdir' must be an absolute directory name" 4224e169010aSmrg ;; 4225e169010aSmrg esac 4226e169010aSmrg done 42277914d74bSmrg ;; 42287914d74bSmrg esac 42297914d74bSmrg 4230e169010aSmrg # This variable tells wrapper scripts just to set variables rather 4231e169010aSmrg # than running their programs. 42329d0ccd10Smrg libtool_install_magic=$magic 42337914d74bSmrg 4234e169010aSmrg staticlibs= 4235e169010aSmrg future_libdirs= 4236e169010aSmrg current_libdirs= 4237e169010aSmrg for file in $files; do 42387914d74bSmrg 4239e169010aSmrg # Do each installation. 4240e169010aSmrg case $file in 4241e169010aSmrg *.$libext) 4242e169010aSmrg # Do the static libraries later. 4243c63293b5Smrg func_append staticlibs " $file" 4244e169010aSmrg ;; 4245e169010aSmrg 4246e169010aSmrg *.la) 4247c63293b5Smrg func_resolve_sysroot "$file" 4248c63293b5Smrg file=$func_resolve_sysroot_result 4249c63293b5Smrg 4250e169010aSmrg # Check to see that this really is a libtool archive. 4251e169010aSmrg func_lalib_unsafe_p "$file" \ 42529d0ccd10Smrg || func_fatal_help "'$file' is not a valid libtool archive" 4253e169010aSmrg 4254e169010aSmrg library_names= 4255e169010aSmrg old_library= 4256e169010aSmrg relink_command= 4257e169010aSmrg func_source "$file" 4258e169010aSmrg 4259e169010aSmrg # Add the libdir to current_libdirs if it is the destination. 4260e169010aSmrg if test "X$destdir" = "X$libdir"; then 4261e169010aSmrg case "$current_libdirs " in 4262e169010aSmrg *" $libdir "*) ;; 4263c63293b5Smrg *) func_append current_libdirs " $libdir" ;; 42647914d74bSmrg esac 4265e169010aSmrg else 4266e169010aSmrg # Note the libdir as a future libdir. 4267e169010aSmrg case "$future_libdirs " in 4268e169010aSmrg *" $libdir "*) ;; 4269c63293b5Smrg *) func_append future_libdirs " $libdir" ;; 4270e169010aSmrg esac 4271e169010aSmrg fi 42727914d74bSmrg 4273e169010aSmrg func_dirname "$file" "/" "" 42749d0ccd10Smrg dir=$func_dirname_result 4275c63293b5Smrg func_append dir "$objdir" 4276e169010aSmrg 4277e169010aSmrg if test -n "$relink_command"; then 4278e169010aSmrg # Determine the prefix the user has applied to our future dir. 4279e8ead290Smrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 4280e169010aSmrg 4281e169010aSmrg # Don't allow the user to place us outside of our expected 4282e169010aSmrg # location b/c this prevents finding dependent libraries that 4283e169010aSmrg # are installed to the same prefix. 4284e169010aSmrg # At present, this check doesn't affect windows .dll's that 4285e169010aSmrg # are installed into $libdir/../bin (currently, that works fine) 4286e169010aSmrg # but it's something to keep an eye on. 4287e169010aSmrg test "$inst_prefix_dir" = "$destdir" && \ 42889d0ccd10Smrg func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" 4289e169010aSmrg 4290e169010aSmrg if test -n "$inst_prefix_dir"; then 4291e169010aSmrg # Stick the inst_prefix_dir data into the link command. 4292e8ead290Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 4293e169010aSmrg else 4294e8ead290Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 4295e169010aSmrg fi 4296e169010aSmrg 42979d0ccd10Smrg func_warning "relinking '$file'" 4298e169010aSmrg func_show_eval "$relink_command" \ 42999d0ccd10Smrg 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' 4300e169010aSmrg fi 4301e169010aSmrg 4302e169010aSmrg # See the names of the shared library. 4303e169010aSmrg set dummy $library_names; shift 4304e169010aSmrg if test -n "$1"; then 43059d0ccd10Smrg realname=$1 4306e169010aSmrg shift 4307e169010aSmrg 43089d0ccd10Smrg srcname=$realname 43099d0ccd10Smrg test -n "$relink_command" && srcname=${realname}T 4310e169010aSmrg 4311e169010aSmrg # Install the shared library and build the symlinks. 4312e8ead290Smrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 4313e169010aSmrg 'exit $?' 43149d0ccd10Smrg tstripme=$stripme 4315e169010aSmrg case $host_os in 4316e169010aSmrg cygwin* | mingw* | pw32* | cegcc*) 4317e169010aSmrg case $realname in 4318e169010aSmrg *.dll.a) 43199d0ccd10Smrg tstripme= 43209d0ccd10Smrg ;; 43219d0ccd10Smrg esac 43229d0ccd10Smrg ;; 43239d0ccd10Smrg os2*) 43249d0ccd10Smrg case $realname in 43259d0ccd10Smrg *_dll.a) 43269d0ccd10Smrg tstripme= 4327e169010aSmrg ;; 4328e169010aSmrg esac 43297914d74bSmrg ;; 43307914d74bSmrg esac 4331e169010aSmrg if test -n "$tstripme" && test -n "$striplib"; then 4332e169010aSmrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 43337914d74bSmrg fi 4334e169010aSmrg 4335e169010aSmrg if test "$#" -gt 0; then 4336e169010aSmrg # Delete the old symlinks, and create new ones. 43379d0ccd10Smrg # Try 'ln -sf' first, because the 'ln' binary might depend on 4338e169010aSmrg # the symlink we replace! Solaris /bin/ln does not understand -f, 4339e169010aSmrg # so we also need to try rm && ln -s. 4340e169010aSmrg for linkname 4341e169010aSmrg do 4342e169010aSmrg test "$linkname" != "$realname" \ 4343e169010aSmrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 43447914d74bSmrg done 43457914d74bSmrg fi 43467914d74bSmrg 4347e169010aSmrg # Do each command in the postinstall commands. 43489d0ccd10Smrg lib=$destdir/$realname 4349e169010aSmrg func_execute_cmds "$postinstall_cmds" 'exit $?' 43507914d74bSmrg fi 43517914d74bSmrg 4352e169010aSmrg # Install the pseudo-library for information purposes. 4353e169010aSmrg func_basename "$file" 43549d0ccd10Smrg name=$func_basename_result 43559d0ccd10Smrg instname=$dir/${name}i 4356e169010aSmrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 43577914d74bSmrg 4358e169010aSmrg # Maybe install the static library, too. 4359c63293b5Smrg test -n "$old_library" && func_append staticlibs " $dir/$old_library" 4360e169010aSmrg ;; 43617914d74bSmrg 4362e169010aSmrg *.lo) 4363e169010aSmrg # Install (i.e. copy) a libtool object. 43647914d74bSmrg 4365e169010aSmrg # Figure out destination file name, if it wasn't already specified. 4366e169010aSmrg if test -n "$destname"; then 43679d0ccd10Smrg destfile=$destdir/$destname 4368e169010aSmrg else 4369e169010aSmrg func_basename "$file" 43709d0ccd10Smrg destfile=$func_basename_result 43719d0ccd10Smrg destfile=$destdir/$destfile 4372e169010aSmrg fi 4373e169010aSmrg 4374e169010aSmrg # Deduce the name of the destination old-style object file. 4375e169010aSmrg case $destfile in 4376e169010aSmrg *.lo) 4377e169010aSmrg func_lo2o "$destfile" 4378e169010aSmrg staticdest=$func_lo2o_result 4379e169010aSmrg ;; 4380e169010aSmrg *.$objext) 43819d0ccd10Smrg staticdest=$destfile 4382e169010aSmrg destfile= 4383e169010aSmrg ;; 4384e169010aSmrg *) 43859d0ccd10Smrg func_fatal_help "cannot copy a libtool object to '$destfile'" 4386e169010aSmrg ;; 43877914d74bSmrg esac 43887914d74bSmrg 4389e169010aSmrg # Install the libtool object if requested. 4390e169010aSmrg test -n "$destfile" && \ 4391e169010aSmrg func_show_eval "$install_prog $file $destfile" 'exit $?' 4392e169010aSmrg 4393e169010aSmrg # Install the old object if enabled. 43949d0ccd10Smrg if test yes = "$build_old_libs"; then 4395e169010aSmrg # Deduce the name of the old-style object file. 4396e169010aSmrg func_lo2o "$file" 4397e169010aSmrg staticobj=$func_lo2o_result 4398e169010aSmrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 43997914d74bSmrg fi 4400e169010aSmrg exit $EXIT_SUCCESS 4401e169010aSmrg ;; 44027914d74bSmrg 4403e169010aSmrg *) 4404e169010aSmrg # Figure out destination file name, if it wasn't already specified. 4405e169010aSmrg if test -n "$destname"; then 44069d0ccd10Smrg destfile=$destdir/$destname 4407e169010aSmrg else 4408e169010aSmrg func_basename "$file" 44099d0ccd10Smrg destfile=$func_basename_result 44109d0ccd10Smrg destfile=$destdir/$destfile 4411e169010aSmrg fi 4412e169010aSmrg 4413e169010aSmrg # If the file is missing, and there is a .exe on the end, strip it 4414e169010aSmrg # because it is most likely a libtool script we actually want to 4415e169010aSmrg # install 44169d0ccd10Smrg stripped_ext= 4417e169010aSmrg case $file in 4418e169010aSmrg *.exe) 4419e169010aSmrg if test ! -f "$file"; then 4420e169010aSmrg func_stripname '' '.exe' "$file" 4421e169010aSmrg file=$func_stripname_result 44229d0ccd10Smrg stripped_ext=.exe 44237914d74bSmrg fi 4424e169010aSmrg ;; 4425e169010aSmrg esac 44267914d74bSmrg 4427e169010aSmrg # Do a test to see if this is really a libtool program. 4428e169010aSmrg case $host in 4429e169010aSmrg *cygwin* | *mingw*) 4430e169010aSmrg if func_ltwrapper_executable_p "$file"; then 4431e169010aSmrg func_ltwrapper_scriptname "$file" 4432e169010aSmrg wrapper=$func_ltwrapper_scriptname_result 4433e169010aSmrg else 4434e169010aSmrg func_stripname '' '.exe' "$file" 4435e169010aSmrg wrapper=$func_stripname_result 4436e169010aSmrg fi 4437e169010aSmrg ;; 4438e169010aSmrg *) 4439e169010aSmrg wrapper=$file 4440e169010aSmrg ;; 4441e169010aSmrg esac 4442e169010aSmrg if func_ltwrapper_script_p "$wrapper"; then 4443e169010aSmrg notinst_deplibs= 4444e169010aSmrg relink_command= 44457914d74bSmrg 4446e169010aSmrg func_source "$wrapper" 44477914d74bSmrg 4448e169010aSmrg # Check the variables that should have been set. 4449e169010aSmrg test -z "$generated_by_libtool_version" && \ 44509d0ccd10Smrg func_fatal_error "invalid libtool wrapper script '$wrapper'" 4451e169010aSmrg 44529d0ccd10Smrg finalize=: 4453e169010aSmrg for lib in $notinst_deplibs; do 4454e169010aSmrg # Check to see that each library is installed. 4455e169010aSmrg libdir= 4456e169010aSmrg if test -f "$lib"; then 4457e169010aSmrg func_source "$lib" 4458e169010aSmrg fi 44599d0ccd10Smrg libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` 4460e169010aSmrg if test -n "$libdir" && test ! -f "$libfile"; then 44619d0ccd10Smrg func_warning "'$lib' has not been installed in '$libdir'" 44629d0ccd10Smrg finalize=false 4463e169010aSmrg fi 4464e169010aSmrg done 4465e169010aSmrg 4466e169010aSmrg relink_command= 4467e169010aSmrg func_source "$wrapper" 4468e169010aSmrg 4469e169010aSmrg outputname= 44709d0ccd10Smrg if test no = "$fast_install" && test -n "$relink_command"; then 4471e169010aSmrg $opt_dry_run || { 44729d0ccd10Smrg if $finalize; then 4473e169010aSmrg tmpdir=`func_mktempdir` 4474e169010aSmrg func_basename "$file$stripped_ext" 44759d0ccd10Smrg file=$func_basename_result 44769d0ccd10Smrg outputname=$tmpdir/$file 4477e169010aSmrg # Replace the output file specification. 4478e8ead290Smrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 4479e169010aSmrg 44809d0ccd10Smrg $opt_quiet || { 4481e169010aSmrg func_quote_for_expand "$relink_command" 4482e169010aSmrg eval "func_echo $func_quote_for_expand_result" 4483e169010aSmrg } 4484e169010aSmrg if eval "$relink_command"; then : 4485e169010aSmrg else 44869d0ccd10Smrg func_error "error: relink '$file' with the above command before installing it" 4487e169010aSmrg $opt_dry_run || ${RM}r "$tmpdir" 4488e169010aSmrg continue 4489e169010aSmrg fi 44909d0ccd10Smrg file=$outputname 4491e169010aSmrg else 44929d0ccd10Smrg func_warning "cannot relink '$file'" 4493e169010aSmrg fi 4494e169010aSmrg } 44957914d74bSmrg else 4496e169010aSmrg # Install the binary that we compiled earlier. 4497e8ead290Smrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 44987914d74bSmrg fi 4499e169010aSmrg fi 45007914d74bSmrg 4501e169010aSmrg # remove .exe since cygwin /usr/bin/install will append another 4502e169010aSmrg # one anyway 4503e169010aSmrg case $install_prog,$host in 4504e169010aSmrg */usr/bin/install*,*cygwin*) 4505e169010aSmrg case $file:$destfile in 4506e169010aSmrg *.exe:*.exe) 4507e169010aSmrg # this is ok 4508e169010aSmrg ;; 4509e169010aSmrg *.exe:*) 4510e169010aSmrg destfile=$destfile.exe 4511e169010aSmrg ;; 4512e169010aSmrg *:*.exe) 4513e169010aSmrg func_stripname '' '.exe' "$destfile" 4514e169010aSmrg destfile=$func_stripname_result 4515e169010aSmrg ;; 4516e169010aSmrg esac 45177914d74bSmrg ;; 45187914d74bSmrg esac 4519e169010aSmrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 4520e169010aSmrg $opt_dry_run || if test -n "$outputname"; then 4521e169010aSmrg ${RM}r "$tmpdir" 4522e169010aSmrg fi 4523e169010aSmrg ;; 4524e169010aSmrg esac 4525e169010aSmrg done 45267914d74bSmrg 4527e169010aSmrg for file in $staticlibs; do 4528e169010aSmrg func_basename "$file" 45299d0ccd10Smrg name=$func_basename_result 45307914d74bSmrg 4531e169010aSmrg # Set up the ranlib parameters. 45329d0ccd10Smrg oldlib=$destdir/$name 4533e6d5e4e0Smrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 4534e6d5e4e0Smrg tool_oldlib=$func_to_tool_file_result 45357914d74bSmrg 4536e169010aSmrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 45377914d74bSmrg 4538e169010aSmrg if test -n "$stripme" && test -n "$old_striplib"; then 4539e6d5e4e0Smrg func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 4540e169010aSmrg fi 45417914d74bSmrg 4542e169010aSmrg # Do each command in the postinstall commands. 4543e169010aSmrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 4544e169010aSmrg done 45457914d74bSmrg 4546e169010aSmrg test -n "$future_libdirs" && \ 45479d0ccd10Smrg func_warning "remember to run '$progname --finish$future_libdirs'" 45487914d74bSmrg 4549e169010aSmrg if test -n "$current_libdirs"; then 4550e169010aSmrg # Maybe just do a dry run. 4551e169010aSmrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 45529d0ccd10Smrg exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' 4553e169010aSmrg else 4554e169010aSmrg exit $EXIT_SUCCESS 4555e169010aSmrg fi 4556e169010aSmrg} 45577914d74bSmrg 45589d0ccd10Smrgtest install = "$opt_mode" && func_mode_install ${1+"$@"} 45597914d74bSmrg 45607914d74bSmrg 4561e169010aSmrg# func_generate_dlsyms outputname originator pic_p 4562e169010aSmrg# Extract symbols from dlprefiles and create ${outputname}S.o with 4563e169010aSmrg# a dlpreopen symbol table. 4564e169010aSmrgfunc_generate_dlsyms () 4565e169010aSmrg{ 45669d0ccd10Smrg $debug_cmd 45679d0ccd10Smrg 45689d0ccd10Smrg my_outputname=$1 45699d0ccd10Smrg my_originator=$2 45709d0ccd10Smrg my_pic_p=${3-false} 45719d0ccd10Smrg my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` 4572e169010aSmrg my_dlsyms= 4573e169010aSmrg 45749d0ccd10Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 4575e169010aSmrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 45769d0ccd10Smrg my_dlsyms=${my_outputname}S.c 4577e169010aSmrg else 4578e169010aSmrg func_error "not configured to extract global symbols from dlpreopened files" 4579e169010aSmrg fi 4580e169010aSmrg fi 45817914d74bSmrg 4582e169010aSmrg if test -n "$my_dlsyms"; then 4583e169010aSmrg case $my_dlsyms in 4584e169010aSmrg "") ;; 4585e169010aSmrg *.c) 4586e169010aSmrg # Discover the nlist of each of the dlfiles. 45879d0ccd10Smrg nlist=$output_objdir/$my_outputname.nm 4588e169010aSmrg 4589e169010aSmrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 4590e169010aSmrg 4591e169010aSmrg # Parse the name list into a source file. 4592e169010aSmrg func_verbose "creating $output_objdir/$my_dlsyms" 4593e169010aSmrg 4594e169010aSmrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 45959d0ccd10Smrg/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ 45969d0ccd10Smrg/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ 4597e169010aSmrg 4598e169010aSmrg#ifdef __cplusplus 4599e169010aSmrgextern \"C\" { 4600e169010aSmrg#endif 4601e169010aSmrg 46029d0ccd10Smrg#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 4603e8ead290Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 4604e8ead290Smrg#endif 4605e8ead290Smrg 4606c63293b5Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 46079d0ccd10Smrg#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE 46089d0ccd10Smrg/* DATA imports from DLLs on WIN32 can't be const, because runtime 4609c63293b5Smrg relocations are performed -- see ld's documentation on pseudo-relocs. */ 4610c63293b5Smrg# define LT_DLSYM_CONST 46119d0ccd10Smrg#elif defined __osf__ 4612c63293b5Smrg/* This system does not cope well with relocations in const data. */ 4613c63293b5Smrg# define LT_DLSYM_CONST 4614c63293b5Smrg#else 4615c63293b5Smrg# define LT_DLSYM_CONST const 4616c63293b5Smrg#endif 4617c63293b5Smrg 46189d0ccd10Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 46199d0ccd10Smrg 4620e169010aSmrg/* External symbol declarations for the compiler. */\ 4621e169010aSmrg" 4622e169010aSmrg 46239d0ccd10Smrg if test yes = "$dlself"; then 46249d0ccd10Smrg func_verbose "generating symbol list for '$output'" 4625e169010aSmrg 4626e169010aSmrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 4627e169010aSmrg 4628e169010aSmrg # Add our own program objects to the symbol list. 4629e8ead290Smrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 4630e169010aSmrg for progfile in $progfiles; do 4631c63293b5Smrg func_to_tool_file "$progfile" func_convert_file_msys_to_w32 46329d0ccd10Smrg func_verbose "extracting global C symbols from '$func_to_tool_file_result'" 4633c63293b5Smrg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 4634e169010aSmrg done 4635e169010aSmrg 4636e169010aSmrg if test -n "$exclude_expsyms"; then 4637e169010aSmrg $opt_dry_run || { 4638e169010aSmrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 4639e169010aSmrg eval '$MV "$nlist"T "$nlist"' 4640e169010aSmrg } 46417914d74bSmrg fi 46427914d74bSmrg 4643e169010aSmrg if test -n "$export_symbols_regex"; then 4644e169010aSmrg $opt_dry_run || { 4645e169010aSmrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 4646e169010aSmrg eval '$MV "$nlist"T "$nlist"' 4647e169010aSmrg } 46487914d74bSmrg fi 4649e169010aSmrg 4650e169010aSmrg # Prepare the list of exported symbols 4651e169010aSmrg if test -z "$export_symbols"; then 46529d0ccd10Smrg export_symbols=$output_objdir/$outputname.exp 4653e169010aSmrg $opt_dry_run || { 4654e169010aSmrg $RM $export_symbols 46559d0ccd10Smrg eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 4656e169010aSmrg case $host in 4657e169010aSmrg *cygwin* | *mingw* | *cegcc* ) 4658e169010aSmrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4659e169010aSmrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 4660e169010aSmrg ;; 46617914d74bSmrg esac 4662e169010aSmrg } 4663e169010aSmrg else 4664e169010aSmrg $opt_dry_run || { 46659d0ccd10Smrg eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 4666e169010aSmrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 4667e169010aSmrg eval '$MV "$nlist"T "$nlist"' 4668e169010aSmrg case $host in 4669e8ead290Smrg *cygwin* | *mingw* | *cegcc* ) 4670e169010aSmrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4671e169010aSmrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 4672e169010aSmrg ;; 46737914d74bSmrg esac 4674e169010aSmrg } 46757914d74bSmrg fi 4676e169010aSmrg fi 46777914d74bSmrg 4678e169010aSmrg for dlprefile in $dlprefiles; do 46799d0ccd10Smrg func_verbose "extracting global C symbols from '$dlprefile'" 4680e169010aSmrg func_basename "$dlprefile" 46819d0ccd10Smrg name=$func_basename_result 4682c63293b5Smrg case $host in 4683c63293b5Smrg *cygwin* | *mingw* | *cegcc* ) 4684c63293b5Smrg # if an import library, we need to obtain dlname 4685c63293b5Smrg if func_win32_import_lib_p "$dlprefile"; then 4686c63293b5Smrg func_tr_sh "$dlprefile" 4687c63293b5Smrg eval "curr_lafile=\$libfile_$func_tr_sh_result" 46889d0ccd10Smrg dlprefile_dlbasename= 4689c63293b5Smrg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 4690c63293b5Smrg # Use subshell, to avoid clobbering current variable values 4691c63293b5Smrg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 46929d0ccd10Smrg if test -n "$dlprefile_dlname"; then 4693c63293b5Smrg func_basename "$dlprefile_dlname" 46949d0ccd10Smrg dlprefile_dlbasename=$func_basename_result 4695c63293b5Smrg else 4696c63293b5Smrg # no lafile. user explicitly requested -dlpreopen <import library>. 4697c63293b5Smrg $sharedlib_from_linklib_cmd "$dlprefile" 4698c63293b5Smrg dlprefile_dlbasename=$sharedlib_from_linklib_result 4699c63293b5Smrg fi 4700c63293b5Smrg fi 4701c63293b5Smrg $opt_dry_run || { 47029d0ccd10Smrg if test -n "$dlprefile_dlbasename"; then 4703c63293b5Smrg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 4704c63293b5Smrg else 4705c63293b5Smrg func_warning "Could not compute DLL name from $name" 4706c63293b5Smrg eval '$ECHO ": $name " >> "$nlist"' 4707c63293b5Smrg fi 4708c63293b5Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4709c63293b5Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 4710c63293b5Smrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 4711c63293b5Smrg } 4712c63293b5Smrg else # not an import lib 4713c63293b5Smrg $opt_dry_run || { 4714c63293b5Smrg eval '$ECHO ": $name " >> "$nlist"' 4715c63293b5Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4716c63293b5Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 4717c63293b5Smrg } 4718c63293b5Smrg fi 4719c63293b5Smrg ;; 4720c63293b5Smrg *) 4721c63293b5Smrg $opt_dry_run || { 4722c63293b5Smrg eval '$ECHO ": $name " >> "$nlist"' 4723c63293b5Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4724c63293b5Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 4725c63293b5Smrg } 4726c63293b5Smrg ;; 4727c63293b5Smrg esac 4728e169010aSmrg done 47297914d74bSmrg 4730e169010aSmrg $opt_dry_run || { 4731e169010aSmrg # Make sure we have at least an empty file. 4732e169010aSmrg test -f "$nlist" || : > "$nlist" 47337914d74bSmrg 4734e169010aSmrg if test -n "$exclude_expsyms"; then 4735e169010aSmrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 4736e169010aSmrg $MV "$nlist"T "$nlist" 47377914d74bSmrg fi 47387914d74bSmrg 4739e169010aSmrg # Try sorting and uniquifying the output. 4740e169010aSmrg if $GREP -v "^: " < "$nlist" | 4741e169010aSmrg if sort -k 3 </dev/null >/dev/null 2>&1; then 4742e169010aSmrg sort -k 3 47437914d74bSmrg else 4744e169010aSmrg sort +2 4745e169010aSmrg fi | 4746e169010aSmrg uniq > "$nlist"S; then 4747e169010aSmrg : 47487914d74bSmrg else 4749e169010aSmrg $GREP -v "^: " < "$nlist" > "$nlist"S 47507914d74bSmrg fi 47517914d74bSmrg 4752e169010aSmrg if test -f "$nlist"S; then 4753e169010aSmrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 47547914d74bSmrg else 4755e8ead290Smrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 47567914d74bSmrg fi 47577914d74bSmrg 47589d0ccd10Smrg func_show_eval '$RM "${nlist}I"' 47599d0ccd10Smrg if test -n "$global_symbol_to_import"; then 47609d0ccd10Smrg eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' 47619d0ccd10Smrg fi 47629d0ccd10Smrg 4763e8ead290Smrg echo >> "$output_objdir/$my_dlsyms" "\ 47647914d74bSmrg 4765e169010aSmrg/* The mapping between symbol names and symbols. */ 4766e169010aSmrgtypedef struct { 4767e169010aSmrg const char *name; 4768e169010aSmrg void *address; 4769e169010aSmrg} lt_dlsymlist; 4770c63293b5Smrgextern LT_DLSYM_CONST lt_dlsymlist 47719d0ccd10Smrglt_${my_prefix}_LTX_preloaded_symbols[];\ 47729d0ccd10Smrg" 47739d0ccd10Smrg 47749d0ccd10Smrg if test -s "$nlist"I; then 47759d0ccd10Smrg echo >> "$output_objdir/$my_dlsyms" "\ 47769d0ccd10Smrgstatic void lt_syminit(void) 47779d0ccd10Smrg{ 47789d0ccd10Smrg LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; 47799d0ccd10Smrg for (; symbol->name; ++symbol) 47809d0ccd10Smrg {" 47819d0ccd10Smrg $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" 47829d0ccd10Smrg echo >> "$output_objdir/$my_dlsyms" "\ 47839d0ccd10Smrg } 47849d0ccd10Smrg}" 47859d0ccd10Smrg fi 47869d0ccd10Smrg echo >> "$output_objdir/$my_dlsyms" "\ 4787c63293b5SmrgLT_DLSYM_CONST lt_dlsymlist 4788e169010aSmrglt_${my_prefix}_LTX_preloaded_symbols[] = 47899d0ccd10Smrg{ {\"$my_originator\", (void *) 0}," 47909d0ccd10Smrg 47919d0ccd10Smrg if test -s "$nlist"I; then 47929d0ccd10Smrg echo >> "$output_objdir/$my_dlsyms" "\ 47939d0ccd10Smrg {\"@INIT@\", (void *) <_syminit}," 47949d0ccd10Smrg fi 4795e169010aSmrg 4796e169010aSmrg case $need_lib_prefix in 4797e169010aSmrg no) 4798e169010aSmrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 4799e169010aSmrg ;; 4800e169010aSmrg *) 4801e169010aSmrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 4802e169010aSmrg ;; 4803e169010aSmrg esac 4804e8ead290Smrg echo >> "$output_objdir/$my_dlsyms" "\ 4805e169010aSmrg {0, (void *) 0} 4806e169010aSmrg}; 4807e169010aSmrg 4808e169010aSmrg/* This works around a problem in FreeBSD linker */ 4809e169010aSmrg#ifdef FREEBSD_WORKAROUND 4810e169010aSmrgstatic const void *lt_preloaded_setup() { 4811e169010aSmrg return lt_${my_prefix}_LTX_preloaded_symbols; 4812e169010aSmrg} 4813e169010aSmrg#endif 4814e169010aSmrg 4815e169010aSmrg#ifdef __cplusplus 4816e169010aSmrg} 4817e169010aSmrg#endif\ 4818e169010aSmrg" 4819e169010aSmrg } # !$opt_dry_run 4820e169010aSmrg 4821e169010aSmrg pic_flag_for_symtable= 4822e169010aSmrg case "$compile_command " in 4823e169010aSmrg *" -static "*) ;; 4824e169010aSmrg *) 4825e169010aSmrg case $host in 4826e169010aSmrg # compiling the symbol table file with pic_flag works around 4827e169010aSmrg # a FreeBSD bug that causes programs to crash when -lm is 4828e169010aSmrg # linked before any other PIC object. But we must not use 4829e169010aSmrg # pic_flag when linking with -static. The problem exists in 4830e169010aSmrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 4831e6d5e4e0Smrg *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 4832e169010aSmrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 4833e169010aSmrg *-*-hpux*) 4834e169010aSmrg pic_flag_for_symtable=" $pic_flag" ;; 4835e169010aSmrg *) 48369d0ccd10Smrg $my_pic_p && pic_flag_for_symtable=" $pic_flag" 4837e169010aSmrg ;; 4838e169010aSmrg esac 4839e169010aSmrg ;; 4840e169010aSmrg esac 4841e169010aSmrg symtab_cflags= 4842e169010aSmrg for arg in $LTCFLAGS; do 4843e169010aSmrg case $arg in 4844e169010aSmrg -pie | -fpie | -fPIE) ;; 4845c63293b5Smrg *) func_append symtab_cflags " $arg" ;; 4846e169010aSmrg esac 4847e169010aSmrg done 48487914d74bSmrg 4849e169010aSmrg # Now compile the dynamic symbol file. 4850e169010aSmrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 48517914d74bSmrg 4852e169010aSmrg # Clean up the generated files. 48539d0ccd10Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' 4854e169010aSmrg 4855e169010aSmrg # Transform the symbol file into the correct name. 48569d0ccd10Smrg symfileobj=$output_objdir/${my_outputname}S.$objext 4857e169010aSmrg case $host in 4858e169010aSmrg *cygwin* | *mingw* | *cegcc* ) 4859e169010aSmrg if test -f "$output_objdir/$my_outputname.def"; then 4860e8ead290Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 4861e8ead290Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 4862e169010aSmrg else 4863e8ead290Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 4864e8ead290Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 4865e169010aSmrg fi 4866e169010aSmrg ;; 4867e169010aSmrg *) 4868e8ead290Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 4869e8ead290Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 48707914d74bSmrg ;; 48717914d74bSmrg esac 4872e169010aSmrg ;; 4873e169010aSmrg *) 48749d0ccd10Smrg func_fatal_error "unknown suffix for '$my_dlsyms'" 4875e169010aSmrg ;; 4876e169010aSmrg esac 4877e169010aSmrg else 4878e169010aSmrg # We keep going just in case the user didn't refer to 4879e169010aSmrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 4880e169010aSmrg # really was required. 4881e169010aSmrg 4882e169010aSmrg # Nullify the symbol file. 4883e8ead290Smrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 4884e8ead290Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 48857914d74bSmrg fi 4886e169010aSmrg} 48877914d74bSmrg 48889d0ccd10Smrg# func_cygming_gnu_implib_p ARG 48899d0ccd10Smrg# This predicate returns with zero status (TRUE) if 48909d0ccd10Smrg# ARG is a GNU/binutils-style import library. Returns 48919d0ccd10Smrg# with nonzero status (FALSE) otherwise. 48929d0ccd10Smrgfunc_cygming_gnu_implib_p () 48939d0ccd10Smrg{ 48949d0ccd10Smrg $debug_cmd 48959d0ccd10Smrg 48969d0ccd10Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 48979d0ccd10Smrg 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)$'` 48989d0ccd10Smrg test -n "$func_cygming_gnu_implib_tmp" 48999d0ccd10Smrg} 49009d0ccd10Smrg 49019d0ccd10Smrg# func_cygming_ms_implib_p ARG 49029d0ccd10Smrg# This predicate returns with zero status (TRUE) if 49039d0ccd10Smrg# ARG is an MS-style import library. Returns 49049d0ccd10Smrg# with nonzero status (FALSE) otherwise. 49059d0ccd10Smrgfunc_cygming_ms_implib_p () 49069d0ccd10Smrg{ 49079d0ccd10Smrg $debug_cmd 49089d0ccd10Smrg 49099d0ccd10Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 49109d0ccd10Smrg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 49119d0ccd10Smrg test -n "$func_cygming_ms_implib_tmp" 49129d0ccd10Smrg} 49139d0ccd10Smrg 4914e169010aSmrg# func_win32_libid arg 4915e169010aSmrg# return the library type of file 'arg' 4916e169010aSmrg# 4917e169010aSmrg# Need a lot of goo to handle *both* DLLs and import libs 4918e169010aSmrg# Has to be a shell function in order to 'eat' the argument 4919e169010aSmrg# that is supplied when $file_magic_command is called. 4920e8ead290Smrg# Despite the name, also deal with 64 bit binaries. 4921e169010aSmrgfunc_win32_libid () 4922e169010aSmrg{ 49239d0ccd10Smrg $debug_cmd 49249d0ccd10Smrg 49259d0ccd10Smrg win32_libid_type=unknown 4926e169010aSmrg win32_fileres=`file -L $1 2>/dev/null` 4927e169010aSmrg case $win32_fileres in 4928e169010aSmrg *ar\ archive\ import\ library*) # definitely import 4929e169010aSmrg win32_libid_type="x86 archive import" 4930e169010aSmrg ;; 4931e169010aSmrg *ar\ archive*) # could be an import, or static 4932e8ead290Smrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 4933e169010aSmrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 4934e8ead290Smrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 49359d0ccd10Smrg case $nm_interface in 49369d0ccd10Smrg "MS dumpbin") 49379d0ccd10Smrg if func_cygming_ms_implib_p "$1" || 49389d0ccd10Smrg func_cygming_gnu_implib_p "$1" 49399d0ccd10Smrg then 49409d0ccd10Smrg win32_nmres=import 49419d0ccd10Smrg else 49429d0ccd10Smrg win32_nmres= 49439d0ccd10Smrg fi 49449d0ccd10Smrg ;; 49459d0ccd10Smrg *) 49469d0ccd10Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 49479d0ccd10Smrg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 49489d0ccd10Smrg $SED -n -e ' 4949e169010aSmrg 1,100{ 4950e169010aSmrg / I /{ 49519d0ccd10Smrg s|.*|import| 4952e169010aSmrg p 4953e169010aSmrg q 4954e169010aSmrg } 4955e169010aSmrg }'` 49569d0ccd10Smrg ;; 49579d0ccd10Smrg esac 4958e169010aSmrg case $win32_nmres in 4959e169010aSmrg import*) win32_libid_type="x86 archive import";; 4960e169010aSmrg *) win32_libid_type="x86 archive static";; 4961e169010aSmrg esac 4962e169010aSmrg fi 4963e169010aSmrg ;; 4964e169010aSmrg *DLL*) 4965e169010aSmrg win32_libid_type="x86 DLL" 4966e169010aSmrg ;; 4967e169010aSmrg *executable*) # but shell scripts are "executable" too... 4968e169010aSmrg case $win32_fileres in 4969e169010aSmrg *MS\ Windows\ PE\ Intel*) 4970e169010aSmrg win32_libid_type="x86 DLL" 4971e169010aSmrg ;; 4972e169010aSmrg esac 4973e169010aSmrg ;; 4974e169010aSmrg esac 4975e169010aSmrg $ECHO "$win32_libid_type" 4976e169010aSmrg} 49777914d74bSmrg 4978c63293b5Smrg# func_cygming_dll_for_implib ARG 4979c63293b5Smrg# 4980c63293b5Smrg# Platform-specific function to extract the 4981c63293b5Smrg# name of the DLL associated with the specified 4982c63293b5Smrg# import library ARG. 4983c63293b5Smrg# Invoked by eval'ing the libtool variable 4984c63293b5Smrg# $sharedlib_from_linklib_cmd 4985c63293b5Smrg# Result is available in the variable 4986c63293b5Smrg# $sharedlib_from_linklib_result 4987c63293b5Smrgfunc_cygming_dll_for_implib () 4988c63293b5Smrg{ 49899d0ccd10Smrg $debug_cmd 49909d0ccd10Smrg 4991c63293b5Smrg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 4992c63293b5Smrg} 4993c63293b5Smrg 4994c63293b5Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 4995c63293b5Smrg# 4996c63293b5Smrg# The is the core of a fallback implementation of a 4997c63293b5Smrg# platform-specific function to extract the name of the 4998c63293b5Smrg# DLL associated with the specified import library LIBNAME. 4999c63293b5Smrg# 5000c63293b5Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending 5001c63293b5Smrg# on the platform and compiler that created the implib. 5002c63293b5Smrg# 5003c63293b5Smrg# Echos the name of the DLL associated with the 5004c63293b5Smrg# specified import library. 5005c63293b5Smrgfunc_cygming_dll_for_implib_fallback_core () 5006c63293b5Smrg{ 50079d0ccd10Smrg $debug_cmd 50089d0ccd10Smrg 5009c63293b5Smrg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 5010c63293b5Smrg $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 5011c63293b5Smrg $SED '/^Contents of section '"$match_literal"':/{ 5012c63293b5Smrg # Place marker at beginning of archive member dllname section 5013c63293b5Smrg s/.*/====MARK====/ 5014c63293b5Smrg p 5015c63293b5Smrg d 5016c63293b5Smrg } 5017c63293b5Smrg # These lines can sometimes be longer than 43 characters, but 5018c63293b5Smrg # are always uninteresting 5019c63293b5Smrg /:[ ]*file format pe[i]\{,1\}-/d 5020c63293b5Smrg /^In archive [^:]*:/d 5021c63293b5Smrg # Ensure marker is printed 5022c63293b5Smrg /^====MARK====/p 5023c63293b5Smrg # Remove all lines with less than 43 characters 5024c63293b5Smrg /^.\{43\}/!d 5025c63293b5Smrg # From remaining lines, remove first 43 characters 5026c63293b5Smrg s/^.\{43\}//' | 5027c63293b5Smrg $SED -n ' 5028c63293b5Smrg # Join marker and all lines until next marker into a single line 5029c63293b5Smrg /^====MARK====/ b para 5030c63293b5Smrg H 5031c63293b5Smrg $ b para 5032c63293b5Smrg b 5033c63293b5Smrg :para 5034c63293b5Smrg x 5035c63293b5Smrg s/\n//g 5036c63293b5Smrg # Remove the marker 5037c63293b5Smrg s/^====MARK====// 5038c63293b5Smrg # Remove trailing dots and whitespace 5039c63293b5Smrg s/[\. \t]*$// 5040c63293b5Smrg # Print 5041c63293b5Smrg /./p' | 5042c63293b5Smrg # we now have a list, one entry per line, of the stringified 5043c63293b5Smrg # contents of the appropriate section of all members of the 50449d0ccd10Smrg # archive that possess that section. Heuristic: eliminate 50459d0ccd10Smrg # all those that have a first or second character that is 5046c63293b5Smrg # a '.' (that is, objdump's representation of an unprintable 5047c63293b5Smrg # character.) This should work for all archives with less than 5048c63293b5Smrg # 0x302f exports -- but will fail for DLLs whose name actually 5049c63293b5Smrg # begins with a literal '.' or a single character followed by 5050c63293b5Smrg # a '.'. 5051c63293b5Smrg # 5052c63293b5Smrg # Of those that remain, print the first one. 5053c63293b5Smrg $SED -e '/^\./d;/^.\./d;q' 5054c63293b5Smrg} 5055c63293b5Smrg 5056c63293b5Smrg# func_cygming_dll_for_implib_fallback ARG 5057c63293b5Smrg# Platform-specific function to extract the 5058c63293b5Smrg# name of the DLL associated with the specified 5059c63293b5Smrg# import library ARG. 5060c63293b5Smrg# 5061c63293b5Smrg# This fallback implementation is for use when $DLLTOOL 5062c63293b5Smrg# does not support the --identify-strict option. 5063c63293b5Smrg# Invoked by eval'ing the libtool variable 5064c63293b5Smrg# $sharedlib_from_linklib_cmd 5065c63293b5Smrg# Result is available in the variable 5066c63293b5Smrg# $sharedlib_from_linklib_result 5067c63293b5Smrgfunc_cygming_dll_for_implib_fallback () 5068c63293b5Smrg{ 50699d0ccd10Smrg $debug_cmd 50709d0ccd10Smrg 50719d0ccd10Smrg if func_cygming_gnu_implib_p "$1"; then 5072c63293b5Smrg # binutils import library 5073c63293b5Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 50749d0ccd10Smrg elif func_cygming_ms_implib_p "$1"; then 5075c63293b5Smrg # ms-generated import library 5076c63293b5Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 5077c63293b5Smrg else 5078c63293b5Smrg # unknown 50799d0ccd10Smrg sharedlib_from_linklib_result= 5080c63293b5Smrg fi 5081c63293b5Smrg} 50827914d74bSmrg 50837914d74bSmrg 5084e169010aSmrg# func_extract_an_archive dir oldlib 5085e169010aSmrgfunc_extract_an_archive () 5086e169010aSmrg{ 50879d0ccd10Smrg $debug_cmd 50889d0ccd10Smrg 50899d0ccd10Smrg f_ex_an_ar_dir=$1; shift 50909d0ccd10Smrg f_ex_an_ar_oldlib=$1 50919d0ccd10Smrg if test yes = "$lock_old_archive_extraction"; then 5092e8ead290Smrg lockfile=$f_ex_an_ar_oldlib.lock 5093e8ead290Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 5094e8ead290Smrg func_echo "Waiting for $lockfile to be removed" 5095e8ead290Smrg sleep 2 5096e8ead290Smrg done 5097e8ead290Smrg fi 5098e8ead290Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 5099e8ead290Smrg 'stat=$?; rm -f "$lockfile"; exit $stat' 51009d0ccd10Smrg if test yes = "$lock_old_archive_extraction"; then 5101e8ead290Smrg $opt_dry_run || rm -f "$lockfile" 5102e8ead290Smrg fi 5103e169010aSmrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 5104e169010aSmrg : 5105e169010aSmrg else 5106e169010aSmrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 5107e169010aSmrg fi 5108e169010aSmrg} 51097914d74bSmrg 51107914d74bSmrg 5111e169010aSmrg# func_extract_archives gentop oldlib ... 5112e169010aSmrgfunc_extract_archives () 5113e169010aSmrg{ 51149d0ccd10Smrg $debug_cmd 51159d0ccd10Smrg 51169d0ccd10Smrg my_gentop=$1; shift 5117e169010aSmrg my_oldlibs=${1+"$@"} 51189d0ccd10Smrg my_oldobjs= 51199d0ccd10Smrg my_xlib= 51209d0ccd10Smrg my_xabs= 51219d0ccd10Smrg my_xdir= 51227914d74bSmrg 5123e169010aSmrg for my_xlib in $my_oldlibs; do 5124e169010aSmrg # Extract the objects. 5125e169010aSmrg case $my_xlib in 51269d0ccd10Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; 5127e169010aSmrg *) my_xabs=`pwd`"/$my_xlib" ;; 5128e169010aSmrg esac 5129e169010aSmrg func_basename "$my_xlib" 51309d0ccd10Smrg my_xlib=$func_basename_result 5131e169010aSmrg my_xlib_u=$my_xlib 5132e169010aSmrg while :; do 5133e169010aSmrg case " $extracted_archives " in 5134e169010aSmrg *" $my_xlib_u "*) 5135e169010aSmrg func_arith $extracted_serial + 1 5136e169010aSmrg extracted_serial=$func_arith_result 5137e169010aSmrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 5138e169010aSmrg *) break ;; 5139e169010aSmrg esac 5140e169010aSmrg done 5141e169010aSmrg extracted_archives="$extracted_archives $my_xlib_u" 51429d0ccd10Smrg my_xdir=$my_gentop/$my_xlib_u 51437914d74bSmrg 5144e169010aSmrg func_mkdir_p "$my_xdir" 51457914d74bSmrg 5146e169010aSmrg case $host in 5147e169010aSmrg *-darwin*) 5148e169010aSmrg func_verbose "Extracting $my_xabs" 5149e169010aSmrg # Do not bother doing anything if just a dry run 5150e169010aSmrg $opt_dry_run || { 5151e169010aSmrg darwin_orig_dir=`pwd` 5152e169010aSmrg cd $my_xdir || exit $? 5153e169010aSmrg darwin_archive=$my_xabs 5154e169010aSmrg darwin_curdir=`pwd` 51559d0ccd10Smrg func_basename "$darwin_archive" 51569d0ccd10Smrg darwin_base_archive=$func_basename_result 5157e169010aSmrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 5158e169010aSmrg if test -n "$darwin_arches"; then 5159e169010aSmrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 5160e169010aSmrg darwin_arch= 5161e169010aSmrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 51629d0ccd10Smrg for darwin_arch in $darwin_arches; do 51639d0ccd10Smrg func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" 51649d0ccd10Smrg $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" 51659d0ccd10Smrg cd "unfat-$$/$darwin_base_archive-$darwin_arch" 51669d0ccd10Smrg func_extract_an_archive "`pwd`" "$darwin_base_archive" 5167e169010aSmrg cd "$darwin_curdir" 51689d0ccd10Smrg $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" 5169e169010aSmrg done # $darwin_arches 5170e169010aSmrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 51719d0ccd10Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` 5172e169010aSmrg darwin_file= 5173e169010aSmrg darwin_files= 5174e169010aSmrg for darwin_file in $darwin_filelist; do 5175e8ead290Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 5176e169010aSmrg $LIPO -create -output "$darwin_file" $darwin_files 5177e169010aSmrg done # $darwin_filelist 5178e169010aSmrg $RM -rf unfat-$$ 5179e169010aSmrg cd "$darwin_orig_dir" 5180e169010aSmrg else 5181e169010aSmrg cd $darwin_orig_dir 5182e169010aSmrg func_extract_an_archive "$my_xdir" "$my_xabs" 5183e169010aSmrg fi # $darwin_arches 5184e169010aSmrg } # !$opt_dry_run 5185e169010aSmrg ;; 5186e169010aSmrg *) 5187e169010aSmrg func_extract_an_archive "$my_xdir" "$my_xabs" 5188e169010aSmrg ;; 51897914d74bSmrg esac 5190e8ead290Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 5191e169010aSmrg done 51927914d74bSmrg 51939d0ccd10Smrg func_extract_archives_result=$my_oldobjs 5194e169010aSmrg} 51957914d74bSmrg 51967914d74bSmrg 5197e8ead290Smrg# func_emit_wrapper [arg=no] 5198e8ead290Smrg# 5199e8ead290Smrg# Emit a libtool wrapper script on stdout. 5200e8ead290Smrg# Don't directly open a file because we may want to 5201e8ead290Smrg# incorporate the script contents within a cygwin/mingw 5202e8ead290Smrg# wrapper executable. Must ONLY be called from within 5203e8ead290Smrg# func_mode_link because it depends on a number of variables 5204e8ead290Smrg# set therein. 5205e169010aSmrg# 5206e8ead290Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 5207e8ead290Smrg# variable will take. If 'yes', then the emitted script 52089d0ccd10Smrg# will assume that the directory where it is stored is 5209e8ead290Smrg# the $objdir directory. This is a cygwin/mingw-specific 5210e8ead290Smrg# behavior. 5211e8ead290Smrgfunc_emit_wrapper () 5212e169010aSmrg{ 5213e8ead290Smrg func_emit_wrapper_arg1=${1-no} 52147914d74bSmrg 5215e169010aSmrg $ECHO "\ 5216e169010aSmrg#! $SHELL 52177914d74bSmrg 5218e169010aSmrg# $output - temporary wrapper script for $objdir/$outputname 52199d0ccd10Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5220e169010aSmrg# 5221e169010aSmrg# The $output program cannot be directly executed until all the libtool 5222e169010aSmrg# libraries that it depends on are installed. 5223e169010aSmrg# 5224e169010aSmrg# This wrapper script should never be moved out of the build directory. 5225e169010aSmrg# If it is, it will not operate correctly. 52267914d74bSmrg 5227e169010aSmrg# Sed substitution that helps us do robust quoting. It backslashifies 5228e169010aSmrg# metacharacters that are still active within double-quoted strings. 5229e169010aSmrgsed_quote_subst='$sed_quote_subst' 52307914d74bSmrg 5231e169010aSmrg# Be Bourne compatible 5232e169010aSmrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 5233e169010aSmrg emulate sh 5234e169010aSmrg NULLCMD=: 5235e169010aSmrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 5236e169010aSmrg # is contrary to our usage. Disable this feature. 5237e169010aSmrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 5238e169010aSmrg setopt NO_GLOB_SUBST 5239e169010aSmrgelse 5240e169010aSmrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 5241e169010aSmrgfi 5242e169010aSmrgBIN_SH=xpg4; export BIN_SH # for Tru64 5243e169010aSmrgDUALCASE=1; export DUALCASE # for MKS sh 52447914d74bSmrg 5245e169010aSmrg# The HP-UX ksh and POSIX shell print the target directory to stdout 5246e169010aSmrg# if CDPATH is set. 5247e169010aSmrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 52487914d74bSmrg 5249e169010aSmrgrelink_command=\"$relink_command\" 52507914d74bSmrg 5251e169010aSmrg# This environment variable determines our operation mode. 5252e169010aSmrgif test \"\$libtool_install_magic\" = \"$magic\"; then 5253e169010aSmrg # install mode needs the following variables: 5254e169010aSmrg generated_by_libtool_version='$macro_version' 5255e169010aSmrg notinst_deplibs='$notinst_deplibs' 5256e169010aSmrgelse 5257e169010aSmrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 5258e169010aSmrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 5259e8ead290Smrg file=\"\$0\"" 5260e8ead290Smrg 5261e8ead290Smrg qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 5262e8ead290Smrg $ECHO "\ 5263e8ead290Smrg 5264e8ead290Smrg# A function that is used when there is no print builtin or printf. 5265e8ead290Smrgfunc_fallback_echo () 5266e8ead290Smrg{ 5267e8ead290Smrg eval 'cat <<_LTECHO_EOF 5268e8ead290Smrg\$1 5269e8ead290Smrg_LTECHO_EOF' 5270e8ead290Smrg} 5271e8ead290Smrg ECHO=\"$qECHO\" 5272e8ead290Smrg fi 5273e8ead290Smrg 5274e8ead290Smrg# Very basic option parsing. These options are (a) specific to 5275e8ead290Smrg# the libtool wrapper, (b) are identical between the wrapper 52769d0ccd10Smrg# /script/ and the wrapper /executable/ that is used only on 5277e8ead290Smrg# windows platforms, and (c) all begin with the string "--lt-" 52789d0ccd10Smrg# (application programs are unlikely to have options that match 5279e8ead290Smrg# this pattern). 5280e8ead290Smrg# 5281e8ead290Smrg# There are only two supported options: --lt-debug and 5282e8ead290Smrg# --lt-dump-script. There is, deliberately, no --lt-help. 5283e8ead290Smrg# 5284e8ead290Smrg# The first argument to this parsing function should be the 5285e8ead290Smrg# script's $0 value, followed by "$@". 5286e8ead290Smrglt_option_debug= 5287e8ead290Smrgfunc_parse_lt_options () 5288e8ead290Smrg{ 5289e8ead290Smrg lt_script_arg0=\$0 5290e8ead290Smrg shift 5291e8ead290Smrg for lt_opt 5292e8ead290Smrg do 5293e8ead290Smrg case \"\$lt_opt\" in 5294e8ead290Smrg --lt-debug) lt_option_debug=1 ;; 5295e8ead290Smrg --lt-dump-script) 5296e8ead290Smrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 5297e8ead290Smrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 5298e8ead290Smrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 5299e8ead290Smrg cat \"\$lt_dump_D/\$lt_dump_F\" 5300e8ead290Smrg exit 0 5301e8ead290Smrg ;; 5302e8ead290Smrg --lt-*) 5303e8ead290Smrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 5304e8ead290Smrg exit 1 5305e8ead290Smrg ;; 5306e8ead290Smrg esac 5307e8ead290Smrg done 5308e8ead290Smrg 5309e8ead290Smrg # Print the debug banner immediately: 5310e8ead290Smrg if test -n \"\$lt_option_debug\"; then 53119d0ccd10Smrg echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 5312e8ead290Smrg fi 5313e8ead290Smrg} 5314e8ead290Smrg 5315e8ead290Smrg# Used when --lt-debug. Prints its arguments to stdout 5316e8ead290Smrg# (redirection is the responsibility of the caller) 5317e8ead290Smrgfunc_lt_dump_args () 5318e8ead290Smrg{ 5319e8ead290Smrg lt_dump_args_N=1; 5320e8ead290Smrg for lt_arg 5321e8ead290Smrg do 53229d0ccd10Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" 5323e8ead290Smrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 5324e8ead290Smrg done 5325e8ead290Smrg} 5326e8ead290Smrg 5327e8ead290Smrg# Core function for launching the target application 5328e8ead290Smrgfunc_exec_program_core () 5329e8ead290Smrg{ 5330e169010aSmrg" 5331e8ead290Smrg case $host in 5332e8ead290Smrg # Backslashes separate directories on plain windows 5333e8ead290Smrg *-*-mingw | *-*-os2* | *-cegcc*) 5334e8ead290Smrg $ECHO "\ 5335e8ead290Smrg if test -n \"\$lt_option_debug\"; then 53369d0ccd10Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 5337e8ead290Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 5338e8ead290Smrg fi 5339e8ead290Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 5340e8ead290Smrg" 5341e8ead290Smrg ;; 5342e8ead290Smrg 5343e8ead290Smrg *) 5344e8ead290Smrg $ECHO "\ 5345e8ead290Smrg if test -n \"\$lt_option_debug\"; then 53469d0ccd10Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 5347e8ead290Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 5348e8ead290Smrg fi 5349e8ead290Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 5350e8ead290Smrg" 5351e8ead290Smrg ;; 5352e8ead290Smrg esac 5353e8ead290Smrg $ECHO "\ 5354e8ead290Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 5355e8ead290Smrg exit 1 5356e8ead290Smrg} 5357e8ead290Smrg 5358e8ead290Smrg# A function to encapsulate launching the target application 5359e8ead290Smrg# Strips options in the --lt-* namespace from \$@ and 5360e8ead290Smrg# launches target application with the remaining arguments. 5361e8ead290Smrgfunc_exec_program () 5362e8ead290Smrg{ 5363e6d5e4e0Smrg case \" \$* \" in 5364e6d5e4e0Smrg *\\ --lt-*) 5365e6d5e4e0Smrg for lt_wr_arg 5366e6d5e4e0Smrg do 5367e6d5e4e0Smrg case \$lt_wr_arg in 5368e6d5e4e0Smrg --lt-*) ;; 5369e6d5e4e0Smrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 5370e6d5e4e0Smrg esac 5371e6d5e4e0Smrg shift 5372e6d5e4e0Smrg done ;; 5373e6d5e4e0Smrg esac 5374e8ead290Smrg func_exec_program_core \${1+\"\$@\"} 5375e8ead290Smrg} 5376e8ead290Smrg 5377e8ead290Smrg # Parse options 5378e8ead290Smrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 53797914d74bSmrg 5380e169010aSmrg # Find the directory that this script lives in. 5381e8ead290Smrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 5382e169010aSmrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 53837914d74bSmrg 5384e169010aSmrg # Follow symbolic links until we get to the real thisdir. 5385e8ead290Smrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 5386e169010aSmrg while test -n \"\$file\"; do 5387e8ead290Smrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 53887914d74bSmrg 5389e169010aSmrg # If there was a directory component, then change thisdir. 5390e169010aSmrg if test \"x\$destdir\" != \"x\$file\"; then 5391e169010aSmrg case \"\$destdir\" in 5392e169010aSmrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 5393e169010aSmrg *) thisdir=\"\$thisdir/\$destdir\" ;; 5394e169010aSmrg esac 5395e169010aSmrg fi 53967914d74bSmrg 5397e8ead290Smrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 5398e8ead290Smrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 5399e169010aSmrg done 54007914d74bSmrg 5401e169010aSmrg # Usually 'no', except on cygwin/mingw when embedded into 5402e169010aSmrg # the cwrapper. 5403e8ead290Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 5404e169010aSmrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 5405e169010aSmrg # special case for '.' 5406e169010aSmrg if test \"\$thisdir\" = \".\"; then 5407e169010aSmrg thisdir=\`pwd\` 5408e169010aSmrg fi 5409e169010aSmrg # remove .libs from thisdir 5410e169010aSmrg case \"\$thisdir\" in 5411e8ead290Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 5412e169010aSmrg $objdir ) thisdir=. ;; 5413e169010aSmrg esac 5414e169010aSmrg fi 54157914d74bSmrg 5416e169010aSmrg # Try to get the absolute directory name. 5417e169010aSmrg absdir=\`cd \"\$thisdir\" && pwd\` 5418e169010aSmrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 5419e169010aSmrg" 54207914d74bSmrg 54219d0ccd10Smrg if test yes = "$fast_install"; then 5422e169010aSmrg $ECHO "\ 5423e169010aSmrg program=lt-'$outputname'$exeext 5424e169010aSmrg progdir=\"\$thisdir/$objdir\" 54257914d74bSmrg 5426e169010aSmrg if test ! -f \"\$progdir/\$program\" || 54279d0ccd10Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ 5428e169010aSmrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 54297914d74bSmrg 5430e169010aSmrg file=\"\$\$-\$program\" 54317914d74bSmrg 5432e169010aSmrg if test ! -d \"\$progdir\"; then 5433e169010aSmrg $MKDIR \"\$progdir\" 5434e169010aSmrg else 5435e169010aSmrg $RM \"\$progdir/\$file\" 5436e169010aSmrg fi" 54377914d74bSmrg 5438e169010aSmrg $ECHO "\ 54397914d74bSmrg 5440e169010aSmrg # relink executable if necessary 5441e169010aSmrg if test -n \"\$relink_command\"; then 5442e169010aSmrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 5443e169010aSmrg else 54449d0ccd10Smrg \$ECHO \"\$relink_command_output\" >&2 5445e169010aSmrg $RM \"\$progdir/\$file\" 5446e169010aSmrg exit 1 5447e169010aSmrg fi 5448e169010aSmrg fi 54497914d74bSmrg 5450e169010aSmrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 5451e169010aSmrg { $RM \"\$progdir/\$program\"; 5452e169010aSmrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 5453e169010aSmrg $RM \"\$progdir/\$file\" 5454e169010aSmrg fi" 5455e169010aSmrg else 5456e169010aSmrg $ECHO "\ 5457e169010aSmrg program='$outputname' 5458e169010aSmrg progdir=\"\$thisdir/$objdir\" 5459e169010aSmrg" 5460e169010aSmrg fi 54617914d74bSmrg 5462e169010aSmrg $ECHO "\ 54637914d74bSmrg 5464e169010aSmrg if test -f \"\$progdir/\$program\"; then" 54657914d74bSmrg 5466c63293b5Smrg # fixup the dll searchpath if we need to. 5467c63293b5Smrg # 5468c63293b5Smrg # Fix the DLL searchpath if we need to. Do this before prepending 5469c63293b5Smrg # to shlibpath, because on Windows, both are PATH and uninstalled 5470c63293b5Smrg # libraries must come first. 5471c63293b5Smrg if test -n "$dllsearchpath"; then 5472c63293b5Smrg $ECHO "\ 5473c63293b5Smrg # Add the dll search path components to the executable PATH 5474c63293b5Smrg PATH=$dllsearchpath:\$PATH 5475c63293b5Smrg" 5476c63293b5Smrg fi 5477c63293b5Smrg 5478e169010aSmrg # Export our shlibpath_var if we have one. 54799d0ccd10Smrg if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5480e169010aSmrg $ECHO "\ 5481e169010aSmrg # Add our own library path to $shlibpath_var 5482e169010aSmrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 54837914d74bSmrg 5484e169010aSmrg # Some systems cannot cope with colon-terminated $shlibpath_var 5485e169010aSmrg # The second colon is a workaround for a bug in BeOS R4 sed 5486e8ead290Smrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 54877914d74bSmrg 5488e169010aSmrg export $shlibpath_var 5489e169010aSmrg" 54907914d74bSmrg fi 54917914d74bSmrg 5492e169010aSmrg $ECHO "\ 5493e169010aSmrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 5494e169010aSmrg # Run the actual program with our arguments. 5495e8ead290Smrg func_exec_program \${1+\"\$@\"} 5496e169010aSmrg fi 5497e169010aSmrg else 5498e169010aSmrg # The program doesn't exist. 54999d0ccd10Smrg \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 5500e169010aSmrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 5501e8ead290Smrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 5502e169010aSmrg exit 1 5503e169010aSmrg fi 5504e169010aSmrgfi\ 5505e169010aSmrg" 5506e169010aSmrg} 55077914d74bSmrg 55087914d74bSmrg 5509e169010aSmrg# func_emit_cwrapperexe_src 5510e169010aSmrg# emit the source code for a wrapper executable on stdout 5511e169010aSmrg# Must ONLY be called from within func_mode_link because 5512e169010aSmrg# it depends on a number of variable set therein. 5513e169010aSmrgfunc_emit_cwrapperexe_src () 5514e169010aSmrg{ 5515e169010aSmrg cat <<EOF 55167914d74bSmrg 5517e169010aSmrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 55189d0ccd10Smrg Generated by $PROGRAM (GNU $PACKAGE) $VERSION 55197914d74bSmrg 5520e169010aSmrg The $output program cannot be directly executed until all the libtool 5521e169010aSmrg libraries that it depends on are installed. 55227914d74bSmrg 5523e169010aSmrg This wrapper executable should never be moved out of the build directory. 5524e169010aSmrg If it is, it will not operate correctly. 5525e169010aSmrg*/ 5526e169010aSmrgEOF 5527e169010aSmrg cat <<"EOF" 5528e8ead290Smrg#ifdef _MSC_VER 5529e8ead290Smrg# define _CRT_SECURE_NO_DEPRECATE 1 5530e8ead290Smrg#endif 5531e169010aSmrg#include <stdio.h> 5532e169010aSmrg#include <stdlib.h> 5533e169010aSmrg#ifdef _MSC_VER 5534e169010aSmrg# include <direct.h> 5535e169010aSmrg# include <process.h> 5536e169010aSmrg# include <io.h> 5537e169010aSmrg#else 5538e169010aSmrg# include <unistd.h> 5539e169010aSmrg# include <stdint.h> 5540e169010aSmrg# ifdef __CYGWIN__ 5541e169010aSmrg# include <io.h> 5542e169010aSmrg# endif 5543e169010aSmrg#endif 5544e169010aSmrg#include <malloc.h> 5545e169010aSmrg#include <stdarg.h> 5546e169010aSmrg#include <assert.h> 5547e169010aSmrg#include <string.h> 5548e169010aSmrg#include <ctype.h> 5549e169010aSmrg#include <errno.h> 5550e169010aSmrg#include <fcntl.h> 5551e169010aSmrg#include <sys/stat.h> 5552e169010aSmrg 55539d0ccd10Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 55549d0ccd10Smrg 5555e8ead290Smrg/* declarations of non-ANSI functions */ 55569d0ccd10Smrg#if defined __MINGW32__ 5557e8ead290Smrg# ifdef __STRICT_ANSI__ 5558e8ead290Smrgint _putenv (const char *); 5559e8ead290Smrg# endif 55609d0ccd10Smrg#elif defined __CYGWIN__ 5561e8ead290Smrg# ifdef __STRICT_ANSI__ 5562e8ead290Smrgchar *realpath (const char *, char *); 5563e8ead290Smrgint putenv (char *); 5564e8ead290Smrgint setenv (const char *, const char *, int); 5565e8ead290Smrg# endif 55669d0ccd10Smrg/* #elif defined other_platform || defined ... */ 5567e8ead290Smrg#endif 5568e8ead290Smrg 5569e8ead290Smrg/* portability defines, excluding path handling macros */ 55709d0ccd10Smrg#if defined _MSC_VER 5571e8ead290Smrg# define setmode _setmode 5572e8ead290Smrg# define stat _stat 5573e8ead290Smrg# define chmod _chmod 5574e8ead290Smrg# define getcwd _getcwd 5575e8ead290Smrg# define putenv _putenv 5576e8ead290Smrg# define S_IXUSR _S_IEXEC 55779d0ccd10Smrg#elif defined __MINGW32__ 5578e8ead290Smrg# define setmode _setmode 5579e8ead290Smrg# define stat _stat 5580e8ead290Smrg# define chmod _chmod 5581e8ead290Smrg# define getcwd _getcwd 5582e8ead290Smrg# define putenv _putenv 55839d0ccd10Smrg#elif defined __CYGWIN__ 5584e8ead290Smrg# define HAVE_SETENV 5585e8ead290Smrg# define FOPEN_WB "wb" 55869d0ccd10Smrg/* #elif defined other platforms ... */ 5587e8ead290Smrg#endif 5588e8ead290Smrg 55899d0ccd10Smrg#if defined PATH_MAX 5590e169010aSmrg# define LT_PATHMAX PATH_MAX 55919d0ccd10Smrg#elif defined MAXPATHLEN 5592e169010aSmrg# define LT_PATHMAX MAXPATHLEN 5593e169010aSmrg#else 5594e169010aSmrg# define LT_PATHMAX 1024 5595e169010aSmrg#endif 5596e169010aSmrg 5597e169010aSmrg#ifndef S_IXOTH 5598e169010aSmrg# define S_IXOTH 0 5599e169010aSmrg#endif 5600e169010aSmrg#ifndef S_IXGRP 5601e169010aSmrg# define S_IXGRP 0 5602e169010aSmrg#endif 5603e169010aSmrg 5604e8ead290Smrg/* path handling portability macros */ 5605e169010aSmrg#ifndef DIR_SEPARATOR 5606e169010aSmrg# define DIR_SEPARATOR '/' 5607e169010aSmrg# define PATH_SEPARATOR ':' 5608e169010aSmrg#endif 5609e169010aSmrg 56109d0ccd10Smrg#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ 56119d0ccd10Smrg defined __OS2__ 5612e169010aSmrg# define HAVE_DOS_BASED_FILE_SYSTEM 5613e169010aSmrg# define FOPEN_WB "wb" 5614e169010aSmrg# ifndef DIR_SEPARATOR_2 5615e169010aSmrg# define DIR_SEPARATOR_2 '\\' 5616e169010aSmrg# endif 5617e169010aSmrg# ifndef PATH_SEPARATOR_2 5618e169010aSmrg# define PATH_SEPARATOR_2 ';' 5619e169010aSmrg# endif 5620e169010aSmrg#endif 5621e169010aSmrg 5622e169010aSmrg#ifndef DIR_SEPARATOR_2 5623e169010aSmrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 5624e169010aSmrg#else /* DIR_SEPARATOR_2 */ 5625e169010aSmrg# define IS_DIR_SEPARATOR(ch) \ 5626e169010aSmrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 5627e169010aSmrg#endif /* DIR_SEPARATOR_2 */ 5628e169010aSmrg 5629e169010aSmrg#ifndef PATH_SEPARATOR_2 5630e169010aSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 5631e169010aSmrg#else /* PATH_SEPARATOR_2 */ 5632e169010aSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 5633e169010aSmrg#endif /* PATH_SEPARATOR_2 */ 5634e169010aSmrg 5635e169010aSmrg#ifndef FOPEN_WB 5636e169010aSmrg# define FOPEN_WB "w" 5637e169010aSmrg#endif 5638e169010aSmrg#ifndef _O_BINARY 5639e169010aSmrg# define _O_BINARY 0 5640e169010aSmrg#endif 5641e169010aSmrg 5642e169010aSmrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 5643e169010aSmrg#define XFREE(stale) do { \ 56449d0ccd10Smrg if (stale) { free (stale); stale = 0; } \ 5645e169010aSmrg} while (0) 5646e169010aSmrg 56479d0ccd10Smrg#if defined LT_DEBUGWRAPPER 5648e8ead290Smrgstatic int lt_debug = 1; 5649e169010aSmrg#else 5650e8ead290Smrgstatic int lt_debug = 0; 5651e169010aSmrg#endif 5652e169010aSmrg 5653e8ead290Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 5654e169010aSmrg 5655e169010aSmrgvoid *xmalloc (size_t num); 5656e169010aSmrgchar *xstrdup (const char *string); 5657e169010aSmrgconst char *base_name (const char *name); 5658e169010aSmrgchar *find_executable (const char *wrapper); 5659e169010aSmrgchar *chase_symlinks (const char *pathspec); 5660e169010aSmrgint make_executable (const char *path); 5661e169010aSmrgint check_executable (const char *path); 5662e169010aSmrgchar *strendzap (char *str, const char *pat); 5663e8ead290Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 5664e8ead290Smrgvoid lt_fatal (const char *file, int line, const char *message, ...); 5665e8ead290Smrgstatic const char *nonnull (const char *s); 5666e8ead290Smrgstatic const char *nonempty (const char *s); 5667e169010aSmrgvoid lt_setenv (const char *name, const char *value); 5668e169010aSmrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 5669e169010aSmrgvoid lt_update_exe_path (const char *name, const char *value); 5670e169010aSmrgvoid lt_update_lib_path (const char *name, const char *value); 5671e8ead290Smrgchar **prepare_spawn (char **argv); 5672e8ead290Smrgvoid lt_dump_script (FILE *f); 5673e169010aSmrgEOF 5674e169010aSmrg 5675e169010aSmrg cat <<EOF 56769d0ccd10Smrg#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) 56779d0ccd10Smrg# define externally_visible volatile 56789d0ccd10Smrg#else 56799d0ccd10Smrg# define externally_visible __attribute__((externally_visible)) volatile 56809d0ccd10Smrg#endif 56819d0ccd10Smrgexternally_visible const char * MAGIC_EXE = "$magic_exe"; 5682e169010aSmrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 5683e169010aSmrgEOF 5684e169010aSmrg 56859d0ccd10Smrg if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5686c63293b5Smrg func_to_host_path "$temp_rpath" 5687e169010aSmrg cat <<EOF 5688c63293b5Smrgconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 56897914d74bSmrgEOF 56907914d74bSmrg else 5691e169010aSmrg cat <<"EOF" 5692e169010aSmrgconst char * LIB_PATH_VALUE = ""; 5693e169010aSmrgEOF 56947914d74bSmrg fi 5695e169010aSmrg 5696e169010aSmrg if test -n "$dllsearchpath"; then 5697c63293b5Smrg func_to_host_path "$dllsearchpath:" 5698e169010aSmrg cat <<EOF 5699e169010aSmrgconst char * EXE_PATH_VARNAME = "PATH"; 5700c63293b5Smrgconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 5701e169010aSmrgEOF 57027914d74bSmrg else 5703e169010aSmrg cat <<"EOF" 5704e169010aSmrgconst char * EXE_PATH_VARNAME = ""; 5705e169010aSmrgconst char * EXE_PATH_VALUE = ""; 5706e169010aSmrgEOF 57077914d74bSmrg fi 5708e169010aSmrg 57099d0ccd10Smrg if test yes = "$fast_install"; then 5710e169010aSmrg cat <<EOF 5711e169010aSmrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 5712e169010aSmrgEOF 57137914d74bSmrg else 5714e169010aSmrg cat <<EOF 5715e169010aSmrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 5716e169010aSmrgEOF 57177914d74bSmrg fi 57187914d74bSmrg 57197914d74bSmrg 5720e169010aSmrg cat <<"EOF" 57217914d74bSmrg 5722e169010aSmrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 57237914d74bSmrg 5724e169010aSmrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 5725e169010aSmrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 5726e8ead290Smrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 57277914d74bSmrg 5728e169010aSmrgint 5729e169010aSmrgmain (int argc, char *argv[]) 5730e169010aSmrg{ 5731e169010aSmrg char **newargz; 5732e169010aSmrg int newargc; 5733e169010aSmrg char *tmp_pathspec; 5734e169010aSmrg char *actual_cwrapper_path; 5735e169010aSmrg char *actual_cwrapper_name; 5736e169010aSmrg char *target_name; 5737e169010aSmrg char *lt_argv_zero; 57389d0ccd10Smrg int rval = 127; 57397914d74bSmrg 5740e169010aSmrg int i; 57417914d74bSmrg 5742e169010aSmrg program_name = (char *) xstrdup (base_name (argv[0])); 57439d0ccd10Smrg newargz = XMALLOC (char *, (size_t) argc + 1); 57447914d74bSmrg 5745e8ead290Smrg /* very simple arg parsing; don't want to rely on getopt 5746e8ead290Smrg * also, copy all non cwrapper options to newargz, except 5747e8ead290Smrg * argz[0], which is handled differently 5748e8ead290Smrg */ 5749e8ead290Smrg newargc=0; 5750e169010aSmrg for (i = 1; i < argc; i++) 5751e169010aSmrg { 57529d0ccd10Smrg if (STREQ (argv[i], dumpscript_opt)) 5753e169010aSmrg { 5754e169010aSmrgEOF 57559d0ccd10Smrg case $host in 5756e169010aSmrg *mingw* | *cygwin* ) 5757e169010aSmrg # make stdout use "unix" line endings 5758e169010aSmrg echo " setmode(1,_O_BINARY);" 5759e169010aSmrg ;; 5760e169010aSmrg esac 57617914d74bSmrg 5762e169010aSmrg cat <<"EOF" 5763e8ead290Smrg lt_dump_script (stdout); 5764e169010aSmrg return 0; 5765e169010aSmrg } 57669d0ccd10Smrg if (STREQ (argv[i], debug_opt)) 5767e8ead290Smrg { 5768e8ead290Smrg lt_debug = 1; 5769e8ead290Smrg continue; 5770e8ead290Smrg } 57719d0ccd10Smrg if (STREQ (argv[i], ltwrapper_option_prefix)) 5772e8ead290Smrg { 5773e8ead290Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 5774e8ead290Smrg namespace, but it is not one of the ones we know about and 5775e8ead290Smrg have already dealt with, above (inluding dump-script), then 5776e8ead290Smrg report an error. Otherwise, targets might begin to believe 5777e8ead290Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 5778e8ead290Smrg namespace. The first time any user complains about this, we'll 5779e8ead290Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 5780e8ead290Smrg or a configure.ac-settable value. 5781e8ead290Smrg */ 5782e8ead290Smrg lt_fatal (__FILE__, __LINE__, 5783e8ead290Smrg "unrecognized %s option: '%s'", 5784e8ead290Smrg ltwrapper_option_prefix, argv[i]); 5785e8ead290Smrg } 5786e8ead290Smrg /* otherwise ... */ 5787e8ead290Smrg newargz[++newargc] = xstrdup (argv[i]); 5788e169010aSmrg } 5789e8ead290Smrg newargz[++newargc] = NULL; 5790e8ead290Smrg 5791e8ead290SmrgEOF 5792e8ead290Smrg cat <<EOF 5793e8ead290Smrg /* The GNU banner must be the first non-error debug message */ 57949d0ccd10Smrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); 5795e8ead290SmrgEOF 5796e8ead290Smrg cat <<"EOF" 5797e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 5798e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 57997914d74bSmrg 5800e169010aSmrg tmp_pathspec = find_executable (argv[0]); 5801e169010aSmrg if (tmp_pathspec == NULL) 5802e8ead290Smrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 5803e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, 5804e8ead290Smrg "(main) found exe (before symlink chase) at: %s\n", 5805e8ead290Smrg tmp_pathspec); 5806e169010aSmrg 5807e169010aSmrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 5808e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, 5809e8ead290Smrg "(main) found exe (after symlink chase) at: %s\n", 5810e8ead290Smrg actual_cwrapper_path); 5811e169010aSmrg XFREE (tmp_pathspec); 5812e169010aSmrg 5813e8ead290Smrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 5814e169010aSmrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 5815e169010aSmrg 5816e169010aSmrg /* wrapper name transforms */ 5817e169010aSmrg strendzap (actual_cwrapper_name, ".exe"); 5818e169010aSmrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 5819e169010aSmrg XFREE (actual_cwrapper_name); 5820e169010aSmrg actual_cwrapper_name = tmp_pathspec; 5821e169010aSmrg tmp_pathspec = 0; 5822e169010aSmrg 5823e169010aSmrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 5824e169010aSmrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 5825e169010aSmrg strendzap (target_name, ".exe"); 5826e169010aSmrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 5827e169010aSmrg XFREE (target_name); 5828e169010aSmrg target_name = tmp_pathspec; 5829e169010aSmrg tmp_pathspec = 0; 5830e169010aSmrg 5831e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, 5832e8ead290Smrg "(main) libtool target name: %s\n", 5833e8ead290Smrg target_name); 5834e169010aSmrgEOF 58357914d74bSmrg 5836e169010aSmrg cat <<EOF 5837e169010aSmrg newargz[0] = 5838e169010aSmrg XMALLOC (char, (strlen (actual_cwrapper_path) + 5839e169010aSmrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 5840e169010aSmrg strcpy (newargz[0], actual_cwrapper_path); 5841e169010aSmrg strcat (newargz[0], "$objdir"); 5842e169010aSmrg strcat (newargz[0], "/"); 5843e169010aSmrgEOF 58447914d74bSmrg 5845e169010aSmrg cat <<"EOF" 5846e169010aSmrg /* stop here, and copy so we don't have to do this twice */ 5847e169010aSmrg tmp_pathspec = xstrdup (newargz[0]); 58487914d74bSmrg 5849e169010aSmrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 5850e169010aSmrg strcat (newargz[0], actual_cwrapper_name); 58517914d74bSmrg 5852e169010aSmrg /* DO want the lt- prefix here if it exists, so use target_name */ 5853e169010aSmrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 5854e169010aSmrg XFREE (tmp_pathspec); 5855e169010aSmrg tmp_pathspec = NULL; 5856e169010aSmrgEOF 58577914d74bSmrg 5858e169010aSmrg case $host_os in 5859e169010aSmrg mingw*) 5860e169010aSmrg cat <<"EOF" 5861e169010aSmrg { 5862e169010aSmrg char* p; 5863e169010aSmrg while ((p = strchr (newargz[0], '\\')) != NULL) 5864e169010aSmrg { 5865e169010aSmrg *p = '/'; 5866e169010aSmrg } 5867e169010aSmrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 5868e169010aSmrg { 5869e169010aSmrg *p = '/'; 5870e169010aSmrg } 5871e169010aSmrg } 5872e169010aSmrgEOF 5873e169010aSmrg ;; 5874e169010aSmrg esac 58757914d74bSmrg 5876e169010aSmrg cat <<"EOF" 5877e169010aSmrg XFREE (target_name); 5878e169010aSmrg XFREE (actual_cwrapper_path); 5879e169010aSmrg XFREE (actual_cwrapper_name); 58807914d74bSmrg 5881e169010aSmrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 5882e169010aSmrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 5883c63293b5Smrg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 5884c63293b5Smrg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 5885c63293b5Smrg because on Windows, both *_VARNAMEs are PATH but uninstalled 5886c63293b5Smrg libraries must come first. */ 5887e169010aSmrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 5888c63293b5Smrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 58897914d74bSmrg 5890e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 5891e8ead290Smrg nonnull (lt_argv_zero)); 5892e169010aSmrg for (i = 0; i < newargc; i++) 5893e169010aSmrg { 5894e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 5895e8ead290Smrg i, nonnull (newargz[i])); 5896e169010aSmrg } 58977914d74bSmrg 5898e169010aSmrgEOF 58997914d74bSmrg 5900e169010aSmrg case $host_os in 5901e169010aSmrg mingw*) 5902e169010aSmrg cat <<"EOF" 5903e169010aSmrg /* execv doesn't actually work on mingw as expected on unix */ 5904e8ead290Smrg newargz = prepare_spawn (newargz); 59059d0ccd10Smrg rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 5906e169010aSmrg if (rval == -1) 5907e169010aSmrg { 5908e169010aSmrg /* failed to start process */ 5909e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, 5910e8ead290Smrg "(main) failed to launch target \"%s\": %s\n", 5911e8ead290Smrg lt_argv_zero, nonnull (strerror (errno))); 5912e169010aSmrg return 127; 5913e169010aSmrg } 5914e169010aSmrg return rval; 5915e169010aSmrgEOF 5916e169010aSmrg ;; 5917e169010aSmrg *) 5918e169010aSmrg cat <<"EOF" 5919e169010aSmrg execv (lt_argv_zero, newargz); 5920e169010aSmrg return rval; /* =127, but avoids unused variable warning */ 5921e169010aSmrgEOF 5922e169010aSmrg ;; 5923e169010aSmrg esac 59247914d74bSmrg 5925e169010aSmrg cat <<"EOF" 5926e169010aSmrg} 59277914d74bSmrg 5928e169010aSmrgvoid * 5929e169010aSmrgxmalloc (size_t num) 5930e169010aSmrg{ 5931e169010aSmrg void *p = (void *) malloc (num); 5932e169010aSmrg if (!p) 5933e8ead290Smrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 59347914d74bSmrg 5935e169010aSmrg return p; 5936e169010aSmrg} 59377914d74bSmrg 5938e169010aSmrgchar * 5939e169010aSmrgxstrdup (const char *string) 5940e169010aSmrg{ 5941e169010aSmrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 5942e169010aSmrg string) : NULL; 5943e169010aSmrg} 59447914d74bSmrg 5945e169010aSmrgconst char * 5946e169010aSmrgbase_name (const char *name) 5947e169010aSmrg{ 5948e169010aSmrg const char *base; 59497914d74bSmrg 59509d0ccd10Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 5951e169010aSmrg /* Skip over the disk name in MSDOS pathnames. */ 5952e169010aSmrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 5953e169010aSmrg name += 2; 5954e169010aSmrg#endif 59557914d74bSmrg 5956e169010aSmrg for (base = name; *name; name++) 5957e169010aSmrg if (IS_DIR_SEPARATOR (*name)) 5958e169010aSmrg base = name + 1; 5959e169010aSmrg return base; 5960e169010aSmrg} 59617914d74bSmrg 5962e169010aSmrgint 5963e169010aSmrgcheck_executable (const char *path) 5964e169010aSmrg{ 5965e169010aSmrg struct stat st; 59667914d74bSmrg 5967e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 5968e8ead290Smrg nonempty (path)); 5969e169010aSmrg if ((!path) || (!*path)) 5970e169010aSmrg return 0; 59717914d74bSmrg 5972e169010aSmrg if ((stat (path, &st) >= 0) 5973e169010aSmrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 5974e169010aSmrg return 1; 5975e169010aSmrg else 5976e169010aSmrg return 0; 5977e169010aSmrg} 59787914d74bSmrg 5979e169010aSmrgint 5980e169010aSmrgmake_executable (const char *path) 5981e169010aSmrg{ 5982e169010aSmrg int rval = 0; 5983e169010aSmrg struct stat st; 59847914d74bSmrg 5985e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 5986e8ead290Smrg nonempty (path)); 5987e169010aSmrg if ((!path) || (!*path)) 5988e169010aSmrg return 0; 59897914d74bSmrg 5990e169010aSmrg if (stat (path, &st) >= 0) 5991e169010aSmrg { 5992e169010aSmrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 5993e169010aSmrg } 5994e169010aSmrg return rval; 5995e169010aSmrg} 59967914d74bSmrg 5997e169010aSmrg/* Searches for the full path of the wrapper. Returns 5998e169010aSmrg newly allocated full path name if found, NULL otherwise 5999e169010aSmrg Does not chase symlinks, even on platforms that support them. 6000e169010aSmrg*/ 6001e169010aSmrgchar * 6002e169010aSmrgfind_executable (const char *wrapper) 6003e169010aSmrg{ 6004e169010aSmrg int has_slash = 0; 6005e169010aSmrg const char *p; 6006e169010aSmrg const char *p_next; 6007e169010aSmrg /* static buffer for getcwd */ 6008e169010aSmrg char tmp[LT_PATHMAX + 1]; 60099d0ccd10Smrg size_t tmp_len; 6010e169010aSmrg char *concat_name; 60117914d74bSmrg 6012e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 6013e8ead290Smrg nonempty (wrapper)); 60147914d74bSmrg 6015e169010aSmrg if ((wrapper == NULL) || (*wrapper == '\0')) 6016e169010aSmrg return NULL; 60177914d74bSmrg 6018e169010aSmrg /* Absolute path? */ 60199d0ccd10Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 6020e169010aSmrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 6021e169010aSmrg { 6022e169010aSmrg concat_name = xstrdup (wrapper); 6023e169010aSmrg if (check_executable (concat_name)) 6024e169010aSmrg return concat_name; 6025e169010aSmrg XFREE (concat_name); 6026e169010aSmrg } 6027e169010aSmrg else 6028e169010aSmrg { 6029e169010aSmrg#endif 6030e169010aSmrg if (IS_DIR_SEPARATOR (wrapper[0])) 6031e169010aSmrg { 6032e169010aSmrg concat_name = xstrdup (wrapper); 6033e169010aSmrg if (check_executable (concat_name)) 6034e169010aSmrg return concat_name; 6035e169010aSmrg XFREE (concat_name); 6036e169010aSmrg } 60379d0ccd10Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 6038e169010aSmrg } 6039e169010aSmrg#endif 60407914d74bSmrg 6041e169010aSmrg for (p = wrapper; *p; p++) 6042e169010aSmrg if (*p == '/') 6043e169010aSmrg { 6044e169010aSmrg has_slash = 1; 6045e169010aSmrg break; 6046e169010aSmrg } 6047e169010aSmrg if (!has_slash) 6048e169010aSmrg { 6049e169010aSmrg /* no slashes; search PATH */ 6050e169010aSmrg const char *path = getenv ("PATH"); 6051e169010aSmrg if (path != NULL) 6052e169010aSmrg { 6053e169010aSmrg for (p = path; *p; p = p_next) 6054e169010aSmrg { 6055e169010aSmrg const char *q; 6056e169010aSmrg size_t p_len; 6057e169010aSmrg for (q = p; *q; q++) 6058e169010aSmrg if (IS_PATH_SEPARATOR (*q)) 6059e169010aSmrg break; 60609d0ccd10Smrg p_len = (size_t) (q - p); 6061e169010aSmrg p_next = (*q == '\0' ? q : q + 1); 6062e169010aSmrg if (p_len == 0) 6063e169010aSmrg { 6064e169010aSmrg /* empty path: current directory */ 6065e169010aSmrg if (getcwd (tmp, LT_PATHMAX) == NULL) 6066e8ead290Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6067e8ead290Smrg nonnull (strerror (errno))); 6068e169010aSmrg tmp_len = strlen (tmp); 6069e169010aSmrg concat_name = 6070e169010aSmrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6071e169010aSmrg memcpy (concat_name, tmp, tmp_len); 6072e169010aSmrg concat_name[tmp_len] = '/'; 6073e169010aSmrg strcpy (concat_name + tmp_len + 1, wrapper); 6074e169010aSmrg } 6075e169010aSmrg else 6076e169010aSmrg { 6077e169010aSmrg concat_name = 6078e169010aSmrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 6079e169010aSmrg memcpy (concat_name, p, p_len); 6080e169010aSmrg concat_name[p_len] = '/'; 6081e169010aSmrg strcpy (concat_name + p_len + 1, wrapper); 6082e169010aSmrg } 6083e169010aSmrg if (check_executable (concat_name)) 6084e169010aSmrg return concat_name; 6085e169010aSmrg XFREE (concat_name); 6086e169010aSmrg } 6087e169010aSmrg } 6088e169010aSmrg /* not found in PATH; assume curdir */ 6089e169010aSmrg } 6090e169010aSmrg /* Relative path | not found in path: prepend cwd */ 6091e169010aSmrg if (getcwd (tmp, LT_PATHMAX) == NULL) 6092e8ead290Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6093e8ead290Smrg nonnull (strerror (errno))); 6094e169010aSmrg tmp_len = strlen (tmp); 6095e169010aSmrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6096e169010aSmrg memcpy (concat_name, tmp, tmp_len); 6097e169010aSmrg concat_name[tmp_len] = '/'; 6098e169010aSmrg strcpy (concat_name + tmp_len + 1, wrapper); 60997914d74bSmrg 6100e169010aSmrg if (check_executable (concat_name)) 6101e169010aSmrg return concat_name; 6102e169010aSmrg XFREE (concat_name); 6103e169010aSmrg return NULL; 6104e169010aSmrg} 61057914d74bSmrg 6106e169010aSmrgchar * 6107e169010aSmrgchase_symlinks (const char *pathspec) 6108e169010aSmrg{ 6109e169010aSmrg#ifndef S_ISLNK 6110e169010aSmrg return xstrdup (pathspec); 6111e169010aSmrg#else 6112e169010aSmrg char buf[LT_PATHMAX]; 6113e169010aSmrg struct stat s; 6114e169010aSmrg char *tmp_pathspec = xstrdup (pathspec); 6115e169010aSmrg char *p; 6116e169010aSmrg int has_symlinks = 0; 6117e169010aSmrg while (strlen (tmp_pathspec) && !has_symlinks) 6118e169010aSmrg { 6119e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, 6120e8ead290Smrg "checking path component for symlinks: %s\n", 6121e8ead290Smrg tmp_pathspec); 6122e169010aSmrg if (lstat (tmp_pathspec, &s) == 0) 6123e169010aSmrg { 6124e169010aSmrg if (S_ISLNK (s.st_mode) != 0) 6125e169010aSmrg { 6126e169010aSmrg has_symlinks = 1; 6127e169010aSmrg break; 6128e169010aSmrg } 61297914d74bSmrg 6130e169010aSmrg /* search backwards for last DIR_SEPARATOR */ 6131e169010aSmrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 6132e169010aSmrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6133e169010aSmrg p--; 6134e169010aSmrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6135e169010aSmrg { 6136e169010aSmrg /* no more DIR_SEPARATORS left */ 6137e169010aSmrg break; 6138e169010aSmrg } 6139e169010aSmrg *p = '\0'; 6140e169010aSmrg } 6141e169010aSmrg else 6142e169010aSmrg { 6143e8ead290Smrg lt_fatal (__FILE__, __LINE__, 6144e8ead290Smrg "error accessing file \"%s\": %s", 6145e8ead290Smrg tmp_pathspec, nonnull (strerror (errno))); 6146e169010aSmrg } 6147e169010aSmrg } 6148e169010aSmrg XFREE (tmp_pathspec); 61497914d74bSmrg 6150e169010aSmrg if (!has_symlinks) 6151e169010aSmrg { 6152e169010aSmrg return xstrdup (pathspec); 6153e169010aSmrg } 61547914d74bSmrg 6155e169010aSmrg tmp_pathspec = realpath (pathspec, buf); 6156e169010aSmrg if (tmp_pathspec == 0) 6157e169010aSmrg { 6158e8ead290Smrg lt_fatal (__FILE__, __LINE__, 6159e8ead290Smrg "could not follow symlinks for %s", pathspec); 6160e169010aSmrg } 6161e169010aSmrg return xstrdup (tmp_pathspec); 6162e169010aSmrg#endif 6163e169010aSmrg} 61647914d74bSmrg 6165e169010aSmrgchar * 6166e169010aSmrgstrendzap (char *str, const char *pat) 6167e169010aSmrg{ 6168e169010aSmrg size_t len, patlen; 61697914d74bSmrg 6170e169010aSmrg assert (str != NULL); 6171e169010aSmrg assert (pat != NULL); 61727914d74bSmrg 6173e169010aSmrg len = strlen (str); 6174e169010aSmrg patlen = strlen (pat); 61757914d74bSmrg 6176e169010aSmrg if (patlen <= len) 6177e169010aSmrg { 6178e169010aSmrg str += len - patlen; 61799d0ccd10Smrg if (STREQ (str, pat)) 6180e169010aSmrg *str = '\0'; 6181e169010aSmrg } 6182e169010aSmrg return str; 6183e169010aSmrg} 61847914d74bSmrg 6185e8ead290Smrgvoid 6186e8ead290Smrglt_debugprintf (const char *file, int line, const char *fmt, ...) 6187e8ead290Smrg{ 6188e8ead290Smrg va_list args; 6189e8ead290Smrg if (lt_debug) 6190e8ead290Smrg { 6191e8ead290Smrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 6192e8ead290Smrg va_start (args, fmt); 6193e8ead290Smrg (void) vfprintf (stderr, fmt, args); 6194e8ead290Smrg va_end (args); 6195e8ead290Smrg } 6196e8ead290Smrg} 6197e8ead290Smrg 6198e169010aSmrgstatic void 6199e8ead290Smrglt_error_core (int exit_status, const char *file, 6200e8ead290Smrg int line, const char *mode, 6201e169010aSmrg const char *message, va_list ap) 6202e169010aSmrg{ 6203e8ead290Smrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 6204e169010aSmrg vfprintf (stderr, message, ap); 6205e169010aSmrg fprintf (stderr, ".\n"); 62067914d74bSmrg 6207e169010aSmrg if (exit_status >= 0) 6208e169010aSmrg exit (exit_status); 6209e169010aSmrg} 62107914d74bSmrg 6211e169010aSmrgvoid 6212e8ead290Smrglt_fatal (const char *file, int line, const char *message, ...) 6213e169010aSmrg{ 6214e169010aSmrg va_list ap; 6215e169010aSmrg va_start (ap, message); 6216e8ead290Smrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 6217e169010aSmrg va_end (ap); 6218e169010aSmrg} 62197914d74bSmrg 6220e8ead290Smrgstatic const char * 6221e8ead290Smrgnonnull (const char *s) 6222e8ead290Smrg{ 6223e8ead290Smrg return s ? s : "(null)"; 6224e8ead290Smrg} 6225e8ead290Smrg 6226e8ead290Smrgstatic const char * 6227e8ead290Smrgnonempty (const char *s) 6228e8ead290Smrg{ 6229e8ead290Smrg return (s && !*s) ? "(empty)" : nonnull (s); 6230e8ead290Smrg} 6231e8ead290Smrg 6232e169010aSmrgvoid 6233e169010aSmrglt_setenv (const char *name, const char *value) 6234e169010aSmrg{ 6235e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, 6236e8ead290Smrg "(lt_setenv) setting '%s' to '%s'\n", 6237e8ead290Smrg nonnull (name), nonnull (value)); 6238e169010aSmrg { 6239e169010aSmrg#ifdef HAVE_SETENV 6240e169010aSmrg /* always make a copy, for consistency with !HAVE_SETENV */ 6241e169010aSmrg char *str = xstrdup (value); 6242e169010aSmrg setenv (name, str, 1); 6243e169010aSmrg#else 62449d0ccd10Smrg size_t len = strlen (name) + 1 + strlen (value) + 1; 6245e169010aSmrg char *str = XMALLOC (char, len); 6246e169010aSmrg sprintf (str, "%s=%s", name, value); 6247e169010aSmrg if (putenv (str) != EXIT_SUCCESS) 6248e169010aSmrg { 6249e169010aSmrg XFREE (str); 6250e169010aSmrg } 6251e169010aSmrg#endif 6252e169010aSmrg } 6253e169010aSmrg} 62547914d74bSmrg 6255e169010aSmrgchar * 6256e169010aSmrglt_extend_str (const char *orig_value, const char *add, int to_end) 6257e169010aSmrg{ 6258e169010aSmrg char *new_value; 6259e169010aSmrg if (orig_value && *orig_value) 6260e169010aSmrg { 62619d0ccd10Smrg size_t orig_value_len = strlen (orig_value); 62629d0ccd10Smrg size_t add_len = strlen (add); 6263e169010aSmrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 6264e169010aSmrg if (to_end) 6265e169010aSmrg { 6266e169010aSmrg strcpy (new_value, orig_value); 6267e169010aSmrg strcpy (new_value + orig_value_len, add); 6268e169010aSmrg } 6269e169010aSmrg else 6270e169010aSmrg { 6271e169010aSmrg strcpy (new_value, add); 6272e169010aSmrg strcpy (new_value + add_len, orig_value); 6273e169010aSmrg } 6274e169010aSmrg } 6275e169010aSmrg else 6276e169010aSmrg { 6277e169010aSmrg new_value = xstrdup (add); 6278e169010aSmrg } 6279e169010aSmrg return new_value; 6280e169010aSmrg} 62817914d74bSmrg 6282e169010aSmrgvoid 6283e169010aSmrglt_update_exe_path (const char *name, const char *value) 6284e169010aSmrg{ 6285e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, 6286e8ead290Smrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 6287e8ead290Smrg nonnull (name), nonnull (value)); 62887914d74bSmrg 6289e169010aSmrg if (name && *name && value && *value) 6290e169010aSmrg { 6291e169010aSmrg char *new_value = lt_extend_str (getenv (name), value, 0); 6292e169010aSmrg /* some systems can't cope with a ':'-terminated path #' */ 62939d0ccd10Smrg size_t len = strlen (new_value); 62949d0ccd10Smrg while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 6295e169010aSmrg { 62969d0ccd10Smrg new_value[--len] = '\0'; 6297e169010aSmrg } 6298e169010aSmrg lt_setenv (name, new_value); 6299e169010aSmrg XFREE (new_value); 6300e169010aSmrg } 6301e169010aSmrg} 63027914d74bSmrg 6303e169010aSmrgvoid 6304e169010aSmrglt_update_lib_path (const char *name, const char *value) 6305e169010aSmrg{ 6306e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, 6307e8ead290Smrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 6308e8ead290Smrg nonnull (name), nonnull (value)); 63097914d74bSmrg 6310e169010aSmrg if (name && *name && value && *value) 6311e169010aSmrg { 6312e169010aSmrg char *new_value = lt_extend_str (getenv (name), value, 0); 6313e169010aSmrg lt_setenv (name, new_value); 6314e169010aSmrg XFREE (new_value); 6315e169010aSmrg } 6316e169010aSmrg} 63177914d74bSmrg 6318e8ead290SmrgEOF 6319e8ead290Smrg case $host_os in 6320e8ead290Smrg mingw*) 6321e8ead290Smrg cat <<"EOF" 6322e8ead290Smrg 6323e8ead290Smrg/* Prepares an argument vector before calling spawn(). 6324e8ead290Smrg Note that spawn() does not by itself call the command interpreter 6325e8ead290Smrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 6326e8ead290Smrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 6327e8ead290Smrg GetVersionEx(&v); 6328e8ead290Smrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 6329e8ead290Smrg }) ? "cmd.exe" : "command.com"). 6330e8ead290Smrg Instead it simply concatenates the arguments, separated by ' ', and calls 6331e8ead290Smrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 6332e8ead290Smrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 6333e8ead290Smrg special way: 6334e8ead290Smrg - Space and tab are interpreted as delimiters. They are not treated as 6335e8ead290Smrg delimiters if they are surrounded by double quotes: "...". 6336e8ead290Smrg - Unescaped double quotes are removed from the input. Their only effect is 6337e8ead290Smrg that within double quotes, space and tab are treated like normal 6338e8ead290Smrg characters. 6339e8ead290Smrg - Backslashes not followed by double quotes are not special. 6340e8ead290Smrg - But 2*n+1 backslashes followed by a double quote become 6341e8ead290Smrg n backslashes followed by a double quote (n >= 0): 6342e8ead290Smrg \" -> " 6343e8ead290Smrg \\\" -> \" 6344e8ead290Smrg \\\\\" -> \\" 6345e8ead290Smrg */ 6346e8ead290Smrg#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" 6347e8ead290Smrg#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" 6348e8ead290Smrgchar ** 6349e8ead290Smrgprepare_spawn (char **argv) 6350e8ead290Smrg{ 6351e8ead290Smrg size_t argc; 6352e8ead290Smrg char **new_argv; 6353e8ead290Smrg size_t i; 6354e8ead290Smrg 6355e8ead290Smrg /* Count number of arguments. */ 6356e8ead290Smrg for (argc = 0; argv[argc] != NULL; argc++) 6357e8ead290Smrg ; 6358e8ead290Smrg 6359e8ead290Smrg /* Allocate new argument vector. */ 6360e8ead290Smrg new_argv = XMALLOC (char *, argc + 1); 6361e8ead290Smrg 6362e8ead290Smrg /* Put quoted arguments into the new argument vector. */ 6363e8ead290Smrg for (i = 0; i < argc; i++) 6364e8ead290Smrg { 6365e8ead290Smrg const char *string = argv[i]; 6366e8ead290Smrg 6367e8ead290Smrg if (string[0] == '\0') 6368e8ead290Smrg new_argv[i] = xstrdup ("\"\""); 6369e8ead290Smrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 6370e8ead290Smrg { 6371e8ead290Smrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 6372e8ead290Smrg size_t length; 6373e8ead290Smrg unsigned int backslashes; 6374e8ead290Smrg const char *s; 6375e8ead290Smrg char *quoted_string; 6376e8ead290Smrg char *p; 6377e8ead290Smrg 6378e8ead290Smrg length = 0; 6379e8ead290Smrg backslashes = 0; 6380e8ead290Smrg if (quote_around) 6381e8ead290Smrg length++; 6382e8ead290Smrg for (s = string; *s != '\0'; s++) 6383e8ead290Smrg { 6384e8ead290Smrg char c = *s; 6385e8ead290Smrg if (c == '"') 6386e8ead290Smrg length += backslashes + 1; 6387e8ead290Smrg length++; 6388e8ead290Smrg if (c == '\\') 6389e8ead290Smrg backslashes++; 6390e8ead290Smrg else 6391e8ead290Smrg backslashes = 0; 6392e8ead290Smrg } 6393e8ead290Smrg if (quote_around) 6394e8ead290Smrg length += backslashes + 1; 6395e8ead290Smrg 6396e8ead290Smrg quoted_string = XMALLOC (char, length + 1); 6397e8ead290Smrg 6398e8ead290Smrg p = quoted_string; 6399e8ead290Smrg backslashes = 0; 6400e8ead290Smrg if (quote_around) 6401e8ead290Smrg *p++ = '"'; 6402e8ead290Smrg for (s = string; *s != '\0'; s++) 6403e8ead290Smrg { 6404e8ead290Smrg char c = *s; 6405e8ead290Smrg if (c == '"') 6406e8ead290Smrg { 6407e8ead290Smrg unsigned int j; 6408e8ead290Smrg for (j = backslashes + 1; j > 0; j--) 6409e8ead290Smrg *p++ = '\\'; 6410e8ead290Smrg } 6411e8ead290Smrg *p++ = c; 6412e8ead290Smrg if (c == '\\') 6413e8ead290Smrg backslashes++; 6414e8ead290Smrg else 6415e8ead290Smrg backslashes = 0; 6416e8ead290Smrg } 6417e8ead290Smrg if (quote_around) 6418e8ead290Smrg { 6419e8ead290Smrg unsigned int j; 6420e8ead290Smrg for (j = backslashes; j > 0; j--) 6421e8ead290Smrg *p++ = '\\'; 6422e8ead290Smrg *p++ = '"'; 6423e8ead290Smrg } 6424e8ead290Smrg *p = '\0'; 6425e8ead290Smrg 6426e8ead290Smrg new_argv[i] = quoted_string; 6427e8ead290Smrg } 6428e8ead290Smrg else 6429e8ead290Smrg new_argv[i] = (char *) string; 6430e8ead290Smrg } 6431e8ead290Smrg new_argv[argc] = NULL; 6432e8ead290Smrg 6433e8ead290Smrg return new_argv; 6434e8ead290Smrg} 6435e8ead290SmrgEOF 6436e8ead290Smrg ;; 6437e8ead290Smrg esac 6438e8ead290Smrg 6439e8ead290Smrg cat <<"EOF" 6440e8ead290Smrgvoid lt_dump_script (FILE* f) 6441e8ead290Smrg{ 6442e8ead290SmrgEOF 6443e8ead290Smrg func_emit_wrapper yes | 6444e6d5e4e0Smrg $SED -n -e ' 6445e6d5e4e0Smrgs/^\(.\{79\}\)\(..*\)/\1\ 6446e6d5e4e0Smrg\2/ 6447e6d5e4e0Smrgh 6448e6d5e4e0Smrgs/\([\\"]\)/\\\1/g 6449e6d5e4e0Smrgs/$/\\n/ 6450e6d5e4e0Smrgs/\([^\n]*\).*/ fputs ("\1", f);/p 6451e6d5e4e0Smrgg 6452e6d5e4e0SmrgD' 6453e8ead290Smrg cat <<"EOF" 6454e8ead290Smrg} 6455e169010aSmrgEOF 6456e169010aSmrg} 6457e169010aSmrg# end: func_emit_cwrapperexe_src 64587914d74bSmrg 6459e8ead290Smrg# func_win32_import_lib_p ARG 6460e8ead290Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd 6461e8ead290Smrgfunc_win32_import_lib_p () 6462e8ead290Smrg{ 64639d0ccd10Smrg $debug_cmd 64649d0ccd10Smrg 6465e8ead290Smrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 6466e8ead290Smrg *import*) : ;; 6467e8ead290Smrg *) false ;; 6468e8ead290Smrg esac 6469e8ead290Smrg} 6470e8ead290Smrg 64719d0ccd10Smrg# func_suncc_cstd_abi 64729d0ccd10Smrg# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! 64739d0ccd10Smrg# Several compiler flags select an ABI that is incompatible with the 64749d0ccd10Smrg# Cstd library. Avoid specifying it if any are in CXXFLAGS. 64759d0ccd10Smrgfunc_suncc_cstd_abi () 64769d0ccd10Smrg{ 64779d0ccd10Smrg $debug_cmd 64789d0ccd10Smrg 64799d0ccd10Smrg case " $compile_command " in 64809d0ccd10Smrg *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) 64819d0ccd10Smrg suncc_use_cstd_abi=no 64829d0ccd10Smrg ;; 64839d0ccd10Smrg *) 64849d0ccd10Smrg suncc_use_cstd_abi=yes 64859d0ccd10Smrg ;; 64869d0ccd10Smrg esac 64879d0ccd10Smrg} 64889d0ccd10Smrg 6489e169010aSmrg# func_mode_link arg... 6490e169010aSmrgfunc_mode_link () 6491e169010aSmrg{ 64929d0ccd10Smrg $debug_cmd 64939d0ccd10Smrg 6494e169010aSmrg case $host in 6495e169010aSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 6496e169010aSmrg # It is impossible to link a dll without this setting, and 6497e169010aSmrg # we shouldn't force the makefile maintainer to figure out 64989d0ccd10Smrg # what system we are compiling for in order to pass an extra 6499e169010aSmrg # flag for every libtool invocation. 6500e169010aSmrg # allow_undefined=no 65017914d74bSmrg 6502e169010aSmrg # FIXME: Unfortunately, there are problems with the above when trying 65039d0ccd10Smrg # to make a dll that has undefined symbols, in which case not 6504e169010aSmrg # even a static library is built. For now, we need to specify 6505e169010aSmrg # -no-undefined on the libtool link line when we can be certain 6506e169010aSmrg # that all symbols are satisfied, otherwise we get a static library. 6507e169010aSmrg allow_undefined=yes 6508e169010aSmrg ;; 6509e169010aSmrg *) 6510e169010aSmrg allow_undefined=yes 6511e169010aSmrg ;; 6512e169010aSmrg esac 6513e169010aSmrg libtool_args=$nonopt 6514e169010aSmrg base_compile="$nonopt $@" 6515e169010aSmrg compile_command=$nonopt 6516e169010aSmrg finalize_command=$nonopt 65177914d74bSmrg 6518e169010aSmrg compile_rpath= 6519e169010aSmrg finalize_rpath= 6520e169010aSmrg compile_shlibpath= 6521e169010aSmrg finalize_shlibpath= 6522e169010aSmrg convenience= 6523e169010aSmrg old_convenience= 6524e169010aSmrg deplibs= 6525e169010aSmrg old_deplibs= 6526e169010aSmrg compiler_flags= 6527e169010aSmrg linker_flags= 6528e169010aSmrg dllsearchpath= 6529e169010aSmrg lib_search_path=`pwd` 6530e169010aSmrg inst_prefix_dir= 6531e169010aSmrg new_inherited_linker_flags= 65327914d74bSmrg 6533e169010aSmrg avoid_version=no 6534e8ead290Smrg bindir= 6535e169010aSmrg dlfiles= 6536e169010aSmrg dlprefiles= 6537e169010aSmrg dlself=no 6538e169010aSmrg export_dynamic=no 6539e169010aSmrg export_symbols= 6540e169010aSmrg export_symbols_regex= 6541e169010aSmrg generated= 6542e169010aSmrg libobjs= 6543e169010aSmrg ltlibs= 6544e169010aSmrg module=no 6545e169010aSmrg no_install=no 6546e169010aSmrg objs= 65479d0ccd10Smrg os2dllname= 6548e169010aSmrg non_pic_objects= 6549e169010aSmrg precious_files_regex= 6550e169010aSmrg prefer_static_libs=no 65519d0ccd10Smrg preload=false 6552e169010aSmrg prev= 6553e169010aSmrg prevarg= 6554e169010aSmrg release= 6555e169010aSmrg rpath= 6556e169010aSmrg xrpath= 6557e169010aSmrg perm_rpath= 6558e169010aSmrg temp_rpath= 6559e169010aSmrg thread_safe=no 6560e169010aSmrg vinfo= 6561e169010aSmrg vinfo_number=no 6562e169010aSmrg weak_libs= 65639d0ccd10Smrg single_module=$wl-single_module 6564e169010aSmrg func_infer_tag $base_compile 65657914d74bSmrg 6566e169010aSmrg # We need to know -static, to get the right output filenames. 6567e169010aSmrg for arg 6568e169010aSmrg do 6569e169010aSmrg case $arg in 6570e169010aSmrg -shared) 65719d0ccd10Smrg test yes != "$build_libtool_libs" \ 65729d0ccd10Smrg && func_fatal_configuration "cannot build a shared library" 6573e169010aSmrg build_old_libs=no 6574e169010aSmrg break 6575e169010aSmrg ;; 6576e169010aSmrg -all-static | -static | -static-libtool-libs) 6577e169010aSmrg case $arg in 6578e169010aSmrg -all-static) 65799d0ccd10Smrg if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then 6580e169010aSmrg func_warning "complete static linking is impossible in this configuration" 65817914d74bSmrg fi 6582e169010aSmrg if test -n "$link_static_flag"; then 6583e169010aSmrg dlopen_self=$dlopen_self_static 65847914d74bSmrg fi 6585e169010aSmrg prefer_static_libs=yes 65867914d74bSmrg ;; 6587e169010aSmrg -static) 6588e169010aSmrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 6589e169010aSmrg dlopen_self=$dlopen_self_static 6590e169010aSmrg fi 6591e169010aSmrg prefer_static_libs=built 6592e169010aSmrg ;; 6593e169010aSmrg -static-libtool-libs) 6594e169010aSmrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 6595e169010aSmrg dlopen_self=$dlopen_self_static 6596e169010aSmrg fi 6597e169010aSmrg prefer_static_libs=yes 65987914d74bSmrg ;; 65997914d74bSmrg esac 6600e169010aSmrg build_libtool_libs=no 6601e169010aSmrg build_old_libs=yes 6602e169010aSmrg break 6603e169010aSmrg ;; 6604e169010aSmrg esac 6605e169010aSmrg done 66067914d74bSmrg 6607e169010aSmrg # See if our shared archives depend on static archives. 6608e169010aSmrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 66097914d74bSmrg 6610e169010aSmrg # Go through the arguments, transforming them on the way. 6611e169010aSmrg while test "$#" -gt 0; do 66129d0ccd10Smrg arg=$1 6613e169010aSmrg shift 6614e169010aSmrg func_quote_for_eval "$arg" 6615e169010aSmrg qarg=$func_quote_for_eval_unquoted_result 6616e169010aSmrg func_append libtool_args " $func_quote_for_eval_result" 66177914d74bSmrg 6618e169010aSmrg # If the previous option needs an argument, assign it. 6619e169010aSmrg if test -n "$prev"; then 6620e169010aSmrg case $prev in 6621e169010aSmrg output) 6622e169010aSmrg func_append compile_command " @OUTPUT@" 6623e169010aSmrg func_append finalize_command " @OUTPUT@" 6624e169010aSmrg ;; 6625e169010aSmrg esac 66267914d74bSmrg 6627e169010aSmrg case $prev in 6628e8ead290Smrg bindir) 66299d0ccd10Smrg bindir=$arg 6630e8ead290Smrg prev= 6631e8ead290Smrg continue 6632e8ead290Smrg ;; 6633e169010aSmrg dlfiles|dlprefiles) 66349d0ccd10Smrg $preload || { 6635e169010aSmrg # Add the symbol object into the linking commands. 6636e169010aSmrg func_append compile_command " @SYMFILE@" 6637e169010aSmrg func_append finalize_command " @SYMFILE@" 66389d0ccd10Smrg preload=: 66399d0ccd10Smrg } 6640e169010aSmrg case $arg in 6641e169010aSmrg *.la | *.lo) ;; # We handle these cases below. 6642e169010aSmrg force) 66439d0ccd10Smrg if test no = "$dlself"; then 6644e169010aSmrg dlself=needless 6645e169010aSmrg export_dynamic=yes 6646e169010aSmrg fi 6647e169010aSmrg prev= 6648e169010aSmrg continue 6649e169010aSmrg ;; 6650e169010aSmrg self) 66519d0ccd10Smrg if test dlprefiles = "$prev"; then 6652e169010aSmrg dlself=yes 66539d0ccd10Smrg elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then 6654e169010aSmrg dlself=yes 6655e169010aSmrg else 6656e169010aSmrg dlself=needless 6657e169010aSmrg export_dynamic=yes 6658e169010aSmrg fi 6659e169010aSmrg prev= 6660e169010aSmrg continue 66617914d74bSmrg ;; 66627914d74bSmrg *) 66639d0ccd10Smrg if test dlfiles = "$prev"; then 6664c63293b5Smrg func_append dlfiles " $arg" 6665e169010aSmrg else 6666c63293b5Smrg func_append dlprefiles " $arg" 6667e169010aSmrg fi 6668e169010aSmrg prev= 6669e169010aSmrg continue 66707914d74bSmrg ;; 66717914d74bSmrg esac 6672e169010aSmrg ;; 6673e169010aSmrg expsyms) 66749d0ccd10Smrg export_symbols=$arg 6675e169010aSmrg test -f "$arg" \ 66769d0ccd10Smrg || func_fatal_error "symbol file '$arg' does not exist" 6677e169010aSmrg prev= 6678e169010aSmrg continue 6679e169010aSmrg ;; 6680e169010aSmrg expsyms_regex) 66819d0ccd10Smrg export_symbols_regex=$arg 6682e169010aSmrg prev= 6683e169010aSmrg continue 6684e169010aSmrg ;; 6685e169010aSmrg framework) 6686e169010aSmrg case $host in 6687e169010aSmrg *-*-darwin*) 6688e169010aSmrg case "$deplibs " in 6689e169010aSmrg *" $qarg.ltframework "*) ;; 6690c63293b5Smrg *) func_append deplibs " $qarg.ltframework" # this is fixed later 6691e169010aSmrg ;; 6692e169010aSmrg esac 6693e169010aSmrg ;; 6694e169010aSmrg esac 6695e169010aSmrg prev= 6696e169010aSmrg continue 6697e169010aSmrg ;; 6698e169010aSmrg inst_prefix) 66999d0ccd10Smrg inst_prefix_dir=$arg 67009d0ccd10Smrg prev= 67019d0ccd10Smrg continue 67029d0ccd10Smrg ;; 67039d0ccd10Smrg mllvm) 67049d0ccd10Smrg # Clang does not use LLVM to link, so we can simply discard any 67059d0ccd10Smrg # '-mllvm $arg' options when doing the link step. 6706e169010aSmrg prev= 6707e169010aSmrg continue 6708e169010aSmrg ;; 6709e169010aSmrg objectlist) 6710e169010aSmrg if test -f "$arg"; then 6711e169010aSmrg save_arg=$arg 6712e169010aSmrg moreargs= 6713e169010aSmrg for fil in `cat "$save_arg"` 6714e169010aSmrg do 6715c63293b5Smrg# func_append moreargs " $fil" 6716e169010aSmrg arg=$fil 6717e169010aSmrg # A libtool-controlled object. 67187914d74bSmrg 6719e169010aSmrg # Check to see that this really is a libtool object. 6720e169010aSmrg if func_lalib_unsafe_p "$arg"; then 6721e169010aSmrg pic_object= 6722e169010aSmrg non_pic_object= 67237914d74bSmrg 6724e169010aSmrg # Read the .lo file 6725e169010aSmrg func_source "$arg" 67267914d74bSmrg 6727e169010aSmrg if test -z "$pic_object" || 6728e169010aSmrg test -z "$non_pic_object" || 67299d0ccd10Smrg test none = "$pic_object" && 67309d0ccd10Smrg test none = "$non_pic_object"; then 67319d0ccd10Smrg func_fatal_error "cannot find name of object for '$arg'" 6732e169010aSmrg fi 67337914d74bSmrg 6734e169010aSmrg # Extract subdirectory from the argument. 6735e169010aSmrg func_dirname "$arg" "/" "" 67369d0ccd10Smrg xdir=$func_dirname_result 67377914d74bSmrg 67389d0ccd10Smrg if test none != "$pic_object"; then 6739e169010aSmrg # Prepend the subdirectory the object is found in. 67409d0ccd10Smrg pic_object=$xdir$pic_object 67417914d74bSmrg 67429d0ccd10Smrg if test dlfiles = "$prev"; then 67439d0ccd10Smrg if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 6744c63293b5Smrg func_append dlfiles " $pic_object" 6745e169010aSmrg prev= 6746e169010aSmrg continue 6747e169010aSmrg else 6748e169010aSmrg # If libtool objects are unsupported, then we need to preload. 6749e169010aSmrg prev=dlprefiles 6750e169010aSmrg fi 6751e169010aSmrg fi 67527914d74bSmrg 6753e169010aSmrg # CHECK ME: I think I busted this. -Ossama 67549d0ccd10Smrg if test dlprefiles = "$prev"; then 6755e169010aSmrg # Preload the old-style object. 6756c63293b5Smrg func_append dlprefiles " $pic_object" 6757e169010aSmrg prev= 6758e169010aSmrg fi 67597914d74bSmrg 6760e169010aSmrg # A PIC object. 6761e169010aSmrg func_append libobjs " $pic_object" 67629d0ccd10Smrg arg=$pic_object 6763e169010aSmrg fi 67647914d74bSmrg 6765e169010aSmrg # Non-PIC object. 67669d0ccd10Smrg if test none != "$non_pic_object"; then 6767e169010aSmrg # Prepend the subdirectory the object is found in. 67689d0ccd10Smrg non_pic_object=$xdir$non_pic_object 67697914d74bSmrg 6770e169010aSmrg # A standard non-PIC object 6771e169010aSmrg func_append non_pic_objects " $non_pic_object" 67729d0ccd10Smrg if test -z "$pic_object" || test none = "$pic_object"; then 67739d0ccd10Smrg arg=$non_pic_object 6774e169010aSmrg fi 6775e169010aSmrg else 6776e169010aSmrg # If the PIC object exists, use it instead. 6777e169010aSmrg # $xdir was prepended to $pic_object above. 67789d0ccd10Smrg non_pic_object=$pic_object 6779e169010aSmrg func_append non_pic_objects " $non_pic_object" 6780e169010aSmrg fi 6781e169010aSmrg else 6782e169010aSmrg # Only an error if not doing a dry-run. 6783e169010aSmrg if $opt_dry_run; then 6784e169010aSmrg # Extract subdirectory from the argument. 6785e169010aSmrg func_dirname "$arg" "/" "" 67869d0ccd10Smrg xdir=$func_dirname_result 6787e169010aSmrg 6788e169010aSmrg func_lo2o "$arg" 6789e169010aSmrg pic_object=$xdir$objdir/$func_lo2o_result 6790e169010aSmrg non_pic_object=$xdir$func_lo2o_result 6791e169010aSmrg func_append libobjs " $pic_object" 6792e169010aSmrg func_append non_pic_objects " $non_pic_object" 6793e169010aSmrg else 67949d0ccd10Smrg func_fatal_error "'$arg' is not a valid libtool object" 6795e169010aSmrg fi 6796e169010aSmrg fi 6797e169010aSmrg done 6798e169010aSmrg else 67999d0ccd10Smrg func_fatal_error "link input file '$arg' does not exist" 6800e169010aSmrg fi 6801e169010aSmrg arg=$save_arg 6802e169010aSmrg prev= 6803e169010aSmrg continue 6804e169010aSmrg ;; 68059d0ccd10Smrg os2dllname) 68069d0ccd10Smrg os2dllname=$arg 68079d0ccd10Smrg prev= 68089d0ccd10Smrg continue 68099d0ccd10Smrg ;; 6810e169010aSmrg precious_regex) 68119d0ccd10Smrg precious_files_regex=$arg 6812e169010aSmrg prev= 6813e169010aSmrg continue 6814e169010aSmrg ;; 6815e169010aSmrg release) 68169d0ccd10Smrg release=-$arg 6817e169010aSmrg prev= 6818e169010aSmrg continue 6819e169010aSmrg ;; 6820e169010aSmrg rpath | xrpath) 6821e169010aSmrg # We need an absolute path. 6822e169010aSmrg case $arg in 6823e169010aSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 6824e169010aSmrg *) 6825e169010aSmrg func_fatal_error "only absolute run-paths are allowed" 6826e169010aSmrg ;; 6827e169010aSmrg esac 68289d0ccd10Smrg if test rpath = "$prev"; then 6829e169010aSmrg case "$rpath " in 6830e169010aSmrg *" $arg "*) ;; 6831c63293b5Smrg *) func_append rpath " $arg" ;; 6832e169010aSmrg esac 6833e169010aSmrg else 6834e169010aSmrg case "$xrpath " in 6835e169010aSmrg *" $arg "*) ;; 6836c63293b5Smrg *) func_append xrpath " $arg" ;; 6837e169010aSmrg esac 6838e169010aSmrg fi 6839e169010aSmrg prev= 6840e169010aSmrg continue 6841e169010aSmrg ;; 6842e169010aSmrg shrext) 68439d0ccd10Smrg shrext_cmds=$arg 6844e169010aSmrg prev= 6845e169010aSmrg continue 6846e169010aSmrg ;; 6847e169010aSmrg weak) 6848c63293b5Smrg func_append weak_libs " $arg" 6849e169010aSmrg prev= 6850e169010aSmrg continue 6851e169010aSmrg ;; 6852e169010aSmrg xcclinker) 6853c63293b5Smrg func_append linker_flags " $qarg" 6854c63293b5Smrg func_append compiler_flags " $qarg" 6855e169010aSmrg prev= 6856e169010aSmrg func_append compile_command " $qarg" 6857e169010aSmrg func_append finalize_command " $qarg" 6858e169010aSmrg continue 6859e169010aSmrg ;; 6860e169010aSmrg xcompiler) 6861c63293b5Smrg func_append compiler_flags " $qarg" 6862e169010aSmrg prev= 6863e169010aSmrg func_append compile_command " $qarg" 6864e169010aSmrg func_append finalize_command " $qarg" 6865e169010aSmrg continue 6866e169010aSmrg ;; 6867e169010aSmrg xlinker) 6868c63293b5Smrg func_append linker_flags " $qarg" 6869c63293b5Smrg func_append compiler_flags " $wl$qarg" 6870e169010aSmrg prev= 6871e169010aSmrg func_append compile_command " $wl$qarg" 6872e169010aSmrg func_append finalize_command " $wl$qarg" 6873e169010aSmrg continue 6874e169010aSmrg ;; 6875e169010aSmrg *) 6876e169010aSmrg eval "$prev=\"\$arg\"" 6877e169010aSmrg prev= 6878e169010aSmrg continue 6879e169010aSmrg ;; 68807914d74bSmrg esac 6881e169010aSmrg fi # test -n "$prev" 68827914d74bSmrg 68839d0ccd10Smrg prevarg=$arg 68847914d74bSmrg 6885e169010aSmrg case $arg in 6886e169010aSmrg -all-static) 6887e169010aSmrg if test -n "$link_static_flag"; then 6888e169010aSmrg # See comment for -static flag below, for more details. 6889e169010aSmrg func_append compile_command " $link_static_flag" 6890e169010aSmrg func_append finalize_command " $link_static_flag" 6891e169010aSmrg fi 6892e169010aSmrg continue 6893e169010aSmrg ;; 68947914d74bSmrg 6895e169010aSmrg -allow-undefined) 6896e169010aSmrg # FIXME: remove this flag sometime in the future. 68979d0ccd10Smrg func_fatal_error "'-allow-undefined' must not be used because it is the default" 6898e169010aSmrg ;; 68997914d74bSmrg 6900e169010aSmrg -avoid-version) 6901e169010aSmrg avoid_version=yes 6902e169010aSmrg continue 6903e169010aSmrg ;; 69047914d74bSmrg 6905e8ead290Smrg -bindir) 6906e8ead290Smrg prev=bindir 6907e8ead290Smrg continue 6908e8ead290Smrg ;; 6909e8ead290Smrg 6910e169010aSmrg -dlopen) 6911e169010aSmrg prev=dlfiles 6912e169010aSmrg continue 6913e169010aSmrg ;; 69147914d74bSmrg 6915e169010aSmrg -dlpreopen) 6916e169010aSmrg prev=dlprefiles 6917e169010aSmrg continue 6918e169010aSmrg ;; 69197914d74bSmrg 6920e169010aSmrg -export-dynamic) 6921e169010aSmrg export_dynamic=yes 6922e169010aSmrg continue 6923e169010aSmrg ;; 69247914d74bSmrg 6925e169010aSmrg -export-symbols | -export-symbols-regex) 6926e169010aSmrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 6927e169010aSmrg func_fatal_error "more than one -exported-symbols argument is not allowed" 6928e169010aSmrg fi 69299d0ccd10Smrg if test X-export-symbols = "X$arg"; then 6930e169010aSmrg prev=expsyms 6931e169010aSmrg else 6932e169010aSmrg prev=expsyms_regex 6933e169010aSmrg fi 6934e169010aSmrg continue 6935e169010aSmrg ;; 69367914d74bSmrg 6937e169010aSmrg -framework) 6938e169010aSmrg prev=framework 6939e169010aSmrg continue 6940e169010aSmrg ;; 69417914d74bSmrg 6942e169010aSmrg -inst-prefix-dir) 6943e169010aSmrg prev=inst_prefix 6944e169010aSmrg continue 6945e169010aSmrg ;; 69467914d74bSmrg 6947e169010aSmrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 6948e169010aSmrg # so, if we see these flags be careful not to treat them like -L 6949e169010aSmrg -L[A-Z][A-Z]*:*) 6950e169010aSmrg case $with_gcc/$host in 6951e169010aSmrg no/*-*-irix* | /*-*-irix*) 6952e169010aSmrg func_append compile_command " $arg" 6953e169010aSmrg func_append finalize_command " $arg" 6954e169010aSmrg ;; 6955e169010aSmrg esac 6956e169010aSmrg continue 6957e169010aSmrg ;; 69587914d74bSmrg 6959e169010aSmrg -L*) 6960c63293b5Smrg func_stripname "-L" '' "$arg" 6961c63293b5Smrg if test -z "$func_stripname_result"; then 6962e169010aSmrg if test "$#" -gt 0; then 69639d0ccd10Smrg func_fatal_error "require no space between '-L' and '$1'" 6964e169010aSmrg else 69659d0ccd10Smrg func_fatal_error "need path for '-L' option" 6966e169010aSmrg fi 6967e169010aSmrg fi 6968c63293b5Smrg func_resolve_sysroot "$func_stripname_result" 6969c63293b5Smrg dir=$func_resolve_sysroot_result 6970e169010aSmrg # We need an absolute path. 6971e169010aSmrg case $dir in 6972e169010aSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 6973e169010aSmrg *) 6974e169010aSmrg absdir=`cd "$dir" && pwd` 6975e169010aSmrg test -z "$absdir" && \ 69769d0ccd10Smrg func_fatal_error "cannot determine absolute directory name of '$dir'" 69779d0ccd10Smrg dir=$absdir 6978e169010aSmrg ;; 6979e169010aSmrg esac 6980e169010aSmrg case "$deplibs " in 6981c63293b5Smrg *" -L$dir "* | *" $arg "*) 6982c63293b5Smrg # Will only happen for absolute or sysroot arguments 6983c63293b5Smrg ;; 6984e169010aSmrg *) 6985c63293b5Smrg # Preserve sysroot, but never include relative directories 6986c63293b5Smrg case $dir in 6987c63293b5Smrg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 6988c63293b5Smrg *) func_append deplibs " -L$dir" ;; 6989c63293b5Smrg esac 6990c63293b5Smrg func_append lib_search_path " $dir" 6991e169010aSmrg ;; 6992e169010aSmrg esac 6993e169010aSmrg case $host in 6994e169010aSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 6995e8ead290Smrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 6996e169010aSmrg case :$dllsearchpath: in 6997e169010aSmrg *":$dir:"*) ;; 6998e169010aSmrg ::) dllsearchpath=$dir;; 6999c63293b5Smrg *) func_append dllsearchpath ":$dir";; 7000e169010aSmrg esac 7001e169010aSmrg case :$dllsearchpath: in 7002e169010aSmrg *":$testbindir:"*) ;; 7003e169010aSmrg ::) dllsearchpath=$testbindir;; 7004c63293b5Smrg *) func_append dllsearchpath ":$testbindir";; 7005e169010aSmrg esac 7006e169010aSmrg ;; 7007e169010aSmrg esac 7008e169010aSmrg continue 7009e169010aSmrg ;; 70107914d74bSmrg 7011e169010aSmrg -l*) 70129d0ccd10Smrg if test X-lc = "X$arg" || test X-lm = "X$arg"; then 7013e169010aSmrg case $host in 7014e8ead290Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 7015e169010aSmrg # These systems don't actually have a C or math library (as such) 7016e169010aSmrg continue 7017e169010aSmrg ;; 7018e169010aSmrg *-*-os2*) 7019e169010aSmrg # These systems don't actually have a C library (as such) 70209d0ccd10Smrg test X-lc = "X$arg" && continue 7021e169010aSmrg ;; 70229d0ccd10Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) 7023e169010aSmrg # Do not include libc due to us having libc/libc_r. 70249d0ccd10Smrg test X-lc = "X$arg" && continue 7025e169010aSmrg ;; 7026e169010aSmrg *-*-rhapsody* | *-*-darwin1.[012]) 7027e169010aSmrg # Rhapsody C and math libraries are in the System framework 7028c63293b5Smrg func_append deplibs " System.ltframework" 7029e169010aSmrg continue 7030e169010aSmrg ;; 7031e169010aSmrg *-*-sco3.2v5* | *-*-sco5v6*) 7032e169010aSmrg # Causes problems with __ctype 70339d0ccd10Smrg test X-lc = "X$arg" && continue 7034e169010aSmrg ;; 7035e169010aSmrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7036e169010aSmrg # Compiler inserts libc in the correct place for threads to work 70379d0ccd10Smrg test X-lc = "X$arg" && continue 7038e169010aSmrg ;; 7039e169010aSmrg esac 70409d0ccd10Smrg elif test X-lc_r = "X$arg"; then 7041e169010aSmrg case $host in 70429d0ccd10Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) 7043e169010aSmrg # Do not include libc_r directly, use -pthread flag. 7044e169010aSmrg continue 7045e169010aSmrg ;; 7046e169010aSmrg esac 7047e169010aSmrg fi 7048c63293b5Smrg func_append deplibs " $arg" 7049e169010aSmrg continue 7050e169010aSmrg ;; 70517914d74bSmrg 70529d0ccd10Smrg -mllvm) 70539d0ccd10Smrg prev=mllvm 70549d0ccd10Smrg continue 70559d0ccd10Smrg ;; 70569d0ccd10Smrg 7057e169010aSmrg -module) 7058e169010aSmrg module=yes 7059e169010aSmrg continue 7060e169010aSmrg ;; 70617914d74bSmrg 7062e169010aSmrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 7063e169010aSmrg # classes, name mangling, and exception handling. 7064e169010aSmrg # Darwin uses the -arch flag to determine output architecture. 7065c63293b5Smrg -model|-arch|-isysroot|--sysroot) 7066c63293b5Smrg func_append compiler_flags " $arg" 7067e169010aSmrg func_append compile_command " $arg" 7068e169010aSmrg func_append finalize_command " $arg" 7069e169010aSmrg prev=xcompiler 7070e169010aSmrg continue 7071e169010aSmrg ;; 70727914d74bSmrg 7073e6d5e4e0Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 7074e6d5e4e0Smrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 7075c63293b5Smrg func_append compiler_flags " $arg" 7076e169010aSmrg func_append compile_command " $arg" 7077e169010aSmrg func_append finalize_command " $arg" 7078e169010aSmrg case "$new_inherited_linker_flags " in 7079e169010aSmrg *" $arg "*) ;; 7080c63293b5Smrg * ) func_append new_inherited_linker_flags " $arg" ;; 7081e169010aSmrg esac 7082e169010aSmrg continue 7083e169010aSmrg ;; 70847914d74bSmrg 7085e169010aSmrg -multi_module) 70869d0ccd10Smrg single_module=$wl-multi_module 7087e169010aSmrg continue 7088e169010aSmrg ;; 70897914d74bSmrg 7090e169010aSmrg -no-fast-install) 7091e169010aSmrg fast_install=no 7092e169010aSmrg continue 7093e169010aSmrg ;; 70947914d74bSmrg 7095e169010aSmrg -no-install) 7096e169010aSmrg case $host in 7097e169010aSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 7098e169010aSmrg # The PATH hackery in wrapper scripts is required on Windows 7099e169010aSmrg # and Darwin in order for the loader to find any dlls it needs. 71009d0ccd10Smrg func_warning "'-no-install' is ignored for $host" 71019d0ccd10Smrg func_warning "assuming '-no-fast-install' instead" 7102e169010aSmrg fast_install=no 7103e169010aSmrg ;; 7104e169010aSmrg *) no_install=yes ;; 7105e169010aSmrg esac 7106e169010aSmrg continue 7107e169010aSmrg ;; 71087914d74bSmrg 7109e169010aSmrg -no-undefined) 7110e169010aSmrg allow_undefined=no 7111e169010aSmrg continue 7112e169010aSmrg ;; 71137914d74bSmrg 7114e169010aSmrg -objectlist) 7115e169010aSmrg prev=objectlist 7116e169010aSmrg continue 7117e169010aSmrg ;; 71187914d74bSmrg 71199d0ccd10Smrg -os2dllname) 71209d0ccd10Smrg prev=os2dllname 71219d0ccd10Smrg continue 71229d0ccd10Smrg ;; 71239d0ccd10Smrg 7124e169010aSmrg -o) prev=output ;; 71257914d74bSmrg 7126e169010aSmrg -precious-files-regex) 7127e169010aSmrg prev=precious_regex 7128e169010aSmrg continue 7129e169010aSmrg ;; 71307914d74bSmrg 7131e169010aSmrg -release) 7132e169010aSmrg prev=release 7133e169010aSmrg continue 7134e169010aSmrg ;; 71357914d74bSmrg 7136e169010aSmrg -rpath) 7137e169010aSmrg prev=rpath 7138e169010aSmrg continue 7139e169010aSmrg ;; 71407914d74bSmrg 7141e169010aSmrg -R) 7142e169010aSmrg prev=xrpath 7143e169010aSmrg continue 7144e169010aSmrg ;; 71457914d74bSmrg 7146e169010aSmrg -R*) 7147e169010aSmrg func_stripname '-R' '' "$arg" 7148e169010aSmrg dir=$func_stripname_result 7149e169010aSmrg # We need an absolute path. 7150e169010aSmrg case $dir in 7151e169010aSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 7152c63293b5Smrg =*) 7153c63293b5Smrg func_stripname '=' '' "$dir" 7154c63293b5Smrg dir=$lt_sysroot$func_stripname_result 7155c63293b5Smrg ;; 7156e169010aSmrg *) 7157e169010aSmrg func_fatal_error "only absolute run-paths are allowed" 7158e169010aSmrg ;; 7159e169010aSmrg esac 7160e169010aSmrg case "$xrpath " in 7161e169010aSmrg *" $dir "*) ;; 7162c63293b5Smrg *) func_append xrpath " $dir" ;; 7163e169010aSmrg esac 7164e169010aSmrg continue 7165e169010aSmrg ;; 71667914d74bSmrg 7167e169010aSmrg -shared) 7168e169010aSmrg # The effects of -shared are defined in a previous loop. 7169e169010aSmrg continue 7170e169010aSmrg ;; 71717914d74bSmrg 7172e169010aSmrg -shrext) 7173e169010aSmrg prev=shrext 7174e169010aSmrg continue 7175e169010aSmrg ;; 71767914d74bSmrg 7177e169010aSmrg -static | -static-libtool-libs) 7178e169010aSmrg # The effects of -static are defined in a previous loop. 7179e169010aSmrg # We used to do the same as -all-static on platforms that 7180e169010aSmrg # didn't have a PIC flag, but the assumption that the effects 7181e169010aSmrg # would be equivalent was wrong. It would break on at least 7182e169010aSmrg # Digital Unix and AIX. 7183e169010aSmrg continue 7184e169010aSmrg ;; 71857914d74bSmrg 7186e169010aSmrg -thread-safe) 7187e169010aSmrg thread_safe=yes 7188e169010aSmrg continue 7189e169010aSmrg ;; 71907914d74bSmrg 7191e169010aSmrg -version-info) 7192e169010aSmrg prev=vinfo 7193e169010aSmrg continue 7194e169010aSmrg ;; 71957914d74bSmrg 7196e169010aSmrg -version-number) 7197e169010aSmrg prev=vinfo 7198e169010aSmrg vinfo_number=yes 7199e169010aSmrg continue 7200e169010aSmrg ;; 72017914d74bSmrg 7202e169010aSmrg -weak) 7203e169010aSmrg prev=weak 7204e169010aSmrg continue 7205e169010aSmrg ;; 72067914d74bSmrg 7207e169010aSmrg -Wc,*) 7208e169010aSmrg func_stripname '-Wc,' '' "$arg" 7209e169010aSmrg args=$func_stripname_result 7210e169010aSmrg arg= 72119d0ccd10Smrg save_ifs=$IFS; IFS=, 7212e169010aSmrg for flag in $args; do 72139d0ccd10Smrg IFS=$save_ifs 7214e169010aSmrg func_quote_for_eval "$flag" 7215c63293b5Smrg func_append arg " $func_quote_for_eval_result" 7216c63293b5Smrg func_append compiler_flags " $func_quote_for_eval_result" 7217e169010aSmrg done 72189d0ccd10Smrg IFS=$save_ifs 7219e169010aSmrg func_stripname ' ' '' "$arg" 7220e169010aSmrg arg=$func_stripname_result 7221e169010aSmrg ;; 72227914d74bSmrg 7223e169010aSmrg -Wl,*) 7224e169010aSmrg func_stripname '-Wl,' '' "$arg" 7225e169010aSmrg args=$func_stripname_result 7226e169010aSmrg arg= 72279d0ccd10Smrg save_ifs=$IFS; IFS=, 7228e169010aSmrg for flag in $args; do 72299d0ccd10Smrg IFS=$save_ifs 7230e169010aSmrg func_quote_for_eval "$flag" 7231c63293b5Smrg func_append arg " $wl$func_quote_for_eval_result" 7232c63293b5Smrg func_append compiler_flags " $wl$func_quote_for_eval_result" 7233c63293b5Smrg func_append linker_flags " $func_quote_for_eval_result" 7234e169010aSmrg done 72359d0ccd10Smrg IFS=$save_ifs 7236e169010aSmrg func_stripname ' ' '' "$arg" 7237e169010aSmrg arg=$func_stripname_result 7238e169010aSmrg ;; 72397914d74bSmrg 7240e169010aSmrg -Xcompiler) 7241e169010aSmrg prev=xcompiler 7242e169010aSmrg continue 7243e169010aSmrg ;; 72447914d74bSmrg 7245e169010aSmrg -Xlinker) 7246e169010aSmrg prev=xlinker 7247e169010aSmrg continue 7248e169010aSmrg ;; 72497914d74bSmrg 7250e169010aSmrg -XCClinker) 7251e169010aSmrg prev=xcclinker 7252e169010aSmrg continue 7253e169010aSmrg ;; 72547914d74bSmrg 7255e169010aSmrg # -msg_* for osf cc 7256e169010aSmrg -msg_*) 7257e169010aSmrg func_quote_for_eval "$arg" 72589d0ccd10Smrg arg=$func_quote_for_eval_result 7259e169010aSmrg ;; 72607914d74bSmrg 7261e8ead290Smrg # Flags to be passed through unchanged, with rationale: 7262e8ead290Smrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 7263e8ead290Smrg # -r[0-9][0-9]* specify processor for the SGI compiler 7264e8ead290Smrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 7265e8ead290Smrg # +DA*, +DD* enable 64-bit mode for the HP compiler 7266e8ead290Smrg # -q* compiler args for the IBM compiler 7267e8ead290Smrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 7268e8ead290Smrg # -F/path path to uninstalled frameworks, gcc on darwin 7269e8ead290Smrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 72709d0ccd10Smrg # -fstack-protector* stack protector flags for GCC 7271e8ead290Smrg # @file GCC response files 7272e8ead290Smrg # -tp=* Portland pgcc target processor selection 7273c63293b5Smrg # --sysroot=* for sysroot support 72749d0ccd10Smrg # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 72759d0ccd10Smrg # -stdlib=* select c++ std lib with clang 7276e169010aSmrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 7277c63293b5Smrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 7278cdce750aSmrg -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) 7279e169010aSmrg func_quote_for_eval "$arg" 72809d0ccd10Smrg arg=$func_quote_for_eval_result 7281e169010aSmrg func_append compile_command " $arg" 7282e169010aSmrg func_append finalize_command " $arg" 7283c63293b5Smrg func_append compiler_flags " $arg" 7284e169010aSmrg continue 7285e169010aSmrg ;; 72867914d74bSmrg 72879d0ccd10Smrg -Z*) 72889d0ccd10Smrg if test os2 = "`expr $host : '.*\(os2\)'`"; then 72899d0ccd10Smrg # OS/2 uses -Zxxx to specify OS/2-specific options 72909d0ccd10Smrg compiler_flags="$compiler_flags $arg" 72919d0ccd10Smrg func_append compile_command " $arg" 72929d0ccd10Smrg func_append finalize_command " $arg" 72939d0ccd10Smrg case $arg in 72949d0ccd10Smrg -Zlinker | -Zstack) 72959d0ccd10Smrg prev=xcompiler 72969d0ccd10Smrg ;; 72979d0ccd10Smrg esac 72989d0ccd10Smrg continue 72999d0ccd10Smrg else 73009d0ccd10Smrg # Otherwise treat like 'Some other compiler flag' below 73019d0ccd10Smrg func_quote_for_eval "$arg" 73029d0ccd10Smrg arg=$func_quote_for_eval_result 73039d0ccd10Smrg fi 73049d0ccd10Smrg ;; 73059d0ccd10Smrg 7306e169010aSmrg # Some other compiler flag. 7307e169010aSmrg -* | +*) 7308e169010aSmrg func_quote_for_eval "$arg" 73099d0ccd10Smrg arg=$func_quote_for_eval_result 7310e169010aSmrg ;; 73117914d74bSmrg 7312e169010aSmrg *.$objext) 7313e169010aSmrg # A standard object. 7314c63293b5Smrg func_append objs " $arg" 7315e169010aSmrg ;; 7316e169010aSmrg 7317e169010aSmrg *.lo) 7318e169010aSmrg # A libtool-controlled object. 7319e169010aSmrg 7320e169010aSmrg # Check to see that this really is a libtool object. 7321e169010aSmrg if func_lalib_unsafe_p "$arg"; then 7322e169010aSmrg pic_object= 7323e169010aSmrg non_pic_object= 7324e169010aSmrg 7325e169010aSmrg # Read the .lo file 7326e169010aSmrg func_source "$arg" 7327e169010aSmrg 7328e169010aSmrg if test -z "$pic_object" || 7329e169010aSmrg test -z "$non_pic_object" || 73309d0ccd10Smrg test none = "$pic_object" && 73319d0ccd10Smrg test none = "$non_pic_object"; then 73329d0ccd10Smrg func_fatal_error "cannot find name of object for '$arg'" 7333e169010aSmrg fi 7334e169010aSmrg 7335e169010aSmrg # Extract subdirectory from the argument. 7336e169010aSmrg func_dirname "$arg" "/" "" 73379d0ccd10Smrg xdir=$func_dirname_result 7338e169010aSmrg 73399d0ccd10Smrg test none = "$pic_object" || { 7340e169010aSmrg # Prepend the subdirectory the object is found in. 73419d0ccd10Smrg pic_object=$xdir$pic_object 7342e169010aSmrg 73439d0ccd10Smrg if test dlfiles = "$prev"; then 73449d0ccd10Smrg if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 7345c63293b5Smrg func_append dlfiles " $pic_object" 7346e169010aSmrg prev= 7347e169010aSmrg continue 7348e169010aSmrg else 7349e169010aSmrg # If libtool objects are unsupported, then we need to preload. 7350e169010aSmrg prev=dlprefiles 7351e169010aSmrg fi 7352e169010aSmrg fi 7353e169010aSmrg 7354e169010aSmrg # CHECK ME: I think I busted this. -Ossama 73559d0ccd10Smrg if test dlprefiles = "$prev"; then 7356e169010aSmrg # Preload the old-style object. 7357c63293b5Smrg func_append dlprefiles " $pic_object" 7358e169010aSmrg prev= 7359e169010aSmrg fi 7360e169010aSmrg 7361e169010aSmrg # A PIC object. 7362e169010aSmrg func_append libobjs " $pic_object" 73639d0ccd10Smrg arg=$pic_object 73649d0ccd10Smrg } 7365e169010aSmrg 7366e169010aSmrg # Non-PIC object. 73679d0ccd10Smrg if test none != "$non_pic_object"; then 7368e169010aSmrg # Prepend the subdirectory the object is found in. 73699d0ccd10Smrg non_pic_object=$xdir$non_pic_object 7370e169010aSmrg 7371e169010aSmrg # A standard non-PIC object 7372e169010aSmrg func_append non_pic_objects " $non_pic_object" 73739d0ccd10Smrg if test -z "$pic_object" || test none = "$pic_object"; then 73749d0ccd10Smrg arg=$non_pic_object 7375e169010aSmrg fi 7376e169010aSmrg else 7377e169010aSmrg # If the PIC object exists, use it instead. 7378e169010aSmrg # $xdir was prepended to $pic_object above. 73799d0ccd10Smrg non_pic_object=$pic_object 7380e169010aSmrg func_append non_pic_objects " $non_pic_object" 7381e169010aSmrg fi 7382e169010aSmrg else 7383e169010aSmrg # Only an error if not doing a dry-run. 7384e169010aSmrg if $opt_dry_run; then 7385e169010aSmrg # Extract subdirectory from the argument. 7386e169010aSmrg func_dirname "$arg" "/" "" 73879d0ccd10Smrg xdir=$func_dirname_result 7388e169010aSmrg 7389e169010aSmrg func_lo2o "$arg" 7390e169010aSmrg pic_object=$xdir$objdir/$func_lo2o_result 7391e169010aSmrg non_pic_object=$xdir$func_lo2o_result 7392e169010aSmrg func_append libobjs " $pic_object" 7393e169010aSmrg func_append non_pic_objects " $non_pic_object" 7394e169010aSmrg else 73959d0ccd10Smrg func_fatal_error "'$arg' is not a valid libtool object" 7396e169010aSmrg fi 7397e169010aSmrg fi 7398e169010aSmrg ;; 7399e169010aSmrg 7400e169010aSmrg *.$libext) 7401e169010aSmrg # An archive. 7402c63293b5Smrg func_append deplibs " $arg" 7403c63293b5Smrg func_append old_deplibs " $arg" 7404e169010aSmrg continue 7405e169010aSmrg ;; 7406e169010aSmrg 7407e169010aSmrg *.la) 7408e169010aSmrg # A libtool-controlled library. 7409e169010aSmrg 7410c63293b5Smrg func_resolve_sysroot "$arg" 74119d0ccd10Smrg if test dlfiles = "$prev"; then 7412e169010aSmrg # This library was specified with -dlopen. 7413c63293b5Smrg func_append dlfiles " $func_resolve_sysroot_result" 7414e169010aSmrg prev= 74159d0ccd10Smrg elif test dlprefiles = "$prev"; then 7416e169010aSmrg # The library was specified with -dlpreopen. 7417c63293b5Smrg func_append dlprefiles " $func_resolve_sysroot_result" 7418e169010aSmrg prev= 7419e169010aSmrg else 7420c63293b5Smrg func_append deplibs " $func_resolve_sysroot_result" 7421e169010aSmrg fi 7422e169010aSmrg continue 7423e169010aSmrg ;; 7424e169010aSmrg 7425e169010aSmrg # Some other compiler argument. 7426e169010aSmrg *) 7427e169010aSmrg # Unknown arguments in both finalize_command and compile_command need 7428e169010aSmrg # to be aesthetically quoted because they are evaled later. 7429e169010aSmrg func_quote_for_eval "$arg" 74309d0ccd10Smrg arg=$func_quote_for_eval_result 7431e169010aSmrg ;; 7432e169010aSmrg esac # arg 7433e169010aSmrg 7434e169010aSmrg # Now actually substitute the argument into the commands. 7435e169010aSmrg if test -n "$arg"; then 7436e169010aSmrg func_append compile_command " $arg" 7437e169010aSmrg func_append finalize_command " $arg" 7438e169010aSmrg fi 7439e169010aSmrg done # argument parsing loop 7440e169010aSmrg 7441e169010aSmrg test -n "$prev" && \ 74429d0ccd10Smrg func_fatal_help "the '$prevarg' option requires an argument" 7443e169010aSmrg 74449d0ccd10Smrg if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then 7445e169010aSmrg eval arg=\"$export_dynamic_flag_spec\" 7446e169010aSmrg func_append compile_command " $arg" 7447e169010aSmrg func_append finalize_command " $arg" 7448e169010aSmrg fi 7449e169010aSmrg 7450e169010aSmrg oldlibs= 7451e169010aSmrg # calculate the name of the file, without its directory 7452e169010aSmrg func_basename "$output" 74539d0ccd10Smrg outputname=$func_basename_result 74549d0ccd10Smrg libobjs_save=$libobjs 7455e169010aSmrg 7456e169010aSmrg if test -n "$shlibpath_var"; then 7457e169010aSmrg # get the directories listed in $shlibpath_var 74589d0ccd10Smrg eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` 74597914d74bSmrg else 7460e169010aSmrg shlib_search_path= 74617914d74bSmrg fi 7462e169010aSmrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 7463e169010aSmrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 74647914d74bSmrg 74659d0ccd10Smrg # Definition is injected by LT_CONFIG during libtool generation. 74669d0ccd10Smrg func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" 74679d0ccd10Smrg 7468e169010aSmrg func_dirname "$output" "/" "" 74699d0ccd10Smrg output_objdir=$func_dirname_result$objdir 7470c63293b5Smrg func_to_tool_file "$output_objdir/" 7471c63293b5Smrg tool_output_objdir=$func_to_tool_file_result 7472e169010aSmrg # Create the object directory. 7473e169010aSmrg func_mkdir_p "$output_objdir" 74747914d74bSmrg 7475e169010aSmrg # Determine the type of output 7476e169010aSmrg case $output in 7477e169010aSmrg "") 7478e169010aSmrg func_fatal_help "you must specify an output file" 7479e169010aSmrg ;; 7480e169010aSmrg *.$libext) linkmode=oldlib ;; 7481e169010aSmrg *.lo | *.$objext) linkmode=obj ;; 7482e169010aSmrg *.la) linkmode=lib ;; 7483e169010aSmrg *) linkmode=prog ;; # Anything else should be a program. 7484e169010aSmrg esac 7485e169010aSmrg 7486e169010aSmrg specialdeplibs= 7487e169010aSmrg 7488e169010aSmrg libs= 7489e169010aSmrg # Find all interdependent deplibs by searching for libraries 7490e169010aSmrg # that are linked more than once (e.g. -la -lb -la) 7491e169010aSmrg for deplib in $deplibs; do 74929d0ccd10Smrg if $opt_preserve_dup_deps; then 7493e169010aSmrg case "$libs " in 7494c63293b5Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 7495e169010aSmrg esac 7496e169010aSmrg fi 7497c63293b5Smrg func_append libs " $deplib" 7498e169010aSmrg done 7499e169010aSmrg 75009d0ccd10Smrg if test lib = "$linkmode"; then 7501e169010aSmrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 7502e169010aSmrg 7503e169010aSmrg # Compute libraries that are listed more than once in $predeps 7504e169010aSmrg # $postdeps and mark them as special (i.e., whose duplicates are 7505e169010aSmrg # not to be eliminated). 7506e169010aSmrg pre_post_deps= 7507e169010aSmrg if $opt_duplicate_compiler_generated_deps; then 7508e169010aSmrg for pre_post_dep in $predeps $postdeps; do 7509e169010aSmrg case "$pre_post_deps " in 7510c63293b5Smrg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 7511e169010aSmrg esac 7512c63293b5Smrg func_append pre_post_deps " $pre_post_dep" 7513e169010aSmrg done 7514e169010aSmrg fi 7515e169010aSmrg pre_post_deps= 7516e169010aSmrg fi 7517e169010aSmrg 7518e169010aSmrg deplibs= 7519e169010aSmrg newdependency_libs= 7520e169010aSmrg newlib_search_path= 7521e169010aSmrg need_relink=no # whether we're linking any uninstalled libtool libraries 7522e169010aSmrg notinst_deplibs= # not-installed libtool libraries 7523e169010aSmrg notinst_path= # paths that contain not-installed libtool libraries 7524e169010aSmrg 7525e169010aSmrg case $linkmode in 7526e169010aSmrg lib) 7527e169010aSmrg passes="conv dlpreopen link" 7528e169010aSmrg for file in $dlfiles $dlprefiles; do 7529e169010aSmrg case $file in 7530e169010aSmrg *.la) ;; 7531e169010aSmrg *) 75329d0ccd10Smrg func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" 7533e169010aSmrg ;; 7534e169010aSmrg esac 7535e169010aSmrg done 7536e169010aSmrg ;; 7537e169010aSmrg prog) 7538e169010aSmrg compile_deplibs= 7539e169010aSmrg finalize_deplibs= 75409d0ccd10Smrg alldeplibs=false 7541e169010aSmrg newdlfiles= 7542e169010aSmrg newdlprefiles= 7543e169010aSmrg passes="conv scan dlopen dlpreopen link" 7544e169010aSmrg ;; 7545e169010aSmrg *) passes="conv" 7546e169010aSmrg ;; 7547e169010aSmrg esac 7548e169010aSmrg 7549e169010aSmrg for pass in $passes; do 7550e169010aSmrg # The preopen pass in lib mode reverses $deplibs; put it back here 7551e169010aSmrg # so that -L comes before libs that need it for instance... 75529d0ccd10Smrg if test lib,link = "$linkmode,$pass"; then 7553e169010aSmrg ## FIXME: Find the place where the list is rebuilt in the wrong 7554e169010aSmrg ## order, and fix it there properly 7555e169010aSmrg tmp_deplibs= 7556e169010aSmrg for deplib in $deplibs; do 7557e169010aSmrg tmp_deplibs="$deplib $tmp_deplibs" 7558e169010aSmrg done 75599d0ccd10Smrg deplibs=$tmp_deplibs 7560e169010aSmrg fi 7561e169010aSmrg 75629d0ccd10Smrg if test lib,link = "$linkmode,$pass" || 75639d0ccd10Smrg test prog,scan = "$linkmode,$pass"; then 75649d0ccd10Smrg libs=$deplibs 7565e169010aSmrg deplibs= 7566e169010aSmrg fi 75679d0ccd10Smrg if test prog = "$linkmode"; then 7568e169010aSmrg case $pass in 75699d0ccd10Smrg dlopen) libs=$dlfiles ;; 75709d0ccd10Smrg dlpreopen) libs=$dlprefiles ;; 7571cdce750aSmrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 7572e169010aSmrg esac 7573e169010aSmrg fi 75749d0ccd10Smrg if test lib,dlpreopen = "$linkmode,$pass"; then 7575e169010aSmrg # Collect and forward deplibs of preopened libtool libs 7576e169010aSmrg for lib in $dlprefiles; do 7577e169010aSmrg # Ignore non-libtool-libs 7578e169010aSmrg dependency_libs= 7579c63293b5Smrg func_resolve_sysroot "$lib" 7580e169010aSmrg case $lib in 7581c63293b5Smrg *.la) func_source "$func_resolve_sysroot_result" ;; 7582e169010aSmrg esac 7583e169010aSmrg 7584e169010aSmrg # Collect preopened libtool deplibs, except any this library 7585e169010aSmrg # has declared as weak libs 7586e169010aSmrg for deplib in $dependency_libs; do 7587e8ead290Smrg func_basename "$deplib" 7588e8ead290Smrg deplib_base=$func_basename_result 7589e169010aSmrg case " $weak_libs " in 7590e169010aSmrg *" $deplib_base "*) ;; 7591c63293b5Smrg *) func_append deplibs " $deplib" ;; 7592e169010aSmrg esac 7593e169010aSmrg done 7594e169010aSmrg done 75959d0ccd10Smrg libs=$dlprefiles 7596e169010aSmrg fi 75979d0ccd10Smrg if test dlopen = "$pass"; then 7598e169010aSmrg # Collect dlpreopened libraries 75999d0ccd10Smrg save_deplibs=$deplibs 7600e169010aSmrg deplibs= 7601e169010aSmrg fi 7602e169010aSmrg 7603e169010aSmrg for deplib in $libs; do 7604e169010aSmrg lib= 76059d0ccd10Smrg found=false 7606e169010aSmrg case $deplib in 7607e6d5e4e0Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 7608e6d5e4e0Smrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 76099d0ccd10Smrg if test prog,link = "$linkmode,$pass"; then 7610e169010aSmrg compile_deplibs="$deplib $compile_deplibs" 7611e169010aSmrg finalize_deplibs="$deplib $finalize_deplibs" 7612e169010aSmrg else 7613c63293b5Smrg func_append compiler_flags " $deplib" 76149d0ccd10Smrg if test lib = "$linkmode"; then 7615e169010aSmrg case "$new_inherited_linker_flags " in 7616e169010aSmrg *" $deplib "*) ;; 7617c63293b5Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 7618e169010aSmrg esac 7619e169010aSmrg fi 7620e169010aSmrg fi 7621e169010aSmrg continue 7622e169010aSmrg ;; 7623e169010aSmrg -l*) 76249d0ccd10Smrg if test lib != "$linkmode" && test prog != "$linkmode"; then 76259d0ccd10Smrg func_warning "'-l' is ignored for archives/objects" 7626e169010aSmrg continue 7627e169010aSmrg fi 7628e169010aSmrg func_stripname '-l' '' "$deplib" 7629e169010aSmrg name=$func_stripname_result 76309d0ccd10Smrg if test lib = "$linkmode"; then 7631e169010aSmrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 7632e169010aSmrg else 7633e169010aSmrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 7634e169010aSmrg fi 7635e169010aSmrg for searchdir in $searchdirs; do 7636e169010aSmrg for search_ext in .la $std_shrext .so .a; do 7637e169010aSmrg # Search the libtool library 76389d0ccd10Smrg lib=$searchdir/lib$name$search_ext 7639e169010aSmrg if test -f "$lib"; then 76409d0ccd10Smrg if test .la = "$search_ext"; then 76419d0ccd10Smrg found=: 7642e169010aSmrg else 76439d0ccd10Smrg found=false 7644e169010aSmrg fi 7645e169010aSmrg break 2 7646e169010aSmrg fi 7647e169010aSmrg done 7648e169010aSmrg done 76499d0ccd10Smrg if $found; then 76509d0ccd10Smrg # deplib is a libtool library 7651e169010aSmrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 7652e169010aSmrg # We need to do some special things here, and not later. 76539d0ccd10Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 7654e169010aSmrg case " $predeps $postdeps " in 7655e169010aSmrg *" $deplib "*) 7656e169010aSmrg if func_lalib_p "$lib"; then 7657e169010aSmrg library_names= 7658e169010aSmrg old_library= 7659e169010aSmrg func_source "$lib" 7660e169010aSmrg for l in $old_library $library_names; do 76619d0ccd10Smrg ll=$l 7662e169010aSmrg done 76639d0ccd10Smrg if test "X$ll" = "X$old_library"; then # only static version available 76649d0ccd10Smrg found=false 7665e169010aSmrg func_dirname "$lib" "" "." 76669d0ccd10Smrg ladir=$func_dirname_result 7667e169010aSmrg lib=$ladir/$old_library 76689d0ccd10Smrg if test prog,link = "$linkmode,$pass"; then 7669e169010aSmrg compile_deplibs="$deplib $compile_deplibs" 7670e169010aSmrg finalize_deplibs="$deplib $finalize_deplibs" 7671e169010aSmrg else 7672e169010aSmrg deplibs="$deplib $deplibs" 76739d0ccd10Smrg test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 7674e169010aSmrg fi 7675e169010aSmrg continue 7676e169010aSmrg fi 7677e169010aSmrg fi 7678e169010aSmrg ;; 7679e169010aSmrg *) ;; 7680e169010aSmrg esac 7681e169010aSmrg fi 76829d0ccd10Smrg else 76839d0ccd10Smrg # deplib doesn't seem to be a libtool library 76849d0ccd10Smrg if test prog,link = "$linkmode,$pass"; then 76859d0ccd10Smrg compile_deplibs="$deplib $compile_deplibs" 76869d0ccd10Smrg finalize_deplibs="$deplib $finalize_deplibs" 76879d0ccd10Smrg else 76889d0ccd10Smrg deplibs="$deplib $deplibs" 76899d0ccd10Smrg test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 76909d0ccd10Smrg fi 76919d0ccd10Smrg continue 7692e169010aSmrg fi 7693e169010aSmrg ;; # -l 7694e169010aSmrg *.ltframework) 76959d0ccd10Smrg if test prog,link = "$linkmode,$pass"; then 7696e169010aSmrg compile_deplibs="$deplib $compile_deplibs" 7697e169010aSmrg finalize_deplibs="$deplib $finalize_deplibs" 7698e169010aSmrg else 7699e169010aSmrg deplibs="$deplib $deplibs" 77009d0ccd10Smrg if test lib = "$linkmode"; then 7701e169010aSmrg case "$new_inherited_linker_flags " in 7702e169010aSmrg *" $deplib "*) ;; 7703c63293b5Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 7704e169010aSmrg esac 7705e169010aSmrg fi 7706e169010aSmrg fi 7707e169010aSmrg continue 7708e169010aSmrg ;; 7709e169010aSmrg -L*) 7710e169010aSmrg case $linkmode in 7711e169010aSmrg lib) 7712e169010aSmrg deplibs="$deplib $deplibs" 77139d0ccd10Smrg test conv = "$pass" && continue 7714e169010aSmrg newdependency_libs="$deplib $newdependency_libs" 7715e169010aSmrg func_stripname '-L' '' "$deplib" 7716c63293b5Smrg func_resolve_sysroot "$func_stripname_result" 7717c63293b5Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 7718e169010aSmrg ;; 7719e169010aSmrg prog) 77209d0ccd10Smrg if test conv = "$pass"; then 7721e169010aSmrg deplibs="$deplib $deplibs" 7722e169010aSmrg continue 7723e169010aSmrg fi 77249d0ccd10Smrg if test scan = "$pass"; then 7725e169010aSmrg deplibs="$deplib $deplibs" 7726e169010aSmrg else 7727e169010aSmrg compile_deplibs="$deplib $compile_deplibs" 7728e169010aSmrg finalize_deplibs="$deplib $finalize_deplibs" 7729e169010aSmrg fi 7730e169010aSmrg func_stripname '-L' '' "$deplib" 7731c63293b5Smrg func_resolve_sysroot "$func_stripname_result" 7732c63293b5Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 7733e169010aSmrg ;; 7734e169010aSmrg *) 77359d0ccd10Smrg func_warning "'-L' is ignored for archives/objects" 7736e169010aSmrg ;; 7737e169010aSmrg esac # linkmode 7738e169010aSmrg continue 7739e169010aSmrg ;; # -L 7740e169010aSmrg -R*) 77419d0ccd10Smrg if test link = "$pass"; then 7742e169010aSmrg func_stripname '-R' '' "$deplib" 7743c63293b5Smrg func_resolve_sysroot "$func_stripname_result" 7744c63293b5Smrg dir=$func_resolve_sysroot_result 7745e169010aSmrg # Make sure the xrpath contains only unique directories. 7746e169010aSmrg case "$xrpath " in 7747e169010aSmrg *" $dir "*) ;; 7748c63293b5Smrg *) func_append xrpath " $dir" ;; 7749e169010aSmrg esac 7750e169010aSmrg fi 7751e169010aSmrg deplibs="$deplib $deplibs" 7752e169010aSmrg continue 7753e169010aSmrg ;; 7754c63293b5Smrg *.la) 7755c63293b5Smrg func_resolve_sysroot "$deplib" 7756c63293b5Smrg lib=$func_resolve_sysroot_result 7757c63293b5Smrg ;; 7758e169010aSmrg *.$libext) 77599d0ccd10Smrg if test conv = "$pass"; then 7760e169010aSmrg deplibs="$deplib $deplibs" 7761e169010aSmrg continue 7762e169010aSmrg fi 7763e169010aSmrg case $linkmode in 7764e169010aSmrg lib) 7765e169010aSmrg # Linking convenience modules into shared libraries is allowed, 7766e169010aSmrg # but linking other static libraries is non-portable. 7767e169010aSmrg case " $dlpreconveniencelibs " in 7768e169010aSmrg *" $deplib "*) ;; 7769e169010aSmrg *) 77709d0ccd10Smrg valid_a_lib=false 7771e169010aSmrg case $deplibs_check_method in 7772e169010aSmrg match_pattern*) 7773e169010aSmrg set dummy $deplibs_check_method; shift 7774e169010aSmrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7775e8ead290Smrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 7776e169010aSmrg | $EGREP "$match_pattern_regex" > /dev/null; then 77779d0ccd10Smrg valid_a_lib=: 7778e169010aSmrg fi 7779e169010aSmrg ;; 7780e169010aSmrg pass_all) 77819d0ccd10Smrg valid_a_lib=: 7782e169010aSmrg ;; 7783e169010aSmrg esac 77849d0ccd10Smrg if $valid_a_lib; then 77859d0ccd10Smrg echo 77869d0ccd10Smrg $ECHO "*** Warning: Linking the shared library $output against the" 77879d0ccd10Smrg $ECHO "*** static library $deplib is not portable!" 77889d0ccd10Smrg deplibs="$deplib $deplibs" 77899d0ccd10Smrg else 7790e8ead290Smrg echo 7791e169010aSmrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 7792e8ead290Smrg echo "*** I have the capability to make that library automatically link in when" 7793e8ead290Smrg echo "*** you link to this library. But I can only do this if you have a" 7794e8ead290Smrg echo "*** shared version of the library, which you do not appear to have" 7795e8ead290Smrg echo "*** because the file extensions .$libext of this argument makes me believe" 7796e8ead290Smrg echo "*** that it is just a static archive that I should not use here." 7797e169010aSmrg fi 7798e169010aSmrg ;; 7799e169010aSmrg esac 7800e169010aSmrg continue 7801e169010aSmrg ;; 7802e169010aSmrg prog) 78039d0ccd10Smrg if test link != "$pass"; then 7804e169010aSmrg deplibs="$deplib $deplibs" 7805e169010aSmrg else 7806e169010aSmrg compile_deplibs="$deplib $compile_deplibs" 7807e169010aSmrg finalize_deplibs="$deplib $finalize_deplibs" 7808e169010aSmrg fi 7809e169010aSmrg continue 7810e169010aSmrg ;; 7811e169010aSmrg esac # linkmode 7812e169010aSmrg ;; # *.$libext 7813e169010aSmrg *.lo | *.$objext) 78149d0ccd10Smrg if test conv = "$pass"; then 7815e169010aSmrg deplibs="$deplib $deplibs" 78169d0ccd10Smrg elif test prog = "$linkmode"; then 78179d0ccd10Smrg if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then 7818e169010aSmrg # If there is no dlopen support or we're linking statically, 7819e169010aSmrg # we need to preload. 7820c63293b5Smrg func_append newdlprefiles " $deplib" 7821e169010aSmrg compile_deplibs="$deplib $compile_deplibs" 7822e169010aSmrg finalize_deplibs="$deplib $finalize_deplibs" 7823e169010aSmrg else 7824c63293b5Smrg func_append newdlfiles " $deplib" 7825e169010aSmrg fi 7826e169010aSmrg fi 7827e169010aSmrg continue 7828e169010aSmrg ;; 7829e169010aSmrg %DEPLIBS%) 78309d0ccd10Smrg alldeplibs=: 7831e169010aSmrg continue 7832e169010aSmrg ;; 7833e169010aSmrg esac # case $deplib 7834e169010aSmrg 78359d0ccd10Smrg $found || test -f "$lib" \ 78369d0ccd10Smrg || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" 7837e169010aSmrg 7838e169010aSmrg # Check to see that this really is a libtool archive. 7839e169010aSmrg func_lalib_unsafe_p "$lib" \ 78409d0ccd10Smrg || func_fatal_error "'$lib' is not a valid libtool archive" 7841e169010aSmrg 7842e169010aSmrg func_dirname "$lib" "" "." 78439d0ccd10Smrg ladir=$func_dirname_result 7844e169010aSmrg 7845e169010aSmrg dlname= 7846e169010aSmrg dlopen= 7847e169010aSmrg dlpreopen= 7848e169010aSmrg libdir= 7849e169010aSmrg library_names= 7850e169010aSmrg old_library= 7851e169010aSmrg inherited_linker_flags= 7852e169010aSmrg # If the library was installed with an old release of libtool, 7853e169010aSmrg # it will not redefine variables installed, or shouldnotlink 7854e169010aSmrg installed=yes 7855e169010aSmrg shouldnotlink=no 7856e169010aSmrg avoidtemprpath= 7857e169010aSmrg 7858e169010aSmrg 7859e169010aSmrg # Read the .la file 7860e169010aSmrg func_source "$lib" 7861e169010aSmrg 7862e169010aSmrg # Convert "-framework foo" to "foo.ltframework" 7863e169010aSmrg if test -n "$inherited_linker_flags"; then 7864e8ead290Smrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 7865e169010aSmrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 7866e169010aSmrg case " $new_inherited_linker_flags " in 7867e169010aSmrg *" $tmp_inherited_linker_flag "*) ;; 7868c63293b5Smrg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 7869e169010aSmrg esac 7870e169010aSmrg done 7871e169010aSmrg fi 7872e8ead290Smrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 78739d0ccd10Smrg if test lib,link = "$linkmode,$pass" || 78749d0ccd10Smrg test prog,scan = "$linkmode,$pass" || 78759d0ccd10Smrg { test prog != "$linkmode" && test lib != "$linkmode"; }; then 7876c63293b5Smrg test -n "$dlopen" && func_append dlfiles " $dlopen" 7877c63293b5Smrg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 7878e169010aSmrg fi 7879e169010aSmrg 78809d0ccd10Smrg if test conv = "$pass"; then 7881e169010aSmrg # Only check for convenience libraries 7882e169010aSmrg deplibs="$lib $deplibs" 7883e169010aSmrg if test -z "$libdir"; then 7884e169010aSmrg if test -z "$old_library"; then 78859d0ccd10Smrg func_fatal_error "cannot find name of link library for '$lib'" 7886e169010aSmrg fi 7887e169010aSmrg # It is a libtool convenience library, so add in its objects. 7888c63293b5Smrg func_append convenience " $ladir/$objdir/$old_library" 7889c63293b5Smrg func_append old_convenience " $ladir/$objdir/$old_library" 78909d0ccd10Smrg elif test prog != "$linkmode" && test lib != "$linkmode"; then 78919d0ccd10Smrg func_fatal_error "'$lib' is not a convenience library" 7892e169010aSmrg fi 7893cdce750aSmrg tmp_libs= 7894cdce750aSmrg for deplib in $dependency_libs; do 7895cdce750aSmrg deplibs="$deplib $deplibs" 7896cdce750aSmrg if $opt_preserve_dup_deps; then 7897cdce750aSmrg case "$tmp_libs " in 7898cdce750aSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 7899cdce750aSmrg esac 7900cdce750aSmrg fi 7901cdce750aSmrg func_append tmp_libs " $deplib" 7902cdce750aSmrg done 7903e169010aSmrg continue 7904e169010aSmrg fi # $pass = conv 7905e169010aSmrg 7906e169010aSmrg 7907e169010aSmrg # Get the name of the library we link against. 7908e169010aSmrg linklib= 7909c63293b5Smrg if test -n "$old_library" && 79109d0ccd10Smrg { test yes = "$prefer_static_libs" || 79119d0ccd10Smrg test built,no = "$prefer_static_libs,$installed"; }; then 7912c63293b5Smrg linklib=$old_library 7913c63293b5Smrg else 7914c63293b5Smrg for l in $old_library $library_names; do 79159d0ccd10Smrg linklib=$l 7916c63293b5Smrg done 7917c63293b5Smrg fi 7918e169010aSmrg if test -z "$linklib"; then 79199d0ccd10Smrg func_fatal_error "cannot find name of link library for '$lib'" 7920e169010aSmrg fi 7921e169010aSmrg 7922e169010aSmrg # This library was specified with -dlopen. 79239d0ccd10Smrg if test dlopen = "$pass"; then 79249d0ccd10Smrg test -z "$libdir" \ 79259d0ccd10Smrg && func_fatal_error "cannot -dlopen a convenience library: '$lib'" 7926e169010aSmrg if test -z "$dlname" || 79279d0ccd10Smrg test yes != "$dlopen_support" || 79289d0ccd10Smrg test no = "$build_libtool_libs" 79299d0ccd10Smrg then 7930e169010aSmrg # If there is no dlname, no dlopen support or we're linking 7931e169010aSmrg # statically, we need to preload. We also need to preload any 7932e169010aSmrg # dependent libraries so libltdl's deplib preloader doesn't 7933e169010aSmrg # bomb out in the load deplibs phase. 7934c63293b5Smrg func_append dlprefiles " $lib $dependency_libs" 7935e169010aSmrg else 7936c63293b5Smrg func_append newdlfiles " $lib" 7937e169010aSmrg fi 7938e169010aSmrg continue 7939e169010aSmrg fi # $pass = dlopen 7940e169010aSmrg 7941e169010aSmrg # We need an absolute path. 7942e169010aSmrg case $ladir in 79439d0ccd10Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; 7944e169010aSmrg *) 7945e169010aSmrg abs_ladir=`cd "$ladir" && pwd` 7946e169010aSmrg if test -z "$abs_ladir"; then 79479d0ccd10Smrg func_warning "cannot determine absolute directory name of '$ladir'" 7948e169010aSmrg func_warning "passing it literally to the linker, although it might fail" 79499d0ccd10Smrg abs_ladir=$ladir 7950e169010aSmrg fi 7951e169010aSmrg ;; 7952e169010aSmrg esac 7953e169010aSmrg func_basename "$lib" 79549d0ccd10Smrg laname=$func_basename_result 7955e169010aSmrg 7956e169010aSmrg # Find the relevant object directory and library name. 79579d0ccd10Smrg if test yes = "$installed"; then 7958c63293b5Smrg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 79599d0ccd10Smrg func_warning "library '$lib' was moved." 79609d0ccd10Smrg dir=$ladir 79619d0ccd10Smrg absdir=$abs_ladir 79629d0ccd10Smrg libdir=$abs_ladir 7963e169010aSmrg else 79649d0ccd10Smrg dir=$lt_sysroot$libdir 79659d0ccd10Smrg absdir=$lt_sysroot$libdir 7966e169010aSmrg fi 79679d0ccd10Smrg test yes = "$hardcode_automatic" && avoidtemprpath=yes 7968e169010aSmrg else 7969e169010aSmrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 79709d0ccd10Smrg dir=$ladir 79719d0ccd10Smrg absdir=$abs_ladir 7972e169010aSmrg # Remove this search path later 7973c63293b5Smrg func_append notinst_path " $abs_ladir" 7974e169010aSmrg else 79759d0ccd10Smrg dir=$ladir/$objdir 79769d0ccd10Smrg absdir=$abs_ladir/$objdir 7977e169010aSmrg # Remove this search path later 7978c63293b5Smrg func_append notinst_path " $abs_ladir" 7979e169010aSmrg fi 7980e169010aSmrg fi # $installed = yes 7981e169010aSmrg func_stripname 'lib' '.la' "$laname" 7982e169010aSmrg name=$func_stripname_result 7983e169010aSmrg 7984e169010aSmrg # This library was specified with -dlpreopen. 79859d0ccd10Smrg if test dlpreopen = "$pass"; then 79869d0ccd10Smrg if test -z "$libdir" && test prog = "$linkmode"; then 79879d0ccd10Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" 7988e169010aSmrg fi 79899d0ccd10Smrg case $host in 7990c63293b5Smrg # special handling for platforms with PE-DLLs. 7991c63293b5Smrg *cygwin* | *mingw* | *cegcc* ) 7992c63293b5Smrg # Linker will automatically link against shared library if both 7993c63293b5Smrg # static and shared are present. Therefore, ensure we extract 7994c63293b5Smrg # symbols from the import library if a shared library is present 7995c63293b5Smrg # (otherwise, the dlopen module name will be incorrect). We do 7996c63293b5Smrg # this by putting the import library name into $newdlprefiles. 7997c63293b5Smrg # We recover the dlopen module name by 'saving' the la file 7998c63293b5Smrg # name in a special purpose variable, and (later) extracting the 7999c63293b5Smrg # dlname from the la file. 8000c63293b5Smrg if test -n "$dlname"; then 8001c63293b5Smrg func_tr_sh "$dir/$linklib" 8002c63293b5Smrg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 8003c63293b5Smrg func_append newdlprefiles " $dir/$linklib" 8004c63293b5Smrg else 8005c63293b5Smrg func_append newdlprefiles " $dir/$old_library" 8006c63293b5Smrg # Keep a list of preopened convenience libraries to check 8007c63293b5Smrg # that they are being used correctly in the link pass. 8008c63293b5Smrg test -z "$libdir" && \ 8009c63293b5Smrg func_append dlpreconveniencelibs " $dir/$old_library" 8010c63293b5Smrg fi 8011c63293b5Smrg ;; 8012c63293b5Smrg * ) 8013c63293b5Smrg # Prefer using a static library (so that no silly _DYNAMIC symbols 8014c63293b5Smrg # are required to link). 8015c63293b5Smrg if test -n "$old_library"; then 8016c63293b5Smrg func_append newdlprefiles " $dir/$old_library" 8017c63293b5Smrg # Keep a list of preopened convenience libraries to check 8018c63293b5Smrg # that they are being used correctly in the link pass. 8019c63293b5Smrg test -z "$libdir" && \ 8020c63293b5Smrg func_append dlpreconveniencelibs " $dir/$old_library" 8021c63293b5Smrg # Otherwise, use the dlname, so that lt_dlopen finds it. 8022c63293b5Smrg elif test -n "$dlname"; then 8023c63293b5Smrg func_append newdlprefiles " $dir/$dlname" 8024c63293b5Smrg else 8025c63293b5Smrg func_append newdlprefiles " $dir/$linklib" 8026c63293b5Smrg fi 8027c63293b5Smrg ;; 8028c63293b5Smrg esac 8029e169010aSmrg fi # $pass = dlpreopen 8030e169010aSmrg 8031e169010aSmrg if test -z "$libdir"; then 8032e169010aSmrg # Link the convenience library 80339d0ccd10Smrg if test lib = "$linkmode"; then 8034e169010aSmrg deplibs="$dir/$old_library $deplibs" 80359d0ccd10Smrg elif test prog,link = "$linkmode,$pass"; then 8036e169010aSmrg compile_deplibs="$dir/$old_library $compile_deplibs" 8037e169010aSmrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 8038e169010aSmrg else 8039e169010aSmrg deplibs="$lib $deplibs" # used for prog,scan pass 8040e169010aSmrg fi 8041e169010aSmrg continue 8042e169010aSmrg fi 8043e169010aSmrg 8044e169010aSmrg 80459d0ccd10Smrg if test prog = "$linkmode" && test link != "$pass"; then 8046c63293b5Smrg func_append newlib_search_path " $ladir" 8047e169010aSmrg deplibs="$lib $deplibs" 8048e169010aSmrg 80499d0ccd10Smrg linkalldeplibs=false 80509d0ccd10Smrg if test no != "$link_all_deplibs" || test -z "$library_names" || 80519d0ccd10Smrg test no = "$build_libtool_libs"; then 80529d0ccd10Smrg linkalldeplibs=: 8053e169010aSmrg fi 8054e169010aSmrg 8055e169010aSmrg tmp_libs= 8056e169010aSmrg for deplib in $dependency_libs; do 8057e169010aSmrg case $deplib in 8058e169010aSmrg -L*) func_stripname '-L' '' "$deplib" 8059c63293b5Smrg func_resolve_sysroot "$func_stripname_result" 8060c63293b5Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 8061e169010aSmrg ;; 8062e169010aSmrg esac 8063e169010aSmrg # Need to link against all dependency_libs? 80649d0ccd10Smrg if $linkalldeplibs; then 8065e169010aSmrg deplibs="$deplib $deplibs" 8066e169010aSmrg else 8067e169010aSmrg # Need to hardcode shared library paths 8068e169010aSmrg # or/and link against static libraries 8069e169010aSmrg newdependency_libs="$deplib $newdependency_libs" 8070e169010aSmrg fi 80719d0ccd10Smrg if $opt_preserve_dup_deps; then 8072e169010aSmrg case "$tmp_libs " in 8073c63293b5Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 8074e169010aSmrg esac 8075e169010aSmrg fi 8076c63293b5Smrg func_append tmp_libs " $deplib" 8077e169010aSmrg done # for deplib 8078e169010aSmrg continue 8079e169010aSmrg fi # $linkmode = prog... 8080e169010aSmrg 80819d0ccd10Smrg if test prog,link = "$linkmode,$pass"; then 8082e169010aSmrg if test -n "$library_names" && 80839d0ccd10Smrg { { test no = "$prefer_static_libs" || 80849d0ccd10Smrg test built,yes = "$prefer_static_libs,$installed"; } || 8085e169010aSmrg test -z "$old_library"; }; then 8086e169010aSmrg # We need to hardcode the library path 80879d0ccd10Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then 8088e169010aSmrg # Make sure the rpath contains only unique directories. 80899d0ccd10Smrg case $temp_rpath: in 8090e169010aSmrg *"$absdir:"*) ;; 8091c63293b5Smrg *) func_append temp_rpath "$absdir:" ;; 8092e169010aSmrg esac 8093e169010aSmrg fi 8094e169010aSmrg 8095e169010aSmrg # Hardcode the library path. 8096e169010aSmrg # Skip directories that are in the system default run-time 8097e169010aSmrg # search path. 8098e169010aSmrg case " $sys_lib_dlsearch_path " in 8099e169010aSmrg *" $absdir "*) ;; 8100e169010aSmrg *) 8101e169010aSmrg case "$compile_rpath " in 8102e169010aSmrg *" $absdir "*) ;; 8103c63293b5Smrg *) func_append compile_rpath " $absdir" ;; 8104e169010aSmrg esac 8105e169010aSmrg ;; 8106e169010aSmrg esac 8107e169010aSmrg case " $sys_lib_dlsearch_path " in 8108e169010aSmrg *" $libdir "*) ;; 8109e169010aSmrg *) 8110e169010aSmrg case "$finalize_rpath " in 8111e169010aSmrg *" $libdir "*) ;; 8112c63293b5Smrg *) func_append finalize_rpath " $libdir" ;; 8113e169010aSmrg esac 8114e169010aSmrg ;; 8115e169010aSmrg esac 8116e169010aSmrg fi # $linkmode,$pass = prog,link... 8117e169010aSmrg 81189d0ccd10Smrg if $alldeplibs && 81199d0ccd10Smrg { test pass_all = "$deplibs_check_method" || 81209d0ccd10Smrg { test yes = "$build_libtool_libs" && 8121e169010aSmrg test -n "$library_names"; }; }; then 8122e169010aSmrg # We only need to search for static libraries 8123e169010aSmrg continue 8124e169010aSmrg fi 8125e169010aSmrg fi 8126e169010aSmrg 8127e169010aSmrg link_static=no # Whether the deplib will be linked statically 8128e169010aSmrg use_static_libs=$prefer_static_libs 81299d0ccd10Smrg if test built = "$use_static_libs" && test yes = "$installed"; then 8130e169010aSmrg use_static_libs=no 8131e169010aSmrg fi 8132e169010aSmrg if test -n "$library_names" && 81339d0ccd10Smrg { test no = "$use_static_libs" || test -z "$old_library"; }; then 8134e169010aSmrg case $host in 81359d0ccd10Smrg *cygwin* | *mingw* | *cegcc* | *os2*) 8136e169010aSmrg # No point in relinking DLLs because paths are not encoded 8137c63293b5Smrg func_append notinst_deplibs " $lib" 8138e169010aSmrg need_relink=no 8139e169010aSmrg ;; 8140e169010aSmrg *) 81419d0ccd10Smrg if test no = "$installed"; then 8142c63293b5Smrg func_append notinst_deplibs " $lib" 8143e169010aSmrg need_relink=yes 8144e169010aSmrg fi 8145e169010aSmrg ;; 8146e169010aSmrg esac 8147e169010aSmrg # This is a shared library 8148e169010aSmrg 8149e169010aSmrg # Warn about portability, can't link against -module's on some 8150e169010aSmrg # systems (darwin). Don't bleat about dlopened modules though! 81519d0ccd10Smrg dlopenmodule= 8152e169010aSmrg for dlpremoduletest in $dlprefiles; do 8153e169010aSmrg if test "X$dlpremoduletest" = "X$lib"; then 81549d0ccd10Smrg dlopenmodule=$dlpremoduletest 8155e169010aSmrg break 8156e169010aSmrg fi 8157e169010aSmrg done 81589d0ccd10Smrg if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then 8159e8ead290Smrg echo 81609d0ccd10Smrg if test prog = "$linkmode"; then 8161e169010aSmrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 8162e169010aSmrg else 8163e169010aSmrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 8164e169010aSmrg fi 8165e169010aSmrg $ECHO "*** $linklib is not portable!" 8166e169010aSmrg fi 81679d0ccd10Smrg if test lib = "$linkmode" && 81689d0ccd10Smrg test yes = "$hardcode_into_libs"; then 8169e169010aSmrg # Hardcode the library path. 8170e169010aSmrg # Skip directories that are in the system default run-time 8171e169010aSmrg # search path. 8172e169010aSmrg case " $sys_lib_dlsearch_path " in 8173e169010aSmrg *" $absdir "*) ;; 8174e169010aSmrg *) 8175e169010aSmrg case "$compile_rpath " in 8176e169010aSmrg *" $absdir "*) ;; 8177c63293b5Smrg *) func_append compile_rpath " $absdir" ;; 8178e169010aSmrg esac 8179e169010aSmrg ;; 8180e169010aSmrg esac 8181e169010aSmrg case " $sys_lib_dlsearch_path " in 8182e169010aSmrg *" $libdir "*) ;; 8183e169010aSmrg *) 8184e169010aSmrg case "$finalize_rpath " in 8185e169010aSmrg *" $libdir "*) ;; 8186c63293b5Smrg *) func_append finalize_rpath " $libdir" ;; 8187e169010aSmrg esac 8188e169010aSmrg ;; 8189e169010aSmrg esac 8190e169010aSmrg fi 8191e169010aSmrg 8192e169010aSmrg if test -n "$old_archive_from_expsyms_cmds"; then 8193e169010aSmrg # figure out the soname 8194e169010aSmrg set dummy $library_names 8195e169010aSmrg shift 81969d0ccd10Smrg realname=$1 8197e169010aSmrg shift 8198e169010aSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 8199e169010aSmrg # use dlname if we got it. it's perfectly good, no? 8200e169010aSmrg if test -n "$dlname"; then 82019d0ccd10Smrg soname=$dlname 8202e169010aSmrg elif test -n "$soname_spec"; then 8203e169010aSmrg # bleh windows 8204e169010aSmrg case $host in 82059d0ccd10Smrg *cygwin* | mingw* | *cegcc* | *os2*) 8206e169010aSmrg func_arith $current - $age 8207e169010aSmrg major=$func_arith_result 82089d0ccd10Smrg versuffix=-$major 8209e169010aSmrg ;; 8210e169010aSmrg esac 8211e169010aSmrg eval soname=\"$soname_spec\" 8212e169010aSmrg else 82139d0ccd10Smrg soname=$realname 8214e169010aSmrg fi 8215e169010aSmrg 8216e169010aSmrg # Make a new name for the extract_expsyms_cmds to use 82179d0ccd10Smrg soroot=$soname 8218e169010aSmrg func_basename "$soroot" 82199d0ccd10Smrg soname=$func_basename_result 8220e169010aSmrg func_stripname 'lib' '.dll' "$soname" 8221e169010aSmrg newlib=libimp-$func_stripname_result.a 8222e169010aSmrg 8223e169010aSmrg # If the library has no export list, then create one now 8224e169010aSmrg if test -f "$output_objdir/$soname-def"; then : 8225e169010aSmrg else 82269d0ccd10Smrg func_verbose "extracting exported symbol list from '$soname'" 8227e169010aSmrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 8228e169010aSmrg fi 8229e169010aSmrg 8230e169010aSmrg # Create $newlib 8231e169010aSmrg if test -f "$output_objdir/$newlib"; then :; else 82329d0ccd10Smrg func_verbose "generating import library for '$soname'" 8233e169010aSmrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 8234e169010aSmrg fi 8235e169010aSmrg # make sure the library variables are pointing to the new library 8236e169010aSmrg dir=$output_objdir 8237e169010aSmrg linklib=$newlib 8238e169010aSmrg fi # test -n "$old_archive_from_expsyms_cmds" 8239e169010aSmrg 82409d0ccd10Smrg if test prog = "$linkmode" || test relink != "$opt_mode"; then 8241e169010aSmrg add_shlibpath= 8242e169010aSmrg add_dir= 8243e169010aSmrg add= 8244e169010aSmrg lib_linked=yes 8245e169010aSmrg case $hardcode_action in 8246e169010aSmrg immediate | unsupported) 82479d0ccd10Smrg if test no = "$hardcode_direct"; then 82489d0ccd10Smrg add=$dir/$linklib 8249e169010aSmrg case $host in 82509d0ccd10Smrg *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; 82519d0ccd10Smrg *-*-sysv4*uw2*) add_dir=-L$dir ;; 8252e169010aSmrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 82539d0ccd10Smrg *-*-unixware7*) add_dir=-L$dir ;; 8254e169010aSmrg *-*-darwin* ) 82559d0ccd10Smrg # if the lib is a (non-dlopened) module then we cannot 8256e169010aSmrg # link against it, someone is ignoring the earlier warnings 8257e169010aSmrg if /usr/bin/file -L $add 2> /dev/null | 82589d0ccd10Smrg $GREP ": [^:]* bundle" >/dev/null; then 8259e169010aSmrg if test "X$dlopenmodule" != "X$lib"; then 8260e169010aSmrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 82619d0ccd10Smrg if test -z "$old_library"; then 8262e8ead290Smrg echo 8263e8ead290Smrg echo "*** And there doesn't seem to be a static archive available" 8264e8ead290Smrg echo "*** The link will probably fail, sorry" 8265e169010aSmrg else 82669d0ccd10Smrg add=$dir/$old_library 8267e169010aSmrg fi 8268e169010aSmrg elif test -n "$old_library"; then 82699d0ccd10Smrg add=$dir/$old_library 8270e169010aSmrg fi 8271e169010aSmrg fi 8272e169010aSmrg esac 82739d0ccd10Smrg elif test no = "$hardcode_minus_L"; then 8274e169010aSmrg case $host in 82759d0ccd10Smrg *-*-sunos*) add_shlibpath=$dir ;; 8276e169010aSmrg esac 82779d0ccd10Smrg add_dir=-L$dir 82789d0ccd10Smrg add=-l$name 82799d0ccd10Smrg elif test no = "$hardcode_shlibpath_var"; then 82809d0ccd10Smrg add_shlibpath=$dir 82819d0ccd10Smrg add=-l$name 8282e169010aSmrg else 8283e169010aSmrg lib_linked=no 8284e169010aSmrg fi 8285e169010aSmrg ;; 8286e169010aSmrg relink) 82879d0ccd10Smrg if test yes = "$hardcode_direct" && 82889d0ccd10Smrg test no = "$hardcode_direct_absolute"; then 82899d0ccd10Smrg add=$dir/$linklib 82909d0ccd10Smrg elif test yes = "$hardcode_minus_L"; then 82919d0ccd10Smrg add_dir=-L$absdir 8292e169010aSmrg # Try looking first in the location we're being installed to. 8293e169010aSmrg if test -n "$inst_prefix_dir"; then 8294e169010aSmrg case $libdir in 8295e169010aSmrg [\\/]*) 8296c63293b5Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 8297e169010aSmrg ;; 8298e169010aSmrg esac 8299e169010aSmrg fi 83009d0ccd10Smrg add=-l$name 83019d0ccd10Smrg elif test yes = "$hardcode_shlibpath_var"; then 83029d0ccd10Smrg add_shlibpath=$dir 83039d0ccd10Smrg add=-l$name 8304e169010aSmrg else 8305e169010aSmrg lib_linked=no 8306e169010aSmrg fi 8307e169010aSmrg ;; 8308e169010aSmrg *) lib_linked=no ;; 8309e169010aSmrg esac 8310e169010aSmrg 83119d0ccd10Smrg if test yes != "$lib_linked"; then 8312e169010aSmrg func_fatal_configuration "unsupported hardcode properties" 8313e169010aSmrg fi 8314e169010aSmrg 8315e169010aSmrg if test -n "$add_shlibpath"; then 8316e169010aSmrg case :$compile_shlibpath: in 8317e169010aSmrg *":$add_shlibpath:"*) ;; 8318c63293b5Smrg *) func_append compile_shlibpath "$add_shlibpath:" ;; 8319e169010aSmrg esac 8320e169010aSmrg fi 83219d0ccd10Smrg if test prog = "$linkmode"; then 8322e169010aSmrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 8323e169010aSmrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 8324e169010aSmrg else 8325e169010aSmrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 8326e169010aSmrg test -n "$add" && deplibs="$add $deplibs" 83279d0ccd10Smrg if test yes != "$hardcode_direct" && 83289d0ccd10Smrg test yes != "$hardcode_minus_L" && 83299d0ccd10Smrg test yes = "$hardcode_shlibpath_var"; then 8330e169010aSmrg case :$finalize_shlibpath: in 8331e169010aSmrg *":$libdir:"*) ;; 8332c63293b5Smrg *) func_append finalize_shlibpath "$libdir:" ;; 8333e169010aSmrg esac 8334e169010aSmrg fi 8335e169010aSmrg fi 8336e169010aSmrg fi 8337e169010aSmrg 83389d0ccd10Smrg if test prog = "$linkmode" || test relink = "$opt_mode"; then 8339e169010aSmrg add_shlibpath= 8340e169010aSmrg add_dir= 8341e169010aSmrg add= 8342e169010aSmrg # Finalize command for both is simple: just hardcode it. 83439d0ccd10Smrg if test yes = "$hardcode_direct" && 83449d0ccd10Smrg test no = "$hardcode_direct_absolute"; then 83459d0ccd10Smrg add=$libdir/$linklib 83469d0ccd10Smrg elif test yes = "$hardcode_minus_L"; then 83479d0ccd10Smrg add_dir=-L$libdir 83489d0ccd10Smrg add=-l$name 83499d0ccd10Smrg elif test yes = "$hardcode_shlibpath_var"; then 8350e169010aSmrg case :$finalize_shlibpath: in 8351e169010aSmrg *":$libdir:"*) ;; 8352c63293b5Smrg *) func_append finalize_shlibpath "$libdir:" ;; 8353e169010aSmrg esac 83549d0ccd10Smrg add=-l$name 83559d0ccd10Smrg elif test yes = "$hardcode_automatic"; then 8356e169010aSmrg if test -n "$inst_prefix_dir" && 83579d0ccd10Smrg test -f "$inst_prefix_dir$libdir/$linklib"; then 83589d0ccd10Smrg add=$inst_prefix_dir$libdir/$linklib 8359e169010aSmrg else 83609d0ccd10Smrg add=$libdir/$linklib 8361e169010aSmrg fi 8362e169010aSmrg else 8363e169010aSmrg # We cannot seem to hardcode it, guess we'll fake it. 83649d0ccd10Smrg add_dir=-L$libdir 8365e169010aSmrg # Try looking first in the location we're being installed to. 8366e169010aSmrg if test -n "$inst_prefix_dir"; then 8367e169010aSmrg case $libdir in 8368e169010aSmrg [\\/]*) 8369c63293b5Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 8370e169010aSmrg ;; 8371e169010aSmrg esac 8372e169010aSmrg fi 83739d0ccd10Smrg add=-l$name 8374e169010aSmrg fi 8375e169010aSmrg 83769d0ccd10Smrg if test prog = "$linkmode"; then 8377e169010aSmrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 8378e169010aSmrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 8379e169010aSmrg else 8380e169010aSmrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 8381e169010aSmrg test -n "$add" && deplibs="$add $deplibs" 8382e169010aSmrg fi 8383e169010aSmrg fi 83849d0ccd10Smrg elif test prog = "$linkmode"; then 8385e169010aSmrg # Here we assume that one of hardcode_direct or hardcode_minus_L 8386e169010aSmrg # is not unsupported. This is valid on all known static and 8387e169010aSmrg # shared platforms. 83889d0ccd10Smrg if test unsupported != "$hardcode_direct"; then 83899d0ccd10Smrg test -n "$old_library" && linklib=$old_library 8390e169010aSmrg compile_deplibs="$dir/$linklib $compile_deplibs" 8391e169010aSmrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 8392e169010aSmrg else 8393e169010aSmrg compile_deplibs="-l$name -L$dir $compile_deplibs" 8394e169010aSmrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 8395e169010aSmrg fi 83969d0ccd10Smrg elif test yes = "$build_libtool_libs"; then 8397e169010aSmrg # Not a shared library 83989d0ccd10Smrg if test pass_all != "$deplibs_check_method"; then 8399e169010aSmrg # We're trying link a shared library against a static one 8400e169010aSmrg # but the system doesn't support it. 8401e169010aSmrg 8402e169010aSmrg # Just print a warning and add the library to dependency_libs so 8403e169010aSmrg # that the program can be linked against the static library. 8404e8ead290Smrg echo 84059d0ccd10Smrg $ECHO "*** Warning: This system cannot link to static lib archive $lib." 8406e8ead290Smrg echo "*** I have the capability to make that library automatically link in when" 8407e8ead290Smrg echo "*** you link to this library. But I can only do this if you have a" 8408e8ead290Smrg echo "*** shared version of the library, which you do not appear to have." 84099d0ccd10Smrg if test yes = "$module"; then 8410e8ead290Smrg echo "*** But as you try to build a module library, libtool will still create " 8411e8ead290Smrg echo "*** a static module, that should work as long as the dlopening application" 8412e8ead290Smrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 8413e169010aSmrg if test -z "$global_symbol_pipe"; then 8414e8ead290Smrg echo 8415e8ead290Smrg echo "*** However, this would only work if libtool was able to extract symbol" 84169d0ccd10Smrg echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 8417e8ead290Smrg echo "*** not find such a program. So, this module is probably useless." 84189d0ccd10Smrg echo "*** 'nm' from GNU binutils and a full rebuild may help." 8419e169010aSmrg fi 84209d0ccd10Smrg if test no = "$build_old_libs"; then 8421e169010aSmrg build_libtool_libs=module 8422e169010aSmrg build_old_libs=yes 8423e169010aSmrg else 8424e169010aSmrg build_libtool_libs=no 8425e169010aSmrg fi 8426e169010aSmrg fi 8427e169010aSmrg else 8428e169010aSmrg deplibs="$dir/$old_library $deplibs" 8429e169010aSmrg link_static=yes 8430e169010aSmrg fi 8431e169010aSmrg fi # link shared/static library? 8432e169010aSmrg 84339d0ccd10Smrg if test lib = "$linkmode"; then 8434e169010aSmrg if test -n "$dependency_libs" && 84359d0ccd10Smrg { test yes != "$hardcode_into_libs" || 84369d0ccd10Smrg test yes = "$build_old_libs" || 84379d0ccd10Smrg test yes = "$link_static"; }; then 8438e169010aSmrg # Extract -R from dependency_libs 8439e169010aSmrg temp_deplibs= 8440e169010aSmrg for libdir in $dependency_libs; do 8441e169010aSmrg case $libdir in 8442e169010aSmrg -R*) func_stripname '-R' '' "$libdir" 8443e169010aSmrg temp_xrpath=$func_stripname_result 8444e169010aSmrg case " $xrpath " in 8445e169010aSmrg *" $temp_xrpath "*) ;; 8446c63293b5Smrg *) func_append xrpath " $temp_xrpath";; 8447e169010aSmrg esac;; 8448c63293b5Smrg *) func_append temp_deplibs " $libdir";; 8449e169010aSmrg esac 8450e169010aSmrg done 84519d0ccd10Smrg dependency_libs=$temp_deplibs 8452e169010aSmrg fi 8453e169010aSmrg 8454c63293b5Smrg func_append newlib_search_path " $absdir" 8455e169010aSmrg # Link against this library 84569d0ccd10Smrg test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 8457e169010aSmrg # ... and its dependency_libs 8458e169010aSmrg tmp_libs= 8459e169010aSmrg for deplib in $dependency_libs; do 8460e169010aSmrg newdependency_libs="$deplib $newdependency_libs" 8461c63293b5Smrg case $deplib in 8462c63293b5Smrg -L*) func_stripname '-L' '' "$deplib" 8463c63293b5Smrg func_resolve_sysroot "$func_stripname_result";; 8464c63293b5Smrg *) func_resolve_sysroot "$deplib" ;; 8465c63293b5Smrg esac 84669d0ccd10Smrg if $opt_preserve_dup_deps; then 8467e169010aSmrg case "$tmp_libs " in 8468c63293b5Smrg *" $func_resolve_sysroot_result "*) 8469c63293b5Smrg func_append specialdeplibs " $func_resolve_sysroot_result" ;; 8470e169010aSmrg esac 8471e169010aSmrg fi 8472c63293b5Smrg func_append tmp_libs " $func_resolve_sysroot_result" 8473e169010aSmrg done 8474e169010aSmrg 84759d0ccd10Smrg if test no != "$link_all_deplibs"; then 8476e169010aSmrg # Add the search paths of all dependency libraries 8477e169010aSmrg for deplib in $dependency_libs; do 8478e8ead290Smrg path= 8479e169010aSmrg case $deplib in 84809d0ccd10Smrg -L*) path=$deplib ;; 8481e169010aSmrg *.la) 8482c63293b5Smrg func_resolve_sysroot "$deplib" 8483c63293b5Smrg deplib=$func_resolve_sysroot_result 8484e169010aSmrg func_dirname "$deplib" "" "." 8485c63293b5Smrg dir=$func_dirname_result 8486e169010aSmrg # We need an absolute path. 8487e169010aSmrg case $dir in 84889d0ccd10Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; 8489e169010aSmrg *) 8490e169010aSmrg absdir=`cd "$dir" && pwd` 8491e169010aSmrg if test -z "$absdir"; then 84929d0ccd10Smrg func_warning "cannot determine absolute directory name of '$dir'" 84939d0ccd10Smrg absdir=$dir 8494e169010aSmrg fi 8495e169010aSmrg ;; 8496e169010aSmrg esac 8497e169010aSmrg if $GREP "^installed=no" $deplib > /dev/null; then 8498e169010aSmrg case $host in 8499e169010aSmrg *-*-darwin*) 8500e169010aSmrg depdepl= 85019d0ccd10Smrg eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 85029d0ccd10Smrg if test -n "$deplibrary_names"; then 85039d0ccd10Smrg for tmp in $deplibrary_names; do 8504e169010aSmrg depdepl=$tmp 8505e169010aSmrg done 85069d0ccd10Smrg if test -f "$absdir/$objdir/$depdepl"; then 85079d0ccd10Smrg depdepl=$absdir/$objdir/$depdepl 85089d0ccd10Smrg darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8509e169010aSmrg if test -z "$darwin_install_name"; then 85109d0ccd10Smrg darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8511e169010aSmrg fi 85129d0ccd10Smrg func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" 85139d0ccd10Smrg func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" 8514e169010aSmrg path= 8515e169010aSmrg fi 8516e169010aSmrg fi 8517e169010aSmrg ;; 8518e169010aSmrg *) 85199d0ccd10Smrg path=-L$absdir/$objdir 8520e169010aSmrg ;; 8521e169010aSmrg esac 8522e169010aSmrg else 85239d0ccd10Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 8524e169010aSmrg test -z "$libdir" && \ 85259d0ccd10Smrg func_fatal_error "'$deplib' is not a valid libtool archive" 8526e169010aSmrg test "$absdir" != "$libdir" && \ 85279d0ccd10Smrg func_warning "'$deplib' seems to be moved" 8528e169010aSmrg 85299d0ccd10Smrg path=-L$absdir 8530e169010aSmrg fi 8531e169010aSmrg ;; 8532e169010aSmrg esac 8533e169010aSmrg case " $deplibs " in 8534e169010aSmrg *" $path "*) ;; 8535e169010aSmrg *) deplibs="$path $deplibs" ;; 8536e169010aSmrg esac 8537e169010aSmrg done 8538e169010aSmrg fi # link_all_deplibs != no 8539e169010aSmrg fi # linkmode = lib 8540e169010aSmrg done # for deplib in $libs 85419d0ccd10Smrg if test link = "$pass"; then 85429d0ccd10Smrg if test prog = "$linkmode"; then 8543e169010aSmrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 8544e169010aSmrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 8545e169010aSmrg else 8546e8ead290Smrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8547e169010aSmrg fi 8548e169010aSmrg fi 85499d0ccd10Smrg dependency_libs=$newdependency_libs 85509d0ccd10Smrg if test dlpreopen = "$pass"; then 8551e169010aSmrg # Link the dlpreopened libraries before other libraries 8552e169010aSmrg for deplib in $save_deplibs; do 8553e169010aSmrg deplibs="$deplib $deplibs" 8554e169010aSmrg done 8555e169010aSmrg fi 85569d0ccd10Smrg if test dlopen != "$pass"; then 85579d0ccd10Smrg test conv = "$pass" || { 8558e169010aSmrg # Make sure lib_search_path contains only unique directories. 8559e169010aSmrg lib_search_path= 8560e169010aSmrg for dir in $newlib_search_path; do 8561e169010aSmrg case "$lib_search_path " in 8562e169010aSmrg *" $dir "*) ;; 8563c63293b5Smrg *) func_append lib_search_path " $dir" ;; 8564e169010aSmrg esac 8565e169010aSmrg done 8566e169010aSmrg newlib_search_path= 85679d0ccd10Smrg } 8568e169010aSmrg 85699d0ccd10Smrg if test prog,link = "$linkmode,$pass"; then 8570e169010aSmrg vars="compile_deplibs finalize_deplibs" 85719d0ccd10Smrg else 85729d0ccd10Smrg vars=deplibs 8573e169010aSmrg fi 8574e169010aSmrg for var in $vars dependency_libs; do 8575e169010aSmrg # Add libraries to $var in reverse order 8576e169010aSmrg eval tmp_libs=\"\$$var\" 8577e169010aSmrg new_libs= 8578e169010aSmrg for deplib in $tmp_libs; do 8579e169010aSmrg # FIXME: Pedantically, this is the right thing to do, so 8580e169010aSmrg # that some nasty dependency loop isn't accidentally 8581e169010aSmrg # broken: 8582e169010aSmrg #new_libs="$deplib $new_libs" 8583e169010aSmrg # Pragmatically, this seems to cause very few problems in 8584e169010aSmrg # practice: 8585e169010aSmrg case $deplib in 8586e169010aSmrg -L*) new_libs="$deplib $new_libs" ;; 8587e169010aSmrg -R*) ;; 8588e169010aSmrg *) 8589e169010aSmrg # And here is the reason: when a library appears more 8590e169010aSmrg # than once as an explicit dependence of a library, or 8591e169010aSmrg # is implicitly linked in more than once by the 8592e169010aSmrg # compiler, it is considered special, and multiple 8593e169010aSmrg # occurrences thereof are not removed. Compare this 8594e169010aSmrg # with having the same library being listed as a 8595e169010aSmrg # dependency of multiple other libraries: in this case, 8596e169010aSmrg # we know (pedantically, we assume) the library does not 8597e169010aSmrg # need to be listed more than once, so we keep only the 8598e169010aSmrg # last copy. This is not always right, but it is rare 8599e169010aSmrg # enough that we require users that really mean to play 8600e169010aSmrg # such unportable linking tricks to link the library 8601e169010aSmrg # using -Wl,-lname, so that libtool does not consider it 8602e169010aSmrg # for duplicate removal. 8603e169010aSmrg case " $specialdeplibs " in 8604e169010aSmrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 8605e169010aSmrg *) 8606e169010aSmrg case " $new_libs " in 8607e169010aSmrg *" $deplib "*) ;; 8608e169010aSmrg *) new_libs="$deplib $new_libs" ;; 8609e169010aSmrg esac 8610e169010aSmrg ;; 8611e169010aSmrg esac 8612e169010aSmrg ;; 8613e169010aSmrg esac 8614e169010aSmrg done 8615e169010aSmrg tmp_libs= 8616e169010aSmrg for deplib in $new_libs; do 8617e169010aSmrg case $deplib in 8618e169010aSmrg -L*) 8619e169010aSmrg case " $tmp_libs " in 8620e169010aSmrg *" $deplib "*) ;; 8621c63293b5Smrg *) func_append tmp_libs " $deplib" ;; 8622e169010aSmrg esac 8623e169010aSmrg ;; 8624c63293b5Smrg *) func_append tmp_libs " $deplib" ;; 8625e169010aSmrg esac 8626e169010aSmrg done 8627e169010aSmrg eval $var=\"$tmp_libs\" 8628e169010aSmrg done # for var 8629e169010aSmrg fi 86309d0ccd10Smrg 86319d0ccd10Smrg # Add Sun CC postdeps if required: 86329d0ccd10Smrg test CXX = "$tagname" && { 86339d0ccd10Smrg case $host_os in 86349d0ccd10Smrg linux*) 86359d0ccd10Smrg case `$CC -V 2>&1 | sed 5q` in 86369d0ccd10Smrg *Sun\ C*) # Sun C++ 5.9 86379d0ccd10Smrg func_suncc_cstd_abi 86389d0ccd10Smrg 86399d0ccd10Smrg if test no != "$suncc_use_cstd_abi"; then 86409d0ccd10Smrg func_append postdeps ' -library=Cstd -library=Crun' 86419d0ccd10Smrg fi 86429d0ccd10Smrg ;; 86439d0ccd10Smrg esac 86449d0ccd10Smrg ;; 86459d0ccd10Smrg 86469d0ccd10Smrg solaris*) 86479d0ccd10Smrg func_cc_basename "$CC" 86489d0ccd10Smrg case $func_cc_basename_result in 86499d0ccd10Smrg CC* | sunCC*) 86509d0ccd10Smrg func_suncc_cstd_abi 86519d0ccd10Smrg 86529d0ccd10Smrg if test no != "$suncc_use_cstd_abi"; then 86539d0ccd10Smrg func_append postdeps ' -library=Cstd -library=Crun' 86549d0ccd10Smrg fi 86559d0ccd10Smrg ;; 86569d0ccd10Smrg esac 86579d0ccd10Smrg ;; 86589d0ccd10Smrg esac 86599d0ccd10Smrg } 86609d0ccd10Smrg 8661e169010aSmrg # Last step: remove runtime libs from dependency_libs 8662e169010aSmrg # (they stay in deplibs) 8663e169010aSmrg tmp_libs= 86649d0ccd10Smrg for i in $dependency_libs; do 8665e169010aSmrg case " $predeps $postdeps $compiler_lib_search_path " in 8666e169010aSmrg *" $i "*) 86679d0ccd10Smrg i= 8668e169010aSmrg ;; 8669e169010aSmrg esac 86709d0ccd10Smrg if test -n "$i"; then 8671c63293b5Smrg func_append tmp_libs " $i" 8672e169010aSmrg fi 8673e169010aSmrg done 8674e169010aSmrg dependency_libs=$tmp_libs 8675e169010aSmrg done # for pass 86769d0ccd10Smrg if test prog = "$linkmode"; then 86779d0ccd10Smrg dlfiles=$newdlfiles 8678e169010aSmrg fi 86799d0ccd10Smrg if test prog = "$linkmode" || test lib = "$linkmode"; then 86809d0ccd10Smrg dlprefiles=$newdlprefiles 8681e169010aSmrg fi 8682e169010aSmrg 8683e169010aSmrg case $linkmode in 8684e169010aSmrg oldlib) 86859d0ccd10Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 86869d0ccd10Smrg func_warning "'-dlopen' is ignored for archives" 8687e169010aSmrg fi 8688e169010aSmrg 8689e169010aSmrg case " $deplibs" in 8690e169010aSmrg *\ -l* | *\ -L*) 86919d0ccd10Smrg func_warning "'-l' and '-L' are ignored for archives" ;; 8692e169010aSmrg esac 8693e169010aSmrg 8694e169010aSmrg test -n "$rpath" && \ 86959d0ccd10Smrg func_warning "'-rpath' is ignored for archives" 8696e169010aSmrg 8697e169010aSmrg test -n "$xrpath" && \ 86989d0ccd10Smrg func_warning "'-R' is ignored for archives" 8699e169010aSmrg 8700e169010aSmrg test -n "$vinfo" && \ 87019d0ccd10Smrg func_warning "'-version-info/-version-number' is ignored for archives" 8702e169010aSmrg 8703e169010aSmrg test -n "$release" && \ 87049d0ccd10Smrg func_warning "'-release' is ignored for archives" 8705e169010aSmrg 8706e169010aSmrg test -n "$export_symbols$export_symbols_regex" && \ 87079d0ccd10Smrg func_warning "'-export-symbols' is ignored for archives" 8708e169010aSmrg 8709e169010aSmrg # Now set the variables for building old libraries. 8710e169010aSmrg build_libtool_libs=no 87119d0ccd10Smrg oldlibs=$output 8712c63293b5Smrg func_append objs "$old_deplibs" 8713e169010aSmrg ;; 8714e169010aSmrg 8715e169010aSmrg lib) 87169d0ccd10Smrg # Make sure we only generate libraries of the form 'libNAME.la'. 8717e169010aSmrg case $outputname in 8718e169010aSmrg lib*) 8719e169010aSmrg func_stripname 'lib' '.la' "$outputname" 8720e169010aSmrg name=$func_stripname_result 8721e169010aSmrg eval shared_ext=\"$shrext_cmds\" 8722e169010aSmrg eval libname=\"$libname_spec\" 8723e169010aSmrg ;; 8724e169010aSmrg *) 87259d0ccd10Smrg test no = "$module" \ 87269d0ccd10Smrg && func_fatal_help "libtool library '$output' must begin with 'lib'" 8727e169010aSmrg 87289d0ccd10Smrg if test no != "$need_lib_prefix"; then 8729e169010aSmrg # Add the "lib" prefix for modules if required 8730e169010aSmrg func_stripname '' '.la' "$outputname" 8731e169010aSmrg name=$func_stripname_result 8732e169010aSmrg eval shared_ext=\"$shrext_cmds\" 8733e169010aSmrg eval libname=\"$libname_spec\" 8734e169010aSmrg else 8735e169010aSmrg func_stripname '' '.la' "$outputname" 8736e169010aSmrg libname=$func_stripname_result 8737e169010aSmrg fi 8738e169010aSmrg ;; 8739e169010aSmrg esac 8740e169010aSmrg 8741e169010aSmrg if test -n "$objs"; then 87429d0ccd10Smrg if test pass_all != "$deplibs_check_method"; then 87439d0ccd10Smrg func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" 8744e169010aSmrg else 8745e8ead290Smrg echo 8746e169010aSmrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 8747e169010aSmrg $ECHO "*** objects $objs is not portable!" 8748c63293b5Smrg func_append libobjs " $objs" 8749e169010aSmrg fi 8750e169010aSmrg fi 8751e169010aSmrg 87529d0ccd10Smrg test no = "$dlself" \ 87539d0ccd10Smrg || func_warning "'-dlopen self' is ignored for libtool libraries" 8754e169010aSmrg 8755e169010aSmrg set dummy $rpath 8756e169010aSmrg shift 87579d0ccd10Smrg test 1 -lt "$#" \ 87589d0ccd10Smrg && func_warning "ignoring multiple '-rpath's for a libtool library" 8759e169010aSmrg 87609d0ccd10Smrg install_libdir=$1 8761e169010aSmrg 8762e169010aSmrg oldlibs= 8763e169010aSmrg if test -z "$rpath"; then 87649d0ccd10Smrg if test yes = "$build_libtool_libs"; then 8765e169010aSmrg # Building a libtool convenience library. 87669d0ccd10Smrg # Some compilers have problems with a '.al' extension so 8767e169010aSmrg # convenience libraries should have the same extension an 8768e169010aSmrg # archive normally would. 8769e169010aSmrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 8770e169010aSmrg build_libtool_libs=convenience 8771e169010aSmrg build_old_libs=yes 8772e169010aSmrg fi 8773e169010aSmrg 8774e169010aSmrg test -n "$vinfo" && \ 87759d0ccd10Smrg func_warning "'-version-info/-version-number' is ignored for convenience libraries" 8776e169010aSmrg 8777e169010aSmrg test -n "$release" && \ 87789d0ccd10Smrg func_warning "'-release' is ignored for convenience libraries" 8779e169010aSmrg else 8780e169010aSmrg 8781e169010aSmrg # Parse the version information argument. 87829d0ccd10Smrg save_ifs=$IFS; IFS=: 8783e169010aSmrg set dummy $vinfo 0 0 0 8784e169010aSmrg shift 87859d0ccd10Smrg IFS=$save_ifs 8786e169010aSmrg 8787e169010aSmrg test -n "$7" && \ 87889d0ccd10Smrg func_fatal_help "too many parameters to '-version-info'" 8789e169010aSmrg 8790e169010aSmrg # convert absolute version numbers to libtool ages 8791e169010aSmrg # this retains compatibility with .la files and attempts 8792e169010aSmrg # to make the code below a bit more comprehensible 8793e169010aSmrg 8794e169010aSmrg case $vinfo_number in 8795e169010aSmrg yes) 87969d0ccd10Smrg number_major=$1 87979d0ccd10Smrg number_minor=$2 87989d0ccd10Smrg number_revision=$3 8799e169010aSmrg # 8800e169010aSmrg # There are really only two kinds -- those that 8801e169010aSmrg # use the current revision as the major version 8802e169010aSmrg # and those that subtract age and use age as 8803e169010aSmrg # a minor version. But, then there is irix 88049d0ccd10Smrg # that has an extra 1 added just for fun 8805e169010aSmrg # 8806e169010aSmrg case $version_type in 8807e6d5e4e0Smrg # correct linux to gnu/linux during the next big refactor 88089d0ccd10Smrg darwin|freebsd-elf|linux|osf|windows|none) 8809e169010aSmrg func_arith $number_major + $number_minor 8810e169010aSmrg current=$func_arith_result 88119d0ccd10Smrg age=$number_minor 88129d0ccd10Smrg revision=$number_revision 8813e169010aSmrg ;; 88149d0ccd10Smrg freebsd-aout|qnx|sunos) 88159d0ccd10Smrg current=$number_major 88169d0ccd10Smrg revision=$number_minor 88179d0ccd10Smrg age=0 8818e169010aSmrg ;; 8819e169010aSmrg irix|nonstopux) 8820e169010aSmrg func_arith $number_major + $number_minor 8821e169010aSmrg current=$func_arith_result 88229d0ccd10Smrg age=$number_minor 88239d0ccd10Smrg revision=$number_minor 8824e169010aSmrg lt_irix_increment=no 8825e169010aSmrg ;; 8826e169010aSmrg esac 8827e169010aSmrg ;; 8828e169010aSmrg no) 88299d0ccd10Smrg current=$1 88309d0ccd10Smrg revision=$2 88319d0ccd10Smrg age=$3 8832e169010aSmrg ;; 8833e169010aSmrg esac 8834e169010aSmrg 8835e169010aSmrg # Check that each of the things are valid numbers. 8836e169010aSmrg case $current in 8837e169010aSmrg 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]) ;; 8838e169010aSmrg *) 88399d0ccd10Smrg func_error "CURRENT '$current' must be a nonnegative integer" 88409d0ccd10Smrg func_fatal_error "'$vinfo' is not valid version information" 8841e169010aSmrg ;; 8842e169010aSmrg esac 8843e169010aSmrg 8844e169010aSmrg case $revision in 8845e169010aSmrg 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]) ;; 8846e169010aSmrg *) 88479d0ccd10Smrg func_error "REVISION '$revision' must be a nonnegative integer" 88489d0ccd10Smrg func_fatal_error "'$vinfo' is not valid version information" 8849e169010aSmrg ;; 8850e169010aSmrg esac 8851e169010aSmrg 8852e169010aSmrg case $age in 8853e169010aSmrg 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]) ;; 8854e169010aSmrg *) 88559d0ccd10Smrg func_error "AGE '$age' must be a nonnegative integer" 88569d0ccd10Smrg func_fatal_error "'$vinfo' is not valid version information" 8857e169010aSmrg ;; 8858e169010aSmrg esac 8859e169010aSmrg 8860e169010aSmrg if test "$age" -gt "$current"; then 88619d0ccd10Smrg func_error "AGE '$age' is greater than the current interface number '$current'" 88629d0ccd10Smrg func_fatal_error "'$vinfo' is not valid version information" 8863e169010aSmrg fi 8864e169010aSmrg 8865e169010aSmrg # Calculate the version variables. 8866e169010aSmrg major= 8867e169010aSmrg versuffix= 8868e169010aSmrg verstring= 8869e169010aSmrg case $version_type in 8870e169010aSmrg none) ;; 8871e169010aSmrg 8872e169010aSmrg darwin) 8873e169010aSmrg # Like Linux, but with the current version available in 8874e169010aSmrg # verstring for coding it into the library header 8875e169010aSmrg func_arith $current - $age 8876e169010aSmrg major=.$func_arith_result 88779d0ccd10Smrg versuffix=$major.$age.$revision 8878e169010aSmrg # Darwin ld doesn't like 0 for these options... 8879e169010aSmrg func_arith $current + 1 8880e169010aSmrg minor_current=$func_arith_result 88819d0ccd10Smrg xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 8882e169010aSmrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 88839d0ccd10Smrg # On Darwin other compilers 88849d0ccd10Smrg case $CC in 88859d0ccd10Smrg nagfor*) 88869d0ccd10Smrg verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 88879d0ccd10Smrg ;; 88889d0ccd10Smrg *) 88899d0ccd10Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 88909d0ccd10Smrg ;; 88919d0ccd10Smrg esac 8892e169010aSmrg ;; 8893e169010aSmrg 8894e169010aSmrg freebsd-aout) 88959d0ccd10Smrg major=.$current 88969d0ccd10Smrg versuffix=.$current.$revision 8897e169010aSmrg ;; 8898e169010aSmrg 8899e169010aSmrg freebsd-elf) 89009d0ccd10Smrg func_arith $current - $age 89019d0ccd10Smrg major=.$func_arith_result 89029d0ccd10Smrg versuffix=$major.$age.$revision 8903e169010aSmrg ;; 8904e169010aSmrg 8905e169010aSmrg irix | nonstopux) 89069d0ccd10Smrg if test no = "$lt_irix_increment"; then 8907e169010aSmrg func_arith $current - $age 8908e169010aSmrg else 8909e169010aSmrg func_arith $current - $age + 1 8910e169010aSmrg fi 8911e169010aSmrg major=$func_arith_result 8912e169010aSmrg 8913e169010aSmrg case $version_type in 8914e169010aSmrg nonstopux) verstring_prefix=nonstopux ;; 8915e169010aSmrg *) verstring_prefix=sgi ;; 8916e169010aSmrg esac 89179d0ccd10Smrg verstring=$verstring_prefix$major.$revision 8918e169010aSmrg 8919e169010aSmrg # Add in all the interfaces that we are compatible with. 8920e169010aSmrg loop=$revision 89219d0ccd10Smrg while test 0 -ne "$loop"; do 8922e169010aSmrg func_arith $revision - $loop 8923e169010aSmrg iface=$func_arith_result 8924e169010aSmrg func_arith $loop - 1 8925e169010aSmrg loop=$func_arith_result 89269d0ccd10Smrg verstring=$verstring_prefix$major.$iface:$verstring 8927e169010aSmrg done 8928e169010aSmrg 89299d0ccd10Smrg # Before this point, $major must not contain '.'. 8930e169010aSmrg major=.$major 89319d0ccd10Smrg versuffix=$major.$revision 8932e169010aSmrg ;; 8933e169010aSmrg 8934e6d5e4e0Smrg linux) # correct to gnu/linux during the next big refactor 8935e169010aSmrg func_arith $current - $age 8936e169010aSmrg major=.$func_arith_result 89379d0ccd10Smrg versuffix=$major.$age.$revision 8938e169010aSmrg ;; 8939e169010aSmrg 8940e169010aSmrg osf) 8941e169010aSmrg func_arith $current - $age 8942e169010aSmrg major=.$func_arith_result 89439d0ccd10Smrg versuffix=.$current.$age.$revision 89449d0ccd10Smrg verstring=$current.$age.$revision 8945e169010aSmrg 8946e169010aSmrg # Add in all the interfaces that we are compatible with. 8947e169010aSmrg loop=$age 89489d0ccd10Smrg while test 0 -ne "$loop"; do 8949e169010aSmrg func_arith $current - $loop 8950e169010aSmrg iface=$func_arith_result 8951e169010aSmrg func_arith $loop - 1 8952e169010aSmrg loop=$func_arith_result 89539d0ccd10Smrg verstring=$verstring:$iface.0 8954e169010aSmrg done 8955e169010aSmrg 8956e169010aSmrg # Make executables depend on our current version. 89579d0ccd10Smrg func_append verstring ":$current.0" 8958e169010aSmrg ;; 8959e169010aSmrg 8960e169010aSmrg qnx) 89619d0ccd10Smrg major=.$current 89629d0ccd10Smrg versuffix=.$current 89639d0ccd10Smrg ;; 89649d0ccd10Smrg 89659d0ccd10Smrg sco) 89669d0ccd10Smrg major=.$current 89679d0ccd10Smrg versuffix=.$current 8968e169010aSmrg ;; 8969e169010aSmrg 8970e169010aSmrg sunos) 89719d0ccd10Smrg major=.$current 89729d0ccd10Smrg versuffix=.$current.$revision 8973e169010aSmrg ;; 8974e169010aSmrg 8975e169010aSmrg windows) 8976e169010aSmrg # Use '-' rather than '.', since we only want one 89779d0ccd10Smrg # extension on DOS 8.3 file systems. 8978e169010aSmrg func_arith $current - $age 8979e169010aSmrg major=$func_arith_result 89809d0ccd10Smrg versuffix=-$major 8981e169010aSmrg ;; 8982e169010aSmrg 8983e169010aSmrg *) 89849d0ccd10Smrg func_fatal_configuration "unknown library version type '$version_type'" 8985e169010aSmrg ;; 8986e169010aSmrg esac 8987e169010aSmrg 8988e169010aSmrg # Clear the version info if we defaulted, and they specified a release. 8989e169010aSmrg if test -z "$vinfo" && test -n "$release"; then 8990e169010aSmrg major= 8991e169010aSmrg case $version_type in 8992e169010aSmrg darwin) 8993e169010aSmrg # we can't check for "0.0" in archive_cmds due to quoting 8994e169010aSmrg # problems, so we reset it completely 8995e169010aSmrg verstring= 8996e169010aSmrg ;; 8997e169010aSmrg *) 89989d0ccd10Smrg verstring=0.0 8999e169010aSmrg ;; 9000e169010aSmrg esac 90019d0ccd10Smrg if test no = "$need_version"; then 9002e169010aSmrg versuffix= 9003e169010aSmrg else 90049d0ccd10Smrg versuffix=.0.0 9005e169010aSmrg fi 9006e169010aSmrg fi 9007e169010aSmrg 9008e169010aSmrg # Remove version info from name if versioning should be avoided 90099d0ccd10Smrg if test yes,no = "$avoid_version,$need_version"; then 9010e169010aSmrg major= 9011e169010aSmrg versuffix= 90129d0ccd10Smrg verstring= 9013e169010aSmrg fi 9014e169010aSmrg 9015e169010aSmrg # Check to see if the archive will have undefined symbols. 90169d0ccd10Smrg if test yes = "$allow_undefined"; then 90179d0ccd10Smrg if test unsupported = "$allow_undefined_flag"; then 90189d0ccd10Smrg if test yes = "$build_old_libs"; then 90199d0ccd10Smrg func_warning "undefined symbols not allowed in $host shared libraries; building static only" 90209d0ccd10Smrg build_libtool_libs=no 90219d0ccd10Smrg else 90229d0ccd10Smrg func_fatal_error "can't build $host shared library unless -no-undefined is specified" 90239d0ccd10Smrg fi 9024e169010aSmrg fi 9025e169010aSmrg else 9026e169010aSmrg # Don't allow undefined symbols. 90279d0ccd10Smrg allow_undefined_flag=$no_undefined_flag 9028e169010aSmrg fi 9029e169010aSmrg 9030e169010aSmrg fi 9031e169010aSmrg 90329d0ccd10Smrg func_generate_dlsyms "$libname" "$libname" : 9033c63293b5Smrg func_append libobjs " $symfileobj" 90349d0ccd10Smrg test " " = "$libobjs" && libobjs= 9035e169010aSmrg 90369d0ccd10Smrg if test relink != "$opt_mode"; then 9037e169010aSmrg # Remove our outputs, but don't remove object files since they 9038e169010aSmrg # may have been created when compiling PIC objects. 9039e169010aSmrg removelist= 9040e169010aSmrg tempremovelist=`$ECHO "$output_objdir/*"` 9041e169010aSmrg for p in $tempremovelist; do 9042e169010aSmrg case $p in 9043e169010aSmrg *.$objext | *.gcno) 9044e169010aSmrg ;; 90459d0ccd10Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) 90469d0ccd10Smrg if test -n "$precious_files_regex"; then 9047e169010aSmrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 9048e169010aSmrg then 9049e169010aSmrg continue 9050e169010aSmrg fi 9051e169010aSmrg fi 9052c63293b5Smrg func_append removelist " $p" 9053e169010aSmrg ;; 9054e169010aSmrg *) ;; 9055e169010aSmrg esac 9056e169010aSmrg done 9057e169010aSmrg test -n "$removelist" && \ 9058e169010aSmrg func_show_eval "${RM}r \$removelist" 9059e169010aSmrg fi 9060e169010aSmrg 9061e169010aSmrg # Now set the variables for building old libraries. 90629d0ccd10Smrg if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then 9063c63293b5Smrg func_append oldlibs " $output_objdir/$libname.$libext" 9064e169010aSmrg 9065e169010aSmrg # Transform .lo files to .o files. 90669d0ccd10Smrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` 9067e169010aSmrg fi 9068e169010aSmrg 9069e169010aSmrg # Eliminate all temporary directories. 9070e169010aSmrg #for path in $notinst_path; do 9071e8ead290Smrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 9072e8ead290Smrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 9073e8ead290Smrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 9074e169010aSmrg #done 9075e169010aSmrg 9076e169010aSmrg if test -n "$xrpath"; then 9077e169010aSmrg # If the user specified any rpath flags, then add them. 9078e169010aSmrg temp_xrpath= 9079e169010aSmrg for libdir in $xrpath; do 9080c63293b5Smrg func_replace_sysroot "$libdir" 9081c63293b5Smrg func_append temp_xrpath " -R$func_replace_sysroot_result" 9082e169010aSmrg case "$finalize_rpath " in 9083e169010aSmrg *" $libdir "*) ;; 9084c63293b5Smrg *) func_append finalize_rpath " $libdir" ;; 9085e169010aSmrg esac 9086e169010aSmrg done 90879d0ccd10Smrg if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then 9088e169010aSmrg dependency_libs="$temp_xrpath $dependency_libs" 9089e169010aSmrg fi 9090e169010aSmrg fi 9091e169010aSmrg 9092e169010aSmrg # Make sure dlfiles contains only unique files that won't be dlpreopened 90939d0ccd10Smrg old_dlfiles=$dlfiles 9094e169010aSmrg dlfiles= 9095e169010aSmrg for lib in $old_dlfiles; do 9096e169010aSmrg case " $dlprefiles $dlfiles " in 9097e169010aSmrg *" $lib "*) ;; 9098c63293b5Smrg *) func_append dlfiles " $lib" ;; 9099e169010aSmrg esac 9100e169010aSmrg done 9101e169010aSmrg 9102e169010aSmrg # Make sure dlprefiles contains only unique files 91039d0ccd10Smrg old_dlprefiles=$dlprefiles 9104e169010aSmrg dlprefiles= 9105e169010aSmrg for lib in $old_dlprefiles; do 9106e169010aSmrg case "$dlprefiles " in 9107e169010aSmrg *" $lib "*) ;; 9108c63293b5Smrg *) func_append dlprefiles " $lib" ;; 9109e169010aSmrg esac 9110e169010aSmrg done 9111e169010aSmrg 91129d0ccd10Smrg if test yes = "$build_libtool_libs"; then 9113e169010aSmrg if test -n "$rpath"; then 9114e169010aSmrg case $host in 9115e8ead290Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 9116e169010aSmrg # these systems don't actually have a c library (as such)! 9117e169010aSmrg ;; 9118e169010aSmrg *-*-rhapsody* | *-*-darwin1.[012]) 9119e169010aSmrg # Rhapsody C library is in the System framework 9120c63293b5Smrg func_append deplibs " System.ltframework" 9121e169010aSmrg ;; 9122e169010aSmrg *-*-netbsd*) 9123e169010aSmrg # Don't link with libc until the a.out ld.so is fixed. 9124e169010aSmrg ;; 9125e169010aSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 9126e169010aSmrg # Do not include libc due to us having libc/libc_r. 9127e169010aSmrg ;; 9128e169010aSmrg *-*-sco3.2v5* | *-*-sco5v6*) 9129e169010aSmrg # Causes problems with __ctype 9130e169010aSmrg ;; 9131e169010aSmrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 9132e169010aSmrg # Compiler inserts libc in the correct place for threads to work 9133e169010aSmrg ;; 9134e169010aSmrg *) 9135e169010aSmrg # Add libc to deplibs on all other systems if necessary. 91369d0ccd10Smrg if test yes = "$build_libtool_need_lc"; then 9137c63293b5Smrg func_append deplibs " -lc" 9138e169010aSmrg fi 9139e169010aSmrg ;; 9140e169010aSmrg esac 9141e169010aSmrg fi 9142e169010aSmrg 9143e169010aSmrg # Transform deplibs into only deplibs that can be linked in shared. 9144e169010aSmrg name_save=$name 9145e169010aSmrg libname_save=$libname 9146e169010aSmrg release_save=$release 9147e169010aSmrg versuffix_save=$versuffix 9148e169010aSmrg major_save=$major 9149e169010aSmrg # I'm not sure if I'm treating the release correctly. I think 9150e169010aSmrg # release should show up in the -l (ie -lgmp5) so we don't want to 9151e169010aSmrg # add it in twice. Is that correct? 91529d0ccd10Smrg release= 91539d0ccd10Smrg versuffix= 91549d0ccd10Smrg major= 9155e169010aSmrg newdeplibs= 9156e169010aSmrg droppeddeps=no 9157e169010aSmrg case $deplibs_check_method in 9158e169010aSmrg pass_all) 9159e169010aSmrg # Don't check for shared/static. Everything works. 9160e169010aSmrg # This might be a little naive. We might want to check 9161e169010aSmrg # whether the library exists or not. But this is on 9162e169010aSmrg # osf3 & osf4 and I'm not really sure... Just 9163e169010aSmrg # implementing what was already the behavior. 9164e169010aSmrg newdeplibs=$deplibs 9165e169010aSmrg ;; 9166e169010aSmrg test_compile) 9167e169010aSmrg # This code stresses the "libraries are programs" paradigm to its 9168e169010aSmrg # limits. Maybe even breaks it. We compile a program, linking it 9169e169010aSmrg # against the deplibs as a proxy for the library. Then we can check 9170e169010aSmrg # whether they linked in statically or dynamically with ldd. 9171e169010aSmrg $opt_dry_run || $RM conftest.c 9172e169010aSmrg cat > conftest.c <<EOF 9173e169010aSmrg int main() { return 0; } 9174e169010aSmrgEOF 9175e169010aSmrg $opt_dry_run || $RM conftest 9176e169010aSmrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 9177e169010aSmrg ldd_output=`ldd conftest` 9178e169010aSmrg for i in $deplibs; do 9179e169010aSmrg case $i in 9180e169010aSmrg -l*) 9181e169010aSmrg func_stripname -l '' "$i" 9182e169010aSmrg name=$func_stripname_result 91839d0ccd10Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9184e169010aSmrg case " $predeps $postdeps " in 9185e169010aSmrg *" $i "*) 9186c63293b5Smrg func_append newdeplibs " $i" 91879d0ccd10Smrg i= 9188e169010aSmrg ;; 9189e169010aSmrg esac 9190e169010aSmrg fi 91919d0ccd10Smrg if test -n "$i"; then 9192e169010aSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 9193e169010aSmrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9194e169010aSmrg set dummy $deplib_matches; shift 9195e169010aSmrg deplib_match=$1 91969d0ccd10Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9197c63293b5Smrg func_append newdeplibs " $i" 9198e169010aSmrg else 9199e169010aSmrg droppeddeps=yes 9200e8ead290Smrg echo 9201e169010aSmrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 9202e8ead290Smrg echo "*** I have the capability to make that library automatically link in when" 9203e8ead290Smrg echo "*** you link to this library. But I can only do this if you have a" 9204e8ead290Smrg echo "*** shared version of the library, which I believe you do not have" 9205e8ead290Smrg echo "*** because a test_compile did reveal that the linker did not use it for" 9206e8ead290Smrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 9207e169010aSmrg fi 9208e169010aSmrg fi 9209e169010aSmrg ;; 9210e169010aSmrg *) 9211c63293b5Smrg func_append newdeplibs " $i" 9212e169010aSmrg ;; 9213e169010aSmrg esac 9214e169010aSmrg done 9215e169010aSmrg else 9216e169010aSmrg # Error occurred in the first compile. Let's try to salvage 9217e169010aSmrg # the situation: Compile a separate program for each library. 9218e169010aSmrg for i in $deplibs; do 9219e169010aSmrg case $i in 9220e169010aSmrg -l*) 9221e169010aSmrg func_stripname -l '' "$i" 9222e169010aSmrg name=$func_stripname_result 9223e169010aSmrg $opt_dry_run || $RM conftest 9224e169010aSmrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 9225e169010aSmrg ldd_output=`ldd conftest` 92269d0ccd10Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9227e169010aSmrg case " $predeps $postdeps " in 9228e169010aSmrg *" $i "*) 9229c63293b5Smrg func_append newdeplibs " $i" 92309d0ccd10Smrg i= 9231e169010aSmrg ;; 9232e169010aSmrg esac 9233e169010aSmrg fi 92349d0ccd10Smrg if test -n "$i"; then 9235e169010aSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 9236e169010aSmrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9237e169010aSmrg set dummy $deplib_matches; shift 9238e169010aSmrg deplib_match=$1 92399d0ccd10Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9240c63293b5Smrg func_append newdeplibs " $i" 9241e169010aSmrg else 9242e169010aSmrg droppeddeps=yes 9243e8ead290Smrg echo 9244e169010aSmrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 9245e8ead290Smrg echo "*** I have the capability to make that library automatically link in when" 9246e8ead290Smrg echo "*** you link to this library. But I can only do this if you have a" 9247e8ead290Smrg echo "*** shared version of the library, which you do not appear to have" 9248e8ead290Smrg echo "*** because a test_compile did reveal that the linker did not use this one" 9249e8ead290Smrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 9250e169010aSmrg fi 9251e169010aSmrg fi 9252e169010aSmrg else 9253e169010aSmrg droppeddeps=yes 9254e8ead290Smrg echo 9255e169010aSmrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 9256e8ead290Smrg echo "*** make it link in! You will probably need to install it or some" 9257e8ead290Smrg echo "*** library that it depends on before this library will be fully" 9258e8ead290Smrg echo "*** functional. Installing it before continuing would be even better." 9259e169010aSmrg fi 9260e169010aSmrg ;; 9261e169010aSmrg *) 9262c63293b5Smrg func_append newdeplibs " $i" 9263e169010aSmrg ;; 9264e169010aSmrg esac 9265e169010aSmrg done 9266e169010aSmrg fi 9267e169010aSmrg ;; 9268e169010aSmrg file_magic*) 9269e169010aSmrg set dummy $deplibs_check_method; shift 9270e169010aSmrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9271e169010aSmrg for a_deplib in $deplibs; do 9272e169010aSmrg case $a_deplib in 9273e169010aSmrg -l*) 9274e169010aSmrg func_stripname -l '' "$a_deplib" 9275e169010aSmrg name=$func_stripname_result 92769d0ccd10Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9277e169010aSmrg case " $predeps $postdeps " in 9278e169010aSmrg *" $a_deplib "*) 9279c63293b5Smrg func_append newdeplibs " $a_deplib" 92809d0ccd10Smrg a_deplib= 9281e169010aSmrg ;; 9282e169010aSmrg esac 9283e169010aSmrg fi 92849d0ccd10Smrg if test -n "$a_deplib"; then 9285e169010aSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 9286c63293b5Smrg if test -n "$file_magic_glob"; then 9287c63293b5Smrg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 9288c63293b5Smrg else 9289c63293b5Smrg libnameglob=$libname 9290c63293b5Smrg fi 92919d0ccd10Smrg test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` 9292e169010aSmrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 92939d0ccd10Smrg if test yes = "$want_nocaseglob"; then 9294c63293b5Smrg shopt -s nocaseglob 9295c63293b5Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9296c63293b5Smrg $nocaseglob 9297c63293b5Smrg else 9298c63293b5Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9299c63293b5Smrg fi 9300e169010aSmrg for potent_lib in $potential_libs; do 9301e169010aSmrg # Follow soft links. 9302e169010aSmrg if ls -lLd "$potent_lib" 2>/dev/null | 9303e169010aSmrg $GREP " -> " >/dev/null; then 9304e169010aSmrg continue 9305e169010aSmrg fi 9306e169010aSmrg # The statement above tries to avoid entering an 9307e169010aSmrg # endless loop below, in case of cyclic links. 9308e169010aSmrg # We might still enter an endless loop, since a link 9309e169010aSmrg # loop can be closed while we follow links, 9310e169010aSmrg # but so what? 93119d0ccd10Smrg potlib=$potent_lib 9312e169010aSmrg while test -h "$potlib" 2>/dev/null; do 93139d0ccd10Smrg potliblink=`ls -ld $potlib | $SED 's/.* -> //'` 9314e169010aSmrg case $potliblink in 93159d0ccd10Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; 93169d0ccd10Smrg *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; 9317e169010aSmrg esac 9318e169010aSmrg done 9319e169010aSmrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 9320e169010aSmrg $SED -e 10q | 9321e169010aSmrg $EGREP "$file_magic_regex" > /dev/null; then 9322c63293b5Smrg func_append newdeplibs " $a_deplib" 93239d0ccd10Smrg a_deplib= 9324e169010aSmrg break 2 9325e169010aSmrg fi 9326e169010aSmrg done 9327e169010aSmrg done 9328e169010aSmrg fi 93299d0ccd10Smrg if test -n "$a_deplib"; then 9330e169010aSmrg droppeddeps=yes 9331e8ead290Smrg echo 9332e169010aSmrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 9333e8ead290Smrg echo "*** I have the capability to make that library automatically link in when" 9334e8ead290Smrg echo "*** you link to this library. But I can only do this if you have a" 9335e8ead290Smrg echo "*** shared version of the library, which you do not appear to have" 9336e8ead290Smrg echo "*** because I did check the linker path looking for a file starting" 93379d0ccd10Smrg if test -z "$potlib"; then 9338e169010aSmrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 9339e169010aSmrg else 9340e169010aSmrg $ECHO "*** with $libname and none of the candidates passed a file format test" 9341e169010aSmrg $ECHO "*** using a file magic. Last file checked: $potlib" 9342e169010aSmrg fi 9343e169010aSmrg fi 9344e169010aSmrg ;; 9345e169010aSmrg *) 9346e169010aSmrg # Add a -L argument. 9347c63293b5Smrg func_append newdeplibs " $a_deplib" 9348e169010aSmrg ;; 9349e169010aSmrg esac 9350e169010aSmrg done # Gone through all deplibs. 9351e169010aSmrg ;; 9352e169010aSmrg match_pattern*) 9353e169010aSmrg set dummy $deplibs_check_method; shift 9354e169010aSmrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9355e169010aSmrg for a_deplib in $deplibs; do 9356e169010aSmrg case $a_deplib in 9357e169010aSmrg -l*) 9358e169010aSmrg func_stripname -l '' "$a_deplib" 9359e169010aSmrg name=$func_stripname_result 93609d0ccd10Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9361e169010aSmrg case " $predeps $postdeps " in 9362e169010aSmrg *" $a_deplib "*) 9363c63293b5Smrg func_append newdeplibs " $a_deplib" 93649d0ccd10Smrg a_deplib= 9365e169010aSmrg ;; 9366e169010aSmrg esac 9367e169010aSmrg fi 93689d0ccd10Smrg if test -n "$a_deplib"; then 9369e169010aSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 9370e169010aSmrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9371e169010aSmrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 9372e169010aSmrg for potent_lib in $potential_libs; do 93739d0ccd10Smrg potlib=$potent_lib # see symlink-check above in file_magic test 9374e8ead290Smrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 9375e169010aSmrg $EGREP "$match_pattern_regex" > /dev/null; then 9376c63293b5Smrg func_append newdeplibs " $a_deplib" 93779d0ccd10Smrg a_deplib= 9378e169010aSmrg break 2 9379e169010aSmrg fi 9380e169010aSmrg done 9381e169010aSmrg done 9382e169010aSmrg fi 93839d0ccd10Smrg if test -n "$a_deplib"; then 9384e169010aSmrg droppeddeps=yes 9385e8ead290Smrg echo 9386e169010aSmrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 9387e8ead290Smrg echo "*** I have the capability to make that library automatically link in when" 9388e8ead290Smrg echo "*** you link to this library. But I can only do this if you have a" 9389e8ead290Smrg echo "*** shared version of the library, which you do not appear to have" 9390e8ead290Smrg echo "*** because I did check the linker path looking for a file starting" 93919d0ccd10Smrg if test -z "$potlib"; then 9392e169010aSmrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 9393e169010aSmrg else 9394e169010aSmrg $ECHO "*** with $libname and none of the candidates passed a file format test" 9395e169010aSmrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 9396e169010aSmrg fi 9397e169010aSmrg fi 9398e169010aSmrg ;; 9399e169010aSmrg *) 9400e169010aSmrg # Add a -L argument. 9401c63293b5Smrg func_append newdeplibs " $a_deplib" 9402e169010aSmrg ;; 9403e169010aSmrg esac 9404e169010aSmrg done # Gone through all deplibs. 9405e169010aSmrg ;; 9406e169010aSmrg none | unknown | *) 94079d0ccd10Smrg newdeplibs= 9408e8ead290Smrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 94099d0ccd10Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 94109d0ccd10Smrg for i in $predeps $postdeps; do 9411e169010aSmrg # can't use Xsed below, because $i might contain '/' 94129d0ccd10Smrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` 9413e169010aSmrg done 9414e169010aSmrg fi 9415e8ead290Smrg case $tmp_deplibs in 9416e8ead290Smrg *[!\ \ ]*) 9417e8ead290Smrg echo 94189d0ccd10Smrg if test none = "$deplibs_check_method"; then 9419e8ead290Smrg echo "*** Warning: inter-library dependencies are not supported in this platform." 9420e169010aSmrg else 9421e8ead290Smrg echo "*** Warning: inter-library dependencies are not known to be supported." 9422e169010aSmrg fi 9423e8ead290Smrg echo "*** All declared inter-library dependencies are being dropped." 9424e169010aSmrg droppeddeps=yes 9425e8ead290Smrg ;; 9426e8ead290Smrg esac 9427e169010aSmrg ;; 9428e169010aSmrg esac 9429e169010aSmrg versuffix=$versuffix_save 9430e169010aSmrg major=$major_save 9431e169010aSmrg release=$release_save 9432e169010aSmrg libname=$libname_save 9433e169010aSmrg name=$name_save 9434e169010aSmrg 9435e169010aSmrg case $host in 9436e169010aSmrg *-*-rhapsody* | *-*-darwin1.[012]) 9437e169010aSmrg # On Rhapsody replace the C library with the System framework 9438e8ead290Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 9439e169010aSmrg ;; 9440e169010aSmrg esac 9441e169010aSmrg 94429d0ccd10Smrg if test yes = "$droppeddeps"; then 94439d0ccd10Smrg if test yes = "$module"; then 9444e8ead290Smrg echo 9445e8ead290Smrg echo "*** Warning: libtool could not satisfy all declared inter-library" 9446e169010aSmrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 9447e8ead290Smrg echo "*** a static module, that should work as long as the dlopening" 9448e8ead290Smrg echo "*** application is linked with the -dlopen flag." 9449e169010aSmrg if test -z "$global_symbol_pipe"; then 9450e8ead290Smrg echo 9451e8ead290Smrg echo "*** However, this would only work if libtool was able to extract symbol" 94529d0ccd10Smrg echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 9453e8ead290Smrg echo "*** not find such a program. So, this module is probably useless." 94549d0ccd10Smrg echo "*** 'nm' from GNU binutils and a full rebuild may help." 9455e169010aSmrg fi 94569d0ccd10Smrg if test no = "$build_old_libs"; then 94579d0ccd10Smrg oldlibs=$output_objdir/$libname.$libext 9458e169010aSmrg build_libtool_libs=module 9459e169010aSmrg build_old_libs=yes 9460e169010aSmrg else 9461e169010aSmrg build_libtool_libs=no 9462e169010aSmrg fi 9463e169010aSmrg else 9464e8ead290Smrg echo "*** The inter-library dependencies that have been dropped here will be" 9465e8ead290Smrg echo "*** automatically added whenever a program is linked with this library" 9466e8ead290Smrg echo "*** or is declared to -dlopen it." 9467e169010aSmrg 94689d0ccd10Smrg if test no = "$allow_undefined"; then 9469e8ead290Smrg echo 9470e8ead290Smrg echo "*** Since this library must not contain undefined symbols," 9471e8ead290Smrg echo "*** because either the platform does not support them or" 9472e8ead290Smrg echo "*** it was explicitly requested with -no-undefined," 9473e8ead290Smrg echo "*** libtool will only create a static version of it." 94749d0ccd10Smrg if test no = "$build_old_libs"; then 94759d0ccd10Smrg oldlibs=$output_objdir/$libname.$libext 9476e169010aSmrg build_libtool_libs=module 9477e169010aSmrg build_old_libs=yes 9478e169010aSmrg else 9479e169010aSmrg build_libtool_libs=no 9480e169010aSmrg fi 9481e169010aSmrg fi 9482e169010aSmrg fi 9483e169010aSmrg fi 9484e169010aSmrg # Done checking deplibs! 9485e169010aSmrg deplibs=$newdeplibs 9486e169010aSmrg fi 9487e169010aSmrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 9488e169010aSmrg case $host in 9489e169010aSmrg *-*-darwin*) 9490e8ead290Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9491e8ead290Smrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9492e8ead290Smrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9493e169010aSmrg ;; 9494e169010aSmrg esac 9495e169010aSmrg 9496e169010aSmrg # move library search paths that coincide with paths to not yet 9497e169010aSmrg # installed libraries to the beginning of the library search list 9498e169010aSmrg new_libs= 9499e169010aSmrg for path in $notinst_path; do 9500e169010aSmrg case " $new_libs " in 9501e169010aSmrg *" -L$path/$objdir "*) ;; 9502e169010aSmrg *) 9503e169010aSmrg case " $deplibs " in 9504e169010aSmrg *" -L$path/$objdir "*) 9505c63293b5Smrg func_append new_libs " -L$path/$objdir" ;; 9506e169010aSmrg esac 9507e169010aSmrg ;; 9508e169010aSmrg esac 9509e169010aSmrg done 9510e169010aSmrg for deplib in $deplibs; do 9511e169010aSmrg case $deplib in 9512e169010aSmrg -L*) 9513e169010aSmrg case " $new_libs " in 9514e169010aSmrg *" $deplib "*) ;; 9515c63293b5Smrg *) func_append new_libs " $deplib" ;; 9516e169010aSmrg esac 9517e169010aSmrg ;; 9518c63293b5Smrg *) func_append new_libs " $deplib" ;; 9519e169010aSmrg esac 9520e169010aSmrg done 95219d0ccd10Smrg deplibs=$new_libs 9522e169010aSmrg 9523e169010aSmrg # All the library-specific variables (install_libdir is set above). 9524e169010aSmrg library_names= 9525e169010aSmrg old_library= 9526e169010aSmrg dlname= 9527e169010aSmrg 9528e169010aSmrg # Test again, we may have decided not to build it any more 95299d0ccd10Smrg if test yes = "$build_libtool_libs"; then 95309d0ccd10Smrg # Remove $wl instances when linking with ld. 9531e6d5e4e0Smrg # FIXME: should test the right _cmds variable. 9532e6d5e4e0Smrg case $archive_cmds in 9533e6d5e4e0Smrg *\$LD\ *) wl= ;; 9534e6d5e4e0Smrg esac 95359d0ccd10Smrg if test yes = "$hardcode_into_libs"; then 9536e169010aSmrg # Hardcode the library paths 9537e169010aSmrg hardcode_libdirs= 9538e169010aSmrg dep_rpath= 95399d0ccd10Smrg rpath=$finalize_rpath 95409d0ccd10Smrg test relink = "$opt_mode" || rpath=$compile_rpath$rpath 9541e169010aSmrg for libdir in $rpath; do 9542e169010aSmrg if test -n "$hardcode_libdir_flag_spec"; then 9543e169010aSmrg if test -n "$hardcode_libdir_separator"; then 9544c63293b5Smrg func_replace_sysroot "$libdir" 9545c63293b5Smrg libdir=$func_replace_sysroot_result 9546e169010aSmrg if test -z "$hardcode_libdirs"; then 95479d0ccd10Smrg hardcode_libdirs=$libdir 9548e169010aSmrg else 9549e169010aSmrg # Just accumulate the unique libdirs. 9550e169010aSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 9551e169010aSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 9552e169010aSmrg ;; 9553e169010aSmrg *) 9554c63293b5Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 9555e169010aSmrg ;; 9556e169010aSmrg esac 9557e169010aSmrg fi 9558e169010aSmrg else 9559e169010aSmrg eval flag=\"$hardcode_libdir_flag_spec\" 9560c63293b5Smrg func_append dep_rpath " $flag" 9561e169010aSmrg fi 9562e169010aSmrg elif test -n "$runpath_var"; then 9563e169010aSmrg case "$perm_rpath " in 9564e169010aSmrg *" $libdir "*) ;; 9565e6d5e4e0Smrg *) func_append perm_rpath " $libdir" ;; 9566e169010aSmrg esac 9567e169010aSmrg fi 9568e169010aSmrg done 9569e169010aSmrg # Substitute the hardcoded libdirs into the rpath. 9570e169010aSmrg if test -n "$hardcode_libdir_separator" && 9571e169010aSmrg test -n "$hardcode_libdirs"; then 95729d0ccd10Smrg libdir=$hardcode_libdirs 9573e6d5e4e0Smrg eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 9574e169010aSmrg fi 9575e169010aSmrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 9576e169010aSmrg # We should set the runpath_var. 9577e169010aSmrg rpath= 9578e169010aSmrg for dir in $perm_rpath; do 9579c63293b5Smrg func_append rpath "$dir:" 9580e169010aSmrg done 9581e169010aSmrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 9582e169010aSmrg fi 9583e169010aSmrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 9584e169010aSmrg fi 95857914d74bSmrg 95869d0ccd10Smrg shlibpath=$finalize_shlibpath 95879d0ccd10Smrg test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath 9588e169010aSmrg if test -n "$shlibpath"; then 9589e169010aSmrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 9590e169010aSmrg fi 95917914d74bSmrg 9592e169010aSmrg # Get the real and link names of the library. 9593e169010aSmrg eval shared_ext=\"$shrext_cmds\" 9594e169010aSmrg eval library_names=\"$library_names_spec\" 9595e169010aSmrg set dummy $library_names 9596e169010aSmrg shift 95979d0ccd10Smrg realname=$1 9598e169010aSmrg shift 95997914d74bSmrg 9600e169010aSmrg if test -n "$soname_spec"; then 9601e169010aSmrg eval soname=\"$soname_spec\" 9602e169010aSmrg else 96039d0ccd10Smrg soname=$realname 9604e169010aSmrg fi 9605e169010aSmrg if test -z "$dlname"; then 9606e169010aSmrg dlname=$soname 9607e169010aSmrg fi 96087914d74bSmrg 96099d0ccd10Smrg lib=$output_objdir/$realname 9610e169010aSmrg linknames= 9611e169010aSmrg for link 9612e169010aSmrg do 9613c63293b5Smrg func_append linknames " $link" 9614e169010aSmrg done 96157914d74bSmrg 9616e169010aSmrg # Use standard objects if they are pic 9617e8ead290Smrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 9618e169010aSmrg test "X$libobjs" = "X " && libobjs= 96197914d74bSmrg 9620e169010aSmrg delfiles= 9621e169010aSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 9622e169010aSmrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 96239d0ccd10Smrg export_symbols=$output_objdir/$libname.uexp 9624c63293b5Smrg func_append delfiles " $export_symbols" 9625e169010aSmrg fi 96267914d74bSmrg 9627e169010aSmrg orig_export_symbols= 9628e169010aSmrg case $host_os in 9629e169010aSmrg cygwin* | mingw* | cegcc*) 9630e169010aSmrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 9631e169010aSmrg # exporting using user supplied symfile 96329d0ccd10Smrg func_dll_def_p "$export_symbols" || { 9633e169010aSmrg # and it's NOT already a .def file. Must figure out 9634e169010aSmrg # which of the given symbols are data symbols and tag 9635e169010aSmrg # them as such. So, trigger use of export_symbols_cmds. 9636e169010aSmrg # export_symbols gets reassigned inside the "prepare 9637e169010aSmrg # the list of exported symbols" if statement, so the 9638e169010aSmrg # include_expsyms logic still works. 96399d0ccd10Smrg orig_export_symbols=$export_symbols 9640e169010aSmrg export_symbols= 9641e169010aSmrg always_export_symbols=yes 96429d0ccd10Smrg } 9643e169010aSmrg fi 9644e169010aSmrg ;; 9645e169010aSmrg esac 96467914d74bSmrg 9647e169010aSmrg # Prepare the list of exported symbols 9648e169010aSmrg if test -z "$export_symbols"; then 96499d0ccd10Smrg if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then 96509d0ccd10Smrg func_verbose "generating symbol list for '$libname.la'" 96519d0ccd10Smrg export_symbols=$output_objdir/$libname.exp 9652e169010aSmrg $opt_dry_run || $RM $export_symbols 9653e169010aSmrg cmds=$export_symbols_cmds 96549d0ccd10Smrg save_ifs=$IFS; IFS='~' 9655c63293b5Smrg for cmd1 in $cmds; do 96569d0ccd10Smrg IFS=$save_ifs 9657c63293b5Smrg # Take the normal branch if the nm_file_list_spec branch 9658c63293b5Smrg # doesn't work or if tool conversion is not needed. 9659c63293b5Smrg case $nm_file_list_spec~$to_tool_file_cmd in 9660c63293b5Smrg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 9661c63293b5Smrg try_normal_branch=yes 9662c63293b5Smrg eval cmd=\"$cmd1\" 9663c63293b5Smrg func_len " $cmd" 9664c63293b5Smrg len=$func_len_result 9665c63293b5Smrg ;; 9666c63293b5Smrg *) 9667c63293b5Smrg try_normal_branch=no 9668c63293b5Smrg ;; 9669c63293b5Smrg esac 96709d0ccd10Smrg if test yes = "$try_normal_branch" \ 9671c63293b5Smrg && { test "$len" -lt "$max_cmd_len" \ 9672c63293b5Smrg || test "$max_cmd_len" -le -1; } 9673c63293b5Smrg then 9674c63293b5Smrg func_show_eval "$cmd" 'exit $?' 9675c63293b5Smrg skipped_export=false 9676c63293b5Smrg elif test -n "$nm_file_list_spec"; then 9677c63293b5Smrg func_basename "$output" 9678c63293b5Smrg output_la=$func_basename_result 9679c63293b5Smrg save_libobjs=$libobjs 9680c63293b5Smrg save_output=$output 96819d0ccd10Smrg output=$output_objdir/$output_la.nm 9682c63293b5Smrg func_to_tool_file "$output" 9683c63293b5Smrg libobjs=$nm_file_list_spec$func_to_tool_file_result 9684c63293b5Smrg func_append delfiles " $output" 9685c63293b5Smrg func_verbose "creating $NM input file list: $output" 9686c63293b5Smrg for obj in $save_libobjs; do 9687c63293b5Smrg func_to_tool_file "$obj" 9688c63293b5Smrg $ECHO "$func_to_tool_file_result" 9689c63293b5Smrg done > "$output" 9690c63293b5Smrg eval cmd=\"$cmd1\" 9691e169010aSmrg func_show_eval "$cmd" 'exit $?' 9692c63293b5Smrg output=$save_output 9693c63293b5Smrg libobjs=$save_libobjs 9694e169010aSmrg skipped_export=false 9695e169010aSmrg else 9696e169010aSmrg # The command line is too long to execute in one step. 9697e169010aSmrg func_verbose "using reloadable object file for export list..." 9698e169010aSmrg skipped_export=: 9699e169010aSmrg # Break out early, otherwise skipped_export may be 9700e169010aSmrg # set to false by a later but shorter cmd. 9701e169010aSmrg break 9702e169010aSmrg fi 9703e169010aSmrg done 97049d0ccd10Smrg IFS=$save_ifs 97059d0ccd10Smrg if test -n "$export_symbols_regex" && test : != "$skipped_export"; then 9706e169010aSmrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 9707e169010aSmrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 9708e169010aSmrg fi 9709e169010aSmrg fi 9710e169010aSmrg fi 97117914d74bSmrg 9712e169010aSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 97139d0ccd10Smrg tmp_export_symbols=$export_symbols 97149d0ccd10Smrg test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 9715e8ead290Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 9716e169010aSmrg fi 97177914d74bSmrg 97189d0ccd10Smrg if test : != "$skipped_export" && test -n "$orig_export_symbols"; then 9719e169010aSmrg # The given exports_symbols file has to be filtered, so filter it. 97209d0ccd10Smrg func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 9721e169010aSmrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 97229d0ccd10Smrg # 's' commands, which not all seds can handle. GNU sed should be fine 9723e169010aSmrg # though. Also, the filter scales superlinearly with the number of 9724e169010aSmrg # global variables. join(1) would be nice here, but unfortunately 9725e169010aSmrg # isn't a blessed tool. 9726e169010aSmrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 9727c63293b5Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 9728e169010aSmrg export_symbols=$output_objdir/$libname.def 9729e169010aSmrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 97307914d74bSmrg fi 97317914d74bSmrg 9732e169010aSmrg tmp_deplibs= 9733e169010aSmrg for test_deplib in $deplibs; do 9734e169010aSmrg case " $convenience " in 9735e169010aSmrg *" $test_deplib "*) ;; 9736e169010aSmrg *) 9737c63293b5Smrg func_append tmp_deplibs " $test_deplib" 9738e169010aSmrg ;; 9739e169010aSmrg esac 9740e169010aSmrg done 97419d0ccd10Smrg deplibs=$tmp_deplibs 97427914d74bSmrg 9743e169010aSmrg if test -n "$convenience"; then 9744e169010aSmrg if test -n "$whole_archive_flag_spec" && 97459d0ccd10Smrg test yes = "$compiler_needs_object" && 9746e169010aSmrg test -z "$libobjs"; then 9747e169010aSmrg # extract the archives, so we have objects to list. 9748e169010aSmrg # TODO: could optimize this to just extract one archive. 9749e169010aSmrg whole_archive_flag_spec= 9750e169010aSmrg fi 9751e169010aSmrg if test -n "$whole_archive_flag_spec"; then 9752e169010aSmrg save_libobjs=$libobjs 9753e169010aSmrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 9754e169010aSmrg test "X$libobjs" = "X " && libobjs= 9755e169010aSmrg else 97569d0ccd10Smrg gentop=$output_objdir/${outputname}x 9757c63293b5Smrg func_append generated " $gentop" 97587914d74bSmrg 9759e169010aSmrg func_extract_archives $gentop $convenience 9760c63293b5Smrg func_append libobjs " $func_extract_archives_result" 9761e169010aSmrg test "X$libobjs" = "X " && libobjs= 9762e169010aSmrg fi 9763e169010aSmrg fi 97647914d74bSmrg 97659d0ccd10Smrg if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then 9766e169010aSmrg eval flag=\"$thread_safe_flag_spec\" 9767c63293b5Smrg func_append linker_flags " $flag" 9768e169010aSmrg fi 97697914d74bSmrg 9770e169010aSmrg # Make a backup of the uninstalled library when relinking 97719d0ccd10Smrg if test relink = "$opt_mode"; then 9772e169010aSmrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 97737914d74bSmrg fi 97747914d74bSmrg 9775e169010aSmrg # Do each of the archive commands. 97769d0ccd10Smrg if test yes = "$module" && test -n "$module_cmds"; then 9777e169010aSmrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 9778e169010aSmrg eval test_cmds=\"$module_expsym_cmds\" 9779e169010aSmrg cmds=$module_expsym_cmds 9780e169010aSmrg else 9781e169010aSmrg eval test_cmds=\"$module_cmds\" 9782e169010aSmrg cmds=$module_cmds 9783e169010aSmrg fi 9784e169010aSmrg else 9785e169010aSmrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 9786e169010aSmrg eval test_cmds=\"$archive_expsym_cmds\" 9787e169010aSmrg cmds=$archive_expsym_cmds 9788e169010aSmrg else 9789e169010aSmrg eval test_cmds=\"$archive_cmds\" 9790e169010aSmrg cmds=$archive_cmds 9791e169010aSmrg fi 97927914d74bSmrg fi 97937914d74bSmrg 97949d0ccd10Smrg if test : != "$skipped_export" && 9795e169010aSmrg func_len " $test_cmds" && 9796e169010aSmrg len=$func_len_result && 9797e169010aSmrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 9798e169010aSmrg : 9799e169010aSmrg else 9800e169010aSmrg # The command line is too long to link in one step, link piecewise 9801e169010aSmrg # or, if using GNU ld and skipped_export is not :, use a linker 9802e169010aSmrg # script. 98037914d74bSmrg 9804e169010aSmrg # Save the value of $output and $libobjs because we want to 9805e169010aSmrg # use them later. If we have whole_archive_flag_spec, we 9806e169010aSmrg # want to use save_libobjs as it was before 9807e169010aSmrg # whole_archive_flag_spec was expanded, because we can't 9808e169010aSmrg # assume the linker understands whole_archive_flag_spec. 9809e169010aSmrg # This may have to be revisited, in case too many 9810e169010aSmrg # convenience libraries get linked in and end up exceeding 9811e169010aSmrg # the spec. 9812e169010aSmrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 9813e169010aSmrg save_libobjs=$libobjs 9814e169010aSmrg fi 9815e169010aSmrg save_output=$output 9816e8ead290Smrg func_basename "$output" 9817e8ead290Smrg output_la=$func_basename_result 98187914d74bSmrg 9819e169010aSmrg # Clear the reloadable object creation command queue and 9820e169010aSmrg # initialize k to one. 9821e169010aSmrg test_cmds= 9822e169010aSmrg concat_cmds= 9823e169010aSmrg objlist= 9824e169010aSmrg last_robj= 9825e169010aSmrg k=1 98267914d74bSmrg 98279d0ccd10Smrg if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then 98289d0ccd10Smrg output=$output_objdir/$output_la.lnkscript 9829e169010aSmrg func_verbose "creating GNU ld script: $output" 9830e8ead290Smrg echo 'INPUT (' > $output 9831e169010aSmrg for obj in $save_libobjs 9832e169010aSmrg do 9833c63293b5Smrg func_to_tool_file "$obj" 9834c63293b5Smrg $ECHO "$func_to_tool_file_result" >> $output 9835e169010aSmrg done 9836e8ead290Smrg echo ')' >> $output 9837c63293b5Smrg func_append delfiles " $output" 9838c63293b5Smrg func_to_tool_file "$output" 9839c63293b5Smrg output=$func_to_tool_file_result 98409d0ccd10Smrg elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then 98419d0ccd10Smrg output=$output_objdir/$output_la.lnk 9842e169010aSmrg func_verbose "creating linker input file list: $output" 9843e169010aSmrg : > $output 9844e169010aSmrg set x $save_libobjs 9845e169010aSmrg shift 9846e169010aSmrg firstobj= 98479d0ccd10Smrg if test yes = "$compiler_needs_object"; then 9848e169010aSmrg firstobj="$1 " 9849e169010aSmrg shift 9850e169010aSmrg fi 9851e169010aSmrg for obj 9852e169010aSmrg do 9853c63293b5Smrg func_to_tool_file "$obj" 9854c63293b5Smrg $ECHO "$func_to_tool_file_result" >> $output 9855e169010aSmrg done 9856c63293b5Smrg func_append delfiles " $output" 9857c63293b5Smrg func_to_tool_file "$output" 9858c63293b5Smrg output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 9859e169010aSmrg else 9860e169010aSmrg if test -n "$save_libobjs"; then 9861e169010aSmrg func_verbose "creating reloadable object files..." 98629d0ccd10Smrg output=$output_objdir/$output_la-$k.$objext 9863e169010aSmrg eval test_cmds=\"$reload_cmds\" 9864e169010aSmrg func_len " $test_cmds" 9865e169010aSmrg len0=$func_len_result 9866e169010aSmrg len=$len0 9867e169010aSmrg 9868e169010aSmrg # Loop over the list of objects to be linked. 9869e169010aSmrg for obj in $save_libobjs 9870e169010aSmrg do 9871e169010aSmrg func_len " $obj" 9872e169010aSmrg func_arith $len + $func_len_result 9873e169010aSmrg len=$func_arith_result 98749d0ccd10Smrg if test -z "$objlist" || 9875e169010aSmrg test "$len" -lt "$max_cmd_len"; then 9876e169010aSmrg func_append objlist " $obj" 9877e169010aSmrg else 9878e169010aSmrg # The command $test_cmds is almost too long, add a 9879e169010aSmrg # command to the queue. 98809d0ccd10Smrg if test 1 -eq "$k"; then 9881e169010aSmrg # The first file doesn't have a previous command to add. 9882e8ead290Smrg reload_objs=$objlist 9883e8ead290Smrg eval concat_cmds=\"$reload_cmds\" 9884e169010aSmrg else 9885e169010aSmrg # All subsequent reloadable object files will link in 9886e169010aSmrg # the last one created. 9887e8ead290Smrg reload_objs="$objlist $last_robj" 9888e8ead290Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 9889e169010aSmrg fi 98909d0ccd10Smrg last_robj=$output_objdir/$output_la-$k.$objext 9891e169010aSmrg func_arith $k + 1 9892e169010aSmrg k=$func_arith_result 98939d0ccd10Smrg output=$output_objdir/$output_la-$k.$objext 9894e8ead290Smrg objlist=" $obj" 9895e169010aSmrg func_len " $last_robj" 9896e169010aSmrg func_arith $len0 + $func_len_result 9897e169010aSmrg len=$func_arith_result 9898e169010aSmrg fi 9899e169010aSmrg done 9900e169010aSmrg # Handle the remaining objects by creating one last 9901e169010aSmrg # reloadable object file. All subsequent reloadable object 9902e169010aSmrg # files will link in the last one created. 9903e169010aSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9904e8ead290Smrg reload_objs="$objlist $last_robj" 99059d0ccd10Smrg eval concat_cmds=\"\$concat_cmds$reload_cmds\" 9906e169010aSmrg if test -n "$last_robj"; then 99079d0ccd10Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 9908e169010aSmrg fi 9909c63293b5Smrg func_append delfiles " $output" 99107914d74bSmrg 9911e169010aSmrg else 9912e169010aSmrg output= 9913e169010aSmrg fi 99147914d74bSmrg 99159d0ccd10Smrg ${skipped_export-false} && { 99169d0ccd10Smrg func_verbose "generating symbol list for '$libname.la'" 99179d0ccd10Smrg export_symbols=$output_objdir/$libname.exp 9918e169010aSmrg $opt_dry_run || $RM $export_symbols 9919e169010aSmrg libobjs=$output 9920e169010aSmrg # Append the command to create the export file. 9921e169010aSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9922e169010aSmrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 9923e169010aSmrg if test -n "$last_robj"; then 9924e169010aSmrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 9925e169010aSmrg fi 99269d0ccd10Smrg } 99277914d74bSmrg 9928e169010aSmrg test -n "$save_libobjs" && 9929e169010aSmrg func_verbose "creating a temporary reloadable object file: $output" 99307914d74bSmrg 9931e169010aSmrg # Loop through the commands generated above and execute them. 99329d0ccd10Smrg save_ifs=$IFS; IFS='~' 9933e169010aSmrg for cmd in $concat_cmds; do 99349d0ccd10Smrg IFS=$save_ifs 99359d0ccd10Smrg $opt_quiet || { 9936e169010aSmrg func_quote_for_expand "$cmd" 9937e169010aSmrg eval "func_echo $func_quote_for_expand_result" 9938e169010aSmrg } 9939e169010aSmrg $opt_dry_run || eval "$cmd" || { 9940e169010aSmrg lt_exit=$? 9941e169010aSmrg 9942e169010aSmrg # Restore the uninstalled library and exit 99439d0ccd10Smrg if test relink = "$opt_mode"; then 9944e169010aSmrg ( cd "$output_objdir" && \ 9945e169010aSmrg $RM "${realname}T" && \ 9946e169010aSmrg $MV "${realname}U" "$realname" ) 9947e169010aSmrg fi 99487914d74bSmrg 9949e169010aSmrg exit $lt_exit 9950e169010aSmrg } 9951e169010aSmrg done 99529d0ccd10Smrg IFS=$save_ifs 9953e169010aSmrg 9954e169010aSmrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 9955e169010aSmrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 9956e169010aSmrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 99577914d74bSmrg fi 99587914d74bSmrg fi 99597914d74bSmrg 99609d0ccd10Smrg ${skipped_export-false} && { 9961e169010aSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 99629d0ccd10Smrg tmp_export_symbols=$export_symbols 99639d0ccd10Smrg test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 9964e8ead290Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 9965e169010aSmrg fi 99667914d74bSmrg 9967e169010aSmrg if test -n "$orig_export_symbols"; then 9968e169010aSmrg # The given exports_symbols file has to be filtered, so filter it. 99699d0ccd10Smrg func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 9970e169010aSmrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 99719d0ccd10Smrg # 's' commands, which not all seds can handle. GNU sed should be fine 9972e169010aSmrg # though. Also, the filter scales superlinearly with the number of 9973e169010aSmrg # global variables. join(1) would be nice here, but unfortunately 9974e169010aSmrg # isn't a blessed tool. 9975e169010aSmrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 9976c63293b5Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 9977e169010aSmrg export_symbols=$output_objdir/$libname.def 9978e169010aSmrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 9979e169010aSmrg fi 99809d0ccd10Smrg } 99817914d74bSmrg 9982e169010aSmrg libobjs=$output 9983e169010aSmrg # Restore the value of output. 9984e169010aSmrg output=$save_output 99857914d74bSmrg 9986e169010aSmrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 9987e169010aSmrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 9988e169010aSmrg test "X$libobjs" = "X " && libobjs= 9989e169010aSmrg fi 9990e169010aSmrg # Expand the library linking commands again to reset the 9991e169010aSmrg # value of $libobjs for piecewise linking. 9992e169010aSmrg 9993e169010aSmrg # Do each of the archive commands. 99949d0ccd10Smrg if test yes = "$module" && test -n "$module_cmds"; then 9995e169010aSmrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 9996e169010aSmrg cmds=$module_expsym_cmds 99977914d74bSmrg else 9998e169010aSmrg cmds=$module_cmds 99997914d74bSmrg fi 100007914d74bSmrg else 10001e169010aSmrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 10002e169010aSmrg cmds=$archive_expsym_cmds 10003e169010aSmrg else 10004e169010aSmrg cmds=$archive_cmds 10005e169010aSmrg fi 100067914d74bSmrg fi 100077914d74bSmrg fi 100087914d74bSmrg 10009e169010aSmrg if test -n "$delfiles"; then 10010e169010aSmrg # Append the command to remove temporary files to $cmds. 10011e169010aSmrg eval cmds=\"\$cmds~\$RM $delfiles\" 10012e169010aSmrg fi 100137914d74bSmrg 10014e169010aSmrg # Add any objects from preloaded convenience libraries 10015e169010aSmrg if test -n "$dlprefiles"; then 100169d0ccd10Smrg gentop=$output_objdir/${outputname}x 10017c63293b5Smrg func_append generated " $gentop" 100187914d74bSmrg 10019e169010aSmrg func_extract_archives $gentop $dlprefiles 10020c63293b5Smrg func_append libobjs " $func_extract_archives_result" 10021e169010aSmrg test "X$libobjs" = "X " && libobjs= 100227914d74bSmrg fi 100237914d74bSmrg 100249d0ccd10Smrg save_ifs=$IFS; IFS='~' 10025e169010aSmrg for cmd in $cmds; do 100269d0ccd10Smrg IFS=$sp$nl 10027e169010aSmrg eval cmd=\"$cmd\" 100289d0ccd10Smrg IFS=$save_ifs 100299d0ccd10Smrg $opt_quiet || { 10030e169010aSmrg func_quote_for_expand "$cmd" 10031e169010aSmrg eval "func_echo $func_quote_for_expand_result" 10032e169010aSmrg } 10033e169010aSmrg $opt_dry_run || eval "$cmd" || { 10034e169010aSmrg lt_exit=$? 100357914d74bSmrg 10036e169010aSmrg # Restore the uninstalled library and exit 100379d0ccd10Smrg if test relink = "$opt_mode"; then 10038e169010aSmrg ( cd "$output_objdir" && \ 10039e169010aSmrg $RM "${realname}T" && \ 10040e169010aSmrg $MV "${realname}U" "$realname" ) 10041e169010aSmrg fi 10042e169010aSmrg 10043e169010aSmrg exit $lt_exit 10044e169010aSmrg } 10045e169010aSmrg done 100469d0ccd10Smrg IFS=$save_ifs 10047e169010aSmrg 10048e169010aSmrg # Restore the uninstalled library and exit 100499d0ccd10Smrg if test relink = "$opt_mode"; then 10050e169010aSmrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 10051e169010aSmrg 10052e169010aSmrg if test -n "$convenience"; then 10053e169010aSmrg if test -z "$whole_archive_flag_spec"; then 10054e169010aSmrg func_show_eval '${RM}r "$gentop"' 100557914d74bSmrg fi 100567914d74bSmrg fi 100577914d74bSmrg 10058e169010aSmrg exit $EXIT_SUCCESS 10059e169010aSmrg fi 100607914d74bSmrg 10061e169010aSmrg # Create links to the real library. 10062e169010aSmrg for linkname in $linknames; do 10063e169010aSmrg if test "$realname" != "$linkname"; then 10064e169010aSmrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 10065e169010aSmrg fi 10066e169010aSmrg done 10067e169010aSmrg 10068e169010aSmrg # If -module or -export-dynamic was specified, set the dlname. 100699d0ccd10Smrg if test yes = "$module" || test yes = "$export_dynamic"; then 10070e169010aSmrg # On all known operating systems, these are identical. 100719d0ccd10Smrg dlname=$soname 10072e169010aSmrg fi 10073e169010aSmrg fi 10074e169010aSmrg ;; 10075e169010aSmrg 10076e169010aSmrg obj) 100779d0ccd10Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 100789d0ccd10Smrg func_warning "'-dlopen' is ignored for objects" 10079e169010aSmrg fi 10080e169010aSmrg 10081e169010aSmrg case " $deplibs" in 10082e169010aSmrg *\ -l* | *\ -L*) 100839d0ccd10Smrg func_warning "'-l' and '-L' are ignored for objects" ;; 10084e169010aSmrg esac 10085e169010aSmrg 10086e169010aSmrg test -n "$rpath" && \ 100879d0ccd10Smrg func_warning "'-rpath' is ignored for objects" 10088e169010aSmrg 10089e169010aSmrg test -n "$xrpath" && \ 100909d0ccd10Smrg func_warning "'-R' is ignored for objects" 10091e169010aSmrg 10092e169010aSmrg test -n "$vinfo" && \ 100939d0ccd10Smrg func_warning "'-version-info' is ignored for objects" 10094e169010aSmrg 10095e169010aSmrg test -n "$release" && \ 100969d0ccd10Smrg func_warning "'-release' is ignored for objects" 10097e169010aSmrg 10098e169010aSmrg case $output in 10099e169010aSmrg *.lo) 10100e169010aSmrg test -n "$objs$old_deplibs" && \ 101019d0ccd10Smrg func_fatal_error "cannot build library object '$output' from non-libtool objects" 10102e169010aSmrg 10103e169010aSmrg libobj=$output 10104e169010aSmrg func_lo2o "$libobj" 10105e169010aSmrg obj=$func_lo2o_result 10106e169010aSmrg ;; 10107e169010aSmrg *) 10108e169010aSmrg libobj= 101099d0ccd10Smrg obj=$output 10110e169010aSmrg ;; 10111e169010aSmrg esac 10112e169010aSmrg 10113e169010aSmrg # Delete the old objects. 10114e169010aSmrg $opt_dry_run || $RM $obj $libobj 10115e169010aSmrg 10116e169010aSmrg # Objects from convenience libraries. This assumes 10117e169010aSmrg # single-version convenience libraries. Whenever we create 10118e169010aSmrg # different ones for PIC/non-PIC, this we'll have to duplicate 10119e169010aSmrg # the extraction. 10120e169010aSmrg reload_conv_objs= 10121e169010aSmrg gentop= 101229d0ccd10Smrg # if reload_cmds runs $LD directly, get rid of -Wl from 101239d0ccd10Smrg # whole_archive_flag_spec and hope we can get by with turning comma 101249d0ccd10Smrg # into space. 101259d0ccd10Smrg case $reload_cmds in 101269d0ccd10Smrg *\$LD[\ \$]*) wl= ;; 101279d0ccd10Smrg esac 10128e169010aSmrg if test -n "$convenience"; then 10129e169010aSmrg if test -n "$whole_archive_flag_spec"; then 10130e169010aSmrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 101319d0ccd10Smrg test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 101329d0ccd10Smrg reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags 10133e169010aSmrg else 101349d0ccd10Smrg gentop=$output_objdir/${obj}x 10135c63293b5Smrg func_append generated " $gentop" 10136e169010aSmrg 10137e169010aSmrg func_extract_archives $gentop $convenience 10138e169010aSmrg reload_conv_objs="$reload_objs $func_extract_archives_result" 10139e169010aSmrg fi 10140e169010aSmrg fi 101417914d74bSmrg 10142c63293b5Smrg # If we're not building shared, we need to use non_pic_objs 101439d0ccd10Smrg test yes = "$build_libtool_libs" || libobjs=$non_pic_objects 10144c63293b5Smrg 10145e169010aSmrg # Create the old-style object. 101469d0ccd10Smrg reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs 101477914d74bSmrg 101489d0ccd10Smrg output=$obj 10149e169010aSmrg func_execute_cmds "$reload_cmds" 'exit $?' 101507914d74bSmrg 10151e169010aSmrg # Exit if we aren't doing a library object file. 10152e169010aSmrg if test -z "$libobj"; then 10153e169010aSmrg if test -n "$gentop"; then 10154e169010aSmrg func_show_eval '${RM}r "$gentop"' 10155e169010aSmrg fi 101567914d74bSmrg 10157e169010aSmrg exit $EXIT_SUCCESS 10158e169010aSmrg fi 101597914d74bSmrg 101609d0ccd10Smrg test yes = "$build_libtool_libs" || { 10161e169010aSmrg if test -n "$gentop"; then 10162e169010aSmrg func_show_eval '${RM}r "$gentop"' 10163e169010aSmrg fi 101647914d74bSmrg 10165e169010aSmrg # Create an invalid libtool object if no PIC, so that we don't 10166e169010aSmrg # accidentally link it into a program. 10167e169010aSmrg # $show "echo timestamp > $libobj" 10168e169010aSmrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 10169e169010aSmrg exit $EXIT_SUCCESS 101709d0ccd10Smrg } 101717914d74bSmrg 101729d0ccd10Smrg if test -n "$pic_flag" || test default != "$pic_mode"; then 10173e169010aSmrg # Only do commands if we really have different PIC objects. 10174e169010aSmrg reload_objs="$libobjs $reload_conv_objs" 101759d0ccd10Smrg output=$libobj 10176e169010aSmrg func_execute_cmds "$reload_cmds" 'exit $?' 101777914d74bSmrg fi 101787914d74bSmrg 10179e169010aSmrg if test -n "$gentop"; then 10180e169010aSmrg func_show_eval '${RM}r "$gentop"' 10181e169010aSmrg fi 101827914d74bSmrg 10183e169010aSmrg exit $EXIT_SUCCESS 10184e169010aSmrg ;; 101857914d74bSmrg 10186e169010aSmrg prog) 10187e169010aSmrg case $host in 10188e169010aSmrg *cygwin*) func_stripname '' '.exe' "$output" 10189e169010aSmrg output=$func_stripname_result.exe;; 101907914d74bSmrg esac 10191e169010aSmrg test -n "$vinfo" && \ 101929d0ccd10Smrg func_warning "'-version-info' is ignored for programs" 101937914d74bSmrg 10194e169010aSmrg test -n "$release" && \ 101959d0ccd10Smrg func_warning "'-release' is ignored for programs" 101967914d74bSmrg 101979d0ccd10Smrg $preload \ 101989d0ccd10Smrg && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ 101999d0ccd10Smrg && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." 102007914d74bSmrg 10201e169010aSmrg case $host in 10202e169010aSmrg *-*-rhapsody* | *-*-darwin1.[012]) 10203e169010aSmrg # On Rhapsody replace the C library is the System framework 10204e8ead290Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 10205e8ead290Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 102067914d74bSmrg ;; 102077914d74bSmrg esac 102087914d74bSmrg 10209e169010aSmrg case $host in 10210e169010aSmrg *-*-darwin*) 10211e169010aSmrg # Don't allow lazy linking, it breaks C++ global constructors 10212e169010aSmrg # But is supposedly fixed on 10.4 or later (yay!). 102139d0ccd10Smrg if test CXX = "$tagname"; then 10214e169010aSmrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10215e169010aSmrg 10.[0123]) 102169d0ccd10Smrg func_append compile_command " $wl-bind_at_load" 102179d0ccd10Smrg func_append finalize_command " $wl-bind_at_load" 10218e169010aSmrg ;; 10219e169010aSmrg esac 10220e169010aSmrg fi 10221e169010aSmrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 10222e8ead290Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10223e8ead290Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 102247914d74bSmrg ;; 102257914d74bSmrg esac 102267914d74bSmrg 102277914d74bSmrg 10228e169010aSmrg # move library search paths that coincide with paths to not yet 10229e169010aSmrg # installed libraries to the beginning of the library search list 10230e169010aSmrg new_libs= 10231e169010aSmrg for path in $notinst_path; do 10232e169010aSmrg case " $new_libs " in 10233e169010aSmrg *" -L$path/$objdir "*) ;; 102347914d74bSmrg *) 10235e169010aSmrg case " $compile_deplibs " in 10236e169010aSmrg *" -L$path/$objdir "*) 10237c63293b5Smrg func_append new_libs " -L$path/$objdir" ;; 10238e169010aSmrg esac 102397914d74bSmrg ;; 102407914d74bSmrg esac 102417914d74bSmrg done 10242e169010aSmrg for deplib in $compile_deplibs; do 10243e169010aSmrg case $deplib in 10244e169010aSmrg -L*) 10245e169010aSmrg case " $new_libs " in 10246e169010aSmrg *" $deplib "*) ;; 10247c63293b5Smrg *) func_append new_libs " $deplib" ;; 10248e169010aSmrg esac 10249e169010aSmrg ;; 10250c63293b5Smrg *) func_append new_libs " $deplib" ;; 10251e169010aSmrg esac 10252e169010aSmrg done 102539d0ccd10Smrg compile_deplibs=$new_libs 102547914d74bSmrg 102557914d74bSmrg 10256c63293b5Smrg func_append compile_command " $compile_deplibs" 10257c63293b5Smrg func_append finalize_command " $finalize_deplibs" 102587914d74bSmrg 10259e169010aSmrg if test -n "$rpath$xrpath"; then 10260e169010aSmrg # If the user specified any rpath flags, then add them. 10261e169010aSmrg for libdir in $rpath $xrpath; do 10262e169010aSmrg # This is the magic to use -rpath. 10263e169010aSmrg case "$finalize_rpath " in 10264e169010aSmrg *" $libdir "*) ;; 10265c63293b5Smrg *) func_append finalize_rpath " $libdir" ;; 10266e169010aSmrg esac 10267e169010aSmrg done 10268e169010aSmrg fi 102697914d74bSmrg 10270e169010aSmrg # Now hardcode the library paths 10271e169010aSmrg rpath= 10272e169010aSmrg hardcode_libdirs= 10273e169010aSmrg for libdir in $compile_rpath $finalize_rpath; do 10274e169010aSmrg if test -n "$hardcode_libdir_flag_spec"; then 10275e169010aSmrg if test -n "$hardcode_libdir_separator"; then 10276e169010aSmrg if test -z "$hardcode_libdirs"; then 102779d0ccd10Smrg hardcode_libdirs=$libdir 10278e169010aSmrg else 10279e169010aSmrg # Just accumulate the unique libdirs. 10280e169010aSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10281e169010aSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10282e169010aSmrg ;; 10283e169010aSmrg *) 10284c63293b5Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10285e169010aSmrg ;; 10286e169010aSmrg esac 10287e169010aSmrg fi 10288e169010aSmrg else 10289e169010aSmrg eval flag=\"$hardcode_libdir_flag_spec\" 10290c63293b5Smrg func_append rpath " $flag" 10291e169010aSmrg fi 10292e169010aSmrg elif test -n "$runpath_var"; then 10293e169010aSmrg case "$perm_rpath " in 102947914d74bSmrg *" $libdir "*) ;; 10295c63293b5Smrg *) func_append perm_rpath " $libdir" ;; 102967914d74bSmrg esac 10297e169010aSmrg fi 10298e169010aSmrg case $host in 10299e169010aSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 103009d0ccd10Smrg testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` 10301e169010aSmrg case :$dllsearchpath: in 10302e169010aSmrg *":$libdir:"*) ;; 10303e169010aSmrg ::) dllsearchpath=$libdir;; 10304c63293b5Smrg *) func_append dllsearchpath ":$libdir";; 10305e169010aSmrg esac 10306e169010aSmrg case :$dllsearchpath: in 10307e169010aSmrg *":$testbindir:"*) ;; 10308e169010aSmrg ::) dllsearchpath=$testbindir;; 10309c63293b5Smrg *) func_append dllsearchpath ":$testbindir";; 10310e169010aSmrg esac 10311e169010aSmrg ;; 10312e169010aSmrg esac 10313e169010aSmrg done 10314e169010aSmrg # Substitute the hardcoded libdirs into the rpath. 10315e169010aSmrg if test -n "$hardcode_libdir_separator" && 10316e169010aSmrg test -n "$hardcode_libdirs"; then 103179d0ccd10Smrg libdir=$hardcode_libdirs 10318e169010aSmrg eval rpath=\" $hardcode_libdir_flag_spec\" 10319e169010aSmrg fi 103209d0ccd10Smrg compile_rpath=$rpath 10321e169010aSmrg 10322e169010aSmrg rpath= 10323e169010aSmrg hardcode_libdirs= 10324e169010aSmrg for libdir in $finalize_rpath; do 10325e169010aSmrg if test -n "$hardcode_libdir_flag_spec"; then 10326e169010aSmrg if test -n "$hardcode_libdir_separator"; then 10327e169010aSmrg if test -z "$hardcode_libdirs"; then 103289d0ccd10Smrg hardcode_libdirs=$libdir 10329e169010aSmrg else 10330e169010aSmrg # Just accumulate the unique libdirs. 10331e169010aSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10332e169010aSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10333e169010aSmrg ;; 10334e169010aSmrg *) 10335c63293b5Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10336e169010aSmrg ;; 10337e169010aSmrg esac 10338e169010aSmrg fi 10339e169010aSmrg else 10340e169010aSmrg eval flag=\"$hardcode_libdir_flag_spec\" 10341c63293b5Smrg func_append rpath " $flag" 10342e169010aSmrg fi 10343e169010aSmrg elif test -n "$runpath_var"; then 10344e169010aSmrg case "$finalize_perm_rpath " in 103457914d74bSmrg *" $libdir "*) ;; 10346c63293b5Smrg *) func_append finalize_perm_rpath " $libdir" ;; 103477914d74bSmrg esac 103487914d74bSmrg fi 10349e169010aSmrg done 10350e169010aSmrg # Substitute the hardcoded libdirs into the rpath. 10351e169010aSmrg if test -n "$hardcode_libdir_separator" && 10352e169010aSmrg test -n "$hardcode_libdirs"; then 103539d0ccd10Smrg libdir=$hardcode_libdirs 10354e169010aSmrg eval rpath=\" $hardcode_libdir_flag_spec\" 10355e169010aSmrg fi 103569d0ccd10Smrg finalize_rpath=$rpath 103577914d74bSmrg 103589d0ccd10Smrg if test -n "$libobjs" && test yes = "$build_old_libs"; then 10359e169010aSmrg # Transform all the library objects into standard objects. 10360e8ead290Smrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10361e8ead290Smrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10362e169010aSmrg fi 103637914d74bSmrg 103649d0ccd10Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" false 103657914d74bSmrg 10366e169010aSmrg # template prelinking step 10367e169010aSmrg if test -n "$prelink_cmds"; then 10368e169010aSmrg func_execute_cmds "$prelink_cmds" 'exit $?' 10369e169010aSmrg fi 103707914d74bSmrg 103719d0ccd10Smrg wrappers_required=: 10372e169010aSmrg case $host in 10373e8ead290Smrg *cegcc* | *mingw32ce*) 10374e8ead290Smrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 103759d0ccd10Smrg wrappers_required=false 10376e8ead290Smrg ;; 10377e169010aSmrg *cygwin* | *mingw* ) 103789d0ccd10Smrg test yes = "$build_libtool_libs" || wrappers_required=false 10379e169010aSmrg ;; 10380e169010aSmrg *) 103819d0ccd10Smrg if test no = "$need_relink" || test yes != "$build_libtool_libs"; then 103829d0ccd10Smrg wrappers_required=false 10383e169010aSmrg fi 10384e169010aSmrg ;; 10385e169010aSmrg esac 103869d0ccd10Smrg $wrappers_required || { 10387e169010aSmrg # Replace the output file specification. 10388e8ead290Smrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 103899d0ccd10Smrg link_command=$compile_command$compile_rpath 103907914d74bSmrg 10391e169010aSmrg # We have no uninstalled library dependencies, so finalize right now. 10392e169010aSmrg exit_status=0 10393e169010aSmrg func_show_eval "$link_command" 'exit_status=$?' 103947914d74bSmrg 10395c63293b5Smrg if test -n "$postlink_cmds"; then 10396c63293b5Smrg func_to_tool_file "$output" 10397c63293b5Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10398c63293b5Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 10399c63293b5Smrg fi 10400c63293b5Smrg 10401e169010aSmrg # Delete the generated files. 104029d0ccd10Smrg if test -f "$output_objdir/${outputname}S.$objext"; then 104039d0ccd10Smrg func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' 10404e169010aSmrg fi 104057914d74bSmrg 10406e169010aSmrg exit $exit_status 104079d0ccd10Smrg } 104087914d74bSmrg 10409e169010aSmrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 10410e169010aSmrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 10411e169010aSmrg fi 10412e169010aSmrg if test -n "$finalize_shlibpath"; then 10413e169010aSmrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 10414e169010aSmrg fi 104157914d74bSmrg 10416e169010aSmrg compile_var= 10417e169010aSmrg finalize_var= 10418e169010aSmrg if test -n "$runpath_var"; then 10419e169010aSmrg if test -n "$perm_rpath"; then 10420e169010aSmrg # We should set the runpath_var. 10421e169010aSmrg rpath= 10422e169010aSmrg for dir in $perm_rpath; do 10423c63293b5Smrg func_append rpath "$dir:" 104247914d74bSmrg done 10425e169010aSmrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 104267914d74bSmrg fi 10427e169010aSmrg if test -n "$finalize_perm_rpath"; then 10428e169010aSmrg # We should set the runpath_var. 10429e169010aSmrg rpath= 10430e169010aSmrg for dir in $finalize_perm_rpath; do 10431c63293b5Smrg func_append rpath "$dir:" 10432e169010aSmrg done 10433e169010aSmrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 10434e169010aSmrg fi 10435e169010aSmrg fi 104367914d74bSmrg 104379d0ccd10Smrg if test yes = "$no_install"; then 10438e169010aSmrg # We don't need to create a wrapper script. 104399d0ccd10Smrg link_command=$compile_var$compile_command$compile_rpath 10440e169010aSmrg # Replace the output file specification. 10441e8ead290Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10442e169010aSmrg # Delete the old output file. 10443e169010aSmrg $opt_dry_run || $RM $output 10444e169010aSmrg # Link the executable and exit 10445e169010aSmrg func_show_eval "$link_command" 'exit $?' 10446c63293b5Smrg 10447c63293b5Smrg if test -n "$postlink_cmds"; then 10448c63293b5Smrg func_to_tool_file "$output" 10449c63293b5Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10450c63293b5Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 10451c63293b5Smrg fi 10452c63293b5Smrg 10453e169010aSmrg exit $EXIT_SUCCESS 10454e169010aSmrg fi 104557914d74bSmrg 104569d0ccd10Smrg case $hardcode_action,$fast_install in 104579d0ccd10Smrg relink,*) 104589d0ccd10Smrg # Fast installation is not supported 104599d0ccd10Smrg link_command=$compile_var$compile_command$compile_rpath 104609d0ccd10Smrg relink_command=$finalize_var$finalize_command$finalize_rpath 104617914d74bSmrg 104629d0ccd10Smrg func_warning "this platform does not like uninstalled shared libraries" 104639d0ccd10Smrg func_warning "'$output' will be relinked during installation" 104649d0ccd10Smrg ;; 104659d0ccd10Smrg *,yes) 104669d0ccd10Smrg link_command=$finalize_var$compile_command$finalize_rpath 104679d0ccd10Smrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 104689d0ccd10Smrg ;; 104699d0ccd10Smrg *,no) 104709d0ccd10Smrg link_command=$compile_var$compile_command$compile_rpath 104719d0ccd10Smrg relink_command=$finalize_var$finalize_command$finalize_rpath 104729d0ccd10Smrg ;; 104739d0ccd10Smrg *,needless) 104749d0ccd10Smrg link_command=$finalize_var$compile_command$finalize_rpath 104759d0ccd10Smrg relink_command= 104769d0ccd10Smrg ;; 104779d0ccd10Smrg esac 104787914d74bSmrg 10479e169010aSmrg # Replace the output file specification. 10480e8ead290Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 104817914d74bSmrg 10482e169010aSmrg # Delete the old output files. 10483e169010aSmrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 104847914d74bSmrg 10485e169010aSmrg func_show_eval "$link_command" 'exit $?' 104867914d74bSmrg 10487c63293b5Smrg if test -n "$postlink_cmds"; then 10488c63293b5Smrg func_to_tool_file "$output_objdir/$outputname" 10489c63293b5Smrg 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'` 10490c63293b5Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 10491c63293b5Smrg fi 10492c63293b5Smrg 10493e169010aSmrg # Now create the wrapper script. 10494e169010aSmrg func_verbose "creating $output" 104957914d74bSmrg 10496e169010aSmrg # Quote the relink command for shipping. 10497e169010aSmrg if test -n "$relink_command"; then 10498e169010aSmrg # Preserve any variables that may affect compiler behavior 10499e169010aSmrg for var in $variables_saved_for_relink; do 10500e169010aSmrg if eval test -z \"\${$var+set}\"; then 10501e169010aSmrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 10502e169010aSmrg elif eval var_value=\$$var; test -z "$var_value"; then 10503e169010aSmrg relink_command="$var=; export $var; $relink_command" 10504e169010aSmrg else 10505e169010aSmrg func_quote_for_eval "$var_value" 10506e169010aSmrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 10507e169010aSmrg fi 10508e169010aSmrg done 10509e169010aSmrg relink_command="(cd `pwd`; $relink_command)" 10510e8ead290Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 10511e169010aSmrg fi 105127914d74bSmrg 10513e169010aSmrg # Only actually do things if not in dry run mode. 10514e169010aSmrg $opt_dry_run || { 10515e169010aSmrg # win32 will think the script is a binary if it has 10516e169010aSmrg # a .exe suffix, so we strip it off here. 10517e169010aSmrg case $output in 10518e169010aSmrg *.exe) func_stripname '' '.exe' "$output" 10519e169010aSmrg output=$func_stripname_result ;; 10520e169010aSmrg esac 10521e169010aSmrg # test for cygwin because mv fails w/o .exe extensions 105227914d74bSmrg case $host in 10523e169010aSmrg *cygwin*) 10524e169010aSmrg exeext=.exe 10525e169010aSmrg func_stripname '' '.exe' "$outputname" 10526e169010aSmrg outputname=$func_stripname_result ;; 10527e169010aSmrg *) exeext= ;; 105287914d74bSmrg esac 10529e169010aSmrg case $host in 10530e169010aSmrg *cygwin* | *mingw* ) 10531e169010aSmrg func_dirname_and_basename "$output" "" "." 10532e169010aSmrg output_name=$func_basename_result 10533e169010aSmrg output_path=$func_dirname_result 105349d0ccd10Smrg cwrappersource=$output_path/$objdir/lt-$output_name.c 105359d0ccd10Smrg cwrapper=$output_path/$output_name.exe 10536e169010aSmrg $RM $cwrappersource $cwrapper 10537e169010aSmrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 10538e169010aSmrg 10539e169010aSmrg func_emit_cwrapperexe_src > $cwrappersource 10540e169010aSmrg 10541e169010aSmrg # The wrapper executable is built using the $host compiler, 10542e169010aSmrg # because it contains $host paths and files. If cross- 10543e169010aSmrg # compiling, it, like the target executable, must be 10544e169010aSmrg # executed on the $host or under an emulation environment. 10545e169010aSmrg $opt_dry_run || { 10546e169010aSmrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 10547e169010aSmrg $STRIP $cwrapper 10548e169010aSmrg } 105497914d74bSmrg 10550e169010aSmrg # Now, create the wrapper script for func_source use: 10551e169010aSmrg func_ltwrapper_scriptname $cwrapper 10552e169010aSmrg $RM $func_ltwrapper_scriptname_result 10553e169010aSmrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 10554e169010aSmrg $opt_dry_run || { 10555e169010aSmrg # note: this script will not be executed, so do not chmod. 105569d0ccd10Smrg if test "x$build" = "x$host"; then 10557e169010aSmrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 105587914d74bSmrg else 10559e169010aSmrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 105607914d74bSmrg fi 10561e169010aSmrg } 10562e169010aSmrg ;; 10563e169010aSmrg * ) 10564e169010aSmrg $RM $output 10565e169010aSmrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 105667914d74bSmrg 10567e169010aSmrg func_emit_wrapper no > $output 10568e169010aSmrg chmod +x $output 105697914d74bSmrg ;; 105707914d74bSmrg esac 10571e169010aSmrg } 10572e169010aSmrg exit $EXIT_SUCCESS 10573e169010aSmrg ;; 10574e169010aSmrg esac 105757914d74bSmrg 10576e169010aSmrg # See if we need to build an old-fashioned archive. 10577e169010aSmrg for oldlib in $oldlibs; do 105787914d74bSmrg 105799d0ccd10Smrg case $build_libtool_libs in 105809d0ccd10Smrg convenience) 105819d0ccd10Smrg oldobjs="$libobjs_save $symfileobj" 105829d0ccd10Smrg addlibs=$convenience 10583e169010aSmrg build_libtool_libs=no 105849d0ccd10Smrg ;; 105859d0ccd10Smrg module) 105869d0ccd10Smrg oldobjs=$libobjs_save 105879d0ccd10Smrg addlibs=$old_convenience 105889d0ccd10Smrg build_libtool_libs=no 105899d0ccd10Smrg ;; 105909d0ccd10Smrg *) 10591e169010aSmrg oldobjs="$old_deplibs $non_pic_objects" 105929d0ccd10Smrg $preload && test -f "$symfileobj" \ 105939d0ccd10Smrg && func_append oldobjs " $symfileobj" 105949d0ccd10Smrg addlibs=$old_convenience 105959d0ccd10Smrg ;; 105969d0ccd10Smrg esac 105977914d74bSmrg 10598e169010aSmrg if test -n "$addlibs"; then 105999d0ccd10Smrg gentop=$output_objdir/${outputname}x 10600c63293b5Smrg func_append generated " $gentop" 106017914d74bSmrg 10602e169010aSmrg func_extract_archives $gentop $addlibs 10603c63293b5Smrg func_append oldobjs " $func_extract_archives_result" 10604e169010aSmrg fi 106057914d74bSmrg 10606e169010aSmrg # Do each command in the archive commands. 106079d0ccd10Smrg if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then 10608e169010aSmrg cmds=$old_archive_from_new_cmds 10609e169010aSmrg else 106107914d74bSmrg 10611e169010aSmrg # Add any objects from preloaded convenience libraries 10612e169010aSmrg if test -n "$dlprefiles"; then 106139d0ccd10Smrg gentop=$output_objdir/${outputname}x 10614c63293b5Smrg func_append generated " $gentop" 106157914d74bSmrg 10616e169010aSmrg func_extract_archives $gentop $dlprefiles 10617c63293b5Smrg func_append oldobjs " $func_extract_archives_result" 10618e169010aSmrg fi 106197914d74bSmrg 10620e169010aSmrg # POSIX demands no paths to be encoded in archives. We have 10621e169010aSmrg # to avoid creating archives with duplicate basenames if we 10622e169010aSmrg # might have to extract them afterwards, e.g., when creating a 10623e169010aSmrg # static archive out of a convenience library, or when linking 10624e169010aSmrg # the entirety of a libtool archive into another (currently 10625e169010aSmrg # not supported by libtool). 10626e169010aSmrg if (for obj in $oldobjs 10627e169010aSmrg do 10628e169010aSmrg func_basename "$obj" 10629e169010aSmrg $ECHO "$func_basename_result" 10630e169010aSmrg done | sort | sort -uc >/dev/null 2>&1); then 10631e169010aSmrg : 10632e169010aSmrg else 10633e8ead290Smrg echo "copying selected object files to avoid basename conflicts..." 106349d0ccd10Smrg gentop=$output_objdir/${outputname}x 10635c63293b5Smrg func_append generated " $gentop" 10636e169010aSmrg func_mkdir_p "$gentop" 10637e169010aSmrg save_oldobjs=$oldobjs 10638e169010aSmrg oldobjs= 10639e169010aSmrg counter=1 10640e169010aSmrg for obj in $save_oldobjs 10641e169010aSmrg do 10642e169010aSmrg func_basename "$obj" 106439d0ccd10Smrg objbase=$func_basename_result 10644e169010aSmrg case " $oldobjs " in 10645e169010aSmrg " ") oldobjs=$obj ;; 10646e169010aSmrg *[\ /]"$objbase "*) 10647e169010aSmrg while :; do 10648e169010aSmrg # Make sure we don't pick an alternate name that also 10649e169010aSmrg # overlaps. 10650e169010aSmrg newobj=lt$counter-$objbase 10651e169010aSmrg func_arith $counter + 1 10652e169010aSmrg counter=$func_arith_result 10653e169010aSmrg case " $oldobjs " in 10654e169010aSmrg *[\ /]"$newobj "*) ;; 10655e169010aSmrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 10656e169010aSmrg esac 10657e169010aSmrg done 10658e169010aSmrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 10659c63293b5Smrg func_append oldobjs " $gentop/$newobj" 10660e169010aSmrg ;; 10661c63293b5Smrg *) func_append oldobjs " $obj" ;; 10662e169010aSmrg esac 106637914d74bSmrg done 106647914d74bSmrg fi 10665e6d5e4e0Smrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 10666e6d5e4e0Smrg tool_oldlib=$func_to_tool_file_result 10667e169010aSmrg eval cmds=\"$old_archive_cmds\" 106687914d74bSmrg 10669e169010aSmrg func_len " $cmds" 10670e169010aSmrg len=$func_len_result 10671e169010aSmrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 10672e169010aSmrg cmds=$old_archive_cmds 10673c63293b5Smrg elif test -n "$archiver_list_spec"; then 10674c63293b5Smrg func_verbose "using command file archive linking..." 10675c63293b5Smrg for obj in $oldobjs 10676c63293b5Smrg do 10677c63293b5Smrg func_to_tool_file "$obj" 10678c63293b5Smrg $ECHO "$func_to_tool_file_result" 10679c63293b5Smrg done > $output_objdir/$libname.libcmd 10680c63293b5Smrg func_to_tool_file "$output_objdir/$libname.libcmd" 10681c63293b5Smrg oldobjs=" $archiver_list_spec$func_to_tool_file_result" 10682c63293b5Smrg cmds=$old_archive_cmds 10683e169010aSmrg else 10684e169010aSmrg # the command line is too long to link in one step, link in parts 10685e169010aSmrg func_verbose "using piecewise archive linking..." 10686e169010aSmrg save_RANLIB=$RANLIB 10687e169010aSmrg RANLIB=: 10688e169010aSmrg objlist= 10689e169010aSmrg concat_cmds= 10690e169010aSmrg save_oldobjs=$oldobjs 10691e169010aSmrg oldobjs= 10692e169010aSmrg # Is there a better way of finding the last object in the list? 10693e169010aSmrg for obj in $save_oldobjs 10694e169010aSmrg do 10695e169010aSmrg last_oldobj=$obj 10696e169010aSmrg done 10697e169010aSmrg eval test_cmds=\"$old_archive_cmds\" 10698e169010aSmrg func_len " $test_cmds" 10699e169010aSmrg len0=$func_len_result 10700e169010aSmrg len=$len0 10701e169010aSmrg for obj in $save_oldobjs 10702e169010aSmrg do 10703e169010aSmrg func_len " $obj" 10704e169010aSmrg func_arith $len + $func_len_result 10705e169010aSmrg len=$func_arith_result 10706e169010aSmrg func_append objlist " $obj" 10707e169010aSmrg if test "$len" -lt "$max_cmd_len"; then 10708e169010aSmrg : 10709e169010aSmrg else 10710e169010aSmrg # the above command should be used before it gets too long 10711e169010aSmrg oldobjs=$objlist 107129d0ccd10Smrg if test "$obj" = "$last_oldobj"; then 10713e169010aSmrg RANLIB=$save_RANLIB 10714e169010aSmrg fi 10715e169010aSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 107169d0ccd10Smrg eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" 10717e169010aSmrg objlist= 10718e169010aSmrg len=$len0 10719e169010aSmrg fi 10720e169010aSmrg done 10721e169010aSmrg RANLIB=$save_RANLIB 10722e169010aSmrg oldobjs=$objlist 107239d0ccd10Smrg if test -z "$oldobjs"; then 10724e169010aSmrg eval cmds=\"\$concat_cmds\" 10725e169010aSmrg else 10726e169010aSmrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 10727e169010aSmrg fi 10728e169010aSmrg fi 10729e169010aSmrg fi 10730e169010aSmrg func_execute_cmds "$cmds" 'exit $?' 107317914d74bSmrg done 107327914d74bSmrg 10733e169010aSmrg test -n "$generated" && \ 10734e169010aSmrg func_show_eval "${RM}r$generated" 107357914d74bSmrg 10736e169010aSmrg # Now create the libtool archive. 10737e169010aSmrg case $output in 10738e169010aSmrg *.la) 10739e169010aSmrg old_library= 107409d0ccd10Smrg test yes = "$build_old_libs" && old_library=$libname.$libext 10741e169010aSmrg func_verbose "creating $output" 107427914d74bSmrg 10743e169010aSmrg # Preserve any variables that may affect compiler behavior 10744e169010aSmrg for var in $variables_saved_for_relink; do 10745e169010aSmrg if eval test -z \"\${$var+set}\"; then 10746e169010aSmrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 10747e169010aSmrg elif eval var_value=\$$var; test -z "$var_value"; then 10748e169010aSmrg relink_command="$var=; export $var; $relink_command" 107497914d74bSmrg else 10750e169010aSmrg func_quote_for_eval "$var_value" 10751e169010aSmrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 107527914d74bSmrg fi 10753e169010aSmrg done 10754e169010aSmrg # Quote the link command for shipping. 107559d0ccd10Smrg relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 10756e8ead290Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 107579d0ccd10Smrg if test yes = "$hardcode_automatic"; then 10758e169010aSmrg relink_command= 10759e169010aSmrg fi 107607914d74bSmrg 10761e169010aSmrg # Only create the output if not a dry run. 10762e169010aSmrg $opt_dry_run || { 10763e169010aSmrg for installed in no yes; do 107649d0ccd10Smrg if test yes = "$installed"; then 10765e169010aSmrg if test -z "$install_libdir"; then 10766e169010aSmrg break 10767e169010aSmrg fi 107689d0ccd10Smrg output=$output_objdir/${outputname}i 10769e169010aSmrg # Replace all uninstalled libtool libraries with the installed ones 10770e169010aSmrg newdependency_libs= 10771e169010aSmrg for deplib in $dependency_libs; do 10772e169010aSmrg case $deplib in 10773e169010aSmrg *.la) 10774e169010aSmrg func_basename "$deplib" 107759d0ccd10Smrg name=$func_basename_result 10776e6d5e4e0Smrg func_resolve_sysroot "$deplib" 107779d0ccd10Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 10778e169010aSmrg test -z "$libdir" && \ 107799d0ccd10Smrg func_fatal_error "'$deplib' is not a valid libtool archive" 10780c63293b5Smrg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 10781c63293b5Smrg ;; 10782c63293b5Smrg -L*) 10783c63293b5Smrg func_stripname -L '' "$deplib" 10784c63293b5Smrg func_replace_sysroot "$func_stripname_result" 10785c63293b5Smrg func_append newdependency_libs " -L$func_replace_sysroot_result" 10786c63293b5Smrg ;; 10787c63293b5Smrg -R*) 10788c63293b5Smrg func_stripname -R '' "$deplib" 10789c63293b5Smrg func_replace_sysroot "$func_stripname_result" 10790c63293b5Smrg func_append newdependency_libs " -R$func_replace_sysroot_result" 10791e169010aSmrg ;; 10792c63293b5Smrg *) func_append newdependency_libs " $deplib" ;; 10793e169010aSmrg esac 10794e169010aSmrg done 107959d0ccd10Smrg dependency_libs=$newdependency_libs 10796e169010aSmrg newdlfiles= 10797e169010aSmrg 10798e169010aSmrg for lib in $dlfiles; do 10799e169010aSmrg case $lib in 10800e169010aSmrg *.la) 10801e169010aSmrg func_basename "$lib" 108029d0ccd10Smrg name=$func_basename_result 108039d0ccd10Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 10804e169010aSmrg test -z "$libdir" && \ 108059d0ccd10Smrg func_fatal_error "'$lib' is not a valid libtool archive" 10806c63293b5Smrg func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 10807e169010aSmrg ;; 10808c63293b5Smrg *) func_append newdlfiles " $lib" ;; 10809e169010aSmrg esac 10810e169010aSmrg done 108119d0ccd10Smrg dlfiles=$newdlfiles 10812e169010aSmrg newdlprefiles= 10813e169010aSmrg for lib in $dlprefiles; do 10814e169010aSmrg case $lib in 10815e169010aSmrg *.la) 10816e169010aSmrg # Only pass preopened files to the pseudo-archive (for 10817e169010aSmrg # eventual linking with the app. that links it) if we 10818e169010aSmrg # didn't already link the preopened objects directly into 10819e169010aSmrg # the library: 10820e169010aSmrg func_basename "$lib" 108219d0ccd10Smrg name=$func_basename_result 108229d0ccd10Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 10823e169010aSmrg test -z "$libdir" && \ 108249d0ccd10Smrg func_fatal_error "'$lib' is not a valid libtool archive" 10825c63293b5Smrg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 10826e169010aSmrg ;; 10827e169010aSmrg esac 10828e169010aSmrg done 108299d0ccd10Smrg dlprefiles=$newdlprefiles 10830e169010aSmrg else 10831e169010aSmrg newdlfiles= 10832e169010aSmrg for lib in $dlfiles; do 10833e169010aSmrg case $lib in 108349d0ccd10Smrg [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 10835e169010aSmrg *) abs=`pwd`"/$lib" ;; 10836e169010aSmrg esac 10837c63293b5Smrg func_append newdlfiles " $abs" 10838e169010aSmrg done 108399d0ccd10Smrg dlfiles=$newdlfiles 10840e169010aSmrg newdlprefiles= 10841e169010aSmrg for lib in $dlprefiles; do 10842e169010aSmrg case $lib in 108439d0ccd10Smrg [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 10844e169010aSmrg *) abs=`pwd`"/$lib" ;; 10845e169010aSmrg esac 10846c63293b5Smrg func_append newdlprefiles " $abs" 10847e169010aSmrg done 108489d0ccd10Smrg dlprefiles=$newdlprefiles 10849e169010aSmrg fi 10850e169010aSmrg $RM $output 10851e169010aSmrg # place dlname in correct position for cygwin 10852e8ead290Smrg # In fact, it would be nice if we could use this code for all target 10853e8ead290Smrg # systems that can't hard-code library paths into their executables 10854e8ead290Smrg # and that have no shared library path variable independent of PATH, 10855e8ead290Smrg # but it turns out we can't easily determine that from inspecting 10856e8ead290Smrg # libtool variables, so we have to hard-code the OSs to which it 10857e8ead290Smrg # applies here; at the moment, that means platforms that use the PE 10858e8ead290Smrg # object format with DLL files. See the long comment at the top of 10859e8ead290Smrg # tests/bindir.at for full details. 10860e169010aSmrg tdlname=$dlname 10861e169010aSmrg case $host,$output,$installed,$module,$dlname in 10862e8ead290Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 10863e8ead290Smrg # If a -bindir argument was supplied, place the dll there. 108649d0ccd10Smrg if test -n "$bindir"; then 10865e8ead290Smrg func_relative_path "$install_libdir" "$bindir" 108669d0ccd10Smrg tdlname=$func_relative_path_result/$dlname 10867e8ead290Smrg else 10868e8ead290Smrg # Otherwise fall back on heuristic. 10869e8ead290Smrg tdlname=../bin/$dlname 10870e8ead290Smrg fi 10871e8ead290Smrg ;; 10872e169010aSmrg esac 10873e169010aSmrg $ECHO > $output "\ 10874e169010aSmrg# $outputname - a libtool library file 108759d0ccd10Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 10876e169010aSmrg# 10877e169010aSmrg# Please DO NOT delete this file! 10878e169010aSmrg# It is necessary for linking the library. 108797914d74bSmrg 10880e169010aSmrg# The name that we can dlopen(3). 10881e169010aSmrgdlname='$tdlname' 108827914d74bSmrg 10883e169010aSmrg# Names of this library. 10884e169010aSmrglibrary_names='$library_names' 108857914d74bSmrg 10886e169010aSmrg# The name of the static archive. 10887e169010aSmrgold_library='$old_library' 108887914d74bSmrg 108899d0ccd10Smrg# Linker flags that cannot go in dependency_libs. 10890e169010aSmrginherited_linker_flags='$new_inherited_linker_flags' 108917914d74bSmrg 10892e169010aSmrg# Libraries that this one depends upon. 10893e169010aSmrgdependency_libs='$dependency_libs' 108947914d74bSmrg 10895e169010aSmrg# Names of additional weak libraries provided by this library 10896e169010aSmrgweak_library_names='$weak_libs' 108977914d74bSmrg 10898e169010aSmrg# Version information for $libname. 10899e169010aSmrgcurrent=$current 10900e169010aSmrgage=$age 10901e169010aSmrgrevision=$revision 109027914d74bSmrg 10903e169010aSmrg# Is this an already installed library? 10904e169010aSmrginstalled=$installed 109057914d74bSmrg 10906e169010aSmrg# Should we warn about portability when linking against -modules? 10907e169010aSmrgshouldnotlink=$module 109087914d74bSmrg 10909e169010aSmrg# Files to dlopen/dlpreopen 10910e169010aSmrgdlopen='$dlfiles' 10911e169010aSmrgdlpreopen='$dlprefiles' 109127914d74bSmrg 10913e169010aSmrg# Directory that this library needs to be installed in: 10914e169010aSmrglibdir='$install_libdir'" 109159d0ccd10Smrg if test no,yes = "$installed,$need_relink"; then 10916e169010aSmrg $ECHO >> $output "\ 10917e169010aSmrgrelink_command=\"$relink_command\"" 10918e169010aSmrg fi 10919e169010aSmrg done 10920e169010aSmrg } 109217914d74bSmrg 10922e169010aSmrg # Do a symbolic link so that the libtool archive can be found in 10923e169010aSmrg # LD_LIBRARY_PATH before the program is installed. 10924e169010aSmrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 10925e169010aSmrg ;; 10926e169010aSmrg esac 10927e169010aSmrg exit $EXIT_SUCCESS 10928e169010aSmrg} 109297914d74bSmrg 109309d0ccd10Smrgif test link = "$opt_mode" || test relink = "$opt_mode"; then 109319d0ccd10Smrg func_mode_link ${1+"$@"} 109329d0ccd10Smrgfi 109337914d74bSmrg 109347914d74bSmrg 10935e169010aSmrg# func_mode_uninstall arg... 10936e169010aSmrgfunc_mode_uninstall () 10937e169010aSmrg{ 109389d0ccd10Smrg $debug_cmd 109399d0ccd10Smrg 109409d0ccd10Smrg RM=$nonopt 109417914d74bSmrg files= 109429d0ccd10Smrg rmforce=false 109437914d74bSmrg exit_status=0 109447914d74bSmrg 109457914d74bSmrg # This variable tells wrapper scripts just to set variables rather 109467914d74bSmrg # than running their programs. 109479d0ccd10Smrg libtool_install_magic=$magic 109487914d74bSmrg 109497914d74bSmrg for arg 109507914d74bSmrg do 109517914d74bSmrg case $arg in 109529d0ccd10Smrg -f) func_append RM " $arg"; rmforce=: ;; 10953c63293b5Smrg -*) func_append RM " $arg" ;; 10954c63293b5Smrg *) func_append files " $arg" ;; 109557914d74bSmrg esac 109567914d74bSmrg done 109577914d74bSmrg 10958e169010aSmrg test -z "$RM" && \ 10959e169010aSmrg func_fatal_help "you must specify an RM program" 109607914d74bSmrg 109617914d74bSmrg rmdirs= 109627914d74bSmrg 109637914d74bSmrg for file in $files; do 10964e169010aSmrg func_dirname "$file" "" "." 109659d0ccd10Smrg dir=$func_dirname_result 109669d0ccd10Smrg if test . = "$dir"; then 109679d0ccd10Smrg odir=$objdir 109687914d74bSmrg else 109699d0ccd10Smrg odir=$dir/$objdir 109707914d74bSmrg fi 10971e169010aSmrg func_basename "$file" 109729d0ccd10Smrg name=$func_basename_result 109739d0ccd10Smrg test uninstall = "$opt_mode" && odir=$dir 109747914d74bSmrg 10975c63293b5Smrg # Remember odir for removal later, being careful to avoid duplicates 109769d0ccd10Smrg if test clean = "$opt_mode"; then 109777914d74bSmrg case " $rmdirs " in 10978c63293b5Smrg *" $odir "*) ;; 10979c63293b5Smrg *) func_append rmdirs " $odir" ;; 109807914d74bSmrg esac 109817914d74bSmrg fi 109827914d74bSmrg 109837914d74bSmrg # Don't error if the file doesn't exist and rm -f was used. 10984e169010aSmrg if { test -L "$file"; } >/dev/null 2>&1 || 10985e169010aSmrg { test -h "$file"; } >/dev/null 2>&1 || 10986e169010aSmrg test -f "$file"; then 109877914d74bSmrg : 109887914d74bSmrg elif test -d "$file"; then 109897914d74bSmrg exit_status=1 109907914d74bSmrg continue 109919d0ccd10Smrg elif $rmforce; then 109927914d74bSmrg continue 109937914d74bSmrg fi 109947914d74bSmrg 109959d0ccd10Smrg rmfiles=$file 109967914d74bSmrg 109977914d74bSmrg case $name in 109987914d74bSmrg *.la) 109997914d74bSmrg # Possibly a libtool archive, so verify it. 11000e169010aSmrg if func_lalib_p "$file"; then 11001e169010aSmrg func_source $dir/$name 110027914d74bSmrg 110037914d74bSmrg # Delete the libtool libraries and symlinks. 110047914d74bSmrg for n in $library_names; do 11005c63293b5Smrg func_append rmfiles " $odir/$n" 110067914d74bSmrg done 11007c63293b5Smrg test -n "$old_library" && func_append rmfiles " $odir/$old_library" 110087914d74bSmrg 110099d0ccd10Smrg case $opt_mode in 110107914d74bSmrg clean) 11011c63293b5Smrg case " $library_names " in 110127914d74bSmrg *" $dlname "*) ;; 11013c63293b5Smrg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 110147914d74bSmrg esac 11015c63293b5Smrg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 110167914d74bSmrg ;; 110177914d74bSmrg uninstall) 110187914d74bSmrg if test -n "$library_names"; then 110197914d74bSmrg # Do each command in the postuninstall commands. 110209d0ccd10Smrg func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' 110217914d74bSmrg fi 110227914d74bSmrg 110237914d74bSmrg if test -n "$old_library"; then 110247914d74bSmrg # Do each command in the old_postuninstall commands. 110259d0ccd10Smrg func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' 110267914d74bSmrg fi 110277914d74bSmrg # FIXME: should reinstall the best remaining shared library. 110287914d74bSmrg ;; 110297914d74bSmrg esac 110307914d74bSmrg fi 110317914d74bSmrg ;; 110327914d74bSmrg 110337914d74bSmrg *.lo) 110347914d74bSmrg # Possibly a libtool object, so verify it. 11035e169010aSmrg if func_lalib_p "$file"; then 110367914d74bSmrg 110377914d74bSmrg # Read the .lo file 11038e169010aSmrg func_source $dir/$name 110397914d74bSmrg 110407914d74bSmrg # Add PIC object to the list of files to remove. 110419d0ccd10Smrg if test -n "$pic_object" && test none != "$pic_object"; then 11042c63293b5Smrg func_append rmfiles " $dir/$pic_object" 110437914d74bSmrg fi 110447914d74bSmrg 110457914d74bSmrg # Add non-PIC object to the list of files to remove. 110469d0ccd10Smrg if test -n "$non_pic_object" && test none != "$non_pic_object"; then 11047c63293b5Smrg func_append rmfiles " $dir/$non_pic_object" 110487914d74bSmrg fi 110497914d74bSmrg fi 110507914d74bSmrg ;; 110517914d74bSmrg 110527914d74bSmrg *) 110539d0ccd10Smrg if test clean = "$opt_mode"; then 110547914d74bSmrg noexename=$name 110557914d74bSmrg case $file in 110567914d74bSmrg *.exe) 11057e169010aSmrg func_stripname '' '.exe' "$file" 11058e169010aSmrg file=$func_stripname_result 11059e169010aSmrg func_stripname '' '.exe' "$name" 11060e169010aSmrg noexename=$func_stripname_result 110617914d74bSmrg # $file with .exe has already been added to rmfiles, 110627914d74bSmrg # add $file without .exe 11063c63293b5Smrg func_append rmfiles " $file" 110647914d74bSmrg ;; 110657914d74bSmrg esac 110667914d74bSmrg # Do a test to see if this is a libtool program. 11067e169010aSmrg if func_ltwrapper_p "$file"; then 11068e169010aSmrg if func_ltwrapper_executable_p "$file"; then 11069e169010aSmrg func_ltwrapper_scriptname "$file" 11070e169010aSmrg relink_command= 11071e169010aSmrg func_source $func_ltwrapper_scriptname_result 11072c63293b5Smrg func_append rmfiles " $func_ltwrapper_scriptname_result" 11073e169010aSmrg else 11074e169010aSmrg relink_command= 11075e169010aSmrg func_source $dir/$noexename 11076e169010aSmrg fi 110777914d74bSmrg 110787914d74bSmrg # note $name still contains .exe if it was in $file originally 110797914d74bSmrg # as does the version of $file that was added into $rmfiles 110809d0ccd10Smrg func_append rmfiles " $odir/$name $odir/${name}S.$objext" 110819d0ccd10Smrg if test yes = "$fast_install" && test -n "$relink_command"; then 11082c63293b5Smrg func_append rmfiles " $odir/lt-$name" 110837914d74bSmrg fi 110849d0ccd10Smrg if test "X$noexename" != "X$name"; then 110859d0ccd10Smrg func_append rmfiles " $odir/lt-$noexename.c" 110867914d74bSmrg fi 110877914d74bSmrg fi 110887914d74bSmrg fi 110897914d74bSmrg ;; 110907914d74bSmrg esac 11091e169010aSmrg func_show_eval "$RM $rmfiles" 'exit_status=1' 110927914d74bSmrg done 110937914d74bSmrg 110949d0ccd10Smrg # Try to remove the $objdir's in the directories where we deleted files 110957914d74bSmrg for dir in $rmdirs; do 110967914d74bSmrg if test -d "$dir"; then 11097e169010aSmrg func_show_eval "rmdir $dir >/dev/null 2>&1" 110987914d74bSmrg fi 110997914d74bSmrg done 111007914d74bSmrg 111017914d74bSmrg exit $exit_status 11102e169010aSmrg} 111037914d74bSmrg 111049d0ccd10Smrgif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then 111059d0ccd10Smrg func_mode_uninstall ${1+"$@"} 111069d0ccd10Smrgfi 111077914d74bSmrg 11108c63293b5Smrgtest -z "$opt_mode" && { 111099d0ccd10Smrg help=$generic_help 11110e169010aSmrg func_fatal_help "you must specify a MODE" 11111e169010aSmrg} 11112e169010aSmrg 11113e169010aSmrgtest -z "$exec_cmd" && \ 111149d0ccd10Smrg func_fatal_help "invalid operation mode '$opt_mode'" 111157914d74bSmrg 111167914d74bSmrgif test -n "$exec_cmd"; then 11117e169010aSmrg eval exec "$exec_cmd" 111187914d74bSmrg exit $EXIT_FAILURE 111197914d74bSmrgfi 111207914d74bSmrg 11121e169010aSmrgexit $exit_status 111227914d74bSmrg 111237914d74bSmrg 111247914d74bSmrg# The TAGs below are defined such that we never get into a situation 111259d0ccd10Smrg# where we disable both kinds of libraries. Given conflicting 111267914d74bSmrg# choices, we go for a static library, that is the most portable, 111277914d74bSmrg# since we can't tell whether shared libraries were disabled because 111287914d74bSmrg# the user asked for that or because the platform doesn't support 111297914d74bSmrg# them. This is particularly important on AIX, because we don't 111307914d74bSmrg# support having both static and shared libraries enabled at the same 111317914d74bSmrg# time on that platform, so we default to a shared-only configuration. 111327914d74bSmrg# If a disable-shared tag is given, we'll fallback to a static-only 111337914d74bSmrg# configuration. But we'll never go from static-only to shared-only. 111347914d74bSmrg 111357914d74bSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 11136e169010aSmrgbuild_libtool_libs=no 11137e169010aSmrgbuild_old_libs=yes 111387914d74bSmrg# ### END LIBTOOL TAG CONFIG: disable-shared 111397914d74bSmrg 111407914d74bSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 11141e169010aSmrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 111427914d74bSmrg# ### END LIBTOOL TAG CONFIG: disable-static 111437914d74bSmrg 111447914d74bSmrg# Local Variables: 111457914d74bSmrg# mode:shell-script 111467914d74bSmrg# sh-indentation:2 111477914d74bSmrg# End: 11148